github celestiaorg/celestia-node v0.25.3

one day ago

This release includes significant changes accumulated since May 2025 while waiting for the Celestia App v4/v5 mainnet update. Please review all breaking changes carefully before upgrading.

TL;DR

🚨 This release breaks both API and config!

  • ⚠️ API Breaking Changes
    • JSON integers now encoded as strings (Tendermint compatibility)
    • Blobstream root encoding switched to hex (plus pointer cleanups in Go API)
    • Gateway removed → use direct API; configure CORS as needed
    • Share Samples API now uses height parameter instead of ExtendedHeader
    • Share encoding in Samples response changed to base64 string (was object with data field)
  • 🤏🏻 Data Retention Changes
    • Full Nodes: Pruning enabled by default (≈30 days)
    • Light Nodes: Sampling window reduced to 7 days
    • Use --archival to keep full history
    • Update config to remove pruning-related fields
  • API Enhancements – Configurable CORS, new client library, multi-endpoint tx submission
  • 🐎 Faster GetRange – Uses shwap protocol for efficient partial retrieval
  • 🏎️ Performance Boosts – Parallelized namespace data; optimized blob retrieval
  • 🥾 Bootstrap Updates – Added 01node mainnet bootstrap; removed outdated nodes

🚨 Breaking Changes

🗒️ Configuration Breaking Changes

This release contains configuration breaking changes. Node operators must run the config update command before starting their node:

celestia <node_type> config-update --p2p.network  (or --node.store)

⚠️ API & JSON Compatibility

  • fix(api/header)!: tendermint compatible json marshall #3928 by @zvolin (ported in #4428)
  • fix(share)!: tendermint compatible get range result json marshall by @zvolin in #3930
  • fix(blob)!: tendermint compatible commitment proof json marshall #3929 by @zvolin (ported in #4434)

Changes:

  • Integer values in JSON responses are now encoded as strings for Tendermint compatibility
  • Example: “height”: 67374 becomes “height”: “67374”

Migration: Update JSON parsing logic to handle integers as strings in header, share range, and blob commitment proof endpoints.

Share API Consistency Improvements

Samples Method Signature Change

Changes:

  • Samples method now accepts height parameter directly
  • No longer requires passing ExtendedHeader
  • Brings consistency with other share module methods

Migration:

// Before:
samples, err := client.Share.GetSamples(ctx, header)

// After:
samples, err := client.Share.GetSamples(ctx, height)

Share Encoding in Samples Response

Changes:

  • Shares in GetSamples response now encoded as base64 strings
  • Previously encoded as objects with data field
  • Matches encoding format used by GetRow and other methods

Migration:

// Before (v0.25.0-v0.25.1):
{
  "share": {
    "data": "AAAAAAA...base64..."
  },
  "proof": { ... }
}

// After (v0.25.2+):
{
  "share": "AAAAAAA...base64...",
  "proof": { ... }
}

Update JSON parsing to expect shares as direct base64 strings rather than nested objects.

❌ Gateway Removal

Migration: If you were using the gateway, switch to direct API endpoints. Configure CORS policy using the new configurable CORS feature if needed.

🅱️ Blobstream API Changes

  • refactor!(blobstream): change DataRootTupleRoot to HexBytes type alias by @vgonkivs in #4390
  • fix!(blobstream): change DataRootTupleInclusionProof type by @vgonkivs in #4430
  • fix!(blobstream): change GetDataRootTupleRoot return type by @vgonkivs in #4435
  • fix(open-rpc): add blobstream api docs by @vgonkivs in #4432

Changes:

  • DataRootTupleRoot: String encoding changed from base64 to hex bytes
  • DataRootTupleInclusionProof: Removed extra pointer (affects native Go API only, not JSON encoding)
  • GetDataRootTupleRoot: Removed extra pointer in returned value (affects native Go API only)
  • Blobstream API is now publicly documented

Migration:

  • Update code expecting base64 encoded roots to handle hex encoding
  • Go API users: Update code to handle direct values instead of pointers

✨ GetRange efficiency improvements

  • feat!(share/shwap): implement get range request over shwap by @vgonkivs in #4156
  • refactor!(share/shwap): rework range namespace data by @vgonkivs in #4325

Changes:

  • GetRange requests now use efficient P2P protocol instead of downloading entire EDS
  • Significant performance improvement for partial data retrieval

Migration: Update clients using range requests to use the new shwap protocol implementation.

✨ API New Features + Enhancements

🤏🏻 Data Pruning Now Default

Changes:

  • Data pruning is now enabled by default (stores 30 days of data)
  • Sampling window reduced from 30 to 7 days
  • Archival nodes must use --archival flag to disable pruning
  • The pruner configuration field has been completely removed from node config files
  • Pruning behavior is now controlled exclusively via command-line flags

Migration:

  • Remove any pruner-related configuration from your config files
  • To run an archival node (disable pruning): MUST use -archival flag when starting the node
  • All other nodes: Remove -experimental-pruning flag (pruning is now automatic)
  • Adjust monitoring for the new 7-day sampling window
  • Default behavior (without flag): Pruning enabled with 30-day retention

🧪 Testing Infrastructure

  • test: Tastora framework integration with test for blob module by @chatton in #4283
  • test: tastora remove fullnode and rely on bridge and light nodes only by @gupadhyaya in #4441
  • test: use tastora docker types instead of interface types by @gupadhyaya in #4421

🚀 Performance Improvements

  • perf(share/eds): parallelise row nd collection in NamespaceData by @renaynay in #4420
  • perf(api/da): request all blobs once in da.Get by @walldiss in #4431

🦀 Rust Users – Required Upgrade

Rust ecosystem must upgrade to maintain RPC compatibility with v0.25.

Upgrade timeline:

  • If you do not use header.GetRangeByHeight: upgrade immediately.
  • If you do use it: upgrade Rust crates & celestia-node together.

🔄 Bootstrap Nodes

  • chore: removing the bootstrapper 3 and 4 from lunar by @tty47 in #4302
  • chore(bootstrapers): add 01node mainnet bootstrap node by @daemon2k3 in #4270

🔧 Bug Fixes

Addressing memory leak in light node (LN)

FULL CHANGELOG

New Contributors

Full Changelog: v0.24.1...v0.25.3

Don't miss a new celestia-node release

NewReleases is sending notifications on new releases.