Maybe this iteration of Waggle is the right one
Find a file
David Pollak 8863db20ab
WIP
Signed-off-by: David Pollak <feeder.of.the.bears@gmail.com>
2026-08-22 11:28:25 -04:00
core WIP 2026-08-22 11:28:25 -04:00
docs WIP 2026-08-22 11:28:25 -04:00
spike Initial end to end 2026-08-02 16:42:39 -04:00
.dockerignore WIP 2026-08-22 11:28:25 -04:00
.gitignore Initial end to end 2026-08-02 16:42:39 -04:00
Cargo.lock WIP 2026-08-22 11:28:25 -04:00
Cargo.toml WIP 2026-08-22 11:28:25 -04:00
LICENSE Initial end to end 2026-08-02 16:42:39 -04:00
README.md Finished rename 2026-08-02 16:51:32 -04:00

KeyHive-Automerge Git Vault

A pure-Rust system that encrypts every Automerge change set using KeyHive and distributes them through a local git repository managed entirely via gix.

Problem

KeyHive provides forward secrecy: a member added at epoch N normally cannot decrypt content from before N. Automerge requires every participant to possess every change set to converge. This tension is resolved through a tombstone mechanism: whenever a document key rotates, a tombstone commit encrypts the previous epoch key under the new one, allowing current members to follow the chain backward while revoked members cannot follow forward.

Architecture

  • waggle-core — library combining KeyHive, Automerge, and gix
  • spike/ — feasibility proof tests (Phase 0)

Main abstractions: Participant, Identity, DocSession, GitStore, KeyLog, EncryptedCommit.

See docs/architecture.md for details.

Quick Start

# Prerequisites: Rust 1.80+, Cargo
cargo test --manifest-path waggle/Cargo.toml

See docs/getting-started.md for detailed setup.

Test Suite

Phase Tests Description
0 - Spike 6 Feasibility and API contracts
1 - Harness 7 Workspace, dependencies, test harness
2 - Protocol 8 Encrypted commit protocol
3 - Sync 7 Automerge change set synchronization
4 - Membership 17 Membership, revocation, tombstones
5 - E2E 2 Full Alice/Bob/Cindy/Dan scenario
6 - Property 11 Proptest, fuzz, model checking
Total 58 All passing

Documentation

License

Apache 2.0 — see LICENSE.