No description
  • Rust 79.4%
  • HTML 15.6%
  • Kotlin 1.7%
  • JavaScript 1.5%
  • Shell 1.1%
  • Other 0.7%
Find a file
rene 13cf7be1e0 Doku: Installationsanleitung und Handtest-Plan
- docs/installation.md: von null auf lauffaehig fuer Mac, m16, iPhone
  und A71 (inkl. Termux-Ausblick); benennt die realen Stolpersteine
  (cargo nicht im PATH auf dem Mac, build-essential auf Xubuntu),
  erklaert Datenablage, Zuruecksetzen und haeufige Fehlermeldungen
- docs/handtest.md: Testplan fuer den ersten echten Zwei-Geraete-Lauf
  mit USB-Stick — Kernsync, QR-Kopplung per Webcam, Schluesselwechsel,
  Handys als Anzeige und als Data Mule; mit Protokollvorlage und den
  Punkten, an denen ich Reibung vermute (macOS-Metadateien, Abziehen
  waehrend des Schreibens, Uhrzeiten)
- README verweist auf docs/
2026-07-28 17:06:09 +02:00
apo-cli Spec 012 Kap. 6 umgesetzt + Weboberfläche apo-ui 2026-07-28 15:52:47 +02:00
apo-core Spec 012 Kap. 6 umgesetzt + Weboberfläche apo-ui 2026-07-28 15:52:47 +02:00
apo-ui QR-Anzeige und Kamera-Scan zum Koppeln 2026-07-28 16:50:24 +02:00
decisions Kotlin-Binding-Prototyp: Loro via UniFFI ohne Blocker 2026-07-26 19:47:22 +02:00
docs Doku: Installationsanleitung und Handtest-Plan 2026-07-28 17:06:09 +02:00
prototypes Kotlin-Binding-Prototyp: Loro via UniFFI ohne Blocker 2026-07-26 19:47:22 +02:00
research Kotlin-Binding-Prototyp: Loro via UniFFI ohne Blocker 2026-07-26 19:47:22 +02:00
specs Doku: QR-Kopplung und ihre Praxisgrenzen 2026-07-28 16:50:24 +02:00
.gitignore apo-core: Referenzimplementierung von Spec 010/011 2026-07-28 06:22:04 +02:00
Cargo.lock Spec 012 Kap. 6 umgesetzt + Weboberfläche apo-ui 2026-07-28 15:52:47 +02:00
Cargo.toml Spec 012 Kap. 6 umgesetzt + Weboberfläche apo-ui 2026-07-28 15:52:47 +02:00
lastenheft.md Initial commit: Projektfundament 2026-07-26 19:14:02 +02:00
LICENSE apo-core: Referenzimplementierung von Spec 010/011 2026-07-28 06:22:04 +02:00
README.md Doku: Installationsanleitung und Handtest-Plan 2026-07-28 17:06:09 +02:00
systembeschreibung.md Doku: QR-Kopplung und ihre Praxisgrenzen 2026-07-28 16:50:24 +02:00

survive

Austausch, wenn nichts mehr geht.

Ein offenes, dezentrales System für Kommunikation, Wissen und Organisation im Krisenfall — vom Stromausfall bis zum langfristigen Wiederaufbau. Kein Server, keine Cloud, kein Konto. Zwei Geräte und ein USB-Stick genügen.

Arbeitstitel survive, Konzeptname APO — der endgültige Name ist bewusst noch offen.


Warum?

Unsere Kommunikation hängt an Infrastruktur, die im Ernstfall zuerst ausfällt. Die Bausteine für Alternativen existieren längst — LoRa-Funk, Offline-Karten, Wissensdatenbanken, lokale KI — aber es fehlt die integrierende Schicht: ein gemeinsames Datenmodell, das über beliebige Wege synchronisiert, und Module, die im Alltag nützlich sind, damit sie im Ernstfall gepflegt und vertraut sind.

Genau diese Schicht baut dieses Projekt. Als offene Spezifikation, damit jeder kompatible Software bauen kann — und als Referenzimplementierung in Rust, die beweist, dass es funktioniert.

