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.

v0.1.0 — early & evolving CC BY 4.0 no protocol token github.com/vul-os/kotva

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.

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.

CapabilityWhat it isByte-home
① IdentityA 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
② MOTEThe universal object: signed, encrypted, content-addressed. Mail, chat, offers, feed entries, and credentials are all MOTEs.02-mote.md, 05-messaging.md
③ TransportReach 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
④ PUBSigned public objects plus append-only author feeds — authenticity without confidentiality.22-public-objects.md, 25-pubsub.md
⑤ SYNCMulti-author signed CRDT — shared mutable state with no server. The one capability that is genuinely new normative ground.substrate/SYNC.md
⑥ Roles & WakeInfrastructure roles any node may take (relay, mailbox, rendezvous, KT log) plus content-free push to wake offline devices.substrate/ROLES.md
The narrow-waist hourglass Nine profiles fan out at the top, funnelling down into the six waist capabilities at the neck, which funnel further down into six adopted external standards at the base. DMTAP TRACT WRAP MEDIA SOCIAL RTC REACH SEARCH DEPOT THE NARROW WAIST ① Identity ② MOTE ③ Transport ④ PUB ⑤ Sync ⑥ Roles/Wake six capabilities · à-la-carte · shared signing & encoding Ed25519 · CBOR HPKE · COSE MLS · SFrame libp2p mesh WebRTC · TURN Web Push profiles fan out above · adopted standards fan out below · the waist invents new bytes only where nothing existed

↔ scroll to see the full diagram

Figure 1 — the hourglass shape. KOTVA specifies new bytes only at the neck (chiefly Sync); everything above and below is composition of existing standards and thin profiles.

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.

#CapabilityProfiles (standards)Reference implementation
1IdentityEd25519 (RFC 8032), deterministic CBOR (RFC 8949), CONIKS/key-transparency, RFC 6962 Merkle logs
2MOTECOSE (RFC 9052), deterministic CBOR (RFC 8949 §4.2), BLAKE3 content-addressing — the universal signed, encrypted, content-addressed objectkotva-core — the sealed-MOTE encoder
3Transportlibp2p (Kademlia, Circuit Relay v2, DCUtR); store-and-forward at the edge — reach a key online, offline, or over a meshdmtap-p2p (Envoir mesh)
4PUB — Feeds & BlobsNostr-class signed events, IPFS-class content addressing, RFC 6962 Merkle, HTTP cachingkerf-pub — serves §22 over plain HTTPS, no mesh
5SyncCBOR/COSE, Hybrid Logical Clocks, version vectors, range-based set reconciliationflowstock stateless sync; dmtap-clustersync CRDTs (Envoir)
6Roles & Wakelibp2p infrastructure roles (announce/resolve, Circuit Relay v2, short-TTL content-blind mailbox, cache) + content-free, sender-blind Web Push (RFC 8030/8291/8292, VAPID), UnifiedPushthe 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.

Sync — leaderless convergence across replicas, one of which is offline Three replicas, A, B and C, each sign their own operations locally; Replica B is drawn offline, still minting ops with no connection to the others. All three reconcile pairwise over the three-endpoint HTTP protocol, in any order, and join into one deterministic merged state that is byte-identical regardless of who saw which ops first. REPLICA A signs its own ops REPLICA B offline — mints ops REPLICA C signs its own ops leaderless reconciliation — any replica, any order, any subset seen so far GET /sync/vector POST /sync/pull POST /sync/ops DETERMINISTIC JOIN commutative · associative · idempotent — any order, same bytes no primary · no coordinator · reconciles fully offline any two replicas that have applied the same set of ops compute the same bytes

↔ scroll to see the full diagram

Figure 2 — Sync convergence. Three replicas — one of them offline — each sign ops locally and reconcile pairwise over the leaderless three-endpoint protocol; the join is commutative, associative, and idempotent, so every replica that has seen the same ops lands on byte-identical state regardless of order or who was disconnected when.

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:

