Skip to content

Releases: celestiaorg/celestia-node

v0.27.2-mocha

25 Sep 14:32
d2040d9

Choose a tag to compare

v0.27.2-mocha Pre-release
Pre-release

This release includes changes necessary for celestia-app v6 compatibility. It also reduces the storage window from 30 days to 7.

If bumping directly from v0.25.3-mocha to this release, please see release notes for v0.26.1-mocha that contain important changes + features.

What's Changed

Full Changelog: v0.26.2-mocha...v0.27.2-mocha

v0.27.2-arabica

25 Sep 11:58
6731b09

Choose a tag to compare

v0.27.2-arabica Pre-release
Pre-release

What's Changed

Full Changelog: v0.27.1-arabica...v0.27.2-arabica

v0.26.3-mocha

25 Sep 18:33
bc8ccbc

Choose a tag to compare

v0.26.3-mocha Pre-release
Pre-release

Contains a bump to celestia-app that should resolve account sequence mismatch errors

What's Changed

Full Changelog: v0.26.2-mocha...v0.26.3-mocha

v0.27.1-arabica

18 Sep 17:54
7750e9d

Choose a tag to compare

v0.27.1-arabica Pre-release
Pre-release

This release includes changes necessary for celestia-app v6 compatibility. It also reduces the storage window from 30 days to 7.

If bumping directly from v0.25.3-arabica to this release, please see release notes for v0.26.0-arabica that contain important changes + features.

What's Changed

Full Changelog: v0.27.0-arabica...v0.27.1-arabica

v0.26.2-mocha

18 Sep 17:48
9128ba5

Choose a tag to compare

v0.26.2-mocha Pre-release
Pre-release

⚠️ Note: this release requires a config update and - for BN runners - a migration step. ⚠️
See docs for further information.

This release notably introduces...

  • a unified share exchange protocol (via unified shrex), a pre-requisite for sampling over our custom share exchange
  • header pruning via #4330

Header pruning

In order to use header pruning, please check out the new header configuration parameters in config.toml:

  [Header.Syncer]
    # PruningWindow defines the duration within which headers are retained before being pruned.
    # Default is 337 hours.
    PruningWindow = "337h0m0s"
    # SyncFromHash is the hash of the header from which the syncer should start syncing.
    # Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer.
    #
    # By default, Syncer maintains PruningWindow number of headers. SyncFromHash overrides this default,
    # allowing any user to specify a custom starting point.
    #
    # SyncFromHash has higher priority than SyncFromHeight.
    SyncFromHash = ""
    # SyncFromHeight is the height of the header from which the syncer should start syncing.
    # Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer.
    #
    # By default, Syncer maintains PruningWindow number of headers. SyncFromHeight overrides this default,
    # allowing any user to specify a custom starting point.
    #
    # SyncFromHeight has lower priority than SyncFromHash.
    SyncFromHeight = 0

Please do not copy these values directly into the config -- please use the config-update command. Read the docs here.

For BN (Bridge Node) runners

Please do the following to migrate properly:

make cel-shed 

./cel-shed header store-reset <node_path> --tail 1.

⚠️ This should happen before the new version binary is started, and must happen when the old binary is not running.

Default LNs no longer support historical queries

By default, node maintains a sliding window of headers, bounded by Tail and Head headers. Requests with height below the Tail are rejected (This is, however, temporary, and lazy header fetching will be available with Backward Sync)

To retain the ability to request older queries with LNs, use new configuration fields to set an absolute header that the node will sync from, either the SyncFromHeight or the SyncFromHash field.

LNs only

Pruning for Bridge and Full nodes is disabled. Currently, the p2p protocol for headers cannot distinguish between pruned and non-pruned serving node types. Therefore, to keep stable synchronization of historical headers, we disable pruned servers.

