---
# System prepended metadata

title: IPFS Companion MV3
tags: [mv3, companion, ipfs, webextension]

---

# IPFS Companion MV3

###### tags: `companion` `mv3` `webextension` `ipfs`

## Browser support for Manifest V3

| Browser           | Supported        | Planned           | links  | Alpha Support |
| ----------------- | ---------------- | ----------------  |------- | ------------- |
| Chrome            |:heavy_check_mark:|:heavy_check_mark: | [:link:][Chrome-MV3] | ✔|
| Firefox           |:heavy_check_mark:|:heavy_check_mark: | [:link:][Firefox-MV3] | 🚧|
| Safari            |:x:               |:heavy_check_mark: | [:link:][Safari-MV3] | 🛑|


[Chrome-MV3]: https://developer.chrome.com/docs/extensions/mv3/intro/
[Firefox-MV3]: https://blog.mozilla.org/addons/2021/05/27/manifest-v3-update/
[Safari-MV3]: https://developer.apple.com/forums/thread/685530

[ipfs-companion GitHub repo](https://github.com/ipfs/ipfs-companion)
[ipfs-companion MV3 tracking issue](https://github.com/ipfs/ipfs-companion/issues/666)

## Extension Capabilities

TABLE KEY:
* ✔ Possible in MV3 with working code in https://github.com/meandavejustice/ipfs-mv3-prototype
* ❔ Not yet determined
* 🛑 Not possible or cancelled

Alpha column = required for alpha:
* ✔ complete
* 🚧 in progress
* 🔮 planned for future release
* 🛑 not possible or cancelled
* ❔ Not yet determined


### Automatically detect and redirect IPFS resources

| STATUS | FEATURE | PRIORITY | API surface | Alpha |
| ------ | ------- | -------- | ----------- | ----- |
| ✔      | Detect URLs with IPFS paths     | HIGH     | MV3, is-ipfs | 🚧/🔮 |
| ✔      | Detect DNSLink-enabled URLs     | HIGH     | MV3, ipfs-http-client | ✔ |
| ✔      | Detect pages with x-ipfs-path headers     | MEDIUM     | MV3, is-ipfs | 🚧 |
| ✔      | Toggle redirects globally or per site     | HIGH     |MV3 | 🔮 |
| ✔      | Recover from HTTP/Network failures (onError) | MEDIUM | MV3, ipfs-http-client, is-ipfs | 🔮 |

### Access frequently-used IPFS actions from your browser bar

| STATUS | FEATURE | PRIORITY | API surface | Alpha |
| ------ | ------- | -------- | ----------  | ----- |
| ✔ | List peers in cube icon | SKIP - see [#662](https://github.com/ipfs/ipfs-companion/issues/662) [#1027](https://github.com/ipfs/ipfs-companion/issues/1027) | XX |🛑|
| ✔ | check ipfs API and gateway status by clicking cube icon | LOW  | ipfs-http-client | ✔ |
| ✔ | right-click assets to add them to ipfs (including option to preserve filenames) | LOW | ipfs-http-client |🔮| 
| ✔ | Import option in the main menu for quick drag-and-drop import from a browser tab  | LOW | ipfs-http-client | 🔮|
| ✔ | Import to Files (MFS via `ipfs.files.cp`) | LOW | ipfs-http-client | 🔮|
| ✔ | Copy shareable public gateway links, IPFS content paths, or CIDs     | LOW     | ipfs-http-client | ✔ |
| ✔ | Launch the IPFS Web UI dashboard with single click  | MEDIUM | ipfs-http-client | 🚧 |
| ✔ | Toggle gateway redirects or switch all IPFS Companion features on/off | MEDIUM | MV3 |🚧 |
| ✔ | [Surface CIDs to developers](https://filecoinproject.slack.com/archives/C02EQ3ELFBQ/p1639033925100700) | MEDIUM | MV3 |🔮| |

### Switch all IPFS Companion features on/off

| STATUS | FEATURE | PRIORITY | API surface | Alpha |
| ------ | -------- | -------- | ---- | ----- |
| ✔      | use the on/off button at the top of the IPFS Companion menu     | HIGH     | MV3 | 🚧 |

### Experiments

| STATUS | FEATURE | PRIORITY | API surface | Alpha |
| ------ | -------- | -------- | ---- | ----- | 
| ❔      | Make plaintext IPFS links clickable     | LOW     | | ❔ |
| ❔      | Re-route requests made via experimental protocols to an HTTP gateway (public or custom)| LOW     | MV3 | ❔|
| 🛑(js-ipfs) - ❔(brave)      | Switch between the external HTTP API of your local IPFS node (default setting) and a js-ipfs node embedded in your browser     | LOW | MV3, ipfs-http-client | 🛑 |

## PLANNING

### TIMELINE: January 2023
https://developer.chrome.com/docs/extensions/mv3/mv2-sunset/

:dart: ~~MILESTONE 1 by end of Q4 2021~~ COMPLETE
:dart: MILESTONE 2 by end of Q1 2022
:dart: MILESTONE 3 by end of Q2 2022 (if prioritized)


### Milestone 1: Prove what limits of MV3 are

Goal: ensure there are no unknown unknowns around redirects and executing HTTP RPC calls over ipfs-http-client library.

- ipfs redirects
  - detecting ipfs:// and ipns:// search queries (poor man's protocol handler support) (🛑 blocked by https://github.com/ipfs/ipfs-companion/issues/666#issuecomment-1069312218)
  - content paths /ipfs/cid and /ipns/id
	- ~~dnslink: resolving, adding and removing rules~~ COMPLETE ✔
	- network error handling (recovering broken http links by loading from ipfs where possible) BUMPED TO FUTURE 🔮
- ~~http rpc API requests to local go-ipfs node (are we able to disable CORS and access /api/v0/* without user interaction?)~~ COMPLETE ✔

### Milestone 2: Build MV3 extension

Goal: reimplement companion in MV3

- port existing GUI features (minus peer count on badge) IN PROGRESS 🚧
- ~~define edge cases~~ (documented in https://github.com/ipfs/ipfs-companion/issues/666)
- ~~remove hack to keep content script open~~ (this is not able to be removed https://github.com/ipfs/ipfs-companion/issues/666#issuecomment-1022798229)
- test coverage
- ~~sourcemaps~~ (moving this to milestone 3, as sourcemaps are currently needed for debugging, "nice to have")
- browser parity between firefox and chrome IN PROGRESS 🚧
- ~~performance testing~~ (moving to milestone 3)
- ~~Make our jsbuild system efficient~~ COMPLETE ✔


### Milestone 3: Shift functionality with non technical end users in mind

[Companion mv3 redesign doc](https://hackmd.io/v8jvq4OEQEu-1IYEteETsg)

- Start discussions with designers for redesign
- define what new default behavior should be
- Create a story for non technical users vs power users
- super slow when enabled against local node, whats the story for speeding this up? (visual cues for searching network, etc)
- behavior of brave implementation seems to be better for end users, document whats different about brave so we can take what works and apply it to our new default UX
- We should use the badge icon to notify users of availablity of a page in ipfs


### Milestone 4: Deprecate mv2
Goal: sunset old codebase and publish new one to addon stores

- Implement any design tweaks(need design, maybe trigram?)
- dependent on Safari adding full support for MV3 (decision to drop Safari?)
- add experimental feature system
- deprecate ipfs-companion mv2
- sourcemaps
- performance testing
- create a template/library for [ipfs-enabled extensions](https://hackmd.io/Nyn1Ba8MRceGOP7KFf0yCQ)