CDDL
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
}
kindCRDT typeBehaviour
set-add / set-removeOR-Setadd-wins observed-remove; a remove cancels only the specific add-tags it saw, so a concurrent unseen add survives
lww-setLWW registergreater HLC wins; an exact tie breaks on larger encoded-value bytes
deathremove-wins death-certificatedominates the OR-Set — a bare add can never outrank an explicit delete, closing the "resurrection" hole
counterPN-counterper-author delta sets; an author may only advance its own entry, enforced by the op signature
seq-insert / seq-removeRGA sequenceordered lists/text via left-origin references and tombstones
tree-movemovable treereparenting 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.

The coordinator contract — hired, not depended on Peer A and Peer B are joined by a solid direct line that works with no coordinator present. A coordinator node floats above, joined to both peers only by dashed, optional lines, carrying four fenced properties: accountable, swappable, self-hostable, and content-visibility declared. PEER A holds its own IK PEER B holds its own IK direct — works with zero coordinators COORDINATOR gateway · relay · indexer · labeler · arbiter · oracle … optional — adds reach, never gates function ACCOUNTABLE SWAPPABLE SELF-HOSTABLE VISIBILITY DECLARED a coordinator is hired, not depended on — the solid line is load-bearing, the dashed lines never are

↔ scroll to see the full diagram

Figure 3 — the coordinator contract's shape. The direct peer-to-peer path (solid) is what the substrate guarantees on its own; a coordinator (dashed) is an optional accelerant fenced by four conformance clauses. Custodial escrow is the family's one disclosed exception (§3.4).

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

ClassMeaningExamples
blindForwards 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-routingCannot read the payload, but sees routing metadata — envelope, SNI, addresses, size, timing.SNI-passthrough ingress, buffer/mailbox, SFU media-relay (RFC 9605)
terminatingTerminates 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.

KindProvidesTypical visibility
gatewayLegacy-mail bridge (MX, DKIM egress, legacy client surfaces)terminating (legacy leg is plaintext)
relayMesh reachability for NAT'd peersblind / structural
media-relayForwards SFrame-encrypted call/stream mediablind-routing — structural only where the SFU commits sframe_required=true, else declared; routing/timing/participant graph visible either way
reachability-adapterngrok-style public subdomains for arbitrary box servicesblind-routing (SNI-passthrough) preferred
indexerSearch / discovery over public objectscorpus is public plaintext; query channel terminating unless attested
labelerModeration labels, opt-in, subscribablen/a — labels public objects
matcherReal-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 kindper service — bucket blind (blind-routing when serving public objects), volume blind when guest-encrypted, edge-fn/database/box terminatingattested
arbiterDispute resolution (staked jury)terminating for evidence, disclosed
oraclePhysical-world / real-fact attestationterminating, disclosed
custodial-escrowHolds the trade float for a trade windowterminating 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.