Prolonged Starts

  • If your LN stores a significant portion of the history of headers, you may need to increase the StartTimeout value in the config, as LN prunes on start. If the starting times out, e.g., with the default 20s, the node will attempt to persist the progress, but storage state corruptions may still occur. The complete mainnet header history pruning on moderate hardware takes under 100s, so update your config accordingly.
  • If you move the tail down the chain (e.g., SyncByHeight 150 -> 100), you may need to increase the StartTimeout value in the config, as LN syncs the difference during start. (This is, however, temporary, and asynchronous syncing that doesn't block start will be available with Backward Sync).
    • WARNING: This feature wasn't tested extensively and may break in unknown ways. Use at your own risk!

Config Breaks

  • Daser.SampleFrom field is no longer supported. Use Header.Syncer.SyncFromHeight instead.
  • Header.TrustedHash field is no longer supported. Use Header.Syncer.SyncFromHash instead.
  • Header.TrustedPeriod field was removed and is now a network-level constant.

Replace

Replace for go-datastore was added, which may break users depending directly on the node's go.mod.
Do the following in your project's root to fix:
go mod edit -replace github.com/ipfs/go-datastore=github.com/celestiaorg/go-datastore@48a63ae && go mod tidy. It's gonna be removed in future releases.

What's Changed

Full Changelog: v0.26.1-mocha...v0.26.2-mocha

v0.26.1-mocha

17 Sep 13:45
5782cce

Choose a tag to compare

v0.26.1-mocha Pre-release
Pre-release

⚠️ Note: this release requires a config update. ⚠️
See docs for further information.

This release notably introduces...

  • a unified share exchange protocol (via unified shrex), a pre-requisite for sampling over our custom share exchange
  • header pruning via #4330

Header pruning

In order to use header pruning, please check out the new header configuration parameters in config.toml:

  [Header.Syncer]
    # PruningWindow defines the duration within which headers are retained before being pruned.
    # Default is 337 hours.
    PruningWindow = "337h0m0s"
    # SyncFromHash is the hash of the header from which the syncer should start syncing.
    # Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer.
    #
    # By default, Syncer maintains PruningWindow number of headers. SyncFromHash overrides this default,
    # allowing any user to specify a custom starting point.
    #
    # SyncFromHash has higher priority than SyncFromHeight.
    SyncFromHash = ""
    # SyncFromHeight is the height of the header from which the syncer should start syncing.
    # Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer.
    #
    # By default, Syncer maintains PruningWindow number of headers. SyncFromHeight overrides this default,
    # allowing any user to specify a custom starting point.
    #
    # SyncFromHeight has lower priority than SyncFromHash.
    SyncFromHeight = 0

Please do not copy these values directly into the config -- please use the config-update command. Read the docs here.

Default LNs no longer support historical queries

By default, node maintains a sliding window of headers, bounded by Tail and Head headers. Requests with height below the Tail are rejected (This is, however, temporary, and lazy header fetching will be available with Backward Sync)

To retain the ability to request older queries with LNs, use new configuration fields to set an absolute header that the node will sync from, either the SyncFromHeight or the SyncFromHash field.

LNs only

Pruning for Bridge and Full nodes is disabled. Currently, the p2p protocol for headers cannot distinguish between pruned and non-pruned serving node types. Therefore, to keep stable synchronization of historical headers, we disable pruned servers.

Prolonged Starts

  • If your LN stores a significant portion of the history of headers, you may need to increase the StartTimeout value in the config, as LN prunes on start. If the starting times out, e.g., with the default 20s, the node will attempt to persist the progress, but storage state corruptions may still occur. The complete mainnet header history pruning on moderate hardware takes under 100s, so update your config accordingly.
  • If you move the tail down the chain (e.g., SyncByHeight 150 -> 100), you may need to increase the StartTimeout value in the config, as LN syncs the difference during start. (This is, however, temporary, and asynchronous syncing that doesn't block start will be available with Backward Sync).
    • WARNING: This feature wasn't tested extensively and may break in unknown ways. Use at your own risk!

Config Breaks

  • Daser.SampleFrom field is no longer supported. Use Header.Syncer.SyncFromHeight instead.
  • Header.TrustedHash field is no longer supported. Use Header.Syncer.SyncFromHash instead.
  • Header.TrustedPeriod field was removed and is now a network-level constant.

Replace

Replace for go-datastore was added, which may break users depending directly on the node's go.mod.
Do the following in your project's root to fix:
go mod edit -replace github.com/ipfs/go-datastore=github.com/celestiaorg/go-datastore@48a63ae && go mod tidy. It's gonna be removed in future releases.

What's Changed

New Contributors

Full Changelog: v0.25.3-mocha...v0.26.1-mocha

v0.27.0-arabica

05 Sep 14:06
edc2ac4

Choose a tag to compare

v0.27.0-arabica Pre-release
Pre-release

This release includes changes necessary for celestia-app v6 compatibility. It also reduces the storage window from 30 days to 7.

If bumping directly from v0.25.3-arabica to this release, please see release notes for v0.26.0-arabica that contain important changes + features.

What's Changed

  • params(share/availability)!: Decrease storage window from 30 days to 7 days + 1 hour by @renaynay in #4521
  • chore: bump celestia-app to v6 by @evan-forbes in #4503
  • forward-port: config(nodebuilder/header): bumps go-header, removes trustingPeriod by @renaynay in #4529

Full Changelog: v0.26.0-arabica...v0.27.0-arabica

v0.26.0-arabica

05 Sep 14:02
6b8b4fd

Choose a tag to compare

v0.26.0-arabica Pre-release
Pre-release

⚠️ Note: this release requires a config update. ⚠️
See docs for further information.

This release notably introduces...

  • a unified share exchange protocol (via unified shrex), a pre-requisite for sampling over our custom share exchange
  • header pruning via #4330

Header pruning

In order to use header pruning, please check out the new header configuration parameters in config.toml:

  [Header.Syncer]
    # PruningWindow defines the duration within which headers are retained before being pruned.
    # Default is 337 hours.
    PruningWindow = "337h0m0s"
    # SyncFromHash is the hash of the header from which the syncer should start syncing.
    # Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer.
    #
    # By default, Syncer maintains PruningWindow number of headers. SyncFromHash overrides this default,
    # allowing any user to specify a custom starting point.
    #
    # SyncFromHash has higher priority than SyncFromHeight.
    SyncFromHash = ""
    # SyncFromHeight is the height of the header from which the syncer should start syncing.
    # Zero value to disable. Value updates up and down the chain are gracefully handled by Syncer.
    #
    # By default, Syncer maintains PruningWindow number of headers. SyncFromHeight overrides this default,
    # allowing any user to specify a custom starting point.
    #
    # SyncFromHeight has lower priority than SyncFromHash.
    SyncFromHeight = 0

Please do not copy these values directly into the config -- please use the config-update command. Read the docs here.

Default LNs no longer support historical queries

By default, node maintains a sliding window of headers, bounded by Tail and Head headers. Requests with height below the Tail are rejected (This is, however, temporary, and lazy header fetching will be available with Backward Sync)

To retain the ability to request older queries with LNs, use new configuration fields to set an absolute header that the node will sync from, either the SyncFromHeight or the SyncFromHash field.

LNs only

Pruning for Bridge and Full nodes is disabled. Currently, the p2p protocol for headers cannot distinguish between pruned and non-pruned serving node types. Therefore, to keep stable synchronization of historical headers, we disable pruned servers.

Prolonged Starts

  • If your LN stores a significant portion of the history of headers, you may need to increase the StartTimeout value in the config, as LN prunes on start. If the starting times out, e.g., with the default 20s, the node will attempt to persist the progress, but storage state corruptions may still occur. The complete mainnet header history pruning on moderate hardware takes under 100s, so update your config accordingly.
  • If you move the tail down the chain (e.g., SyncByHeight 150 -> 100), you may need to increase the StartTimeout value in the config, as LN syncs the difference during start. (This is, however, temporary, and asynchronous syncing that doesn't block start will be available with Backward Sync).
    • WARNING: This feature wasn't tested extensively and may break in unknown ways. Use at your own risk!

Config Breaks

  • Daser.SampleFrom field is no longer supported. Use Header.Syncer.SyncFromHeight instead.
  • Header.TrustedHash field is no longer supported. Use Header.Syncer.SyncFromHash instead.
  • Header.TrustedPeriod field was removed and is now a network-level constant.

Replace

Replace for go-datastore was added, which may break users depending directly on the node's go.mod.
Do the following in your project's root to fix:
go mod edit -replace github.com/ipfs/go-datastore=github.com/celestiaorg/go-datastore@48a63ae && go mod tidy. It's gonna be removed in future releases.

What's Changed

New Contributors

Full Changelog: v0.25.3-arabica...v0.26.0-arabica

v0.25.3

01 Sep 12:30
8bee349

Choose a tag to compare

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

Read more

v0.25.3-mocha

01 Sep 09:49
f28297b

Choose a tag to compare

v0.25.3-mocha Pre-release
Pre-release

Fixes a potential memory leak in light node (LN) and allows disabling of sampling process (DASer).

This patch release also requires a config update against the previous patch release. Please see docs for more information.

What's Changed

BREAKING

Other

Full Changelog: v0.25.2-mocha...v0.25.3-mocha