mirror of
https://github.com/Such-Software/adaptive-multi-protocol-browser.git
synced 2026-10-17 14:31:46 +02:00
Add IPFS dry-run adapter support
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
|
||||
> Status: draft | Updated 2026-07-05 | Applies to: AMPB contributors and integrators
|
||||
|
||||
AMPB is a browser orchestration layer for privacy and alternate-network transports. It
|
||||
keeps the routing, transport management, and profile isolation decisions outside the
|
||||
browser engine until those contracts are stable.
|
||||
AMPB is a browser orchestration layer for privacy, resilient-network, content-addressed,
|
||||
and alternate-web transports. It keeps the routing, transport management, and profile
|
||||
isolation decisions outside the browser engine until those contracts are stable.
|
||||
|
||||
## Operating Model
|
||||
|
||||
@@ -20,7 +20,7 @@ browser engine until those contracts are stable.
|
||||
|
||||
- `ampbrowser.routing`: deterministic URL-to-transport rules.
|
||||
- `ampbrowser.adapters`: transport ownership, setup, inspection, and health contracts.
|
||||
- `ampbrowser.transports`: local readiness checks for Tor, I2P, Reticulum, and Gemini.
|
||||
- `ampbrowser.transports`: local readiness checks for Tor, I2P, IPFS, Reticulum, and Gemini.
|
||||
- `ampbrowser.plan`: dry-run action planner for browser launches.
|
||||
- `ampbrowser.launch`: side-effect-free launch specs and first-use consent state.
|
||||
- `ampbrowser.platforms`: platform capability matrix for desktop, Android, and iOS.
|
||||
@@ -31,7 +31,7 @@ browser engine until those contracts are stable.
|
||||
|
||||
The first implementation should be a launcher and profile manager, not a browser-engine
|
||||
fork. Tor Browser, Mullvad Browser, Firefox profiles, Chromium profiles, terminal Gemini
|
||||
clients, and future Reticulum-native viewers can all sit behind the same route and
|
||||
clients, local IPFS gateways, and future Reticulum-native viewers can all sit behind the same route and
|
||||
transport contracts.
|
||||
|
||||
The long-term browser can become more integrated once the orchestration surface is boring:
|
||||
|
||||
@@ -2,15 +2,16 @@
|
||||
|
||||
> Status: draft | Updated 2026-07-06 | Applies to: AMPB and AMPG transport planning
|
||||
|
||||
Candidate transports are tracked separately from active adapters. A candidate should not
|
||||
be routed by default until AMPB has an adapter contract, fixture behavior, mobile posture,
|
||||
and publishing story for it.
|
||||
Candidate transports are tracked from evaluation through active dry-run support. A
|
||||
candidate should not become an enabled-by-default route until AMPB has an adapter
|
||||
contract, fixture behavior, mobile posture, and publishing story for it.
|
||||
|
||||
## Selection Rules
|
||||
|
||||
- Prefer transports that can open AMPG static output or serve normal web/Gemini content.
|
||||
- Treat discovery/social protocols as metadata layers, not page transports.
|
||||
- Treat permanent archives as publishing targets with explicit user warnings.
|
||||
- Treat resilient overlays separately from anonymity networks.
|
||||
- Keep mobile constraints visible before a candidate becomes active.
|
||||
|
||||
## Current Matrix
|
||||
|
||||
@@ -14,8 +14,9 @@ user opens a URL that needs it and approves the first-use prompt.
|
||||
- Clearnet URLs use a clearnet profile.
|
||||
- `.onion` hosts use Tor through `127.0.0.1:9050` when available.
|
||||
- `.i2p` hosts use I2P through `127.0.0.1:4444` when available.
|
||||
- `ipfs://`, `ipns://`, `/ipfs/`, and `/ipns/` addresses use a local IPFS gateway when available.
|
||||
- `gemini://` URLs use the Gemini profile.
|
||||
- Reticulum-family URLs are routed to the Reticulum adapter once configured.
|
||||
- Reticulum-family URLs use the Reticulum adapter for resilient/private routing once configured.
|
||||
|
||||
## Config File
|
||||
|
||||
@@ -39,6 +40,11 @@ enabled = true
|
||||
mode = "adopt-or-prompt-manage"
|
||||
http_proxy = "127.0.0.1:4444"
|
||||
|
||||
[transports.ipfs]
|
||||
enabled = true
|
||||
mode = "adopt-or-prompt-manage"
|
||||
gateway = "127.0.0.1:8080"
|
||||
|
||||
[transports.reticulum]
|
||||
enabled = false
|
||||
mode = "adopt"
|
||||
|
||||
@@ -8,5 +8,6 @@ This file is generated from code. Do not edit it by hand.
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| `tor` | `socks5://127.0.0.1:9050` | SOCKS on 127.0.0.1:9050 | install Tor provider | start managed Tor daemon | stop only AMPB-owned Tor daemon | Tor SOCKS proxy |
|
||||
| `i2p` | `http://127.0.0.1:4444` | HTTP proxy on 127.0.0.1:4444 | install I2P provider | start managed I2P router | stop only AMPB-owned I2P router | I2P HTTP proxy |
|
||||
| `reticulum` | `rns://local` | RNS tools and configured interfaces | install Reticulum provider | start configured Reticulum interface | stop only AMPB-owned Reticulum process | Reticulum adapter is planned; interface readiness needs explicit config |
|
||||
| `reticulum` | `rns://local` | RNS tools and configured interfaces | install Reticulum provider | start configured Reticulum interface | stop only AMPB-owned Reticulum process | Reticulum adapter is planned for resilient/private routing; it is not an anonymity layer |
|
||||
| `ipfs` | `http://127.0.0.1:8080` | HTTP gateway on 127.0.0.1:8080 | install IPFS/Kubo provider | start managed IPFS gateway | stop only AMPB-owned IPFS process | IPFS local gateway for content-addressed distribution; not an anonymity layer |
|
||||
| `gemini` | `builtin://gemtext-renderer` | built-in renderer available | unsupported | use built-in Gemtext fetch/render path | no daemon to stop | Built-in Gemtext fetch/render path |
|
||||
|
||||
@@ -6,7 +6,7 @@ This file is generated from code. Do not edit it by hand.
|
||||
|
||||
| Candidate | Role | Status | Routes | Browser Fit | Publisher Fit | Mobile Fit | Source | Note |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| `ipfs` | content-addressed web | `next-evaluate` | `ipfs://<cid>`, `/ipfs/<cid>`, `ipns://<name>` | native fetch or local gateway | static site export and pinning | gateway first; embedded node later | [source](https://docs.ipfs.tech/concepts/what-is-ipfs/) | Strong fit for AMPG static output; not an anonymity layer by itself. |
|
||||
| `ipfs` | content-addressed web | `active-dry-run` | `ipfs://<cid>`, `/ipfs/<cid>`, `ipns://<name>` | native fetch or local gateway | static site export and pinning | gateway first; embedded node later | [source](https://docs.ipfs.tech/concepts/what-is-ipfs/) | Strong fit for AMPG static output; not an anonymity layer by itself. |
|
||||
| `yggdrasil` | encrypted IPv6 overlay | `next-evaluate` | `http://[0200::]/`, `https://<yggdrasil-host>/` | ordinary HTTP over overlay IPv6 | serve normal HTTP/Gemini over overlay address | cross-platform, but mobile lifecycle needs adapter proof | [source](https://yggdrasil-network.github.io/) | Good fit for old-phone nodes and local/community mesh scenarios. |
|
||||
| `lokinet` | low-latency onion-routed overlay | `evaluate` | `http://<name>.loki/`, `https://<name>.loki/` | ordinary IP traffic over overlay | SNApp-style hidden service publishing | Android likely first; iOS constrained | [source](https://docs.oxen.io/oxen-docs/products-built-on-oxen/lokinet) | Interesting Tor/I2P-adjacent candidate; depends on project health and packaging. |
|
||||
| `hyphanet` | privacy-preserving publishing datastore | `explore` | `USK@...`, `CHK@...`, `SSK@...` | local proxy/freesite viewer | censorship-resistant site publishing | possible on Android; iOS unlikely for full node | [source](https://www.hyphanet.org/) | Strong ideological fit; UX and key/address model need careful design. |
|
||||
|
||||
@@ -15,11 +15,14 @@ This file is generated from code. Do not edit it by hand.
|
||||
| `i2p` | `desktop` | `ready` | `ready` | `planned` | `planned` | Adopt local I2P proxy or prompt before managed desktop daemon setup. |
|
||||
| `i2p` | `android` | `planned` | `planned` | `planned` | `planned` | Use an app-owned foreground service or compatible installed I2P provider. |
|
||||
| `i2p` | `ios` | `constrained` | `planned` | `foreground-only` | `constrained` | Treat iOS I2P support as foreground-only until native adapter constraints are proven. |
|
||||
| `ipfs` | `desktop` | `ready` | `ready` | `planned` | `planned` | Adopt local IPFS gateway or prompt before managed gateway setup. |
|
||||
| `ipfs` | `android` | `planned` | `planned` | `planned` | `planned` | Use gateway-first IPFS browsing; embedded node support needs adapter proof. |
|
||||
| `ipfs` | `ios` | `constrained` | `planned` | `foreground-only` | `constrained` | Use gateway-first IPFS browsing; embedded node support is constrained. |
|
||||
| `gemini` | `desktop` | `ready` | `ready` | `ready` | `unsupported` | Built-in fetch/render path can be shared by desktop shell. |
|
||||
| `gemini` | `android` | `ready` | `ready` | `ready` | `unsupported` | Built-in fetch/render path can be shared by Android shell. |
|
||||
| `gemini` | `ios` | `ready` | `ready` | `ready` | `unsupported` | Built-in fetch/render path can be shared by iOS shell. |
|
||||
| `reticulum` | `desktop` | `planned` | `planned` | `planned` | `planned` | Adapter and local interface readiness checks are planned. |
|
||||
| `reticulum` | `android` | `planned` | `planned` | `planned` | `planned` | Mobile adapter should use explicit foreground service consent. |
|
||||
| `reticulum` | `desktop` | `planned` | `planned` | `planned` | `planned` | Resilient/private networking adapter and interface checks are planned. |
|
||||
| `reticulum` | `android` | `planned` | `planned` | `planned` | `planned` | Mobile resilient-network adapter should use explicit foreground service consent. |
|
||||
| `reticulum` | `ios` | `constrained` | `planned` | `foreground-only` | `constrained` | Do not assume background Reticulum operation on iOS. |
|
||||
| `unknown` | `desktop` | `unsupported` | `unsupported` | `unsupported` | `unsupported` | No platform route is available. |
|
||||
| `unknown` | `android` | `unsupported` | `unsupported` | `unsupported` | `unsupported` | No platform route is available. |
|
||||
|
||||
@@ -8,6 +8,7 @@ This file is generated from code. Do not edit it by hand.
|
||||
| --- | --- | --- | --- |
|
||||
| `*.onion` | `tor` | `tor` | route through Tor SOCKS |
|
||||
| `*.i2p` | `i2p` | `i2p` | route through I2P HTTP proxy |
|
||||
| `ipfs://*, ipns://*, /ipfs/*, /ipns/*` | `ipfs` | `ipfs` | route through local IPFS gateway |
|
||||
| `gemini://*` | `gemini` | `gemini` | fetch and render Gemtext |
|
||||
| `rns://*, lxmf://*, nomad://*` | `reticulum` | `reticulum` | route through Reticulum adapter |
|
||||
| `rns://*, lxmf://*, nomad://*` | `reticulum` | `reticulum` | route to Reticulum adapter |
|
||||
| `http://*, https://*` | `clearnet` | `clearnet` | ordinary web profile |
|
||||
|
||||
@@ -8,5 +8,6 @@ This file is generated from code. Do not edit it by hand.
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `tor` | SOCKS on 127.0.0.1:9050 | `.ampb/transports/tor` | `tor` | Adopt existing Tor when healthy; otherwise prompt before managed setup. |
|
||||
| `i2p` | HTTP proxy on 127.0.0.1:4444 | `.ampb/transports/i2p` | `i2p` | Adopt existing i2pd/I2P router when healthy; otherwise prompt before managed setup. |
|
||||
| `ipfs` | HTTP gateway on 127.0.0.1:8080 | `.ampb/transports/ipfs` | `ipfs` | Adopt existing IPFS gateway when healthy; otherwise prompt before managed setup. |
|
||||
| `gemini` | built-in renderer available | `.ampb/transports/gemini` | `gemini` | No daemon required for static Gemtext browsing. |
|
||||
| `reticulum` | RNS tools and configured interfaces | `.ampb/transports/reticulum` | `reticulum` | Adapter planned; physical/link-layer setup may require operator config. |
|
||||
| `reticulum` | RNS tools and configured interfaces | `.ampb/transports/reticulum` | `reticulum` | Adapter planned for resilient/private routing; physical/link-layer setup may require operator config. |
|
||||
|
||||
@@ -8,16 +8,17 @@ mobile shells should implement only the platform-specific browser and transport
|
||||
|
||||
## Android
|
||||
|
||||
Android is the primary mobile target for full AMPB browsing. Tor, I2P, and Reticulum
|
||||
adapters should run only after a URL selects that transport and the user approves setup.
|
||||
Managed adapters must use visible, stoppable foreground services and app-owned state.
|
||||
Android is the primary mobile target for full AMPB browsing. Tor, I2P, IPFS, and
|
||||
Reticulum adapters should run only after a URL selects that transport and the user
|
||||
approves setup. Managed adapters must use visible, stoppable foreground services and
|
||||
app-owned state.
|
||||
|
||||
## iOS
|
||||
|
||||
iOS is a supported design target, but transport management is constrained. AMPB should
|
||||
assume foreground-only sessions unless a reviewed platform capability proves otherwise.
|
||||
The iOS shell should still share routing, policy, consent, fixture, Gemini, and clearnet
|
||||
behavior with the rest of AMPB.
|
||||
assume foreground-only sessions for managed transports unless a reviewed platform
|
||||
capability proves otherwise. The iOS shell should still share routing, policy, consent,
|
||||
fixture, Gemini, IPFS gateway, and clearnet behavior with the rest of AMPB.
|
||||
|
||||
## Capability Matrix
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ first-use setup prompt.
|
||||
|
||||
## Consent Model
|
||||
|
||||
AMPB does not install or start Tor, I2P, Reticulum, or other optional transports when the
|
||||
AMPB does not install or start Tor, I2P, IPFS, Reticulum, or other optional transports when the
|
||||
application starts. Setup is lazy:
|
||||
|
||||
1. The user opens a URL.
|
||||
|
||||
@@ -32,8 +32,9 @@ leases, tunnels, and daemon logs in that tree are local state and must not be co
|
||||
|
||||
- Tor: detect SOCKS on `127.0.0.1:9050`; managed start planned.
|
||||
- I2P: detect HTTP proxy on `127.0.0.1:4444`; managed start planned.
|
||||
- IPFS: detect HTTP gateway on `127.0.0.1:8080`; managed gateway start planned.
|
||||
- Gemini: built-in route and render path; no daemon required for static browsing.
|
||||
- Reticulum: route contract exists; adapter and readiness model are planned.
|
||||
- Reticulum: resilient/private route contract exists; adapter and readiness model are planned.
|
||||
|
||||
Generated transport metadata lives in [generated transports](generated/transports.md).
|
||||
Adapter ownership and setup contracts live in [generated adapters](generated/adapters.md).
|
||||
|
||||
Reference in New Issue
Block a user