All notable changes to this project will be documented in this file.
Note:
- The format is based on Keep a Changelog.
- This project adheres to Semantic Versioning.
The following emojis are used to highlight certain changes:
- 🛠 - BREAKING CHANGE. Action is required if you use this functionality.
- ✨ - Noteworthy change to be aware of.
- Configurable routing timeouts: new options
RAINBOW_HTTP_ROUTERS_TIMEOUTandRAINBOW_ROUTING_TIMEOUT(and the similar command-line flags) allow setting timeouts for routing operations. The former does it for delegated http routing requests. The latter specifies a timeout for routing requests. - Added
BITSWAP_ENABLE_DUPLICATE_BLOCK_STATS: Controls whether bitswap duplicate block statistics are collected. This is disabled by default since it has a performance impact. - Allow specifying a DNSLink safelist:
RAINBOW_DNSLINK_GATEWAY_DOMAINSdefines which dnslink domains are allowed to use this gateway. - Added reverse proxy documentation with
Hostheader forwarding requirements for subdomain gateways behind nginx (#317).
- upgrade to
boxov0.37.0- include upgrade to v0.36.0
- max block size raised from 1 MiB to 2 MiB, aligning with the bitswap spec
- upgrade to
gateway-conformancev0.10 - upgrade to
go-ipld-primev0.22.0 - upgrade to
go-libp2p-kad-dhtv0.38.0 - upgrade to
go-libp2pv0.47.0 - upgrade to
go-log/v2v2.9.1- wired slog handler as application-wide default (see explainer in v2.9.0), bridged to go-libp2p for per-subsystem log level control
- upgrade to go-ds-pebble v0.5.9
- upgrade to
go-ds-flatfsv0.6.0 - upgrade to badger/v4 v4.9.1
- Redesigned default landing page for third-party deployments: added
noindexmeta tag, dynamic WHOIS-based abuse reporting, dark mode support, and operator customization guidance (#314) - Docker image now builds with Go 1.26: the Green Tea GC is enabled by default reducing GC overhead, small object allocation is cheaper, and the compiler stack-allocates slice backing stores in more cases
- Upgrade go-ds-pebble to v0.5.6 and pebble to v2.1.1
- Update to boxo v0.35.1 with fixes for QUIC, httpnet and block tracing.
--diagnostic-service-url/RAINBOW_DIAGNOSTIC_SERVICE_URL: Configure URL for CID retrievability diagnostic service (default:https://check.ipfs.network). When gateway returns 504 timeout, users see "Inspect retrievability of CID" button linking to diagnostic service. Set to empty string to disable.
- Upgrade go-ds-pebble to v0.5.3
--max-range-request-file-size/RAINBOW_MAX_RANGE_REQUEST_FILE_SIZE: Configurable limit for HTTP Range requests on large files (default: 5GiB). Range requests for files larger than this limit return HTTP 501 Not Implemented to protect against CDN issues. Specifically addresses Cloudflare's bug where range requests for files over 5GiB are silently ignored, causing the entire file to be returned instead of the requested range, leading to excess bandwidth consumption and billing.
- Fixed bitswap client initialization to use
time.Durationinstead ofdelay.Fixed()for rebroadcast delay, matching the updated bitswap client API
--bootstrap/RAINBOW_BOOTSTRAP: Configure bootstrap peer multiaddrs (default:auto)- AutoConf support with
autoplaceholders for bootstrap peers, DNS resolvers, and HTTP routers (ipfs/boxo#997)- Configuration flags:
--autoconf/RAINBOW_AUTOCONF: Enable/disable automatic configuration expansion (default:true)--autoconf-url/RAINBOW_AUTOCONF_URL: URL to fetch autoconf data from (default:https://conf.ipfs-mainnet.org/autoconf.json)--autoconf-refresh/RAINBOW_AUTOCONF_REFRESH: Interval for refreshing autoconf data (default:24h)
- When autoconf is disabled,
autoplaceholders will cause an error, requiring explicit values
- Configuration flags:
- Added configurable gateway rate limiting and timeout controls via new CLI flags:
--max-concurrent-requests(env:RAINBOW_MAX_CONCURRENT_REQUESTS): Limits concurrent HTTP requests to protect against resource exhaustion (default: 4096). Returns 429 Too Many Requests with Retry-After header when exceeded.--retrieval-timeout(env:RAINBOW_RETRIEVAL_TIMEOUT): Enforces maximum duration for content retrieval (default: 30s). Returns 504 Gateway Timeout when content cannot be retrieved within this period - both for initial retrieval (time to first byte) and between subsequent writes.
- Default values now use
autoplaceholder that expands to IPFS Mainnet configuration via autoconf:--http-routersdefault changed toauto(washttps://cid.contact)--dnslink-resolversdefault changed to. : auto(was specific resolver list)--bootstrapdefault isauto(new flag)
- Always upgrade pebble data format to latest #288
- This ensures:
- Get all the latest features and improvements offered by the latest data format
- The next pebble update is compatible with, and can upgrade, you data format
- Possible issues:
- Startup of new pebble version may take longer the first time.
- Unable to revert to the previous version of pebble if the newest data format is not supported by the previous pebble. Reverting will require removing the datastore and reinitializing.
- This ensures:
- Update to boxo/v0.34.0
- Support for
RAINBOW_HTTP_RETRIEVAL_MAX_DONT_HAVE_ERRORS, allows limiting the number of optimistic block requests performed against endpoints that fail to provide any of those blocks. See the Envirionment variables documentation for more details. - Support for
RAINBOW_HTTP_RETRIEVAL_METRICS_LABELS_FOR_ENDPOINTSwhich brings back the possiblity of tagging requests metrics with the endpoint the request is sent to. See the Envirionment variables documentation for more details.
- upgrade to Boxo v0.33.1
This release has been withdrawn.
http-retrieval-enableis now enabled by default. HTTP Retrieval can be disabled withRAINBOW_HTTP_RETRIEVAL_ENABLE=false. #270- upgrade to Boxo v0.33.1-0.20250716194104-2c5f80a98e46
- Setting
export RAINBOW_HTTP_RETRIEVAL_ALLOWLIST=allowed to enable HTTP retrieval with an empty allowlist, so no HTTP requests would be performed. This is a footgun, therefore from now on this is interpreted as no allowlist being set. HTTP Retrieval can be disabled withRAINBOW_HTTP_RETRIEVAL_ENABLE=falseinstead. #269 - Fix periodicGC that runs before the previous run has finished if the interval is too short #273.
- Fix issue where http retrievals silently stop (ipfs/boxo#979).
- upgrade to Boxo v0.32.0
- New option
--http-retrieval-denylist. It can be used to avoid connecting to disallowed hosts.
- upgrade to Boxo v0.30.0
- upgrade go-ds-xxx packages to support
go-datastorev0.8.2 query API - updated go-libp2p to v0.41.1
- Fix exporting of routing http client metrics: the endpoint will now include
ipfs_routing_http_client_*metrics routing clients are used. See docs/metrics.md for more details.
- This release upgrades quic-go to v0.50.1. It contains a fix for a remote-triggered panic.
- HTTP block retrieval support: rainbow can now use Trustless HTTP Gateways to perform block retrievals in parallel to Bitswap.
- This takes advantage of peers with
/tls+/httpmultiaddrs (HTTPS is required). - You can enable HTTP retrievals with
--http-retrieval-enable, and limit it to urls of specific hostnames with--http-retrieval-allowlist <hostname>. - You can also ignore provider records from certain peer IDs with
--routing-ignore-providers <peerID>(for example to ignore peer IDs from bitswap endpoints of providers that offer HTTP). - NOTE: this feature works in the same way as Bitswap: known HTTP-peers receive optimistic block requests even for content that they are not announcing. See Boxo's CHANGELOG for more information.
- This takes advantage of peers with
- The default DNSLink resolver for
.ethTLD changed tohttps://dns.eth.limo/dns-queryand.cryptoone changed tohttps://resolver.unstoppable.io/dns-query#231 - Upgrade to Boxo v0.28.0
- Upgrade go-ds-pebble to v0.4.2 and pebble to v1.1.4
- updated go-libp2p to v0.40.0
- require minimum go version 1.24 in go.mod
- Add support for custom DNSLink resolvers (e.g. to support TLDs like
.eth,.crypto). It is possible to set custom DoH resolvers by settingRAINBOW_DNSLINK_RESOLVERSwith the same convention as Kubo'sDNS.Resolvers) #224
- boxo v0.26.0
- This has a number of significant updates including go-libp2p v0.38.1 and go-libp2p-kad-dht v0.28.1
- Upgrade to latest nopfs v0.14.0
- Added endpoints to show and purge connected peers #194
- Added flags to configure bitswap/routing tuning params:
routing-max-requestsrouting-max-providersrouting-max-timeout
- boxo v0.25.0
- go-libp2p-kad-dht v0.28.1
- passing headers that require authorization but are not authorized now results in an HTTP 401 instead of ignoring those headers
- Bitswap settings: Increased default content-discovery limits, with up to 100 in-flight requests.
- updated to boxo 0.24.2
- updated go-libp2p to v0.37.0
- require minimum go version 1.23.2 in go.mod
- boxo 0.24.1
- Support implicit protocol filters from IPIP-484 and customizing them via
--http-routers-filter-protocols. #173 - Dedicated tracing docs.
- Ability to specify the maximum blocksize that bitswap will replace WantHave with WantBlock responses, and to disable replacement when set to zero. #165
- Support use and configuration of pebble as datastore. Pebble provides a high-performance alternative to badger. Options are available to configure key tuning parameters (
pebble-*inrainbow --help).
- Updated Go in go.mod to 1.22
- Updated dependencies
- a bug whereby
FindPeerwon't return results for peers behind NAT which only have/p2p-circuitmultiaddrs go-libp2p-kad-dht#976
- Simple end-to-end test to check that trustless-gateway-domains are set correctly. #151 #157
- HTTP API to dynamically list logging subsystems and modify logging levels for subsystems. #156
- libp2p identify agentVersion correctly indicates rainbow version when shared host is not used
- Tracing per request with auth header (see
RAINBOW_TRACING_AUTH) or a fraction of requests (seeRAINBOW_SAMPLING_FRACTION) - Debugging with
Rainbow-No-Blockcachethat is gated by theAuthorizationheader and does not use the local block cache for the request
- go-libp2p 0.35
- boxo 0.21
- Added more buckets to the duration histogram metric to allow for tracking operations that take longer than 1 minute.
- Release version included in
--versionoutput.
- Now supports remote backends (using RAW block or CAR requests) via
--remote-backends(RAINBOW_REMOTE_BACKENDS). - Added configurable libp2p listen addresses for the Bitswap host via the
libp2p-listen-addrsflag andRAINBOW_LIBP2P_LISTEN_ADDRSenvironment variable
- Rainbow no longer initializes Bitswap server by default, restoring behavior from v1.0.0.
- Rainbow no longer provides announcements of blocks via Bitswap. This is not needed to provide blocks to peers with
RAINBOW_PEERING_SHARED_CACHE. - Rainbow no longer keeps track of other peer's Bitswap wantlists. It will only reply if they have the block at the moment. This should reduce the processing and memory usage.
- ✨ Now supports automatic peering with peers that have the same seed via
--seed-peering(RAINBOW_SEED_PEERING). You can further read how this works indocs/environment-variables.md.
- ✨ Now supports local cache sharing with peers provided via
--peering(RAINBOW_PEERING). You can further read how this works indocs/environment-variables.md.
Our first version. Check the README for all the information regarding 🌈 Rainbow.