Home

Awesome

<h1 align="center"> <br> <img src="https://github.com/ipfs/service-worker-gateway/assets/157609/4931e739-a899-4b18-91f2-2a2bcafb5c33" alt="logo" title="logo" width="200"></a> <br> Service Worker IPFS Gateway <br> </h1> <p align="center" style="font-size: 1.2rem;">Decentralizing IPFS Gateways by verifying hashes in the user's browser.</p> <p align="center"> <a href="https://ipfs.tech"><img src="https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square" alt="Official Part of IPFS Project"></a> <a href="https://discuss.ipfs.tech"><img alt="Discourse Forum" src="https://img.shields.io/discourse/posts?server=https%3A%2F%2Fdiscuss.ipfs.tech"></a> <a href="https://github.com/ipfs/service-worker-gateway/actions"><img src="https://img.shields.io/github/actions/workflow/status/ipfs/service-worker-gateway/main.yml?branch=main" alt="ci"></a> <a href="https://github.com/ipfs/service-worker-gateway/releases"><img alt="GitHub release" src="https://img.shields.io/github/v/release/ipfs/service-worker-gateway?filter=!*rc*"></a> </p> <hr />

About

This project demonstrates the use of Helia (IPFS implementation in JS) and the verified-fetch library (Fetch API for IPFS) within a Service Worker to facilitate direct verified retrieval of content-addressed data.

A Service Worker is registered on the initial page load, and then intercepts HTTP requests for content stored on IPFS paths such as /ipfs/* (immutable) and /ipns/* (mutable) and returns Response objects to the browser.

It functions as an IPFS gateway within the browser, offering enhanced security (hash verification happens on end user's machine) and reliability (ability to use multiple sources of content-addressed blocks) without reliance on a single HTTP server for IPFS tasks.

<a href="http://ipshipyard.com/"><img align="right" src="https://github.com/user-attachments/assets/39ed3504-bb71-47f6-9bf8-cb9a1698f272" /></a>

This project was brought to you by the Shipyard team.

Goals

The main goals of this project are:

Feature Set

Usage

Running locally

You can build and run the project locally:

> npm ci
> npm start

Now open your browser at http://sw.localhost:3000

As you type in a content path, you will be redirected to appropriate URL (typically that means subdomain style resolution).

For more information about local development setup, see /docs/DEVELOPMENT.md.

Try hosted instance

We provide a public good instance of this projct configured to run in subdomain mode, aiming to be a drop-in replacement for dweb.link:

There is also an instance running in path mode, aiming to be a drop-in replacement for ipfs.io:

Updating production and staging

Make a PR to the respective branch. Once it is merged, new version will be deployed. The process takes between 1 and 5 minutes.

License

This project is dual-licensed under SPDX-License-Identifier: Apache-2.0 OR MIT

See LICENSE for more details.