NeedBind toHonest maturity note
Identity recoveryAccount abstraction (ERC-4337 / EIP-7702), passkeys, MPC (Turnkey / Privy / Web3Auth / Lit)Solid, mainstream — recovery finality is real; UX is web2-grade.
AttestationEAS, W3C Verifiable CredentialsPlumbing is mature; the portable-reputation layer on top is nascent.
ReputationOpenRank (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-personhoodWorld 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 / settlementx402 (HTTP-402 stablecoin), USDC on Base/SolanaInfra is real; genuine demand is still thin.
Storage — hot / permanent / scaleWalrus / Arweave / Filecoin (+ Storj)Behaves like a CDN, not an archive; retrieval on bulk tiers historically slow.
Dispute / arbitrationKleros-class staked juriesReal but small and unproven at scale; risks re-centralising toward professional jurors.
Mesh reachabilitylibp2p — Circuit Relay v2, DCUtR, Kademlia, Noise, QUICMature; profiled directly, not re-derived.
Messaging cryptoMLS (RFC 9420)Standards-track, mature group ratchet.
Media transport / E2EWebRTC + SFrame (RFC 9605, keyed from the MLS epoch) + TURNMature and standardised; a media relay that commits to sframe_required=true is content-blind (blind-routing — routing metadata stays visible).
Verifiable coordinationTEEs (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 recipeOFFER · 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. ORACLEATTEST), 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.

A thin base, apps on top, swappable seams on the side A thin base (ADOPT + the six-capability substrate + the coordinator contract) sits at the floor; the six primitives are an opt-in coordination toolkit a messaging node uses none of; applications sit on top; coordinators and bindings are swappable side-seams that absorb hard problems. ⑥ PROFILES — nine thin profiles over one substrate ③ PRIMITIVES OFFER · MATCH · RESERVE · REPUTATION · ESCROW · ATTEST ② SUBSTRATE Identity · MOTE · Transport · PUB · Sync · Roles ① ADOPT — Ed25519 · HPKE · CBOR ④ COORDINATOR CONTRACT safe centralisation, made checkable BIND- INGS a hard problem is never hard-wired — it is a swappable binding or a fenced coordinator ORACLE (⊂ATTEST), DISPUTE (arbiter) and PAY (stablecoin) are composite roles, not extra primitives — DIRECTION.md §2

↔ scroll to see the full diagram

Figure 4 — the architecture. Applications sit on top of a thin base; everything hard is either adopted (bindings) or fenced (coordinators) as swappable side-seams, never re-derived at the top.

DMTAP — mail, messaging & the legacy gateway

🟢 Core v1 · core §00–§21, §26

Email 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 on kotva-core and kotva-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.0

Goods, 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.0

The 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/Progress are ordinary Sync ops), Feeds & Blobs (a WorkOrder is an immutable content object, an Attestation a 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 ratified

A 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 ratified

Posts, 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 labeler coordinators; search is a swappable indexer.
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 §27

A 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=true is 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_signal object, 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-relay coordinator 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 ratified

The 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-adapter coordinator, 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 is structural for an own-domain name whose CAA record denies the adapter a certificate, and declared for a bare adapter-zone vanity, where the adapter writes its own zone and a MITM residual is disclosed rather than excluded.

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 ATTEST signed claims carried on a PUB feed. The coordinator is a single infra-service kind 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
bucket and volume are 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 is blind-routing, seeing which object and when. database, edge-fn and box are terminating — 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 to attested.

§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.

The key is the anchor A solid keypair sits at the centre. Six pointers — a DNS name, an 8-word key-name, a mail provider, a gateway, a relay, and a device — orbit it on dashed spokes. One pointer, the mail provider, is shown fading and struck through, with the caption "swap it — the anchor doesn't move." IK keypair DNS name key-name relay device gateway mail provider swap it — the anchor doesn't move

↔ scroll to see the full diagram

Figure 5 — the key is the anchor. A name, a key-name, a gateway, a relay, or a provider are all swappable pointers to the same keypair (dashed spokes); lose one, or fire one, and the anchor — the 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

CeilingWhat it means
Global anti-SybilImperfect 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-issuerLand 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.

ResidualWhat is disclosed
R-2Self-authentication proves who signed, never that the signer told the truth. A signed lie is still a lie.
R-4Only structural and attested visibility claims are verifiable; a declared-level claim can never be cryptographically proven honest.
R-5Recovery heals a lost or seized-and-locked device; it does not heal a device actively compromised while unlocked and in use.
R-6Coordinator audit is one-directional — a signed receipt confirms a real operation but cannot disconfirm one the coordinator fabricated or omitted.
R-7Global anti-Sybil is explicitly not solved; a profile must not describe it as solved.
R-9Sealed 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. [1]README.md — the repository's front door: layout, design-in-one-breath, and status.
  2. [2]DIRECTION.md and coordinator/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. [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. [4]00-overview.md through 27-realtime-media.md (repository root) — DMTAP, the mail, messaging, and legacy-gateway reference profile.
  5. [5]bindings/README.md — the adoption index: identity recovery, attestation, reputation, personhood, payments, storage, dispute, media transport, and TEE-verified coordination.
  6. [6]primitives/OFFER.md, MATCH.md, RESERVE.md, REPUTATION.md, ESCROW.md, ATTEST.md — the six primitives every service composes from.
  7. [7]profiles/tract/ — TRACT, the commerce profile (offer, cart, order, settlement, dispute).
  8. [8]profiles/wrap/ — WRAP, the work profile (jobs, dispatch, delivery, milestone escrow).
  9. [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. [10]THREAT-MODEL.md — the family threat model: SEC-1 through SEC-9 and the numbered residuals (R-1 … R-9).
  11. [11]docs/research/ (mixnet.md, vdf.md, PRIMITIVES.md) — far-future cryptography, deliberately quarantined as non-normative.
  12. [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.