Skip to content

Releases: filecoin-project/curio

Curio v1.28.1

20 May 14:30
16cce66

Choose a tag to compare

Curio 1.28.1
curio1281

✨ Overview

As usual, this is an optional upgrade for those PoREP-only SPs already on 1.28.0, but recommended for SPs participating in FOC.

Field Value
Version v1.28.10
Type Stable
Compare v1.28.0...v1.28.1 (8 commits)
Build Go 1.26+ required to build from source
Network Nv28 (Lotus v1.36.0, go-state-types Nv28 actors)

⭐ Highlights

For PoREP SPs, try our new CuZK GPU optimizer that gets 10x the GPU performance on ZK tasks, for thte past few years of NVidia chips only.

It includes everything for FOC to be ready for General Availability.

🧹 All Changes


📦 Compatibility

Component Required Notes
Lotus v1.36.0 Nv28 release. v1.36.0-rc1 also works for early upgrades.
Yugabyte v2025.1 (Automatic) Unchanged from v1.27.x.
Forest 0.33 (Automatic) Unchanged from v1.27.4.
Boost NA Curio's market path.

⚠️ Upgrade notes

  1. Upgrade Lotus first, then upgrade Curio. The Curio v1.28.1 binary will not work against an older Lotus daemon that doesn't speak Nv28 actor versions. at Curio start time.
  2. No DB migration is required for this release. The schema is unchanged from v1.27.4. The migrator will pick up no new files on first start.
  3. If you are still on v1.27.3 or earlier, read the v1.27.4 release notes first. v1.27.4 included the PDP V0 main-branch landing and the parked_pieces uniqueness migration. Going 1.27.3 → 1.28.0 directly is supported but skipping the v1.27.4 notes is not recommended.
  4. Calibrationnet is currently a network version ahead (NV28 vs NV27). There is no separate calibration-only build.

🙏 Contributors

Thank you to everyone who contributed to this release: @LexLuthr, @magik6k, @rvagg, @ZenGround0, @snadrus, @cuoguojida.

New Contributors

Full Changelog: v1.28.0...v1.28.1

Curio v1.28.1-rc1

07 May 19:57
6d77aec

Choose a tag to compare

Curio v1.28.1-rc1 Pre-release
Pre-release

Curio v1.28.1-rc1

curio_nv28

✨ Overview

v1.28.1 RC 1 is a patch release to address PDP upload bugs on v1.28.0. Additionally it brings in IPNI metrics, CuZK proving backend and some other fixes.

Field Value
Version v1.28.0
Type RC
Compare v1.28.0...v1.28.1-rc1 (11 commits)
Build Go 1.26+ required to build from source
Network Nv28 (Lotus v1.36.0, go-state-types Nv28 actors)

⭐ Highlights

CuZK Proving engine for 10x cheaper C2/PRU
IPNI provider metrics
Resolve PDP upload blocking bug in FixParkPieceTask


📦 Compatibility

Component Required Notes
Lotus v1.36.0 Nv28 release. v1.36.0-rc1 also works for early upgrades.
Yugabyte v2025.1 (Automatic) Unchanged from v1.27.x.
Forest 0.33 (Automatic) Unchanged from v1.27.4.
Boost NA Curio's market path.

🙏 Contributors

Thank you to everyone who contributed to this release: @LexLuthr, @magik6k, @rvagg, @ZenGround0, @snadrus

Curio v1.28.0

05 May 12:34
f2e6a26

Choose a tag to compare

Curio v1.28.0

curio_nv28

✨ Overview

Curio v1.28.0 is the Nv28 network upgrade release. Storage Providers running on Mainnet MUST upgrade to this version (or later) before the Nv28 activation epoch.

Beyond Nv28 support, this release also tightens PDP correctness around rail finalization, ships an SSRF-config layer for outbound HTTP, and brings several smaller fixes that have accumulated since v1.27.4.

Field Value
Version v1.28.0
Type Stable, network-upgrade required
Compare v1.27.4...v1.28.0 (8 commits)
Build Go 1.26+ required to build from source
Network Nv28 (Lotus v1.36.0, go-state-types Nv28 actors)

⭐ Highlights

🌐 Nv28 network upgrade

