service-worker-gateway icon indicating copy to clipboard operation
service-worker-gateway copied to clipboard

PWA with handlers for ipfs:// and ipns://

Open lidel opened this issue 1 year ago • 1 comments

This is something we could explore when more pressing things are implemented, after we deploy service worker gateway under long-term domain name.

When packaged as PWA, SW gateway root could double as a very nice light mobile client. If we create a compelling landing page that could double as a mobile app, we would be bringing light IPFS node with built-in verifiable ipfs:// and ipns:// URL support to mobile users (android etc) virtually for free.

Background

It is possible to create a Progressive Web App (PWA) with a manifest file that declares the app as a handler for specific protocols or URLs. This allows PWAs to provide handler of certain URLs or protocols.

The user experience is pretty good on mobile platforms, especially Android, where PWA support is built into the operating system.

Implementation notes and caveats

  • Assuming we have subdomain service worker gateway at example.com
  • Requesting main domain would return HTML with <link rel="manifest" href="/manifest.json"> and there would be PWA manifest at example.com/manifest.json
  • manifest.json would have url_handlers section which defines two handlers that implement uri router from subdomain spec:
    • ipfs:/ipfs/?uri=%s → decode ipfs:// URL, redirect to proper subdomain
    • ipns:/ipns/?uri=%s → decode ipns:// URL, redirect to proper subdomain
    • note: we may be able to use #uri here to avoid sending request to http server, and doing URI decoding and redirect via window.location.replace
    • note: %s is percent-encoded URL with custom scheme like ipfs://cid/optional/path making the URL looks like this: ?uri=ipfs%3A%2F%2FQmYizgL5Gn6zZFK8n5thwULT4q12P5yVAT1V4xuicp8226%2Ffavicon-32x32.png

lidel avatar Feb 13 '24 20:02 lidel

Mostly done in https://github.com/ipfs/service-worker-gateway/pull/310, remaining work here here is to add protocol handlers to manifest:

  • https://developer.mozilla.org/en-US/docs/Web/Manifest/protocol_handlers

It should use the same handler as one described in

  • https://github.com/ipfs/service-worker-gateway/issues/214#issuecomment-2102963620

lidel avatar Dec 05 '24 22:12 lidel