{"id":15175176,"url":"https://github.com/ipfs-inactive/bifrost-gateway","last_synced_at":"2025-10-01T12:31:01.396Z","repository":{"id":65719486,"uuid":"596141849","full_name":"ipfs-inactive/bifrost-gateway","owner":"ipfs-inactive","description":"Experimental gateway with delegated backend. No longer maintained, consider migrating to https://github.com/ipfs/rainbow/","archived":true,"fork":false,"pushed_at":"2024-06-20T17:47:31.000Z","size":395,"stargazers_count":40,"open_issues_count":20,"forks_count":19,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-09-15T23:18:58.337Z","etag":null,"topics":["http","ipfs","ipfs-gateway"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipfs-inactive.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-01T14:57:32.000Z","updated_at":"2025-08-27T13:19:29.000Z","dependencies_parsed_at":"2023-10-13T01:31:28.551Z","dependency_job_id":"95813eb3-e6da-4664-babc-d82b696c3f81","html_url":"https://github.com/ipfs-inactive/bifrost-gateway","commit_stats":null,"previous_names":["ipfs-inactive/bifrost-gateway","ipfs/bifrost-gateway","protocol/bifrost-gateway"],"tags_count":22,"template":false,"template_full_name":"ipfs/ipfs-repository-template","purl":"pkg:github/ipfs-inactive/bifrost-gateway","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-inactive%2Fbifrost-gateway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-inactive%2Fbifrost-gateway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-inactive%2Fbifrost-gateway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-inactive%2Fbifrost-gateway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipfs-inactive","download_url":"https://codeload.github.com/ipfs-inactive/bifrost-gateway/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs-inactive%2Fbifrost-gateway/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276505722,"owners_count":25654357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-23T02:00:09.130Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["http","ipfs","ipfs-gateway"],"created_at":"2024-09-27T12:04:32.937Z","updated_at":"2025-10-01T12:31:01.087Z","avatar_url":"https://github.com/ipfs-inactive.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e [!WARNING]\n\u003e\n\u003e # ⚠️  `bifrost-gateway` is no longer maintained\n\u003e\n\u003e You can continue using it, but it won't receive any security updates or\n\u003e fixes. Consider forking or migrating to [Rainbow](https://github.com/ipfs/rainbow/).\n\u003e\n\u003e ## ℹ️ Migrating to Rainbow 🌈\n\u003e\n\u003e The `PROXY_GATEWAY_URL` functionality is backported to [Rainbow](https://github.com/ipfs/rainbow/).\n\u003e\n\u003e To use Rainbow with a remote block or CAR backend, configure it with:\n\u003e\n\u003e  `RAINBOW_REMOTE_BACKENDS=\u003cgwurl\u003e`\n\u003e  `RAINBOW_REMOTE_BACKENDS_MODE=block|car`\n\u003e\n\u003e For configuration details, visit:\n\u003e https://github.com/ipfs/rainbow/blob/main/docs/environment-variables.md\n\nbifrost-gateway\n=======================\n\n\u003e A lightweight IPFS Gateway daemon backed by a remote data store.\n\n- [About](#about)\n- [Usage](#usage)\n  - [Local build](#local-build)\n  - [Configuration](#configuration)\n  - [Docker](#docker)\n- [FAQ](#faq)\n  - [How to use other gateway as a block backend](#how-to-use-other-gateway-as-a-block-backend)\n  - [How to run with Saturn CDN backend](#how-to-run-with-saturn-cdn-backend)\n  - [How to debug](#how-to-debug)\n  - [How to use tracing](#how-to-use-tracing)\n  - [How could this work for hosting a public IPFS gateway](#how-could-this-work-for-hosting-a-public-ipfs-gateway)\n  - [How does high level overview look like](#how-does-high-level-overview-look-like)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Maintainers\n\nIPFS Stewards\n\n## About\n\n`bifrost-gateway` provides a single binary daemon implementation of [HTTP+Web Gateway Specs](https://specs.ipfs.tech/http-gateways/).\n\nIt is capable of serving requests to:\n- [path gateway](https://docs.ipfs.tech/how-to/address-ipfs-on-web/#path-gateway) at `127.0.0.1`\n- [subdomain gateway](https://docs.ipfs.tech/how-to/address-ipfs-on-web/#subdomain-gateway) requests with `Host: localhost`\n- [DNSLink gateway](https://docs.ipfs.tech/how-to/address-ipfs-on-web/#dnslink-gateway) based on `Host` header\n\nSupported response types include both deserialized flat files, and [verifiable Block/CAR](https://docs.ipfs.tech/reference/http/gateway/#trustless-verifiable-retrieval).\n\nFor more information about IPFS Gateways, see:\n\n- Specifications at [specs.ipfs.tech/http-gateways](https://specs.ipfs.tech/http-gateways/)\n- Conformance tests at [ipfs/gateway-conformance](https://github.com/ipfs/gateway-conformance)\n- Go implementation at [boxo/gateway](https://github.com/ipfs/boxo/tree/main/gateway)\n\n## Usage\n\n### Local build\n\n```console\n$ go build\n$ ./bifrost-gateway --help\n```\n\n### Configuration\n\nSee `./bifrost-gateway --help` and [`./docs/environment-variables.md`](./docs/environment-variables.md)\n\n\n### Docker\n\nOfficial Docker images are provided at [hub.docker.com/r/ipfs/bifrost-gateway](https://hub.docker.com/r/ipfs/bifrost-gateway/tags).\n\n- 🟢 Releases\n  - `latest` and `release` always point at the latest release\n  - `vN.N.N` point at a specific [release tag](https://github.com/ipfs/bifrost-gateway/releases)\n- 🟠 Developer builds\n  - `main-latest` always points at the `HEAD` of the `main` branch\n  - `main-YYYY-DD-MM-GITSHA` points at a specific commit from the `main` branch\n- ⚠️ Experimental, unstable builds\n  - `staging-latest` always points at the `HEAD` of the `staging` branch\n  - `staging-YYYY-DD-MM-GITSHA` points at a specific commit from the `staging` branch\n  - This tag is used by developers for internal testing, not intended for end users\n\nWhen using Docker, make sure to pass necessary config via `-e`:\n```console\n$ docker pull ipfs/bifrost-gateway:release\n$ docker run --rm -it --net=host -e PROXY_GATEWAY_URL=http://127.0.0.1:8080  ipfs/bifrost-gateway:release\n```\n\nSee [`./docs/environment-variables.md`](./docs/environment-variables.md).\n\n## FAQ\n\n### How to use other gateway as a block backend\n\nAll you need is a [trustless gateway](https://specs.ipfs.tech/http-gateways/trustless-gateway/) endpoint that supports [verifiable response types](https://docs.ipfs.tech/reference/http/gateway/#trustless-verifiable-retrieval).\nThe minimum requirement is support for `GET /ipfs/cid` with [application/vnd.ipld.raw](https://www.iana.org/assignments/media-types/application/vnd.ipld.raw) (block by block).\n\nTo run against a compatible, local trustless gateway provided by [Kubo](https://github.com/ipfs/kubo) or [IPFS Desktop](https://docs.ipfs.tech/install/ipfs-desktop/):\n\n```console\n$ PROXY_GATEWAY_URL=\"http://127.0.0.1:8080\" ./bifrost-gateway\n```\n\nSee [_Proxy Backend_ in `./docs/environment-variables.md`](./docs/environment-variables.md#proxy-backend)\n\n### How to run with Saturn CDN backend\n\n[Saturn](https://saturn.tech) is a CDN that provides a pool of [trustless gateways](https://specs.ipfs.tech/http-gateways/trustless-gateway/).\n\n`bifrost-gateway` supports it via the [Caboose](https://github.com/filecoin-saturn/caboose) backend,\nwhich takes care of discovering and evaluating Block/CAR gateways (in Saturn called L1 nodes/peers) for increased availability.\n\nSee [_Saturn Backend_ in `./docs/environment-variables.md`](./docs/environment-variables.md#saturn-backend)\n\n### How to debug\n\nSee [`GOLOG_LOG_LEVEL`](./docs/environment-variables.md#golog_log_level).\n\n### How to use tracing\n\nFor tracing configuration, please check\n[boxo/docs/tracing.md](https://github.com/ipfs/boxo/blob/main/docs/tracing.md)\non how to generate the `traceparent` HTTP header in order to be able to easily\nidentify specific requests.\n\n\n### How could this work for hosting a public IPFS gateway\n\nThis is WIP, but the high level architecture is to move from\n\n**Old Kubo-based architecture:**\n\n```mermaid\ngraph LR\n    A(((fa:fa-person HTTP\u003c/br\u003eclients)))\n    K[[Kubo]]\n    N(((BGP Anycast,\u003cbr\u003eHTTP load-balancers,\u003cbr\u003eTLS termination)))\n\n    D(((DHT)))\n\n    P((( IPFS\u003cbr\u003ePeers)))\n\n    A --\u003e| Accept: text/html, *| N\n    A --\u003e| Accept: application/vnd.ipld.raw | N\n    A --\u003e| Accept: application/vnd.ipld.car | N\n    A --\u003e| Accept: application/vnd.ipld.dag-json | N\n    A --\u003e| Accept: application/vnd.ipld.dag-cbor | N\n    A --\u003e| Accept: application/json | N\n    A --\u003e| Accept: application/cbor | N\n    A --\u003e| Accept: application/x-tar | N\n    A --\u003e| Accept: application/vnd.ipfs.ipns-record | N\n    A --\u003e| DNSLink Host: en.wikipedia-on-ipfs.org | N\n    A --\u003e| Subdomain Host: cid.ipfs.dweb.link | N\n\n    N ==\u003e| fa:fa-link HTTP GET \u003cbr\u003e Content Path | K\n\n    K -.- D\n    K ===|fa:fa-cube bitswapl | P\n    P -.- D\n```\n\n**New Rhea architecture:**\n```mermaid\ngraph LR\n    A(((fa:fa-person HTTP\u003c/br\u003eclients)))\n    B[[bifrost-gateway]]\n    N(((BGP Anycast,\u003cbr\u003eHTTP load-balancers,\u003cbr\u003eTLS termination)))\n    S(((Saturn\u003cbr\u003eCDN)))\n    I[[IPNI]]\n    D(((DHT)))\n\n    P((( IPFS\u003cbr\u003ePeers)))\n\n    A --\u003e| Accept: text/html, *| N\n    A --\u003e| Accept: application/vnd.ipld.raw | N\n    A --\u003e| Accept: application/vnd.ipld.car | N\n    A --\u003e| Accept: application/vnd.ipld.dag-json | N\n    A --\u003e| Accept: application/vnd.ipld.dag-cbor | N\n    A --\u003e| Accept: application/json | N\n    A --\u003e| Accept: application/cbor | N\n    A --\u003e| Accept: application/x-tar | N\n    A --\u003e| Accept: application/vnd.ipfs.ipns-record | N\n    A --\u003e| DNSLink Host: en.wikipedia-on-ipfs.org | N\n    A --\u003e| Subdomain Host: cid.ipfs.dweb.link | N\n\n    N ==\u003e| fa:fa-link HTTP GET \u003cbr\u003e Content Path | B\n    \n    B ==\u003e|fa:fa-cube HTTP GET \u003cbr\u003e Blocks | S\n    S -.- I \n    I -.- D \n    D -.- P -.- I\n  \n    P ===|fa:fa-cube the best block/dag \u003cbr\u003e transfer protocol | S\n```\n\n`bifrost-gateway` nodes are responsible for processing requests to:\n\n- [path gateway](https://docs.ipfs.tech/how-to/address-ipfs-on-web/#path-gateway) (like `ipfs.io`)\n- [subdomain gateway](https://docs.ipfs.tech/how-to/address-ipfs-on-web/#subdomain-gateway) (like `dweb.link`)\n- [selected DNSLink websites](https://github.com/protocol/bifrost-infra/blob/b6f85a54fddf1c21a966f8d5e5a3e31f54ad5431/ansible/inventories/bifrost/group_vars/collab_cluster.yml#L140-L271) on their own domain names.\n\nCaveats:\n\n- IPFS Gateway interface based on reference implementation from [boxo/gateway](https://github.com/ipfs/boxo/tree/main/gateway#readme).\n- IPFS Backend based on https://saturn.tech and HTTP client talking to it  via [caboose](https://github.com/filecoin-saturn/caboose) with `STRN_LOGGER_SECRET`.\n  - Learn more at [Project Rhea (decentralized IPFS gateway)](https://pl-strflt.notion.site/Project-Rhea-decentralized-IPFS-gateway-3d5906e7a0d84bea800d5920005dfea6)\n- Remaining functional gaps facilitated by:\n  - (initially) temporary delegation to legacy Kubo RPC (`/api/v0`) at `https://node[0-3].delegate.ipfs.io` infra (legacy nodes used by js-ipfs, in process of deprecation).\n  - (long-term) `IPNS_RECORD_GATEWAY_URL` endpoint capable of resolving `GET /ipns/{name}` with `Accept: application/vnd.ipfs.ipns-record`\n\n### How does high level overview look like\n\nSome high level areas:\n\n```mermaid\nmindmap\n  root[bifrost-gateway]\n    (boxo/gateway.IPFSBackend)\n        Block Backend\n        CAR Backend\n    Ephemeral Storage\n        Block Cache\n        Exchange Backend\n            Plain HTTP Fetch\n            Caboose Saturn Fetch\n    Resolving Content Paths\n        Raw\n        CAR\n        UnixFS\n        IPLD Data Model\n            [DAG-JSON]\n            [DAG-CBOR]\n        Web\n            HTTP Host Header\n            HTML dir listings\n            index.html\n            _redirects\n            HTTP Range Requests\n        Namesys\n            DNSLink\n                EoDoH\u003cbr\u003eENS over DNS over HTTPS\n            IPNS Records\n    Metrics and Tracing\n        Prometheus\n            Counters\n            Histograms\n        OpenTelemetry\n            Spans\n            Exporters\n            Trace Context\n```\n\n## Contributing\n\nContributions are welcome! This repository is part of the IPFS project and therefore governed by our [contributing guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md).\n\n## License\n\n[SPDX-License-Identifier: Apache-2.0 OR MIT](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs-inactive%2Fbifrost-gateway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipfs-inactive%2Fbifrost-gateway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs-inactive%2Fbifrost-gateway/lists"}