The Sia Foundation Roadmap

This Sia roadmap provides mid to high level insight into core Sia development. It will be updated once a quarter at minimum, and will show an outline of what we’re currently working on, why we’re working on it, and what we have in mind after that’s done.

Our primary development goal is the activation of the “v2” hardfork. “v2” is our codename for a massive overhaul to Sia’s consensus mechanisms. It will modernize Sia’s core consensus code and provide a number of usability, performance, and quality-of-life improvements to the network. We are currently working with partners on the necessary updates and ensuring that their is a smooth transition for the ecosystem.

Shortly after the hardfork, we will be working on reducing onboarding friction for users, developers, and enterprises including:

  • Light worker agents to increase horizontal scalability for enterprises, but also enable users to download and upload objects from all of their devices.
  • Simple SDKs for developers to interact with the Sia network directly.
  • A mobile and web app that lets all users take advantage of the cost savings, privacy, accessibility, and performance advantages of decentralized storage without the hassle of buying crypto or managing storage contracts.

“v2” is an umbrella term that refers to an upcoming radical overhaul of Sia’s consensus code. The primary change is the transition from a large, unwieldy database of UTXOs to a compact cryptographic accumulator, bringing myriad benefits to performance, scalability, and functionality. This is a big deal: it requires changing the block and transaction formats, which have been untouched since Sia’s mainnet launch back in 2014. As such, we are taking this opportunity to clean up a few other warts in Sia’s consensus code, giving the project a solid foundation for many years to come. For a more technical dive on how Utreexo works, check out Luke’s blog post here and MIT Bitcoin talk here.

  • UTreexo
    • Reduced blockchain size
  • Improved UTXO spend policies
    • “Composable” unlock conditions
    • HTLC support for atomic swaps
  • Storage contract changes
    • Early contract termination
    • Collateral efficient renewals
  • Renter Host Protocol Improvements
    • Increased download and upload speeds
    • Web browser support

December 2024

  • Release v2.0 ready software - Complete
  • Announce activation dates - Complete

March 2025

  • Upgrade Zen testnet - Complete

June 2025

  • Upgrade Mainnet

RHP4, short for renter-host protocol 4, is the next iteration of the protocol hosts and renters use to communicate. Our goal for RHP4 is to increase the parallelism of data uploads, reduce protocol overhead, and improve download performance. A new protocol is required to enable some exciting new features to be available after the Utreexo hardfork, such as early contract termination, capacity reservation, and contract renewal fund rollover. RHP4 will also enable storage consumers to download and upload data directly in the browser without installing additional software.

  • Improved upload and download performance
  • Concurrent uploads
  • Decentralized uploads and downloads in a browser without downloading software

May 2025

  • Complete support for web transport - In Progress
  • Release Sia SDK beta - In Progress

The new Sia renter, replacing the current siad renter module. Drawing on what we’ve learned from siad, skyd, and us, we designed renterd from the ground up to be modular and horizontally scalable. Although the average user likely won’t notice, a renterd deployment is actually a set of interconnected services. As such, it can distribute workloads in parallel across multiple machines, and can be configured to store its metadata in any SQL backend. This flexibilty makes renterd easier to integrate with other Sia ecosystem software, such as Sia Satellite and S5, and addresses the scalability barriers that have historically hampered enterprise solutions.

January 2025

  • Release hardfork ready v2.0.0 - Complete

June 2025

  • Browser support for uploads and downloads
  • Native file sharing
  • Less complicated setup

The new Sia host, replacing the current siad host module. The host module has been chronically neglected for years, and suffers from poor upload performance, data integrity issues, and a general lack of user-friendliness. hostd is our greenfield reimagining of the Sia hosting experience, bringing a sorely-needed refresh to our host community. Aside from addressing performance bottlenecks, hostd also -offers superior metrics and monitoring tools, which will allow users to make informed decisions about storage allocations, contract parameters, pricing, and quality of service.

December 2024

  • Release hardfork ready v2.0.0 - Complete

June 2025

  • Web browser support - In Progress

The new Sia wallet, replacing the current siad wallet module. walletd aims to be the go-to option for average holders, lite wallet developers, exchanges and miners that need a secure place to store their SC. Accordingly, it supports both hot and cold setups, including multi-sig schemes and hardware wallet integration. Like renterd and hostd, walletd comes packaged with a sleek, yet powerful UI, which can be securely accessed from any device.

