Whitepaper — protocol family specification
KOTVA
The sovereign substrate: one small, shared narrow waist — identity, signed objects, transport, publish/subscribe, sync, and infrastructure roles — over which mail, commerce, work, social, media, search and real-time calling compose as thin, independent profiles. Kotva is Slavic for anchor: the key is the anchor, and every name, address, provider or operator above it is a swappable pointer.
In one sentence
KOTVA is a small shared substrate — six capabilities, one wire format — that mail, commerce, work, social, media and calling apps build on as thin, independent profiles instead of separate platforms.
Why a narrow waist
Protocols that try to cover everything — XMPP, Matrix — die of their own weight. KOTVA stays as thin as HTTP or IP: a small waist products compose upward and downward from, adopting only what they need.
What's real today
live DMTAP mail — Core v1, a numbered spec with real implementations. draft TRACT, WRAP + five further profiles. early DEPOT (cloud) is the one flagged experimental, outside Core v1 — see §7.
Where to go next
Reading the tiers Core v1 · stable drafted · candidate early · experimental — carried through every profile card and the sidebar; see §7 for the full status ledger.
§0 Abstract
Kotva is Slavic for anchor. The key is the anchor: identity is a keypair its holder controls, and every name, address, alias, or operator sitting above it is a swappable pointer.
KOTVA itself is not a product — it is a family of protocols sharing one narrow waist, six capabilities small enough to read in an afternoon,[3] plus a keystone document, the coordinator contract,[2] that turns "some centralisation, done safely" into a checkable property instead of a marketing promise.
Above the waist sit thin profiles: DMTAP (mail, the flagship and reference profile), TRACT (commerce), WRAP (work), and a set of further drafts — media, social, real-time calling, search, reachability, cloud infrastructure. Below the waist, KOTVA adopts rather than reinvents: Ed25519, HPKE, deterministic CBOR, MLS, libp2p, SFrame, WebRTC, and a slate of external bindings for reputation, payments, storage, and dispute (Core-v1 recovery is self-contained — BIP39 + FROST/Shamir, no external vendor).[5]
The one piece of genuinely new normative engineering is Sync — a signed, multi-author CRDT operation algebra with deterministic, coordinator-free convergence. Everything else is composition, and every unavoidable point of centralisation is fenced: accountable, swappable, self-hostable, and never load-bearing.
§1 The narrow waist
KOTVA "covers everything" the way IP or HTTP do — by being a thin waist that composes upward and downward, not by containing everything.
Federated-messaging history carries one loud lesson: monolithic protocols die of their own weight, and tiny cores win. XMPP and Matrix are technically complete and genuinely federated, yet both carry a large mandatory surface — presence, rosters, room-state resolution, a sprawl of extensions — that every server must implement to interoperate. HTTP took the opposite path: the core is almost nothing, and everything else is a profile layered on top. Nostr reduces a social network to "a signed JSON event, relayed by dumb relays"; AT Protocol reduces one to "a signed content-addressed repo with pluggable identity." Both win adoption by staying small enough that a new client, or a new application kind, need not swallow the whole thing.
KOTVA's waist is exactly six capabilities. A profile may adopt any subset — there is no ordering, no prerequisite bundle, no "core profile" a product must swallow first. But if a profile implements a capability's function, it must speak that capability's bytes: a product that syncs structured state uses the Sync op algebra, not a parallel CRDT it happens to call the same name. Two independently built profiles interoperate on any capability they both adopt — and that only holds if adopting a capability means adopting its wire format, not merely its idea.
| Capability | What it is | Byte-home |
|---|---|---|
| ① Identity | A keypair is the identity. Names — DNS, a chain, an 8-word key-name floor — are swappable pointers to it, never authoritative over it. | 01-identity.md, 03-naming.md |
| ② MOTE | The universal object: signed, encrypted, content-addressed. Mail, chat, offers, feed entries, and credentials are all MOTEs. | 02-mote.md, 05-messaging.md |
| ③ Transport | Reach anyone by key — online, offline, or over a mesh. Store-and-forward at the edge; no static IP required. | 04-transport.md, substrate/ROLES.md |
| ④ PUB | Signed public objects plus append-only author feeds — authenticity without confidentiality. | 22-public-objects.md, 25-pubsub.md |
| ⑤ SYNC | Multi-author signed CRDT — shared mutable state with no server. The one capability that is genuinely new normative ground. | substrate/SYNC.md |
| ⑥ Roles & Wake | Infrastructure roles any node may take (relay, mailbox, rendezvous, KT log) plus content-free push to wake offline devices. | substrate/ROLES.md |
↔ scroll to see the full diagram
Two litmus tests, restated in every substrate document
The flowstock test — can a product sync structured state (inventory, a document, a task board) by reading only IDENTITY.md and SYNC.md, without opening the mail, MLS-groups, gateway, or JMAP sections? If not, the waist has a hidden forward reference and has failed to stay thin.
The HTTP test — is every waist capability servable over plain HTTPS, with no mesh, no relay, no libp2p present, and does a fetcher verify identically regardless of which transport delivered the bytes? Every object is self-authenticating (signed or content-addressed), so the mesh is one binding among several, never the only way to speak the waist.
§2 The substrate
2.1 Six capabilities, one shared floor
The substrate directory re-presents the waist as a standalone contract any non-mail product can adopt à la carte.[3]
Five of the six capabilities profile existing sections of the core mail spec — they extract general machinery that happened to be written down as part of a mail protocol. Only one — Sync — is genuinely new normative ground.
| # | Capability | Profiles (standards) | Reference implementation |
|---|---|---|---|
| 1 | Identity | Ed25519 (RFC 8032), deterministic CBOR (RFC 8949), CONIKS/key-transparency, RFC 6962 Merkle logs | — |
| 2 | MOTE | COSE (RFC 9052), deterministic CBOR (RFC 8949 §4.2), BLAKE3 content-addressing — the universal signed, encrypted, content-addressed object | kotva-core — the sealed-MOTE encoder |
| 3 | Transport | libp2p (Kademlia, Circuit Relay v2, DCUtR); store-and-forward at the edge — reach a key online, offline, or over a mesh | dmtap-p2p (Envoir mesh) |
| 4 | PUB — Feeds & Blobs | Nostr-class signed events, IPFS-class content addressing, RFC 6962 Merkle, HTTP caching | kerf-pub — serves §22 over plain HTTPS, no mesh |
| 5 | Sync | CBOR/COSE, Hybrid Logical Clocks, version vectors, range-based set reconciliation | flowstock stateless sync; dmtap-clustersync CRDTs (Envoir) |
| 6 | Roles & Wake | libp2p infrastructure roles (announce/resolve, Circuit Relay v2, short-TTL content-blind mailbox, cache) + content-free, sender-blind Web Push (RFC 8030/8291/8292, VAPID), UnifiedPush | the reference gateway/broker, Pier, built on the kotva-core/kotva-mail crates |
The repository is candid about where implementation currently stands: roughly five independently hand-rolled sync/identity/feed implementations exist across the product suite today, none byte-interoperable with any other. The stated fix is not more prose but one compiled Rust core with thin per-language bindings (native, C-ABI/cgo, WASM, UniFFI) and frozen conformance vectors as the proof a binding is byte-identical to the core — a plan, not yet a finished fact. Two of those crates, kotva-core and kotva-mail, are tag-pinned dependencies today: consumers — the Envoir mesh node and the Pier broker, KOTVA's reference coordinator/gateway implementation — pin a git tag rather than tracking a moving path.
2.2 Sync — the one new normative capabilityonly new wire format in the family
Every other waist capability profiles something that already exists. Sync does not: no single deployed standard covers signed, deterministic, multi-author CRDT operations with snapshot and sparse namespace sync. Its semantics are grounded in the mail spec's existing single-owner device-cluster CRDT, generalised to any set of independent identities converging on shared state — by making the operation itself the unit of authenticity.
Model
A replica holds sync state and exchanges ops with peers — there is no primary and no coordinator (leaderless). An author is an identity whose operational keys chain to an IK via a DeviceCert. An object is a keyed piece of state governed by exactly one CRDT type; a namespace partitions objects into independently-syncable collections a replica subscribes to.
Determinism is the contract
Every merge is a join — commutative, associative, idempotent — over deterministic CBOR, so any two replicas that applied the same ops compute byte-identical state. Ties break on the Hybrid Logical Clock total order, and where the HLC itself ties, on a pure bytewise comparison of the encoded value — never a length-first comparison.
↔ scroll to see the full diagram
The SyncOp envelope
One envelope, six-plus CRDT types selected by a kind discriminator, each op individually COSE-signed (RFC 9052) or batched into a hash-chained, singly-signed SyncFrame for amortised signatures:
SyncOp = {
1 => u8, ; kind CRDT/op discriminator
2 => tstr, ; ns namespace ("" = default)
3 => tstr, ; target object id
? 4 => tstr, ; field register / counter / edge selector
? 5 => ext-value, ; value LWW value · counter delta · RGA atom
6 => Hlc, ; hlc { wall, counter, author }
? 7 => [+ AddTag], ; observed OR-Set add-tags a remove cancels
? 8 => OpRef, ; ref RGA left-origin / tree parent
}
| kind | CRDT type | Behaviour |
|---|---|---|
set-add / set-remove | OR-Set | add-wins observed-remove; a remove cancels only the specific add-tags it saw, so a concurrent unseen add survives |
lww-set | LWW register | greater HLC wins; an exact tie breaks on larger encoded-value bytes |
death | remove-wins death-certificate | dominates the OR-Set — a bare add can never outrank an explicit delete, closing the "resurrection" hole |
counter | PN-counter | per-author delta sets; an author may only advance its own entry, enforced by the op signature |
seq-insert / seq-remove | RGA sequence | ordered lists/text via left-origin references and tombstones |
tree-move | movable tree | reparenting with an ordering key per move |
Authenticity, ordering, and abuse-resistance are treated as one problem rather than three add-ons: an op's HLC is rejected if its wall-clock is more than a bounded skew ahead of the receiver — deliberately one-sided, so a device offline for days can still push its legitimate backlog without a two-sided check discarding honest offline work. A counter's overflow spills forward into the next tick rather than wrapping, because a silent wrap would retroactively invert causal order for any op minted at the wrapped position. Reconciliation is a three-endpoint HTTP protocol — GET /sync/vector, POST /sync/pull, POST /sync/ops — the same shape proven by the flowstock reference implementation.
Honest framing
Sync's op algebra merges the whole value at a given address — there is no per-field merge inside a nested structure. Two authors editing "different parts of the same object" concurrently must decompose those parts into distinct addresses (ns/target/field); collapsing everything into one large nested value converts "both edits survive" into "last writer wins the whole object," silently. This is stated as a design property, not hidden as a limitation.
§3 The coordinator contract draft · normative once ratified
The keystone new specification of the family — a draft, normative once ratified — that turns "some centralisation, done safely" into a checkable property rather than a hope.
Decentralise the substrate and the exit. Every unavoidable coordinator is accountable, swappable, and self-hostable, and never load-bearing. Coordinators add reach; they never gate function.[2]
A coordinator is any party that provides a function the peer-to-peer substrate cannot provide reciprocally: a global view (matching, ranking, search), a scarce resource (a reputable IP for legacy mail egress, a public ingress), a legal or real-world anchor (licensing, physical-event attestation), or cross-party judgement (moderation, arbitration). KOTVA does not pretend these jobs away — it fences each one behind one contract, generalised from DMTAP's legacy-mail gateway and legacy adapters into a reusable shape.
↔ scroll to see the full diagram
3.1 Four conformance clauses
Accountable
A signed descriptor carrying kind, policy, and — where it charges — a signed tariff. Discovery-only and self-asserted: no global reputation score, no price rank, no stake field. Reputation is measured locally by each client, never published as a single authority's number.
Swappable
Leaving is a configuration change with zero data migration and zero identity change. Keys, mailbox, listings, and history live at the edge; a coordinator holds only rebuildable operational state. Lock-in is a conformance violation, not a business model.
Self-hostable
For every coordinator kind, a user who can meet its requirement can run it themselves. Two honest exception classes are disclosed rather than papered over: scarce network reachability (a reputable IP for SMTP egress; a public ingress) and, for custodial-escrow alone, regulatory licensing — holding a stranger's money for a trade window is, in most jurisdictions, a licensed activity no individual can self-provision at any skill level.
Content-visibility declared
Every coordinator declares exactly one visibility class at one assurance level and surfaces it to users. Advertising one class while operating another is non-conformant misrepresentation, not policy.
3.2 The content-visibility property
| Class | Meaning | Examples |
|---|---|---|
blind | Forwards or holds ciphertext; holds no key that decrypts the payload; reads neither content nor routing beyond what the wire exposes. | mesh relay (Circuit Relay v2), mix, TURN-over-SFrame |
blind-routing | Cannot read the payload, but sees routing metadata — envelope, SNI, addresses, size, timing. | SNI-passthrough ingress, buffer/mailbox, SFU media-relay (RFC 9605) |
terminating | Terminates encryption and sees plaintext — a deliberate, disclosed trust boundary. | legacy mail gateway, TLS-terminating ingress |
Layered on top, an assurance level states how a blindness claim is guaranteed: structural (the role has no key at all — provable), attested (a TEE proves the code only forwards — hardware-trust), or declared (the operator promises — honest-trust, unverifiable). The contract can mandate the architecture and the declaration; it cannot cryptographically prove a declared-level operator isn't secretly logging. A client must never present a declared claim as if it were verified.
3.3 Authorise, never classify
Every gate a coordinator applies on a delivery path or an authoritative path must be answered from sender identity and rate — never from a judgement about whether content is wanted. A coordinator must not run spam scoring, ML filtering, or keyword/URL reputation on that path, and must not drop, quarantine, re-rank, or annotate on a content basis. "Wanted" is the recipient's judgement, on the recipient's device. This is structural rather than a style preference: content classification improves with corpus size, so it centralises and never finishes — which is exactly how anti-abuse would otherwise regrow a second centralised tier. A carve-out exists for a coordinator's own derived, opt-in, subscribable view — a labeler classifying into labels you subscribe to, or an indexer ranking its own corpus — because gating what reaches you by default is prohibited, but ranking your own opt-in view is not.
3.4 Coordinator kinds
The coordinator contract names eleven kinds — ten fully specified and one (infra-service) draft — as the single canonical, exhaustive list for the family.
| Kind | Provides | Typical visibility |
|---|---|---|
gateway | Legacy-mail bridge (MX, DKIM egress, legacy client surfaces) | terminating (legacy leg is plaintext) |
relay | Mesh reachability for NAT'd peers | blind / structural |
media-relay | Forwards SFrame-encrypted call/stream media | blind-routing — structural only where the SFU commits sframe_required=true, else declared; routing/timing/participant graph visible either way |
reachability-adapter | ngrok-style public subdomains for arbitrary box services | blind-routing (SNI-passthrough) preferred |
indexer | Search / discovery over public objects | corpus is public plaintext; query channel terminating unless attested |
labeler | Moderation labels, opt-in, subscribable | n/a — labels public objects |
matcher | Real-time supply↔demand matching (rides, delivery) | terminating default / attested (TEE) |
infra-service (draft) | Managed infrastructure — box / bucket / volume / edge-fn, with database/queue as composed formulas (the DEPOT profile). Hosted/outsourced computation — rented-GPU inference — is an edge-fn with artifact-source = operator on a class declaring gpu-count, an attribute rather than a kind | per service — bucket blind (blind-routing when serving public objects), volume blind when guest-encrypted, edge-fn/database/box terminating → attested |
arbiter | Dispute resolution (staked jury) | terminating for evidence, disclosed |
oracle | Physical-world / real-fact attestation | terminating, disclosed |
custodial-escrow | Holds the trade float for a trade window | terminating for evidence — the family's one load-bearing exception |
Every kind above inherits the four clauses and the visibility property unchanged. The custodial-escrow operator is the one disclosed departure: it satisfies all four clauses like every other kind but, uniquely, does not fade once hired — holding money for strangers during a trade window is a real, licensed, structurally necessary role, bounded by staking sized to the float rather than eliminated by wishful design. The reference implementation of the gateway kind — Pier — carries the same fencing: a mail-adapter competitor can swap it out for its own gateway without asking KOTVA's permission, because the contract, not the implementation, is what conformance checks against.
§4 Bindings — adopt, don't reinvent
KOTVA specifies new bytes only where nothing proven exists, and binds everywhere else.[5]
A binding is a thin mapping document — how substrate identity or objects map onto an external standard — never a re-derivation. When the frontier improves, the binding swaps; the substrate and profiles above it never change.
| Need | Bind to | Honest maturity note |
|---|---|---|
| Identity recovery | Account abstraction (ERC-4337 / EIP-7702), passkeys, MPC (Turnkey / Privy / Web3Auth / Lit) | Solid, mainstream — recovery finality is real; UX is web2-grade. |
| Attestation | EAS, W3C Verifiable Credentials | Plumbing is mature; the portable-reputation layer on top is nascent. |
| Reputation | OpenRank (EigenTrust, TEE-verified) | Real, but does not compose cleanly over KOTVA's own objects yet; quality still depends on the personhood anchor below it. |
| Proof-of-personhood | World ID and a structurally different second anchor (e.g. a zk-passport binding) | Imperfect, and single-vendor today for the primary anchor — a v0 target is interop with at least two structurally different bindings so no one vendor's exposure strands a subject's reputation. Local scale uses web-of-trust instead. |
| Payments / settlement | x402 (HTTP-402 stablecoin), USDC on Base/Solana | Infra is real; genuine demand is still thin. |
| Storage — hot / permanent / scale | Walrus / Arweave / Filecoin (+ Storj) | Behaves like a CDN, not an archive; retrieval on bulk tiers historically slow. |
| Dispute / arbitration | Kleros-class staked juries | Real but small and unproven at scale; risks re-centralising toward professional jurors. |
| Mesh reachability | libp2p — Circuit Relay v2, DCUtR, Kademlia, Noise, QUIC | Mature; profiled directly, not re-derived. |
| Messaging crypto | MLS (RFC 9420) | Standards-track, mature group ratchet. |
| Media transport / E2E | WebRTC + SFrame (RFC 9605, keyed from the MLS epoch) + TURN | Mature and standardised; a media relay that commits to sframe_required=true is content-blind (blind-routing — routing metadata stays visible). |
| Verifiable coordination | TEEs (SGX / SEV / ARM) | New trust dependency — trades operator-trust for chip-vendor-trust; disclosed, not trustless. |
What KOTVA never binds
A protocol token — money is an existing stablecoin, trust is staked existing value, and KOTVA mints nothing. A global reputation score it computes itself. A search-ranking token. Surveillance-based advertising. These are absent by decision, not by oversight.
§5 The profiles
How to read this section
These are reference applications that sit on top of the base — proof the thin substrate composes into real products; you can bring your own. The hard, domain-specific machinery (search, matching, oracles, moderation, payment) lives on the side as swappable coordinators and bindings, never baked in. Each profile is tagged by ratification tier — 🟢 Core v1 · stable 🟡 stable extension · candidate 🔴 draft · experimental — and only the base (the six waist capabilities, the wire format, and the coordinator contract) is ever required: a Core-v1 messaging node uses none of the primitives or profiles below.
Six primitives recur across almost every real-world service: OFFER · MATCH · RESERVE · REPUTATION · ESCROW · ATTEST.[6]
A wider service recipe — OFFER · MATCH/RESERVE · REPUTATION · ESCROW · ORACLE · DISPUTE · PAY — is a useful shorthand for describing a product, but only six of those names are primitives: ORACLE is the oracle coordinator kind (a physical-fact attestation, i.e. ORACLE ⊂ ATTEST), DISPUTE is the arbiter coordinator kind, and PAY is the stablecoin binding — composite roles built from primitives and coordinators, not a seventh and eighth primitive. Because the underlying services reduce to the same six primitives, "different products" are thin profiles standing on one substrate, not separate systems: Uber, delivery, freelance work, and auctions differ mainly in MATCH's assignment rule (nearest, best-fit, highest-bid); bookings drop MATCH entirely for a single-owner RESERVE.
↔ scroll to see the full diagram
DMTAP — mail, messaging & the legacy gateway
🟢 Core v1 · core §00–§21, §26Email reimagined from the keypair up — the profile the waist was extracted from, now reframed as the first thing built on top of it rather than the whole protocol.
- Adopts
- All six substrate capabilities unchanged, plus MLS groups (§5), the opt-in/research mixnet privacy tiers (§6), cold-contact anti-abuse economics (§9), and the legacy SMTP/IMAP/JMAP gateway (§7, §8) on top.
- Narrow waist
- Sync for the device-cluster mailbox; Feeds for public list archives and release announcements; Roles for reachability and NAT'd circuit relay; Wake for push-woken mobile clients.
- Status
- The core, numbered specification (§0–§27); slated for relocation under
profiles/dmtap-mail/in a later restructure without changing its normative content. One binary, roles selected at runtime (--relay,--mix,--gateway) — the gateway is the family's original, fully-worked coordinator instance, and the only DMTAP function needing a scarce resource (send reputation for legacy SMTP egress). Pier is its reference gateway/broker implementation, built onkotva-coreandkotva-mail. - Honest caveat
- The mixnet's per-hop cryptography (the Sphinx-style onion layer) is, in the current Rust implementation, an explicit stand-in — not yet the real per-hop construction the spec specifies — and far-future privacy cryptography (mixnet, VDF, PQ envelope tuning) is deliberately quarantined as non-normative research rather than perfected on the critical path.
TRACT — commerce
draft spec · v0.1.0Goods, services, rentals, subscriptions, and the delivery and settlement around them — with no marketplace operator, no registrar, and no token.
- Adopts
- Identity, Feeds & Blobs (catalogues, offers, rate cards, reviews), Sync (carts across a buyer's devices, inventory across a seller's replicas), Roles, and Wake — plus the sealed MOTE for order messages. No new cryptography of its own.
- Narrow waist
- Every trade — goods, services, rentals, bookings, subscriptions, licences, made-to-order — expresses as one four-axis offer rather than a category-specific schema; delivery routing is computed on the buyer's own node from publicly published rate cards, so no single party sees the whole cart.
- Status
- Overview through wire-format and conformance vectors specified; content-addressed product identity across independent sellers is stated as "the mechanism, not yet a demonstrated solution."
- Honest caveat
- TRACT names its own departure from DMTAP's structural claim: the storefront and escrow gateway functions are permanent, not self-extinguishing, because browsers and money-holding licences are permanent. Discovery is flagged as the weakest load-bearing claim in the document — a content-addressed substrate has no global index by construction, so whichever indexer becomes economically dominant risks becoming a de facto content-policy gatekeeper, and no protocol rule here prevents that.
WRAP — work
version 0 · v0.2.0The issuer assigns. Removing the one contended decision — who gets the job — removes the need for a race, an arbiter, and the central server that arbitrates it.
- Adopts
- Identity (a Principal is a substrate
IK), Sync (coordination state —Offer/Bid/Assignment/Progressare ordinary Sync ops), Feeds & Blobs (aWorkOrderis an immutable content object, anAttestationa portable author-feed entry), and Infrastructure Roles for pool discovery. - Narrow waist
- Six object kinds and one assignment rule on top of the substrate — no bespoke encoding, signing, CRDT, or transport of its own; an earlier draft that had all four was rebased onto the shared substrate.
- Status
- Version 0 — no compatibility guarantee, written with standards-document rigour for design discipline rather than to claim stability. Conformance vectors are normative where they disagree with prose.
- Honest caveat
- Explicitly not trustless: open participation without a gatekeeper admits Sybils, and WRAP states the trust source rather than claiming to have solved it. Not a mesh — broadcasting work orders to every participant would leak commercial volumes and addresses, so WRAP is point-to-point plus pools, not gossip.
MEDIA — the Evermesh profile
profile spec · normative once ratifiedA YouTube/Spotify/Twitch-shaped surface built as a thin profile: the platform's four welds — identity, catalogue, discovery, payment — cut apart and placed back on the substrate.
- Adopts
- Generalises the existing Published-Artifact media facet (§24, the
VideoManifest/channel/live model) from a publishing convention into a full product. Adds no new wire bytes beyond the one signed structure §24 already owns. - Narrow waist
- The creator's box is the origin; a CDN is a swappable cache tier; discovery is a derived index served by a swappable indexer coordinator; live is a media-relay plane.
- Status
- Product-rule layer over an existing normative object — states the rules (box-as-origin, licensing honesty) without restating §24's schemas.
SOCIAL — public feeds without a timeline operator
draft · normative once ratifiedPosts, replies, reposts, likes, follows — with no timeline operator, no ranking authority, and no token.
- Adopts
- A post is an ordinary public author-feed object (§22); discovery and anti-Sybil bind to the REPUTATION primitive; moderation is a market of
labelercoordinators; search is a swappableindexer. - Narrow waist
- Folds a signed public event stream (the Nostr-relay niche) and offline-first signed-log gossip (the Secure Scuttlebutt property) into one object model, with ATProto-style composable opt-in moderation layered on as a labeler market rather than a platform trust-and-safety monopoly.
- Status
- Draft, no new cryptography or wire capability — owns only the social schema on top of the existing public-object announcement metadata.
- Honest caveat
- Not a private-messaging system (direct messages ride the sealed MOTE) and not an anonymous-publishing system — who posted what, and when, is exactly the fact it makes verifiable.
RTC — real-time voice, video & calling
profile spec · wire in §27A call is the opposite shape from a MOTE — a live stream that cannot be queued — so it rides a parallel media plane that reuses the substrate's identity and keys but not its store-and-forward object model.
- Adopts
- WebRTC for the media transport, keyed via MLS→SFrame so a media relay that commits to
sframe_required=trueis content-blind (blind-routing— routing metadata stays visible); the substrate's existing signed, mutually-authenticated delivery layer fills WebRTC's deliberately signalling-agnostic hole with no separate signalling server. - Narrow waist
- Defines no new bytes — the wire spec lives entirely in §27 (the
rtc_signalobject, the SFrame key schedule, capacity advertisement); this document is the family-level view of how it composes and degrades offline. - Status
- Scaling calls beyond the host's own hardware is a
media-relaycoordinator role — a pool anyone can provide, coordinated by an existing distributed SFU (LiveKit/Pion, Jitsi+Octo, mediasoup) rather than a bespoke one.
REACH — public reachability for arbitrary box services
profile spec · normative once ratifiedThe ngrok/Cloudflare-Tunnel product shape, rebuilt so the tunnel operator is hired, not depended on.
- Adopts
- Generalises the legacy-client reachability ingress (§7.15) from "carry one legacy mail client to a mailbox" to "carry any TLS client to any box service," and vanity local-parts (§7.10.5) from mail addressing to DNS subdomains.
- Narrow waist
- A box→adapter persistent, libp2p-secured (Noise + yamux) reverse-tunnel stream-mux, SNI-demuxed by the adapter — explicitly not the mesh's native Circuit Relay v2, which relays between two libp2p peers and cannot carry a non-libp2p client (a conflation the spec calls out explicitly).
- Status
- The provider is a
reachability-adaptercoordinator, fenced by the same contract as every other kind —blind-routing(SNI-passthrough) preferred, the box terminates TLS, the adapter forwards ciphertext it holds no key to read. That blindness isstructuralfor an own-domain name whose CAA record denies the adapter a certificate, anddeclaredfor a bare adapter-zone vanity, where the adapter writes its own zone and a MITM residual is disclosed rather than excluded.
SEARCH — discovery, following-graph first, indexer-optional
profile spec · normative once ratifiedUnbundles what a centralised search engine bundles — the crawl, the rank, the query log — and keeps discovery coordinator-optional.
- Adopts
- Reads existing public objects (§22) and subscribes to feeds (§25); no new wire bytes. Its coordinator is an
indexerunder the coordinator contract. - Narrow waist
- The default is a local search over the reader's own following-graph — no crawler, no server, no coordinator required at all. Global reach is an opt-in, hired, fireable, self-hostable indexer that adds reach, never authority; there is no ranking token, because there is no protocol token to buy rank with.
- Status
- Draft; whether an indexer is TEE-attested (DeSearch-style) or a plain crawler is a declared, surfaced property, not assumed.
DEPOT — managed infrastructure (the decentralised-cloud profile)
🔴 draft · experimental (not in Core v1)Gateways offer four irreducible primitives — a box, a bucket (which also serves public objects at the edge), a volume and an edge-fn — as fenced coordinators, and everything else (a database, a queue, a Redis, a static site) composes from them as a formula, never a new mechanism. A decentralised cloud where the user holds their keys and can leave.
- Adopts
- No new runtime and no economics. It binds WASI/OCI (edge-fn), S3 / content-addressing and HTTP caching (bucket, including its public-object edge mode), Redis / Postgres wire (the database formula), block devices (volume) and cloud-init (box) over the §18.8a descriptor / tariff / usage-receipt seam. It mints no new wire object at all — even ratings are
ATTESTsigned claims carried on a PUB feed. The coordinator is a singleinfra-servicekind with an extensible service registry. - Narrow waist
- Economics are the operator's — KOTVA guarantees a price exists, is signed, and is metered honestly, never what it is. Reputation is a market of signed, reproducible measurements anyone may publish or aggregate, never one authority's score; the maintainer runs one rater, never the rater.
- Honest cliff
bucketandvolumeare structurally blind only for what the client actually encrypted — both accept arbitrary bytes, so hand them plaintext and it is readable while the operator's declaration stays truthful. A public-serving bucket isblind-routing, seeing which object and when.database,edge-fnandboxareterminating— the operator sees plaintext to serve a query, run a function, or host a node. Marketing a managed database as "private" is non-conformant; the safety net is the owner-held root key and a real exit, not host blindness. A TEE with verifiable attestation upgrades these toattested.
§5.9 The key is the anchor
Every profile above shares one root fact: the keypair does not move. Everything that looks like an identity — a mail address, a domain, a key-name, a provider, a device — is a pointer someone can take away, and none of them are the anchor.
Recovery is adopted, not invented (§4): account abstraction, passkeys, and MPC shares heal a lost device without ever making a name, a domain, or a provider load-bearing over the key itself. A name can expire, a provider can shut down, a device can be lost or seized — the identity underneath, and everything signed under it, survives, because none of those things were ever anything more than a swappable pointer to the same IK.
↔ scroll to see the full diagram
IK itself — holds.§6 Honest ceilings & threat model
KOTVA covers every service's mechanism; it discloses, rather than hides, each service's trust and legal residual.
A research pass tested the substrate against roughly 35 real-world services across communication, money, the gig economy, discovery, infrastructure, civic function, media, and AI: about 29 reduce cleanly to the shared primitives (a handful with disclosed ceilings), about 3 are hard-blocked, about 2 are governance gaps, and one — a lightweight IoT profile — is simply unbuilt.
6.1 Four root ceilings
| Ceiling | What it means |
|---|---|
| Global anti-Sybil | Imperfect at global scale; local scale dissolves it into web-of-trust. Proof-of-personhood bindings raise the floor — they do not close it. |
| Physical-event oracle | "Did the delivery / ride / work happen?" reduces to confirm-plus-dispute; a coordinator can attest, never prove non-fabrication. |
| Legal / authoritative-issuer | Land title, licensing, money-transmission need a real accountable party. The paid-coordinator model absorbs the burden; it does not remove it. |
| Editorial governance | "Who decides the canonical version" for wikis, registries, app stores — distinct from anti-Sybil, with a reputation-weighted curation coordinator as the closest answer. |
Two things are stated as genuinely unsolvable in principle, not merely unsolved: coercion-resistant public-election voting (harder than anti-Sybil) and surveillance-based advertising markets (rejected by design, not a gap to close).
6.2 The security floor (threat model)
A family-level threat model states nine invariants (SEC-1 through SEC-9)[10] that every primitive, binding, coordinator, and profile inherits — fail-closed everywhere, intrinsic self-authenticity, end-to-end confidentiality via adopted crypto only, declared visibility with no silent downgrade, recoverable keys with no single load-bearing device, coordinators that authorise rather than classify, priced rather than centrally filtered abuse, inert replay, and metadata minimised-where-bought and disclosed-where-not. Each MUST ships with a numbered residual — the boundary it does not cross — on the stated house rule that a security section listing only strengths is marketing.
| Residual | What is disclosed |
|---|---|
| R-2 | Self-authentication proves who signed, never that the signer told the truth. A signed lie is still a lie. |
| R-4 | Only structural and attested visibility claims are verifiable; a declared-level claim can never be cryptographically proven honest. |
| R-5 | Recovery heals a lost or seized-and-locked device; it does not heal a device actively compromised while unlocked and in use. |
| R-6 | Coordinator audit is one-directional — a signed receipt confirms a real operation but cannot disconfirm one the coordinator fabricated or omitted. |
| R-7 | Global anti-Sybil is explicitly not solved; a profile must not describe it as solved. |
| R-9 | Sealed sender hides the sender from intermediaries, not the sender's IP, and is a reduction, not elimination. Strong metadata privacy against a global passive adversary (mixnet, onion routing, cover traffic) is research-tier and explicitly non-normative — quarantined because its assurance is not deployment-grade. |
What is quarantined, and why that is honest rather than a defect
Far-future cryptography that is unproven or unsound at deployment grade — mixnet construction, VDFs, PQ envelope tuning — is deliberately kept out of the normative surface and marked non-normative research.[11] This is a stated discipline, not an oversight: a spec that claims a guarantee its implementation does not meet is worse than a spec that names the gap. Concretely, the current mixnet implementation's per-hop cryptography is documented in the code itself as a stand-in for the real per-hop construction the specification calls for — the directory-shape work is real; the cryptography inside it is not yet.
Every invariant above is required to survive with no coordinator and no connectivity at all — authenticity and confidentiality are intrinsic to the object and need no server; anti-abuse collapses to web-of-trust and local policy; replay-inertness and deterministic merge let a partitioned replica reconcile on reconnect with byte-identical convergence. The one disclosed exception is a custodial-escrow trade window, whose settlement is blocked offline by design, leaving only the trade objects themselves to reconcile once connectivity returns. A security property that only holds while a coordinator is reachable is treated as a conformance violation of this document, not a degraded mode.
§7 Status & governance
KOTVA is v0.1.0 — early and evolving.
The substrate, the DMTAP mail profile, and the TRACT (v0.1.0) and WRAP (v0.2.0) profiles are specified; the coordinator contract and the bindings index are the active consolidation work. Far-future cryptographic research stays quarantined to non-normative status rather than perfected on the critical path.
- Spec licence: Creative Commons Attribution 4.0 International (CC BY 4.0) — anyone may implement, quote, and build on it freely with attribution.
- Reference implementations (e.g. Envoir for DMTAP-mail, Pier as the reference gateway/broker, Soko for TRACT) are licensed separately under permissive open-source terms so any party — including competitors — may embed them.
- No protocol token exists, and none will be added. Money is an existing stablecoin; trust is staked existing value; free tiers and subsidies are operator policy, never a protocol requirement.
- Copyright © 2026 VulOS (
github.com/vul-os).
§8 References
This whitepaper is a rendering of the specification tree in the kotva repository, not an independent source. Every numbered claim above cites one of the documents below; where this document and a cited source appear to differ, the source governs.
- [1]
README.md— the repository's front door: layout, design-in-one-breath, and status. - [2]
DIRECTION.mdandcoordinator/CONTRACT.md— the one rule, the four conformance clauses, the content-visibility property, authorise-never-classify, the eleven coordinator kinds, and the economics boundary. - [3]
substrate/README.md,substrate/IDENTITY.md,substrate/ROLES.md,substrate/FEEDS.md,substrate/SYNC.md— the six waist capabilities, re-presented as a standalone, à-la-carte contract. - [4]
00-overview.mdthrough27-realtime-media.md(repository root) — DMTAP, the mail, messaging, and legacy-gateway reference profile. - [5]
bindings/README.md— the adoption index: identity recovery, attestation, reputation, personhood, payments, storage, dispute, media transport, and TEE-verified coordination. - [6]
primitives/OFFER.md,MATCH.md,RESERVE.md,REPUTATION.md,ESCROW.md,ATTEST.md— the six primitives every service composes from. - [7]
profiles/tract/— TRACT, the commerce profile (offer, cart, order, settlement, dispute). - [8]
profiles/wrap/— WRAP, the work profile (jobs, dispatch, delivery, milestone escrow). - [9]
profiles/media.md,social.md,rtc.md,reachability.md,search.md,cloud.md— the MEDIA, SOCIAL, RTC, REACH, SEARCH, and DEPOT profile drafts. - [10]
THREAT-MODEL.md— the family threat model: SEC-1 through SEC-9 and the numbered residuals (R-1 … R-9). - [11]
docs/research/(mixnet.md,vdf.md,PRIMITIVES.md) — far-future cryptography, deliberately quarantined as non-normative. - [12]
GOVERNANCE.md,LICENSE.md,VERSION,Cargo.toml/crates/kotva-mail/Cargo.toml— status, licensing, versioning, and the reference crates behind Pier and the Envoir mesh node.