Was heute schon geht

  • 🔌 Vollständig offline: Daten reisen als signierte Pakete („Bundles") auf USB-Sticks von Hand zu Hand — jeder Stick, jedes Gerät ist automatisch ein Kurier.
  • 🔀 Konfliktfrei: CRDT-Technik vereinigt parallele Offline- Änderungen deterministisch — beliebige Reihenfolge, Dubletten, monatealte Stände.
  • ✍️ Fälschungssicher: Jedes Bundle ist Ed25519-signiert; Manipulation wird erkannt und verworfen.
  • 🔑 Vertraulich pro Kreis: Verschlüsselung mit einem geteilten Kreisschlüssel — so einfach erklärbar wie ein WLAN-Passwort.
  • 🤝 Vertrauen bleibt menschlich: Geräte werden per Fingerprint-Vergleich gekoppelt und lokal benannt; Störer lassen sich blockieren — ohne zentrale Instanz, die das für dich entscheidet.
  • 📦 Große Dateien: Blob-Zerlegung mit Manifest; unvollständige Übertragung ist ein normaler Zwischenstand, kein Fehler.
  • 🪶 Genügsam: Eine Änderung ≈ 264 Bytes; ein 10.000-Positionen- Inventar braucht ~7 MB RAM — alte Hardware reicht.

Schnellstart

$ cargo build --release          # Binary: target/release/apo

$ apo init                       # Identität dieses Geräts
$ apo kreis neu                  # Kreisschlüssel (persönlich teilen!)
$ apo doc neu inventar "Vereinslager" --kreis <keyid>
$ apo setze <doc-id> wasser_liter 120
$ apo stick /Volumes/USBSTICK    # → Stick zum nächsten Gerät tragen

Auf dem zweiten Gerät: apo init, apo kreis add <hex>, apo stick /Volumes/USBSTICK — fertig, beide Stände laufen zusammen.

➡️ Kompakter Überblick über Features und Nutzung: systembeschreibung.md

Architektur in einem Absatz

Ein Rust-Kern (apo-core) kapselt Identitäten (Ed25519), CRDT-Dokumente (Loro), signierte CBOR-Bundles und den Bundle-Store mit Sneakernet-Profil. Transporte sind austauschbare Adapter nach DTN-Vorbild (RFC 9171) — der USB-Stick ist der erste, LoRa/Meshtastic und LAN folgen als weitere Adapter, ohne dass sich am Format etwas ändert. Oberflächen (Android, Desktop) entstehen später nativ auf demselben Kern; das Kotlin-Binding via UniFFI ist erprobt.

Projektstruktur

Pfad Inhalt
apo-core/ Referenzimplementierung des Kerns (Rust-Bibliothek)
apo-cli/ Kommandozeile apo: Identität, Dokumente, Kreise, Stick-Sync
apo-ui/ Lokale Weboberfläche apo-ui für Schlüssel und Geräte (Nachtsicht-Stil)
docs/ Anleitungen: Installation, Handtest
specs/ Nummerierte Spezifikationen im RFC-Stil (Format vor App!)
decisions/ Architekturentscheidungen (ADRs) mit Begründung
research/ Technologie-Recherche, Messberichte, Namensfindung
prototypes/ Wegwerf-Prototypen zur Klärung von Technikfragen
lastenheft.md Ausgangsdokument: die Anforderungen
systembeschreibung.md Kompakter Überblick: Features und Nutzung

Prinzipien

  1. Spezifikation vor Implementierung — überleben soll das Format, nicht eine App (ADR 001)
  2. Ein Rust-Kern, native Oberflächen (ADR 002)
  3. Sneakernet ist ein Transport erster Klasse (ADR 003)
  4. Permissive Lizenz im Kern (Apache 2.0), GPL nur isoliert (ADR 004)
  5. Alltagsnutzen als Überlebensstrategie, niemals eigene Hardware (ADR 005)

Status und Fahrplan

Heute: Kern, CLI und Weboberfläche funktionieren — Specs 010, 011 und 012 vollständig umgesetzt; 17 Tests, realer Zwei-Geräte-Stick-Test.

Als Nächstes: LoRa-Transport über Meshtastic-Knoten (Spec 030) · LAN-Sync · Android-UI auf dem Rust-Kern · Module: Karten, Wissen, Inventar-Oberfläche.

Lizenz

Apache 2.0 — Spezifikationen zusätzlich unter CC BY 4.0 nutzbar. Jeder darf kompatible Software bauen; Interoperabilität sichert die Spezifikation, nicht die Lizenz.