Bee v2.8.1 is a non-disruptive release focused on performance, data durability, and developer experience, with some operational cleanup. There are no breaking P2P protocol changes. Nodes on v2.8.0 can upgrade at any time without network-wide coordination. Highlights include opt-in SIMD-accelerated chunk hashing, a critical crash-safety fix for the chunk store, substantially reduced blockchain RPC traffic, and client-side stamping for browser-friendly uploads.
π Read the release announcement on the Swarm blog.
π¬ Join us on Discord (#node-operators) if you have questions or feedback!
Important
π’ Upgrade notes
- Dev mode removed β the
bee devcommand is gone. For local development, migrate to Bee Factory or run against the Sepolia testnet configuration. - Bee v2.6.0 compatibility removed β nodes running v2.6.0 or older must first upgrade to v2.8.0, and only then to v2.8.1 (or reinstall fresh).
- SIMD hashing is opt-in β on Linux x86-64, enable hardware-accelerated BMT hashing with
--use-simd-hashing. With the flag off, behavior is unchanged.
New Features
-
SIMD-accelerated chunk hashing β Opt-in hardware-accelerated BMT hashing on Linux x86-64 (
--use-simd-hashing), reducing CPU cost during uploads and other hashing-intensive operations. (#5381) -
Client-side stamping over WebSocket β The
/chunks/streamendpoint now accepts pre-stamped chunks: omit theSwarm-Postage-Batch-Idheader to enter per-chunk-stamp mode. This enables browser-based uploads where keys never leave the client, parallel stamping across Web Workers, and per-chunk batch selection. (#5256) -
Reduced blockchain RPC traffic β The node now estimates progress from the average block time between syncs and uses a larger block page size when syncing from a snapshot, substantially cutting the number of RPC calls β good news for operators on paid RPC providers.
block-sync-intervalnow defaults to 10. (#5394, #5504, #5494) -
Postage snapshot on
--resyncβ Resyncing postage events now bootstraps from the postage snapshot (unless explicitly skipped) and live sync resumes exactly where the snapshot replay stopped, making--resyncmuch faster and cheaper. (#5519, #5517, #5499) -
Content-Type auto-detection on upload β
POST /bzzdetects the file content type when the header is not sent. (#5361) -
API additions (backward-compatible):
/socnow honorsSwarm-Tag,Swarm-PinandSwarm-Deferred-Uploadheaders. (#5461)- New
GET /batches/{batch_id}endpoint. (#5462) - New
PATCH /stamps/{batch_id}endpoint to update a batch label. (#5472, #5512) GET /chainstatenow returnsminimumValidityBlocks. (#5465)- Postage stamp responses now include batch utilization. (#5466)
GET /walletworks even when swap or the chequebook is disabled. (#5468)/statusand/status/peersnow include bootnodes. (#5457)- SOC responses expose the owner public key. (#5492)
Bug Fixes
- Crash-safe chunk store β Fixed a data-integrity issue in sharky affecting nodes interrupted mid-write. After an unclean shutdown, chunks are now validated against their content hashes during recovery and corrupted data is removed automatically β no manual intervention needed. (#5409)
- Soft-fail on insufficient stake β Nodes with insufficient stake no longer fail at startup; stake height is auto-updated via the API. (#5315)
- Cleaner redundancy retrieval β Retrieval with redundancy now exhausts its strategies and fails cleanly instead of returning incomplete results; the default redundancy level was also fixed. (#5470, #5383, #5505)
- Hardened P2P message handling β Improved validation of hive and pullsync messages against malformed peer input. (#5500)
- Efficient peer handshakes β Nodes sign their address record once per session and reuse it, re-signing only when the advertised addresses or chequebook details change, avoiding needless signing work, disk writes and gossip churn. (#5493)
- Nested config resolution β Environment variables and priority ordering now work correctly for nested config keys such as
blockchain-rpc. (#5443, #5514) - Postage safety β Fail fast when the stored postage block is ahead of the chain tip, guard against a nil postage contract in
/chainstateduring startup, and prevent a dirty stamper store. (#5460, #5511, #5515) - Manifest fix β Infer
refBytesSizeat marshal time when it was never set. (#5484) - OpenAPI alignment β The Swarm/SwarmCommon spec now matches the actual handler behavior. (#5452)
- Legacy stamp format support β Restored reading of the legacy stamp store format. (#5498)
- Pusher fixes β Stamp removal is now synchronous and a data race in push chunk handling was fixed. (#5446, #5447)
Removals
- Dev mode removed β
bee devis no longer available; use Bee Factory or the Sepolia testnet instead. (#5436) - v2.6.0 backward compatibility removed β Upgrade from v2.6.0 or older requires going through v2.8.0 first. (#5415)
Maintenance
- go-ethereum upgrade β Bumped to 1.17.3, picking up upstream security fixes. (#5319, #5467)
- libp2p upgrade β Bumped to v0.48.0, with quic-go updated alongside. (#5430, #5489)
- Docker β Environment variables in the Docker setup updated for compatibility with the latest configuration. (#5416)
- Postage snapshot β Updated the postage snapshot to v0.0.8. (#5525)
- Codebase hygiene β gofumpt formatting applied across the codebase, flaky tests stabilized, and CI workflows refreshed. (#5439, #5429, #5433)
What's Changed
- feat: per-chunk stamped putter for WebSocket chunk uploads by @agazso in #5256
- fix: soft-fail on insufficient stake & auto-update height via API by @martinconic in #5315
- chore(docker): update environment variables to be compatible with latest updates by @akrem-chabchoub in #5416
- chore(deps): bump github.com/libp2p/go-libp2p to v0.48.0 by @gacevicljubisa in #5430
- chore(deps): bump github.com/ethereum/go-ethereum from 1.15.11 to 1.16.9 by @dependabot[bot] in #5319
- feat: add binary codec with backward-compatible migration by @martinconic in #5419
- fix: sharky corruption by @martinconic in #5409
- feat: optimize rpc calls by @sbackend123 in #5394
- chore(deps): update GitHub Actions versions by @akrem-chabchoub in #5433
- chore: apply gofumpt formatting across codebase by @gacevicljubisa in #5439
- chore: stabilize flaky tests and remove flaky runner by @sbackend123 in #5429
- chore: remove dev-mode by @sbackend123 in #5436
- fix: resolve env vars for nested blockchain-rpc config keys by @gacevicljubisa in #5443
- feat(upload): auto-detect file content-type if not sent by @akrem-chabchoub in #5361
- test: increase gsoc test timeout by @acud in #5455
- test: fix invalid chunk generation by @acud in #5454
- fix: include bootnodes in /status and /status/peers by @martinconic in #5457
- fix(openapi): align Swarm/SwarmCommon spec with handler implementations by @martinconic in #5452
- docs: add CLAUDE.md and Agents.md for AI coding assistant guidance by @akrem-chabchoub in #5437
- feat(api): support Swarm-Tag, Swarm-Pin, Swarm-Deferred-Upload on /soc by @martinconic in #5461
- feat(api): add GET /batches/{batch_id} endpoint by @martinconic in #5462
- fix: fail fast when postage block is ahead of chain tip by @martinconic in #5460
- perf: bmt SIMD hasher by @acud in #5381
- fix: read exactly M values from channel by @sbackend123 in #5447
- fix: make stamps removal sync and data race in push chunk tests by @sbackend123 in #5446
- feat(api): expose minimumValidityBlocks in /chainstate by @martinconic in #5465
- feat(openapi): document utilization; add utilizedPercentage to postag⦠by @martinconic in #5466
- fix(api): allow GET /wallet when swap or chequebook is disabled by @martinconic in #5468
- refactor: redundancy getter exhaust by @nugaon in #5470
- ci: goreleaser update by @acud in #5479
- fix: default redundancy level by @nugaon in #5383
- chore: revert #5343 by @acud in #5482
- chore(deps): bump github.com/ethereum/go-ethereum from 1.16.9 to 1.17.3 by @dependabot[bot] in #5467
- ci: disable golangci-lint cache to avoid stale-cache lint failures by @martinconic in #5488
- ci: add on-demand autotls beekeeper workflow by @gacevicljubisa in #5478
- feat: use larger block page size when syncing from snapshot by @martinconic in #5494
- fix(handshake): reuse session-stable signed BzzAddress by @gacevicljubisa in #5493
- feat: soc pubkey by @nugaon in #5492
- chore(deps): bump github.com/quic-go/quic-go from 0.59.0 to 0.59.1 by @dependabot[bot] in #5489
- chore(deps): bump go.opentelemetry.io/otel from 1.40.0 to 1.41.0 by @dependabot[bot] in #5487
- chore: remove backwards compatibility with 2.6.0 by @sbackend123 in #5415
- fix: support legacy format by @sbackend123 in #5498
- chore: improve hive and pullsync message handling by @akrem-chabchoub in #5500
- revert: feat: add binary codec with backward-compatible migration (#5419) by @gacevicljubisa in #5501
- feat(api): add patch endpoint to update issuer label by @akrem-chabchoub in #5472
- feat: block time average by @sbackend123 in #5504
- fix: prevent second batch store reset wiping postage snapshot on --resync by @martinconic in #5499
- refactor: add BzzAddress to ChainConfig and remove LookupERC20Address by @martinconic in #5476
- ci: auto-assign PR author when none is set by @darkobas2 in #5507
- fix(api): reject empty label on PATCH /stamps/{batch_id} by @martinconic in #5512
- chore(redundancy): increment fetchedCnt before closing wait channel by @martinconic in #5505
- fix(api): guard nil postage contract in /chainstate during startup by @martinconic in #5511
- fix: nested config priority by @sbackend123 in #5514
- fix: stamper store was dirty by @sbackend123 in #5515
- feat(node): use postage snapshot on --resync unless skipped by @gacevicljubisa in #5519
- fix(postage): resume live sync where snapshot replay stopped by @gacevicljubisa in #5517
- fix(manifest): infer refBytesSize at marshal time when never set by @mfw78 in #5484
- chore: update postage snapshot to v0.0.8 by @gacevicljubisa in #5525
Full Changelog: v2.8.0...v2.8.1