Releases: filecoin-project/curio
Curio v1.28.1
✨ 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
- Add pdp spec doc from pdpv0 by @rvagg in #1189
- GUI shows per-machine build Git commit hash by @snadrus in #1194
- ping-health by @snadrus in #1187
- 10x cheaper C2/PRU: CuZK Proving engine by @magik6k in #1043
- Fix: IPNI cleanup avoids piecerefs belonging to in flight adds by @ZenGround0 in #1198
- fix: exit precommit early if no valid sectors found by @LexLuthr in #1202
- fix(pdp): recover from INVALID parked_pieces_active_piece_key by @rvagg in #1200
- ipni provider metrics by @LexLuthr in #1196
- fix(pdp): gate cache on padded size to align SaveCache and Prove by @rvagg in #1207
- fix: CI tests by @LexLuthr in #1208
- fix: synthetic proof finalize by @LexLuthr in #1206
- Telemetry logging for state changing pdp handlers by @ZenGround0 in #1203
- docs(pdp): comprehensive update of API documentation (#1124) by @ZenGround0 in #1210
- IPNI sync alert by @LexLuthr in #1201
- UI: update task status count table by @LexLuthr in #1185
- fix: commp error log by @LexLuthr in #1211
- fix(workflow): broaden PDP label detection for fs-wg by @BigLep in #1209
- docs(market): expand DDO deal cookbook with explicit URL-resolution flow by @Reiers in #1215
- v1.28.1 by @ZenGround0 in #1217
- detailed ipni piece status by @LexLuthr in #1216
- fix(pdp): use correct table alias for advertisement_created_at by @beck-8 in #1219
- fix(ipni): preserve lastPublishTime when refreshing provider info by @beck-8 in #1221
- chore: update to Lotus v1.36.0 by @rjan90 in #1223
- feat: add is_live/is_faulty columns to sectors_meta for efficient expmgr filtering by @magik6k in #1157
- fix(build): auto-downgrade GCC for CUDA when system default is 16+ by @magik6k in #1225
- add Zen to codeowners by @LexLuthr in #1226
- disable batching for rail settlement by @LexLuthr in #1214
- ui-data-race by @snadrus in #1228
- fix: only update provider details for new provider in upsert by @LexLuthr in #1222
- chore: fix some minor issues in comments by @cuoguojida in #1230
- fix: alert bugs by @LexLuthr in #1224
- refactor metrics and metrics docs generator by @LexLuthr in #1212
- contribution consistency for ux, automation by @snadrus in #1233
- Move C1 check to FFISelect by @LexLuthr in #1232
- pdpv0: chain state sync task by @LexLuthr in #1220
📦 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
- 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.
- 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.
- 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_piecesuniqueness migration. Going1.27.3 → 1.28.0directly is supported but skipping the v1.27.4 notes is not recommended. - 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
- @cuoguojida made their first contribution in #1230
Full Changelog: v1.28.0...v1.28.1
Curio v1.28.1-rc1
Curio v1.28.1-rc1
✨ 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
Curio v1.28.0
✨ 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
getRailrevert (#1190). FilecoinPay zeroes the rail struct atomically with the settle that bringssettledUpTotoendEpoch, so the post-confirmgetRailcall reverts. Previously, theEndEpoch == SettledUpToobservation never fired,deletion_allowedwas never set, andDeleteDataSetTasknever ran. Curio now treats agetRailrevert as finalization whenpdp_delete_data_setshowsafter_terminate_service = TRUEandservice_termination_epoch <= current. - Race-safe
parked_piecesupsert (#1195). The existing check-then-execute pattern could race two identical-piece writes and produceduplicate key value violates unique constraint "parked_pieces_active_piece_key". Replaced with a conflict-safe upsert utility. - Missing returns after
httpServerErrorin 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
- 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.
- 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.
- 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_piecesuniqueness migration. Going1.27.3 → 1.28.0directly is supported but skipping the v1.27.4 notes is not recommended. - 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
Curio v1.27.4
✨ 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...
v1.27.3
Curio 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
DropClaimswasn't set. (#1049) -
fix: snap pipeline DELETE trigger not reverting sectors_meta.is_cc —
NEWis NULL in DELETE triggers; the WHERE clause now correctly usesOLD, 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
StorageEndpointGCin an infinite failing loop. (#1086) -
fix: v1 v2 CID interop regressions — Fixed a SQL query regression where a removed
$2placeholder 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
Curio v1.27.3-rc3
✨ 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
uniqutility 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
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 buildIf 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
Curio v1.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 -yInstalling 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++-13Optional: 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 130Select version:
sudo update-alternatives --config gcc
sudo update-alternatives --config g++CUDA / GCC Compatibility
- CUDA 12.0–12.5 → use
gcc-12/g++-12only - 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=1The 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
shouldCommitvalue 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()andStoragePathDetail()(#646) - Extended Chain Connectivity panel with Lotus network summary signals (#977)
- Fixed
/infoendpoint to return actual build version instead of hardcoded "Curio/0.0.0" (#916) - Fixed
Susbystemstypo 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_dealduplicate 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
MinimumWalletBalanceinstead 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
TestWaitListgoroutine 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
/infoendpoint returning hardcoded version...
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→ JSON0serialization 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.mdto 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
canAcceptvalidation logic to prevent invalid or duplicate announcements. - Resolved CARv2 reading issues by properly applying
SourceOffsetduring 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
nullURL. - Improved PieceCIDv2 handling to ensure correct display and metadata resolution.
- Updated JSON serialization: SQL
NULLvalues are now represented as0, 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
- feat: market 2.0 by @LexLuthr in #508
- ensure column does not exist before adding it by @snadrus in #649
- webui-sector-panic by @snadrus in #648
- Alert on older-than-head failures by @snadrus in #659
- herd-db-upgrade by @snadrus in #657
- docs: revise Enable PDP documentation for clarity and detail by @TippyFlitsUK in #652
- update libp2p by @LexLuthr in #671
- fix: use SourceOffset to support CarV2 by @LexLuthr in #681
- minor Mk20 fixes by @LexLuthr in #672
- feat: test post cli: Vanilla Proof test command by @magik6k in #676
- fix: Snark Market: Unbrick client setup by @magik6k in #686
- feat: f05 balance manager by @magik6k in #682
- Dynamic Config by @snadrus in #664
- docs: update PDP docs section by @TippyFlitsUK in #714
- fix: Make kubo retrievals work by @magik6k in #724
- IPNI caches & metrics by @...
PDP v1.0.0
🧪 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.
