CHOOSE YOUR DEPTH 01 · OVERVIEW 02 · COMPARE 03 · HOW IT WORKS 04 · DOCUMENTATION

THE TECHNICAL VERSION · E2EE · SERVER-INDEPENDENT CORE · OFF-GRID

No mandatory
middle.

Komms removes the mandatory service provider from the message path. Peers communicate directly, through volunteer relays that can only see sealed ciphertext, over radio, or by carrying encrypted bundles offline.

Open the architecture
NO PHONE NUMBERNO SIGN-UPNO CENTRAL SERVICENO TELEMETRYAGPLv3
01

No one in the middle

Peers talk directly, via volunteer relays holding only sealed ciphertext, or over radio. There is no checkpoint where scanning can be mandated. That property comes from the architecture, not a privacy policy.

ARCHITECTURE SPEC →
02

State-of-the-art cryptography

Hybrid post-quantum key agreement combines X25519 with ML-KEM-768. Sessions use Double Ratchet with encrypted headers and XChaCha20-Poly1305 authenticated encryption.

CRYPTOGRAPHY SPEC →
03

Off-grid is first-class

The same sealed envelopes can ride local Wi-Fi, commodity Meshtastic LoRa radios, or .kkb courier files. Direct BLE and animated bundle QR are planned paths, not inflated into shipped claims.

TRANSPORT SPEC →
04

Your keys, your data

Identity is a keypair minted on your device, not an account in a database. History is local, encrypted at rest, exportable, and deletable without asking a provider.

IDENTITY & TRUST →

A small security core. Everything else builds down.

Komms is split into narrow Rust crates with one-way dependencies. Applications can change without rewriting cryptography, and the cryptographic core can be reviewed without pulling in the UI or network stack.

KULT

Komms Ubiquitous Link Transmission

READ THE FULL LAYER MODEL →
APPLICATIONSDesktop · Mobile · Headless

KULT-FFI

The typed bridge

Owns
UniFFI records, commands, events, and the embedded runtime used by Kotlin, Swift, and desktop shells.
Must never
Invent behavior beyond kult-node or expose secret state to an app shell.

KULT-NODE

The orchestrator

Owns
Account and device lifecycle, sessions, durable delivery, deterministic sync, transport choice, and the event bus.
Must never
Reimplement cryptography, codecs, storage rules, or carrier I/O owned by a lower layer.

KULT-PROTOCOL

The wire contract

Owns
Typed content, padding, sealed envelopes, delivery tokens, fragmentation, group fan-out, and linked-device bundles.
Must never
Touch raw key material; it asks kult-crypto to perform cryptographic operations.

KULT-STORE

The encrypted memory

Owns
Sealed messages, sessions, contacts, devices, media, queues, scheduled work, local metadata, and backups.
Must never
Perform network I/O or decide when and where an envelope should travel.

KULT-TRANSPORT

The carrier boundary

Owns
Reachability, discovery, link profiles, QUIC/TCP, LAN, Meshtastic, mailbox, and sneakernet adapters.
Must never
See plaintext, conversation semantics, or long-term identity secrets.

KULT-CRYPTO

The security core

Owns
Identity and device keys, hybrid PQXDH, Double Ratchet, sender keys, AEAD, fingerprints, and sync sealing.
Must never
Perform I/O. Secret types zeroize on drop and the crate stays independently auditable.

From compose box to encrypted receipt.

The app never chooses cryptography or a carrier. Each KULT module does one bounded job, and each handoff preserves enough state to survive crashes, delays, duplicates, and routes changing underneath the conversation.

send(conversation, content)

The shell submits intent.

Desktop, Android, or iOS calls the same typed command through kult-ffi. The shell does not receive ratchet keys, construct envelopes, or select a route.

local state: queued

Durability comes before transmission.

kult-node asks kult-store to seal the outbound record first. A crash cannot turn an unsent message into fake success, and scheduled messages create no envelope before their UTC gate.

content-v1 → padded bytes

Meaning becomes bounded protocol data.

kult-protocol validates the typed content and pads it into fixed buckets. A transport never learns whether the content is text, an edit, a poll, or call control.

ratchet step → XChaCha20-Poly1305

The message protects itself.

kult-crypto advances the per-device Double Ratchet, encrypts the header and padded content, and returns opaque ciphertext. The protocol wraps it in a sealed envelope.

reachability → latency → cost

The scheduler can try more than one path.

kult-node ranks fresh carrier evidence and may send the same idempotent envelope over internet and mesh. Small-MTU links receive authenticated fragments; receivers safely deduplicate.

queued → sent → delivered

Only encrypted evidence advances the UI.

Handing bytes to a link is not delivery. The recipient persists and decrypts the message, then returns an encrypted receipt before the sender may display delivered.

Receive path: carrier → reassembly → deduplication → ratchet decrypt → sealed persistence → app event → optional encrypted receipt.

Different observers see different layers.

