Roadmap

Where Silt is going

Where this is going (per Andrew, 2026-07-25), structured into milestones. M1–M8 are done; this file governs what comes next.

The product stance

Milestones

M9 — Capacity (NOW)

Bounded stores (-capacity 2G), refusal when full, spill-over placement (try the next-closest node when one refuses), stripe anti-affinity (never two shards of one stripe on one node when avoidable — one node death costs at most one shard per stripe), and network capacity accounting: every message piggybacks the sender's used/total, and each node estimates network size from XOR-space density (math note 06) to compute total network capacity.

M10 — Identity, TLS, discovery (DONE)

M11 — Encrypted manifests ("encrypted at all levels") (DONE)

Manifests are sealed blobs: layout encrypted under a layout key, with the decryption material boxed under a content key inside. Both keys derive one-way (HKDF) from the link key — the share handle is silt:v1:root:key, and its degraded form siltcare:v1:root:layoutkey grants repair/audit WITHOUT decryption (see docs/math/07-key-hierarchy.md). Link keys are content-derived, so convergent dedup extends to the links themselves. Infrastructure relays ciphertext end to end; caretakers do their whole job inside the layout ring.

M12 — The chain (DONE)

The registry is an append-only block chain maintained by the daemons (core/chain, node validator role). Blocks hold entries only (manifests stay sealed off-chain); commits require a quorum of Ed25519 attestations from validators whose reputation (credit.Reputation: audits + serving) clears the threshold — each validator judging by its OWN ledger. Replicas re-validate everything, latecomers sync and re-check history, chainstore persists across restarts, and chainhost fronts the chain as ports.Registry so swarm add/get work unchanged. Not PoW, and honest about it: see docs/math/08-quorum-chains.md.

M13 — Web frontends (DONE)

daemon -ui ADDR serves an embedded localhost web UI (cmd/silt/ui, go:embed, JSON API on the same port, zero extra runtime):

M14 — Desktop client (DONE)

silt client: one binary that consumes AND serves (pledges disk by default — every client a node), keeps a link-book library (the files you hold keys for; the network's other identifiers stay opaque to you, the Aslan boundary made visible), bootstraps via discovery, and opens the web UI in your browser. build.sh cross-compiles Mac (Intel + Apple Silicon), Windows, and Linux (amd64 + arm64) from one source, CGO off, 5 self-contained 8-10 MB binaries. Tray/Tauri wrapping is optional polish that consumes the binary unchanged. See docs/desktop-client.md.

The resolver layer ("Aslan" — separate product)

Meaning lives above the infrastructure, in a separate codebase with its own distributed record chain: name/description/tags → (root, manifest key). See docs/aslan-boundary.md for the full boundary design. Silt ships zero Aslan code, ever.

Reputation inputs (feeding M12)

Open questions being explicitly deferred

Prioritized sequence (agreed 2026-07-25)

Ordered by value = risk retired + capability unlocked, weighted by cost-of-delay, over effort. The governing decision: the placement backbone lands before any public launch — it changes placement/ routing wire semantics, and migrating a live network of independent operators through that is far more expensive than doing it while the network is empty.

Phase 0 — cheap wins that de-risk everything after (days).

  1. Repair preserves stripe anti-affinity (closes a verified gap).
  2. -race build + a coverage floor in CI.
  3. Dispersion measurement — surface distinct-hosts-per-stripe in the observatory.
  4. Docs-ship-with-code CI check + auto-rendered website/roadmap.html.

Phase 1 — the durability backbone, BEFORE launch (main engineering bet).

  1. Column-based placement (docs/design/column-placement.md) — reads become ~k conversations, anti-affinity optimal and automatic.
  2. Failure-domain-aware placement — the top correlated-failure mitigation; composes with #5.
  3. Dispersion audit as an enforced invariant (built on the Phase 0 measurement).

Phase 2 — production trustworthiness (feeds the external security audit).

  1. Security hardening — Sybil/eclipse resistance, hardened reputation, real (non-toy) proof-of-retrieval.
  2. Multi-process e2e integration tests over real TCP/daemons.
  3. Denylist distribution/subscription (completes the abuse-handling story).

Phase 3 — launch enablement (when the above are solid).

  1. Cut v0.1 + signed/notarized binaries + checksums, then execute the launch plan.

Parallel throughout — non-coding, highest overall value, gates launch: form the legal entity + DMCA agent + legal read (long lead time), and scope the independent security audit so Phase 2 feeds it. No wide launch precedes these (see docs/risk-register.md).

Release engineering (v0.1)

Storage-layer hardening (Phase 1 — before launch)

Details in docs/design/column-placement.md and BACKLOG.md. Moved ahead of launch (was "post-launch") because the placement wire format must not ossify on a live network: column-based placement, then failure-domain-aware placement, then the dispersion audit.

← Back to silthq.com