KARST SOURCE

Pre-alpha · unaudited · open source

Private communication without a single owner.

KARST is an experimental messenger. Messages are end-to-end encrypted with hybrid post-quantum key agreement, and the relays that carry them are run by independent operators — no company sits in the middle, and none has to.

X25519 + ML-KEM-768 key agreement Double Ratchet per message Noise_NK to a pinned relay AGPL-3.0

ST-02

What this is, and what it is not

Privacy claims are easy to write and hard to keep. These are the ones this build actually makes, and the ones it does not.

HOLDS

Content stays between the ends

A relay carries ciphertext it cannot open. Keys are generated on your device and never leave it.

HOLDS

No phone number, no account

An identity is a keypair you hold. Nothing links it to a number, an email or a billing record.

HOLDS

Operators are interchangeable

Relays are chosen, not assigned. Anyone can run one, and moving between them does not change who you are.

DOES NOT HOLD

This is not anonymity

A relay still sees an address connecting to it and the timing of that connection. Metadata is reduced here, not removed.

DOES NOT HOLD

Not independently audited

The cryptographic composition has had no external review. Some primitives are feature-gated and off by default.

DOES NOT HOLD

Not ready to depend on

Pre-alpha. Formats still change, and a failure of security, privacy or delivery should be assumed possible.

ST-03

What it looks like

A desktop client, dark by default. The parts that matter are the ones that say what is happening: which relay carried this, what the fingerprint is, whether a file arrived intact.

The KARST desktop client: a conversation, with the encryption panel showing the
                key agreement and the network route on the right.
PLATE 1 A conversation. The right-hand panel is not decoration — it names the key agreement, the safety number to compare out of band, and the route this message actually took.
The KARST feed: publications from accounts you follow, with a composer at the top.
PLATE 2 Publications reach your subscribers directly, fanned out to each of them. There is no server holding the posts, and no feed ranking them.
ST-04

How a message travels

Four steps, and at each one the honest answer to “what can the relay see?”

PLAN VIEW — one message, one relay. Multi-homing repeats the middle section at a second operator.PROFILE VIEW — one message, one relay. Multi-homing repeats the middle section at a second operator.
  1. 01

    Agree on keys, twice over

    First contact runs X25519 and ML-KEM-768 together, so recording today's traffic for a future quantum computer buys nothing.

  2. 02

    Address a box no one can link to you

    The drop-box address is derived from the session and blinded per relay, and it rotates. Two operators comparing notes cannot match it up.

  3. 03

    Hand over a fixed-size block

    Every envelope is padded to the same length, so the relay learns nothing from how big a message was.

  4. 04

    The relay stores, and knows little

    It sees a connecting address, an opaque box and a constant-size blob. It does not log them — but it is a machine someone else runs, and that is a claim, not a proof.

ST-05

Run a relay

A relay is a small Rust binary. It stores sealed messages for a while and hands them over when the owner asks. It holds no user list, no directory of who talks to whom, and nothing it could later be asked to produce.

Binary
one static Rust build
State it keeps
sealed mail, briefly
Request-path logging
none, enforced by a test
Admission
proof-of-work or invite

THE FULL PROCEDURE →

# build
cargo build --release -p relay
# run, and print the id clients pin
./target/release/relay
relay-id 9f3a…c7d1
listening 0.0.0.0:9444
ST-06

Check it yourself

Nothing here asks to be believed. Each claim has something you can read or run.

The maturity map

A line-by-line account of what works, what is stubbed, and what is blocked — kept honest as the code moves.

docs/STATUS.md →

The claims matrix

The ceiling for anything written about this project, including this page.

docs/SECURITY_CLAIMS.md →

Safety numbers

Compare a 60-digit fingerprint out of band and you have checked the channel without trusting any relay.

How it is computed →

The test suite

Properties are pinned by tests that fail when the property is lost — including one asserting the relay writes nothing down.

Browse the tests →
ST-07

Follow the work

Development is public and noisy. Nothing is stable yet, and the changelog says so plainly.