Note: you do not need walletd to be a renter or a host; renterd and hostd include their own built-in hot wallets.

December 2024

  • Release hardfork ready v2.0.0 - Complete

The new Sia explorer, replacing and going far beyond the current siad explorer capabilities. explored will serve as both a standalone blockchain explorer with a web interface, and as a library providing powerful indexing and searching capabilities to third-party explorers (e.g. SiaStats) and “lite-client” systems like narwal. explored will be developed and launched alongside the Utreexo overhaul, making it one of the world’s first Utreexo-native block explorers.

March 2025

  • Release hardfork ready v2.0.0 - In Progress
Document version date: Mar 2, 2025
Apr 21, 2025

Bumps the dependencies group with 1 update: github.com/mattn/go-sqlite3.

Updates github.com/mattn/go-sqlite3 from 1.14.27 to 1.14.28

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions
Apr 17, 2025

This PR adds MaxHostCollateral as a counterpart to MinRenterAllowance.

It also removes the duration since it doesn't affect the outcome of the functions since the ratio stays the same regardless of the duration.

Apr 17, 2025

I ran into a min allowance issue on Zen which made me reread this part of the code and I noticed that the current behavior for refreshing contracts is not necessarily what we want.

Before this PR, we make sure the ratio of newly added allowance and collateral is sane during a refresh. However, if a contract still has plenty of allowance left in it, this shouldn't affect our ability to refresh this contract without pouring more renter funds into it if the ratio is still sane after the refresh.

So this PR changes the check to consider the ratio of unused collateral+allowance after the refresh rather than the one of the added values.

Apr 17, 2025

Bumps the go_modules group with 2 updates in the /internal/cluster directory: golang.org/x/crypto and golang.org/x/net. Bumps the go_modules group with 1 update in the /sdk directory: golang.org/x/crypto.

Updates golang.org/x/crypto from 0.36.0 to 0.37.0

Commits
  • 959f8f3 go.mod: update golang.org/x dependencies
  • 769bcd6 ssh: use the configured rand in kex init
  • d0a798f cryptobyte: fix typo 'octects' into 'octets' for asn1.go
  • acbcbef acme: remove unnecessary []byte conversion
  • 376eb14 x509roots: support constrained roots
  • b369b72 crypto/internal/poly1305: implement function update in assembly on loong64
  • 6b853fb ssh/knownhosts: check more than one key
  • See full diff in compare view

Updates golang.org/x/net from 0.37.0 to 0.38.0

Commits
  • e1fcd82 html: properly handle trailing solidus in unquoted attribute value in foreign...
  • ebed060 internal/http3: fix build of tests with GOEXPERIMENT=nosynctest
  • 1f1fa29 publicsuffix: regenerate table
  • 1215081 http2: improve error when server sends HTTP/1
  • 312450e html: ensure <search> tag closes <p> and update tests
  • 09731f9 http2: improve handling of lost PING in Server
  • 55989e2 http2/h2c: use ResponseController for hijacking connections
  • 2914f46 websocket: re-recommend gorilla/websocket
  • See full diff in compare view

Updates golang.org/x/crypto from 0.32.0 to 0.35.0

Commits
  • 959f8f3 go.mod: update golang.org/x dependencies
  • 769bcd6 ssh: use the configured rand in kex init
  • d0a798f cryptobyte: fix typo 'octects' into 'octets' for asn1.go
  • acbcbef acme: remove unnecessary []byte conversion
  • 376eb14 x509roots: support constrained roots
  • b369b72 crypto/internal/poly1305: implement function update in assembly on loong64
  • 6b853fb ssh/knownhosts: check more than one key
  • See full diff in compare view

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the Security Alerts page.
Apr 17, 2025

Bumps the go_modules group with 1 update: golang.org/x/net.

Updates golang.org/x/net from 0.37.0 to 0.38.0

Commits
  • e1fcd82 html: properly handle trailing solidus in unquoted attribute value in foreign...
  • ebed060 internal/http3: fix build of tests with GOEXPERIMENT=nosynctest
  • 1f1fa29 publicsuffix: regenerate table
  • 1215081 http2: improve error when server sends HTTP/1
  • 312450e html: ensure <search> tag closes <p> and update tests
  • 09731f9 http2: improve handling of lost PING in Server
  • 55989e2 http2/h2c: use ResponseController for hijacking connections
  • 2914f46 websocket: re-recommend gorilla/websocket
  • See full diff in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the Security Alerts page.