Link encryption is useful, but it is not load-bearing. Even a hostile carrier receives a self-protecting envelope with no plaintext conversation content or Komms identity key.

READ THE ENVELOPE SPEC →

VISIBLE WITHOUT MESSAGE KEYS

VERSION + ENVELOPE TYPEOPAQUE DELIVERY TOKENV2: HOUR-ALIGNED RETENTION BUCKETCIPHERTEXT BODY

The token is scoped to delivery, not a public account identifier. A v2 relay may delete at the coarse authenticated bucket; it cannot extend retention or infer the exact content deadline.

AVAILABLE ONLY AFTER AUTHENTICATED DECRYPTION

ENCRYPTED RATCHET HEADERTYPED CONTENTISO/IEC 7816-4 PADDINGAUTHENTICATION TAG

The endpoint validates the ratchet, strips padding, interprets the bounded content kind, persists it locally, and rejects unknown or malformed data without releasing plaintext.

192 B smallest padding bucket233 B Meshtastic payload cap≤ 2 LoRa frames for short padded text

Long-lived identity. Short-lived message keys.

The design separates who a device is from the keys protecting any one message. Compromising a current key should not unlock the past, and a future ratchet step can recover security after compromise.

01 · IDENTITY

Device-owned roots

Ed25519 and X25519 identity material is created locally, cross-bound, and verified through fingerprints and safety numbers.

02 · FIRST CONTACT

Hybrid PQXDH

X25519 and ML-KEM-768 both contribute to the initial secret, so an attacker must break both classical and post-quantum inputs.

03 · CONVERSATION

Double Ratchet

Root and chain keys advance per message, encrypted headers reduce metadata, and bounded skipped keys tolerate delayed off-grid delivery.

04 · EACH MESSAGE

Authenticated encryption

XChaCha20-Poly1305 protects padded content and associated context. Secret types zeroize when their job is finished.

OPEN THE NORMATIVE CRYPTOGRAPHY SPEC →

The envelope stays the same. The route does not.

Every adapter reports reachability and a link profile. The node ranks latency and cost, refuses bulk airtime when only mesh is available, and treats duplicate arrival as normal.

ONE SEALED ENVELOPE, FOUR WAYS HOME

Internet: libp2p · QUIC/TCP · DHT · relay v2 · hole punching
SHIPPEDGLOBAL · MS
LAN: mDNS discovery · direct QUIC on shared Wi-Fi
SHIPPEDSITE · MS
BLE direct: phone-to-phone GATT carrier
PLANNED~100 M · S
LoRa Mesh: stock Meshtastic radios · USB/TCP · multi-hop
BETAKM–100 KM · S–H
Sneakernet: sealed .kkb files · animated QR planned
FILES SHIPPEDANYWHERE · HUMAN

DURABLE MESSAGE PATH

Store, forward, retry.

Text and other asynchronous content can wait locally, use volunteer mailboxes, cross a LoRa mesh, or travel in a courier file. The delivery engine preserves truth across hours or weeks.

INTERNET · LAN · MAILBOX · LORA · FILE

TRANSIENT LIVE-AUDIO PATH

Direct QUIC or no call.

Ratchet-protected call control authorizes one physical device. Fresh directional keys protect bounded Opus media on /komms/call/1; no audio enters history, backup, relay, TCP, radio, or delayed work.

LIVE-AUDIO CONTRACT →

Honest limits.

A serious threat model describes what the system cannot do as carefully as what it can. Komms is also pre-audit software and must not yet be treated as production-ready for high-risk use.

IT IS DESIGNED TO PROTECT
  • Message content from anyone carrying or relaying it
  • Recorded ciphertext against future quantum computers
  • Local history on a lost, locked device
  • Communication continuity during internet shutdowns
IT CANNOT PROTECT
  • A device that is already compromised or seized unlocked
  • The physical fact that a radio transmitted
  • You if a contact shares your messages
  • Anonymity against a global passive adversary
READ THE COMPLETE THREAT MODEL →
M0–M3 ✓: design framework, crypto core, protocol, encrypted storage, internet transport, and headless node built and tested
Beta implementation ✓: desktop, Android, and iOS shells; rich messages; groups; media; revocable devices; Message Requests; and direct-QUIC audio calls
0.4.2 Beta: unsigned public test packages, Connect-code discovery, durable mailbox v2, replaceable operating modes, conformance fixtures, and revision-bound validation evidence
Research track: an optional Freenet carrier could add another decentralized store-and-forward path without replacing Komms crypto, native apps, or existing links. Read proposed ADR-0025 →
Stable gates: physical radio/device/network qualification, qualified operators, production signing, authenticated updates, and wider distribution
Independent gates: external security review, independent conformance/reproduction, accessibility assessment, and app-store distribution

GO DEEPER

Every choice is documented.

The documentation contains the complete threat model, protocol design, cryptographic construction, implementation guide, and architecture decision records.

Open the documentation → Back to the simple overview