# 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)