Apr 17, 2025

Bumps the go_modules group with 1 update: golang.org/x/net.

Updates golang.org/x/net from 0.37.0 to 0.38.0

Commits
  • e1fcd82 html: properly handle trailing solidus in unquoted attribute value in foreign...
  • ebed060 internal/http3: fix build of tests with GOEXPERIMENT=nosynctest
  • 1f1fa29 publicsuffix: regenerate table
  • 1215081 http2: improve error when server sends HTTP/1
  • 312450e html: ensure <search> tag closes <p> and update tests
  • 09731f9 http2: improve handling of lost PING in Server
  • 55989e2 http2/h2c: use ResponseController for hijacking connections
  • 2914f46 websocket: re-recommend gorilla/websocket
  • See full diff in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the Security Alerts page.
Apr 16, 2025

Bumps the go_modules group with 1 update in the /sdk directory: golang.org/x/crypto.

Updates golang.org/x/crypto from 0.32.0 to 0.35.0

Commits
  • 7292932 ssh: limit the size of the internal packet queue while waiting for KEX
  • f66f74b acme/autocert: check host policy before probing the cache
  • b0784b7 x509roots/fallback: drop obsolete build constraint
  • 911360c all: bump golang.org/x/crypto dependencies of asm generators
  • 89ff08d all: upgrade go directive to at least 1.23.0 [generated]
  • e47973b all: update certs for go1.24
  • 9290511 go.mod: update golang.org/x dependencies
  • fa5273e x509roots/fallback: update bundle
  • a8ea4be ssh: add ServerConfig.PreAuthConnCallback, ServerPreAuthConn (banner) interface
  • 71d3a4c acme: support challenges that require the ACME client to send a non-empty JSO...
  • See full diff in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the Security Alerts page.
Apr 15, 2025

If we have network=v1 or network=v2, we will:

  • Fund a new address by mining a block
  • Use it to create 3 contracts
    • One that we let expire (expiredContract)
    • One that we revise and then submit a storage proof for (successfulContract)
    • One that we renew (renewedContract)
    • And expose these contract addresses via /fixtures/explored.

Example successful response:

{"expiredContract":"664aa3a708fce114eebb6ff352af8956c45aaaf0cb6b55f9808a3af7e5137af3","successfulContract":"297048b6a99a484598d1ce41c71b8ac05377cf71e6d03e0db7d51a596f37db04","renewedContract":"0a44d067f23bc315211439376b85297afc133cd0ac453043f86a758ffa8d5fb5"}

Example unsuccessful response:

{"expiredContract":null,"successfulContract":null,"renewedContract":null}

I think it is best to do it in Go vs JS because for v2 creating the contracts is already serious pain in the neck.

Update: We decided not to expose a special endpoint where the contract addresses could be retrieved. Instead, you can find the transaction where all the contracts were formed by looking at blocks until you find one containing a transaction where 3 contracts are formed. Then for instance you could query the state of those contracts using the explored API to get the expected state and compare that to what is displayed in the UI.

Apr 15, 2025

We pass a sane timeout to bus constructors to avoid hanging indefinitely, since we now potentially have a reasonably long chain db migration I removed it and added a sane timeout to the two locations that apparently need it. It's mostly because our Store requires a context on all of its methods, like initialising the autopilot config.

Apr 15, 2025

Bumps the all-dependencies group with 1 update: golang.org/x/tools.

Updates golang.org/x/tools from 0.31.0 to 0.32.0

Commits
  • 456962e go.mod: update golang.org/x dependencies
  • 5916e3c internal/tokeninternal: AddExistingFiles: tweaks for proposal
  • 9a1fbbd internal/typesinternal: change Used to UsedIdent
  • e73cd5a gopls/internal/golang: implement dynamicFuncCallType with typeutil.ClassifyCall
  • 11a9b3f gopls/internal/server: fix event labels after the big rename
  • 3e7f74d go/types/typeutil: used doesn't need Info.Selections
  • b97074b internal/gofix: fix URLs
  • e850fe1 gopls/internal/golang: CodeAction: place gopls doc as the last action
  • b948add internal/gofix: move from gopls/internal/analysis/gofix
  • b437eff go/types/typeutil: implement Callee and StaticCallee with Used
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions
View full activity feed →