Lotus and the Filecoin FFI are bumped to the Nv28 dependency set (lotus v1.36.0-rc1, filecoin-ffi v1.36.0). Curio nodes running v1.27.x will not be able to follow consensus past the Nv28 activation epoch, so an upgrade is required for all Mainnet SPs before that point. (#1183)

🛡️ Outbound HTTP SSRF guardrails ([Subsystems.RobustHTTP])

Curio's robusthttp client now exposes a configurable SSRF policy. Operators can set per-deployment allow/deny rules for outbound HTTP destinations rather than relying on hardcoded behavior, which matters when Curio talks to retrieval clients, market peers, or PDP service URLs in untrusted networks. New configuration block documented in default-curio-configuration.md. (#1192)

💸 Sybil-fee enforcement on by default for PDP clients

PDP create and pull flows now enforce client-side sybil-fee payment by default. This closes a path where clients could submit data-set creation/pull requests without having staked the protocol-level sybil fee. Existing operators do not need to change configuration; the enforcement is transparent. (#1181)

🛠️ PDP rail-finalization correctness

Two related fixes around the PDP-pay integration with FilecoinPay rails:

  • Detect rail finalization from getRail revert (#1190). FilecoinPay zeroes the rail struct atomically with the settle that brings settledUpTo to endEpoch, so the post-confirm getRail call reverts. Previously, the EndEpoch == SettledUpTo observation never fired, deletion_allowed was never set, and DeleteDataSetTask never ran. Curio now treats a getRail revert as finalization when pdp_delete_data_set shows after_terminate_service = TRUE and service_termination_epoch <= current.
  • Race-safe parked_pieces upsert (#1195). The existing check-then-execute pattern could race two identical-piece writes and produce duplicate key value violates unique constraint "parked_pieces_active_piece_key". Replaced with a conflict-safe upsert utility.
  • Missing returns after httpServerError in PDP handlers (#1188). Several PDP HTTP handlers continued executing after writing an error response, which could either double-write a body or take an erroneous further action. Returns now match the error-write.

🧹 Other fixes

  • itest-compat (#1182): integration-test harness adjustments for the Postgres-template itests landed in v1.27.4. No runtime impact.
  • Remove old CI files (#1184): cleanup of legacy CircleCI and self-hosted runner configuration.

📦 Compatibility

Component Required Notes
Lotus v1.36.0 Nv28 release. v1.36.0-rc1 also works for early upgrades.
Yugabyte v2025.1 (Automatic) Unchanged from v1.27.x.
Forest 0.33 (Automatic) Unchanged from v1.27.4.
Boost NA Curio's market path.

⚠️ Upgrade notes

  1. Upgrade Lotus first, then upgrade Curio. The Curio v1.28.0 binary will not work against an older Lotus daemon that doesn't speak Nv28 actor versions.
  2. No DB migration is required for this release. The schema is unchanged from v1.27.4. The migrator will pick up no new files on first start.
  3. If you are still on v1.27.3 or earlier, read the v1.27.4 release notes first. v1.27.4 included the PDP V0 main-branch landing and the parked_pieces uniqueness migration. Going 1.27.3 → 1.28.0 directly is supported but skipping the v1.27.4 notes is not recommended.
  4. Calibrationnet may be a network version ahead. Curio v1.28.0 is the calibration-and-mainnet release for Nv28; there is no separate calibration-only build.

🙏 Contributors

Thank you to everyone who contributed to this release: @LexLuthr, @magik6k, @rvagg, @ZenGround0, @snadrus, @Phi-rjan, @Reiers.

Curio v1.27.4

28 Apr 11:59
23d78ff

Choose a tag to compare

Curio v1.27.4

03ABD6C3-1CDB-42DA-848C-90D9853BAFAB

✨ Overview

Curio v1.27.4 brings the PDP proving stack out of the parallel pdpv0 branch and into the main release train. From this release on, every Curio node ships with PDP support by default, with a long tail of stabilisation fixes for retrieval, partial content, and the proof pipeline. Storage Providers running PDP no longer need a separate build.

Beyond PDP, this release ships meaningful Market 2.0 (mk20) hardening.

Building from source now requires Go 1.26 or newer.

Storage Providers are strongly encouraged to upgrade, particularly those running HTTPS retrieval, those on the pdpv0 branch (now folded into main), or anyone who hit the parked_pieces uniqueness or config-layer ordering issues from v1.27.3.

Field Value
Version v1.27.4
Type Stable
Compare v1.27.3...v1.27.4 (33 commits)
Build Go 1.26+ required to build from source
Schema parked_pieces uniqueness migration applied automatically

⭐ Highlights

🛰️ PDP V0 lands in main

The PDP proving stack moves out of the parallel pdpv0 branch and into the primary release train. From this release on, every Curio node ships with PDP support. No separate build, no separate config layer.

#1106 Merge pdpv0 into main
#1127 Post-migration fixes
#1129 Partial-content serving for pieces
#1150 frisbii update + fast-path Has() for head requests
#1112 Urgent: tx in taskFunc callbacks unblocks pdpv0 upgrades

🛒 Market 2.0 (mk20) hardening

Backpressure and client filter on inbound deals, DDO start_duration clamps, contract-as-client authentication path, and a follow-up on the mk12 indexing regression that v1.27.3 surfaced.

#1087 Mk20 updates
#1130 Fix mk12 indexing
#1169 marketAddress client toggle and improvements

📡 IPNI ad chain race condition fixed

Concurrent IPNI ad publishers could read the same ipni_head, build different ads against the same predecessor, and last-writer-wins the head update. The visible result was a disconnected provider head chain. Fixed with an optimistic compare-and-swap on ipni_head so an ad is only inserted when the head still matches the predecessor it was built and signed against.

#1149 Fix IPNI Ad creation race condition

🎯 Unseal-by-piece

Accepts a list of PieceCIDs and resolves the minimal covering set of sectors to unseal. Hit-rate-sorted best-effort (true bin-packing is NP-hard), biased toward sectors already marked to keep an unsealed copy. Logs which sectors were already selected and which are now selected, plus the relationships.

#1100 unseal-by-piece


🛠️ Upgrade prep for Storage Providers

Read this before upgrading.

Concern What to know
HTTPS retrieval Upgrade. The goroutine + fd leak fix in #1141 is real.
parked_pieces Migration tightens an existing uniqueness constraint (#1163). Duplicate active rows from the previous behavior are logged rather than silently consolidated. Worth a glance before upgrade.
ParkPieceMinFreeStoragePercent Default lowered from 20 to 5 (#1142). Storage Providers who relied on the previous default for headroom should set the value explicitly.
PDP V0 branch users pdpv0 is now merged into main. Existing pdpv0 builds will pick up main for their next build.
Building from source Go 1.26+ is now required (#1155). The Debian apt packages still ship a self-contained binary, no Go install needed.
FFI Updated (#1177). Source builds will pull the new version automatically; no operator action needed.

🐛 Bug fixes

PR Title
#1141 Goroutine and fd leak in Reader/ReaderPiece/cachedreader
#1149 IPNI ad creation race condition
#1147 Snap edge case: CommR == CommK on all-zero data
#1163 parked_pieces entries truly unique
#1130 mk12 indexing
#1127 PDPv0 issues after migration
#1129 Partial content serving for pieces
#1112 Urgent: use tx in taskFunc callbacks
#1113 IPNI: urlhelper.FromURLWithPort for correct multiaddr generation
#1116 Include CommR in proofshare client request idempotency key
#1119 Cap CanAccept slice to len(ids) (out-of-bounds panic)
#1117 Preserve config layer ordering during dedup
#1161 0315sql multi-query rewrite (hours of delay on large SPs)
#1172 Filter SQL bug
#1169 marketAddress client toggle and improvements

🔧 Improvements

PR What it adds
#1138 Respect PostedTime in scheduling
#1100 Unseal-by-piece
#1098 Singleton task run-now in WebUI
#1164 TaskID clickable in Recent Failures
#1080 Snark consumer integration and docs
#1167 Replace local savecache with upstream commp-hash-hash
#1142 ParkPieceMinFreeStoragePercent default lowered to 5

📦 Dependencies

PR Update
#1177 FFI
#1170 ipld-prime
#1155 Go 1.26
#1104 google.golang.org/grpc 1.77.0 → 1.79.3
#1107 github.com/buger/jsonparser 1.1.1 → 1.1.2
#1056 Bulk dependency updates for security advisories
🏗️ Build & CI (click to expand)
PR Change
#1159 Switch to Postgres template itests
#1162 CI speed test, runner type retuned (AMD c5a 2xlarge)
#1160 AMI test workflow
#1166 PDPv0: switch to AWS CI (also bumped Go 1.25)
#1140 End-to-end deal tests
#1115 Better DB-in-transaction test
#1144 Cached reader tests
#1168 Downgrade test friendly with template DBs
#1143 Coverage report on forks
#1171 Fix apt cache for CI tests
#1158 Trap command + topdir extraction
#1135 Prevent "add to FOC project" workflow failure for existing items
Reverts
PR Note
#1123 Revert "itests should try pg / scylla" (#1094). The replacement landed as Postgres template itests in #1159.

🙏 Contributors

@LexLuthr · @magik6k · @snadrus · @beck-8 · @rvagg · @TippyFlitsUK · @galargh · @rjan90 · @lordshashank · @BigLep · @Reiers

Thanks to everyone who built, reviewed, and tested this release.


📜 **F...

Read more

v1.27.3

17 Mar 16:00
df9df10

Choose a tag to compare

Curio v1.27.3

v1 27 3

✨ Overview

Curio v1.27.3 is a stability and correctness release focused on fixing critical issues discovered since v1.27.2. This release resolves bugs in sector extension, snap deal pipelines, message sending, batch timing, retrieval filtering, and piece CID interoperability - while also introducing network-wide Curio statistics and improved build compatibility for older GPU architectures.

Operators are strongly encouraged to upgrade, particularly those running snap deal pipelines or using the sector extension manager.

⭐ Highlights

📊 Curio Network Statistics

A new curio stats feature provides network-wide visibility into the Curio ecosystem, showing aggregate metrics such as total node count, quality-adjusted power, raw byte power, and percentage of network power managed by Curio nodes. (#1079)

🛡️ Retrieval Denylist Filtering

Curio now supports denylist filtering for HTTP retrieval endpoints — a feature previously only available in Boost. Operators can block retrieval of specific pieces, and PieceCIDv2 is now properly honored in deny lists. (#1076, #1101)

🔧 Snap Pipeline Fix

A critical bug in the snap deal pipeline's DELETE trigger has been fixed. Previously, removing a failed snap pipeline entry would not revert sectors_meta.is_cc back to true, making those CC sectors invisible to snap deal ingestion and breaking the expiration manager's view. (#1097)

⏱️ Batch Timeout Timezone Fix

Precommit and commit batch triggers had a timezone mismatch where UTC timestamps stored into TIMESTAMPTZ columns were shifted by the session timezone, causing batches to fire late. Batch evaluation has been moved from SQL into tested Go functions with a new configurable MaxBatch option. (#1044)

🐛 Bug Fixes

  • fix: expmgr: Sectors without short claims don't have short claims — The expiration manager couldn't extend sectors with valid claims when DropClaims wasn't set. (#1049)

  • fix: snap pipeline DELETE trigger not reverting sectors_meta.is_ccNEW is NULL in DELETE triggers; the WHERE clause now correctly uses OLD, restoring CC visibility after failed snap removals. (#1097)

  • fix: Clamp premium in message sending — Prevents invalid gas premium values from causing message send failures. (#1090)

  • fix: gc task spam with no storage — Clusters with no storage would run StorageEndpointGC in an infinite failing loop. (#1086)

  • fix: v1 v2 CID interop regressions — Fixed a SQL query regression where a removed $2 placeholder broke piece deal lookups with a "expected 1 arguments, got 2" error. (#1085)

  • fix: missing DDO column — Adds a missing column required for DDO deal operations. (#1084)

  • fix: raw size only if unseal exists — Prevents raw-size correction from running on sectors without unsealed data. (#1047)

  • fix: FixRawSize SQL column name, join, and filetype bugs — Multiple corrections to the FixRawSize task's SQL queries and type handling. (#1037, #1035)

  • fix: batch timeout timezone bug — Fixes the timezone mismatch in precommit/commit batch triggers and moves evaluation into tested Go functions. (#1044)

🔧 Improvements

  • feat: Curio stats — Network-wide aggregate statistics for the Curio ecosystem. (#1079)

  • feat: denylist filtering for HTTP retrieval endpoints — Retrieval filtering ported from Boost, including PieceCIDv2 support. (#1076, #1101)

  • allow piece CID v1 and v2 interoperability — Handles both CIDv1 and CIDv2 piece CIDs across the stack. (#1048)

  • refactor(proof): extract cached proof pipeline behind testable interfaces — Improves testability of the proof pipeline. (#1068)

  • chore(deps): replace x/crypto with filecoin-project/go-keccak — Uses a maintained fork with ASM-optimized keccak256 after upstream dropped assembly implementations. (#1060)

  • chore(deps): bump go-ethereum 1.16.8 → 1.17.0 (#1036)

  • update PDP contract bindings (#1013)

🏗️ Build & CI

  • fix(supraseal): add Turing (sm_75) back to CUDA architectures — Restores CUDA support for Quadro RTX 6000 and other Turing-generation GPUs. (#1038)

  • fix(build): accept GCC 12 for CUDA 12 compatibility (#1019)

  • refactor Makefile — Cleaner build targets and improved build flow. (#1014)

📚 Documentation

  • docs(administration): add node maintenance & cordoning guide (#1030)

  • docs(supraseal): fix typos in batch sealing page (#1021)

What's Changed

  • honor pieceCIDv2 in deny list by @LexLuthr in #1101
  • Curio stats by @LexLuthr in #1079
  • fix: expmgr: Sectors without short claims don't have short claims by @magik6k in #1049
  • fix: snap pipeline DELETE trigger not reverting sectors_meta.is_cc by @magik6k in #1097
  • feat: add denylist filtering for HTTP retrieval endpoints by @magik6k in #1076
  • fix missing ddo column by @LexLuthr in #1084
  • fix: Clamp premium in message sending by @magik6k in #1090
  • fix gc task spam with no storage by @magik6k in #1086
  • fix: v1 v2 cid interop regressions by @magik6k in #1085
  • ci: Use PAT in label-for-foc-wg by @rvagg in #1082
  • refactor(proof): extract cached proof pipeline behind testable interfaces by @rvagg in #1068
  • allow piece cid v1 and v2 interoperability by @LexLuthr in #1048
  • better uniq by @snadrus in #1072
  • update pdp contract bindings by @LexLuthr in #1013
  • chore(deps): replace x/crypto with filecoin-project/go-keccak by @rvagg in #1060
  • fix: batch timeout timezone bug and move evaluation to testable Go by @snadrus in #1044
  • fix raw size only if unseal exists by @LexLuthr in #1047
  • chore(deps): bump github.com/ethereum/go-ethereum from 1.16.8 to 1.17.0 by @dependabot in #1036
  • fix: FixRawSize SQL column name, join, and filetype bugs by @Reiers in #1037
  • fix(supraseal): add Turing (sm_75) back to CUDA architectures by @Reiers in #1038
  • fix: FixRawSize CanAccept SQL array cast typo by @Reiers in #1035
  • docs(administration): add node maintenance & cordoning guide by @Reiers in #1030
  • speed up DB itests by @snadrus in #1022
  • fix: small correctness and quality improvements by @rvagg in #1020
  • docs(supraseal): fix typos in batch sealing page by @Reiers in #1021
  • fix(build): accept GCC 12 for CUDA 12 compatibility by @Reiers in #1019
  • refactor Makefile by @snadrus in #1014

Full Changelog: v1.27.2...v1.27.3

Upgrade

git checkout v1.27.3
make clean build

If coming from v1.27.3-rc1/rc2/rc3, this is a straightforward rebuild — no additional database migrations or config changes required beyond what was already applied.

If upgrading from v1.27.2, standard database migrations will apply automatically on startup.

v1.27.3-rc3

09 Mar 13:14
d0afa3c

Choose a tag to compare

v1.27.3-rc3 Pre-release
Pre-release

Curio v1.27.3-rc3

v1 27 3-rc3_banner

✨ Overview

Curio v1.27.3-rc3 continues the path to a stable v1.27.3 release with bug fixes, dependency updates, and quality-of-life improvements. The headline fix addresses a timezone-related batch timeout bug that caused precommit and commit batches to fire late on non-UTC systems. Batch evaluation has been moved from opaque SQL into tested Go functions, with a new configurable MaxBatch setting for immediate batch firing when full.

Piece CID v1/v2 interoperability improves compatibility across client implementations, and a keccak dependency swap brings back ASM-optimized performance after upstream dropped it.

⭐ Highlights

⏱️ Batch Timeout Timezone Fix & Testable Evaluation

The precommit and commit batching triggers had a timezone mismatch where CURRENT_TIMESTAMP AT TIME ZONE 'UTC' stored into TIMESTAMPTZ columns was silently shifted by the session timezone. This caused batches to take timeout + abs(tz_offset) wall-clock time to fire instead of just timeout. All three SQL trigger functions now use NOW() directly, and the batch firing evaluation has been moved from PL/pgSQL into tested Go functions with comprehensive test coverage. A new MaxBatch config option fires batches immediately when they reach capacity.

🐛 Bug Fixes

  • fix: raw size only if unseal exists - prevents raw-size correction from running on sectors without unsealed data, avoiding unnecessary errors on storage paths (#1047)

  • fix: batch timeout timezone bug and move evaluation to testable Go - fixes timezone mismatch in precommit/commit batch triggers and moves evaluation into tested Go functions with configurable MaxBatch (#1044)

🔧 Improvements

  • allow piece CID v1 and v2 interoperability - handles both CIDv1 and CIDv2 piece CIDs, improving compatibility across different client implementations (#1048)

  • chore(deps): replace x/crypto with filecoin-project/go-keccak for optimised keccak - uses a maintained fork with ASM-optimized keccak256 after upstream x/crypto dropped assembly implementations in v0.44 (#1060)

  • better uniq - removes unnecessary allocations in the uniq utility for most common use cases (#1072)

What's Changed

  • fix raw size only if unseal exists by @LexLuthr in #1047
  • fix: batch timeout timezone bug and move evaluation to testable Go by @snadrus in #1044
  • chore(deps): replace x/crypto with filecoin-project/go-keccak for optimised keccak by @rvagg in #1060
  • update pdp contract bindings by @LexLuthr in #1013
  • better uniq by @snadrus in #1072
  • allow piece cid v1 and v2 interoperability by @LexLuthr in #1048
  • refactor(proof): extract cached proof pipeline behind testable interfaces (main) by @rvagg in #1068

Upgrade

git checkout v1.27.3-rc3
make clean build

If coming from rc1 or rc2, this is a straightforward rebuild - no database migrations or config changes required.

Full Changelog: v1.27.3-rc2...v1.27.3-rc3

v1.27.3-rc2

20 Feb 19:48
17135a5

Choose a tag to compare

v1.27.3-rc2 Pre-release
Pre-release
curio_v1-27-3-rc2_banner

Curio v1.27.3-rc2

This is release candidate 2 for v1.27.3, addressing issues reported by the community after rc1.
Thank you to everyone who tested rc1 and provided feedback - your reports directly drove these fixes. 🙏

🔧 Fixes since rc1

SQL / Pipeline Fixes

  • fix: FixRawSize CanAccept SQL array cast typo — fixed a SQL type error that could cause worker startup failures on storage paths with raw-size data (#1035)
  • fix: FixRawSize SQL column name, join, and filetype bugs — full audit of the FixRawSize migration path, correcting column references, JOIN logic, and filetype handling (#1037)

GPU / Build Fixes

  • fix(supraseal): add Turing (sm_75) back to CUDA architectures — restores support for Turing GPUs (RTX 2060/2070/2080, Tesla T4) in supraseal builds. Without this, Turing GPUs would segfault during supraseal operations (#1038)

Documentation

  • docs(administration): add node maintenance & cordoning guide — new operational guide for node maintenance workflows and cordon/drain procedures (#1030)

Dependencies

  • chore(deps): bump github.com/ethereum/go-ethereum from 1.16.8 to 1.17.0 (#1036)

⚠️ CUDA Compatibility Note

If you are running Turing GPUs (RTX 2080 Ti or older, sm_75), stay on CUDA 12.x. CUDA 13 does not support Turing architecture. The sm_75 fix in this release only helps if your CUDA toolkit version still supports your GPU.

GPU Architecture Examples Minimum CUDA Maximum CUDA
Turing (sm_75) RTX 2060/2070/2080, T4 12.0 12.x only
Ampere (sm_80/86) RTX 3090, A100 12.0 13.x
Ada Lovelace (sm_89) RTX 4090, L40 12.0 13.x
Hopper (sm_90) H100 12.0 13.x

Upgrade

git checkout v1.27.3-rc2
make clean build

If coming from rc1, this is a straightforward rebuild — no database migrations or config changes required.

Full Changelog: v1.27.3-rc1...v1.27.3-rc2

v1.27.3-rc1

19 Feb 12:13
a3473a4

Choose a tag to compare

v1.27.3-rc1 Pre-release
Pre-release

Curio v1.27.3-rc1

curio_banner_27_3_rc1

✨ Overview

Curio v1.27.3-rc1 is a substantial update focused on performance, stability, and operational polish for our Curio Storage Providers. This release brings major improvements to the HarmonyTask scheduler - including batch task acceptance, smarter GPU distribution, and critical resource accounting fixes - making large-scale sealing operations significantly more efficient and reliable.

Operators benefit from a heavily upgraded WebUI with a complete sector page overhaul, new storage path management, and enhanced chain connectivity monitoring. The PDP subsystem gains a new sync task for on-chain state tracking, and Fast Snap encoding is now mainlined for faster SnapDeal processing. Across the board, this release hardens error handling, plugs goroutine and resource leaks, and delivers dozens of targeted bug fixes discovered through improved testing and real-world operator feedback.

⚠️ Build Dependency Changes (Linux)

Curio now compiles supraseal (for SnapDeals fast TreeR and batch sealing) by default on Linux.
This adds new build requirements:

Component Requirement
CUDA Toolkit 12.x or later (nvcc must be in PATH)
GCC 12 or 13 — must match your CUDA version
Python venv tooling + build tools (autoconf, automake, libtool, nasm, xxd)

Quick Dependency Install (Ubuntu/Debian)

sudo apt install -y mesa-opencl-icd ocl-icd-opencl-dev git jq pkg-config curl clang build-essential hwloc libhwloc-dev wget python3 python3-dev python3-pip python3-venv autoconf automake libtool libgmp-dev libconfig++-dev nasm xxd && sudo apt upgrade -y

Installing GCC 12 and 13 (Ubuntu/Debian)

Install versions:

For CUDA 12.5 and below


sudo apt install -y gcc-12 g++-12

or

For CUDA 12.6/13 and above


sudo apt install -y gcc-13 g++-13

Optional: Configure update-alternatives:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 120
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 130

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 120
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 130

Select version:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

CUDA / GCC Compatibility

  • CUDA 12.0–12.5 → use gcc-12 / g++-12 only
  • CUDA 12.6+ → either GCC 12 or 13 works
  • CUDA 13+ → use gcc-13 / g++-13

Non-GPU / Non-CUDA Servers

If you don't have CUDA or want to skip supraseal:

# Option 1: Skip supraseal entirely
make build DISABLE_SUPRASEAL=1

# Option 2: Use OpenCL instead of CUDA (AMD GPUs or no NVIDIA GPU)
make build FFI_USE_OPENCL=1

The build will fail if nvcc is not found and no override flag is set.
This prevents accidental builds without proper GPU support.

⭐ Highlights

🚀 Batch Task Acceptance & Scheduler Improvements

HarmonyTask now accepts multiple tasks at once, dramatically improving throughput on machines with available capacity. Combined with reduced storage scheduling backoff times, smarter GPU round-robin distribution, and fixes to the shouldCommit flag, the scheduler is now faster, more responsive, and better at utilizing available hardware.

🖥️ WebUI Sector Page Overhaul & Storage Paths

The Sectors interface has been completely redesigned with richer deadline tooltips (including timing and PoSt submission warnings), proper Storage Path pages for managing and inspecting storage, and new RPC endpoints for storage path management. Chain Connectivity now includes Lotus network summary signals for better at-a-glance cluster health.

⚡ Fast Snap Encoding (Mainlined)

Fast Snap logic has been mainlined into Curio, enabling faster SnapDeal processing with optimized encoding paths. This is a significant performance win for operators doing snap upgrades at scale.

🛡️ Critical Resource Accounting Fixes

Several high-impact bugs were fixed in the task engine: a releaseStorage() function that never actually released anything (causing fake resource exhaustion), a goroutine leak in CommP calculation, a panic in the GPU device provisioner under overload, and corrected PoRep RAM allocation (50GB → 96GB) to prevent OOM crashes.

⚙️ Configuration & Scheduling

  • Batch task acceptance in HarmonyTask — machines now claim as many tasks as they have capacity for in a single call (#854)
  • Use correct shouldCommit value so idle machines pick up work immediately instead of waiting 3 seconds (#886)
  • Reduced storage scheduler backoff from 1 hour to a more reasonable interval, improving throughput on storage-bound nodes (#966)
  • Better GPU overprovisioning distribution — work is assigned to the least-loaded GPU instead of filling cards sequentially (#936)
  • Fixed dynamic config reads from unreliable database connections (#894)
  • Fixed precommit batch timeout due to inconsistent timezone handling in SQL (#941)
  • Stop requiring maxFee in wallets for precommit batching (#941)

🧱 Sealing, Proofing & Pipeline

  • Mainlined Fast Snap encoding for faster SnapDeal processing (#804)
  • Corrected PoRep RAM requirement from 50GB to 96GB to prevent OOM under real workloads (#932)
  • Fixed goroutine leak in CommP calculation that could accumulate over time (#906)
  • Fixed panic in go-fil-commp-hashhash (#928)
  • GPU device provisioner now waits instead of panicking under rare over-request scenarios (#972)
  • FFISelect panic fix when round-robin runs out of slots (#962)
  • Removed optimal (no FVM) FFI build due to GPU detection issues (#876)
  • Fixed Linux build breakage from Fast Snap PR (#882)
  • Service file now sets LD_LIBRARY_PATH correctly, and nvcc missing properly errors when GPU proving is needed (#935)
  • WindowPoSt exits cleanly for empty deadlines instead of erroring (#982)
  • Fix sector extension manager checks: can't extend faulted sectors, max lifetime ≠ max extension (#969)

🗂️ WebUI Enhancements

  • Complete sector page overhaul with richer deadline tooltips, PoSt submission warnings, and new Storage Path pages (#893)
  • Added storage path RPC endpoints: StoragePathList() and StoragePathDetail() (#646)
  • Extended Chain Connectivity panel with Lotus network summary signals (#977)
  • Fixed /info endpoint to return actual build version instead of hardcoded "Curio/0.0.0" (#916)
  • Fixed Susbystems typo in auto-generated web config layer that silently broke WebGui enablement (#991)

🔗 PDP & Market

  • New PDP sync task for on-chain state tracking and automatic cleanup (#660)
  • Fixed PDP pool handling — items correctly returned to the pool on error paths (#827)
  • Boost migration fix utility for raw size data (#832, #856)
  • Fixed Market miner reading bug introduced by dynamic config (#861)

🗃️ Database & Core Systems

  • HarmonyDB is now an official CurioStorage package (#853)
  • HarmonyTaskList fixes including critical releaseStorage() bug that never released resources (#891)
  • Fixed HarmonyDB error return in backoff retry logic (#890)
  • Fixed BTFP (transaction blocker) bug (#913)
  • Fixed process_piece_deal duplicate SQL functions causing indexing errors (#925)
  • Error sanitization — internal details no longer leaked to clients, passwords removed from connection strings (#919)
  • Improved canAccept() performance (#855)
  • Shutdown poller design improvements and task name cleanup (#963)
  • Storage redeclare no longer fetches full sector list for every path — critical fix for large clusters with millions of files (#896)
  • Durability fixes: data race in OnChange notifier, nil-error panic, rollback error handling (#917)

🔧 Alerting Fixes

  • Fixed alert manager iterating wrong map for machine failure alerts (#988)
  • Fixed inverted storage space condition in permanentStorageCheck — sectors were being misreported as placed/unplaced (#989)
  • Wallet balance alert now uses the configured MinimumWalletBalance instead of hardcoded "below 5 FIL" (#990)

🔬 Testing & CI

  • Added comprehensive CI test coverage with all test suites checked (#960)
  • Basic code coverage tool integrated into CI — visible in PR checks (#862)
  • Added missed piecereader test for comprehensive coverage of existing logic (#859)
  • Fixed flaky TestWaitList goroutine scheduling race (#999)
  • CI updated to Ubuntu 24.04 with improved dependency management (#839, #836)
  • Faster make gen — from ~5 minutes to under 30 seconds (#938)

📚 Documentation

  • Troubleshooting & operator playbooks based on real-world issues (#959)
  • Refreshed Curio GUI screenshots (#958)
  • YugabyteDB backup/restore documentation and other fixes (#957)
  • Added missing images to docs (#838)
  • Prometheus monitoring documentation improvements (#926)
  • Auto-labeling workflow for PDPv0 issues and PRs (#950)

🐛 Bug Fixes

🧱 Sealing & Resource Management

  • Fixed releaseStorage() never releasing storage, causing fake resource exhaustion (#891)
  • Fixed goroutine leak in CommP calculation (#906)
  • Fixed panic in go-fil-commp-hashhash (#928)
  • Fixed GPU device provisioner panic under over-request (#972)
  • Fixed FFISelect panic when round-robin exhausts slots (#962)
  • Corrected PoRep RAM allocation: 50GB → 96GB (#932)
  • Fixed WindowPoSt error on empty deadlines (#982)
  • Fixed sector extension checks for faults and max lifetime (#969)

🖥️ WebUI & API

  • Fixed /info endpoint returning hardcoded version...
Read more

v1.27.2

11 Dec 12:41
9cf68da

Choose a tag to compare

Curio v1.27.2

curio_v1 27 2

✨ Overview

The Curio v1.27.2 release delivers a significant leap forward for Filecoin Storage Providers, combining major new capabilities with broad stability and performance improvements. This update introduces full support for Filecoin’s Market 2.0 architecture, enabling smarter and more flexible deal-making through contract-driven logic. Operators gain powerful new runtime control through dynamic configuration, letting them adjust key system behaviors without restarting the node.

This release also strengthens Curio’s automation capabilities with a brand-new f05 Balance Manager, ensuring deal collateral is always topped up and reducing day-to-day operational friction. The WebUI sees a substantial upgrade with the introduction of a dedicated Content page, refined guided setup, and a completely updated Sectors interface that now includes a Sector Extension Manager for long-term lifecycle control.

Across retrievals, indexing, sealing, proof generation, networking, and migrations, Curio v1.27.2 delivers faster, more compatible, and more resilient behavior. Retrieval now works seamlessly with Kubo/IPFS, IPNI advertisements are cached and tracked with improved metrics, the Snark Market client has been unblocked and made more reliable, and numerous edge-case bugs have been addressed across the stack.

⭐ Highlights

🚀 Full Market 2.0 Integration

Curio now includes first-class support for Filecoin’s Market 2.0 deal architecture.
This next-generation deal flow brings smarter logic, contract-driven pricing, offline and aggregated deal support, and a unified Market dashboard inside Curio. By integrating Market 2.0 directly into the node, deal intake becomes simpler, more flexible, and future-proof — no separate Boost deployment required.

⚙️ Dynamic Configuration (Live, No-Restart Updates)

Operators can now adjust many Curio settings in real time without restarting the node.
From sealing behaviors to scheduler preferences and P1 routing, this system offers unprecedented control and flexibility. Fine-tune operations under live load, experiment safely, and make quick corrections instantly.

💰 Automated f05 Balance Manager

To prevent missed deals and eliminate constant collateral monitoring, Curio introduces an automated Market (f05) balance manager.
It tracks your escrow balance and automatically tops it up when needed, ensuring continuous deal availability and dramatically reducing operational overhead.

🗂️ New WebUI Content Page

A brand-new Content section in the WebUI gives operators a powerful view into stored pieces, deals, and metadata — including full support for PieceCIDv2.
This brings transparency and simplicity to managing active and historical content across your storage system.

🧱 Sector Extension Manager + Upgraded Sectors UI

Long-term sector lifecycle management gets a major improvement.
Curio now provides:

  • A Sector Extension Manager for extending sector lifetimes
  • Clear visibility into expiring sectors
  • A modernized Sectors interface with more actionable information

Renewable deals and capacity planning are now easier and more intuitive than ever.

You can read more about Curio in our documentation.

🌐 Market & Deal Flow

  • Full Market 2.0 integration with Curio’s internal deal engine, enabling smarter, contract-driven storage deal processing.
  • Correct handling of CARv2 data sources using SourceOffset, ensuring reliable retrieval of modern CAR formats.
  • Minor Mk20 refinements and stability improvements for cleaner deal ingestion and client interactions.

⚙️ Configuration & Scheduling

  • Introduction of dynamic configuration, allowing key settings to be updated live without restarting the node.
  • Dynamic config is now applied to PreCommit1 (P1) sealing tasks, enabling real-time control over sealing distribution and worker decisions.
  • The chain scheduler now updates message execution results first, preventing rare inconsistencies during block evaluation.
  • Fixed begin/end timing calculations to ensure accurate scheduling windows across tasks.
  • Improved task lifecycle reliability through Harmony task delete retry logic.

💰 Balance & Resource Automation

  • Added the new f05 Balance Manager, which automatically monitors and replenishes Market escrow funds.
  • Configurable thresholds and automated wallet funding help prevent stalled deals due to low collateral.

🧱 Proofing, Sealing & Snark Market

  • Added a vanilla WindowPoSt test command to validate local proof generation and verify proving hardware.
  • Snark Market now provides a smoother operator experience:
    • Client setup process unbricked and fully functional
    • Automatic retries when creating asks under rate limits
    • WebUI support for deleting Snark Market clients safely

🗂️ WebUI Enhancements

  • Introduced the new Content page for browsing pieces, deals, and CID metadata.
  • Completely refreshed Sectors UI, including built-in lifetime extension capabilities via the Sector Extension Manager.
  • Improved guided setup experience:
    • Miner creation uses a 1.5× FIL safety buffer to prevent underfunding failures
    • Clearer configuration path for enabling PDP
    • Safer storage-path initialization (no accidental PDP key removal)

🔗 Networking, IPFS & IPNI

  • Updated to the latest libp2p release for improved peer discovery and stability.
  • Retrievals via Kubo/IPFS now work reliably, including path-based fetches and correct multiaddr advertisement.
  • Added IPNI caching, metrics, and cleaned-up logs to enhance retrieval visibility and performance.
  • Improved handling of IPFS resource limits for more consistent data movement under heavy load.

🗃️ Database & Core Systems

  • More reliable herd database upgrades, avoiding migration stalls or contention.
  • Curio Toolkit now supports schema downgrades, enabling safe rollback paths between versions.
  • SQL NULL → JSON 0 serialization fix, improving UI clarity when displaying missing numeric fields.
  • Added migration safety checks that prevent duplicate-column errors.
  • Removed the local commcid library in favor of using the upstream implementation.

📚 Documentation

  • Updated PDP documentation with clearer steps and improved flow.
  • Added full documentation for dynamic configuration capabilities.
  • Added CONTRIBUTING.md to support community contributors.

🐛 Bug Fixes

🔧 Retrieval & IPFS

  • Fixed full compatibility with Kubo/IPFS retrievals, including path-based requests and proper announce-port handling.
  • Corrected IPNI advertisement task creation and improved the canAccept validation logic to prevent invalid or duplicate announcements.
  • Resolved CARv2 reading issues by properly applying SourceOffset during piece extraction.

🧱 Sealing & Proofing

  • Corrected FR32 padding/unpadding logic to ensure accurate alignment of piece data.
  • Fixed several internal timing and state-transition inconsistencies affecting sealing and scheduled workflows.

🖥️ WebUI & User Experience

  • Resolved a WebUI sector page panic that could occur under certain sector states.
  • Fixed a crash when removing pipelines that contained a null URL.
  • Improved PieceCIDv2 handling to ensure correct display and metadata resolution.
  • Updated JSON serialization: SQL NULL values are now represented as 0, preventing confusing “null” values on the dashboard.

🧩 Indexing & Database Migrations

  • Fixed indexing migration errors when moving between older and newer schemas (v1 → v2).
  • Ensured migrations are idempotent, preventing repeated “column already exists” failures during startup.

🔄 Internal Workflow Stability

  • Fixed edge cases in scheduler begin/end calculations that could cause incorrect task timing.
  • Improved task cleanup via Harmony delete retry, preventing rare cases of stuck or orphaned tasks.
  • Other minor fixes and stability improvements were made across the codebase to polish this release.

What's Changed

Read more

PDP v1.0.0

31 Oct 08:47
ae90b9b

Choose a tag to compare

PDP v1.0.0 Pre-release
Pre-release

🧪 PDP-Only Feature Release

This pre-release is intended exclusively for PDP-enabled Storage Providers.
It includes experimental features and updates used internally by the Curio PDP system.

⚠️ Important Notes

Not part of the main Curio release flow.

Not compatible with standard Curio releases or production clusters.

Should be used only by PDP-only SPs for testing or early adoption of PDP functionality.