Le-Space

Daten und Software, die dir gehören.

Der Local-First Peer-to-Peer Stack

Keine Server. Keine Accounts. Keine Passwörter. Deine Daten bleiben auf deinem Gerät und gehen direkt an die Menschen, mit denen du sie teilst. Netzwerke laufen mit dauerhaft erreichbaren Peers oder ganz ohne sie — nimm einen dazu, wenn eine Gruppe mehr Reichweite will, und ist keiner erreichbar, verbinden sich die Geräte direkt über einen gescannten Code. Keiner der beiden Zustände ist der Notbetrieb.

Die fünf Schichten

Jede Schicht funktioniert ohne zentralen Dienst — und jede Schicht ist ein Open-Source-Baustein, den du einzeln nutzen kannst.

Projekte

Demos und Prototypen statt Folien — jedes Projekt ist ein Baustein des Stacks mit Demo, Quellcode und Paketen.

Yogasūcī (योगसूची) screenshot

Yogasūcī (योगसूची)

in Entwicklung
IdentitätDatenSync

Kursbuchung für Yogastudios mit mehreren Standorten — gebaut, um zu zeigen, was der Stack leistet, wenn eine Anwendung tatsächlich davon abhängt.

  • Ganz ohne Relay: Geräte finden sich per gescanntem QR-Code oder Einladungslink — libp2p-webrtc-qr als einziger Transport, und damit der laufende Beweis, dass der kostenlose Weg genügt.
  • Kein Konto, kein Passwort: Ein Passkey ist die Identität, ein zweites Gerät wird vom ersten freigegeben.
  • Karten sind ein Append-only-Log: Das Guthaben wird aus den Ereignissen gefaltet und nie gespeichert — zwei Theken an verschiedenen Orten können verkaufen und entwerten, ohne jemanden um Erlaubnis zu fragen.
  • Wo es unbequem wird, steht geschrieben: Das Handbuch hat ein Kapitel darüber, was die App nicht kann, und das Repository dokumentiert die Grenzen, an die sie gestoßen ist, statt der Funktionen, die man sich erhofft hatte.

→ Showcase für OrbitDB und WebRTC über QR — eine echte Anwendung, keine Demo

Relay Button screenshot

Relay Button

beta
Infrastruktur

Libp2p-Relay-Nodes auf Knopfdruck — die Toolchain im Zentrum des Local-First-Stacks.

  • Ein Klick, ein Relay: deployt einen libp2p/OrbitDB-Relay (Signaling, Bootstrap, IPFS-Pinning) — läuft für ein Meeting, ein Projekt oder Jahre, danach wird er gestoppt.
  • Volle Automatisierung: qcow2-RootFS-Images bauen, auf IPFS publizieren, VM-Lifecycle & Retention per CLI und GitHub Actions.
  • Einbettbare UI: React- & Svelte-Komponenten — der eigentliche „Relay Button" — für jede App.
  • Bootstrap-Discovery: Relays registrieren sich selbst; Apps finden sie automatisch.
  • Neu — Remote-Browser-Replication: Die CI startet einen echten Browser auf einer frischen VM in einem anderen Netz und verifiziert echte Cross-Network-P2P-Replikation Ende-zu-Ende — ersetzt Dienste wie testingbot.com für Local-First-P2P-Apps.
  • Läuft auf Aleph Cloud: dezentrales Compute, VMs ohne Cloud-Account; weitere Anbieter — dezentrale wie zentrale — geplant.

libp2p WebRTC over QR screenshot

libp2p WebRTC over QR

beta
Sync

Zwei Browser verbinden sich direkt als libp2p-Peers — ohne Relay, ohne Signaling-Server. Ein Handy scannt den WebRTC-Handshake vom Bildschirm des anderen.

  • Signaling als QR-Code: Offer und Answer laufen out-of-band als signierte, deflate-komprimierte Payloads statt über ein Circuit-Relay. Ein Textfeld dient als Copy/Paste-Fallback.
  • Signiert, nicht nur gescannt: das SDP enthält den DTLS-Fingerprint — wird es mit dem libp2p-Schlüssel signiert, ist die WebRTC-Session an die Peer-ID gebunden. Dasselbe Prinzip wie certhash bei WebRTC-Direct, und genau deshalb darf der übliche Verschlüsselungs-Handshake entfallen.
  • Manipulation scheitert sicher: eine veränderte Payload wird vor jedem Verbindungsversuch abgelehnt, und ein Browser verweigert sein eigenes Offer statt sich selbst zu dialen.
  • Funktioniert ohne Infrastruktur: nützlich, wo kein Relay erreichbar ist — derselbe Raum, dasselbe LAN, ein abgeschottetes Netz.

→ Neu — auf npm veröffentlicht als @le-space/libp2p-webrtc-qr

Simple Todo — simple-todoSimple Todo — collab01Simple Todo — passkey01Simple Todo — acl01 simple-todo

Simple Todo

Tutorial
IdentitätDatenSync

Tutorial für local-first P2P-PWAs: WebAuthn/Passkey-Identität, OrbitDB-Daten, Browser-zu-Browser-Sync. Kein Server, keine Accounts, keine Passwörter.

▶ simple-todo — Kapitel „main" — alle Besucher teilen automatisch dieselbe gemeinsame Todo-Liste; URL öffnen genügt.

▶ collab01 — Kapitel „collab01" — eigene Listen erstellen und gezielt per OrbitDB-Adresse mit anderen Peers teilen.

▶ passkey01 — Kapitel „passkey01" — Anmeldung per Passkey statt Wegwerf-Schlüssel. Die WebAuthn-DID signiert jeden Eintrag und wird als Autor angezeigt.

▶ acl01 — Kapitel „acl01" — private Listen nur für den Owner, mit Schreibrechten pro DID. Rechte zur Laufzeit vergeben oder entziehen, ohne dass sich die Listen-Adresse ändert.

Universal Connectivity — chatUniversal Connectivity — relay button chat

Universal Connectivity

stabil
Sync

Unser Fork des offiziellen libp2p-Projekts mit eingebautem Relay-Button: der Cross-Language-Showcase — Chat zwischen Go-, Rust-, TypeScript- und Nim-Peers im Browser — erweitert, sodass jeder auf Knopfdruck einen eigenen Relay deployen kann.

▶ chat — der öffentliche Raum mit den gerade verbundenen Peers — die Discovery braucht nach dem Öffnen etwa eine halbe Minute.

▶ relay button — der eingebettete Relay-Button: Tier wählen und einen eigenen Relay deployen, ohne den Chat zu verlassen.

OrbitDB Relay

beta
InfrastrukturDaten

Relay- und Pinning-Service, der OrbitDB-Datenbanken verfügbar hält, während Peers offline sind.

OrbitDB WebAuthn DID — webauthn-didOrbitDB WebAuthn DID — encrypted-keystoreOrbitDB WebAuthn DID — varsig webauthn-did

OrbitDB WebAuthn DID

beta
Identität

Passkey-basierte Identität für OrbitDB — keine Extensions, nur Browser und Biometrie. Jeder Oplog-Eintrag muss signiert werden; die eigentliche Frage ist, wo der Signaturschlüssel liegt:

  • Klartext-Keystore (OrbitDB-Default): der Ed25519-Schlüssel liegt unverschlüsselt in der IndexedDB des Browsers. Alles, was auf deinem Origin Skript ausführt, kann die Identität kopieren und dauerhaft in deinem Namen schreiben.
  • WebAuthn-verschlüsselter Keystore: derselbe Schlüssel, per AES-GCM at rest verschlüsselt und erst nach einem WebAuthn-Unlock (PRF, largeBlob oder hmac-secret) in den Speicher geholt. Ein Prompt pro Session, Schreibvorgänge bleiben schnell; sicher at rest, im Speicher solange der Tab offen ist. Der pragmatische Default — Demo.
  • Hardwaregestützte Schlüssel (Varsig): gar kein OrbitDB-Keystore. Der Schlüssel entsteht im Authenticator — Secure Enclave, TPM, Security Key — und verlässt ihn nie. Ein Passkey-Prompt pro Schreibvorgang, dafür bleibt im Browser nichts zu stehlen — Demo.
  • Wozu Varsig: ein Authenticator liefert nie eine schlichte Signatur über deine Payload — er signiert seine eigene Struktur aus authenticatorData + clientDataJSON-Hash. Dazu kommt, dass das Verfahren variiert: die Plattform-Authenticator von Apple, Android und Windows signieren mit ES256 (P-256), während EdDSA/Ed25519 (COSE -8) zwar im Standard steht und auf einigen Security Keys funktioniert — eine Passkey-DID kann also weder die eine noch die andere Kurve voraussetzen. Varsig ist der selbstbeschreibende Envelope, der Struktur und Verfahren gemeinsam transportiert, sodass die Assertion als OrbitDB-Oplog-Signatur und über toUcantoSigner() auch als UCAN-Delegation-Signatur verifizierbar ist. Ohne Varsig kann ein Hardware-Schlüssel für beides nicht der Signierer sein — ganz gleich, welche Kurve er verwendet.

▶ webauthn-did — ein Passkey wird zur OrbitDB-Identität — die DID leitet sich aus dem Credential ab, ganz ohne Keystore.

▶ encrypted-keystore — ein Ed25519-Keystore, at rest verschlüsselt und einmal pro Session per WebAuthn entsperrt — der pragmatische Default.

▶ varsig — gar kein Keystore — der Authenticator signiert jeden Eintrag selbst, ein Passkey-Prompt pro Schreibvorgang.

UCAN Store screenshot

UCAN Store

in Entwicklung
IdentitätArchiv

Browser basierter Storage mit WebAuthn/Passkey-DIDs und UCAN-Delegationen — Upload nach Filecoin (geplant) ohne Accounts oder Passwörter.

→ Storacha-Upload-Service-Fork — Upgrade auf UCAN 1.0 geplant

p2pass

Prototyp
IdentitätSync

Peer-to-Peer-Verteilung von Passkey-Credentials — Identitäts-Wiederherstellung bei Geräteverlust.

Akash Deploy PWA

Prototyp
Infrastruktur

Relay-Button-artige Deployments auf dem Akash Network — zweites dezentrales Compute-Target.

→ Konsolidierung mit Relay Button geplant

Orbit Blog

Prototyp
DatenSyncArchiv

Dezentrales Bloggen mit Replikation zwischen Browsern — publizieren ohne Hosting-Anbieter.

OrbitDB ⇄ Storacha Bridge

beta
Archiv

Backup und Restore von Local-First-Daten nach Filecoin/Storacha — mit vollständiger Hash- und Identitätserhaltung.

Use-Cases

Aus dem Stack wachsen eigenständige Projekte. Jedes hat ein kurzes Pitch-Deck — als Seite zum Verlinken und als PDF zum Weiterschicken.

A

OrbitDB Relay

Backup, Pinning und Wiederherstellung für Local-First-Daten

Der Knoten, der OrbitDB-Datenbanken erreichbar hält, sie auf dezentralem Speicher archiviert und eine komplette Kollaborationsumgebung — Daten, Identitäten, Berechtigungen — wiederherstellen kann.

B

WebRTC Public Data Map

Die Karte der Netze, die Peer-to-Peer wirklich zulassen

Nutzer verbinden Geräte per QR-Code direkt miteinander — und erzeugen dabei nebenbei den Datensatz, der zeigt, welches WLAN, welcher Mobilfunkanbieter und welcher Browser Peer-to-Peer erlaubt. Rot, orange, grün, weltweit.

C

Yoga Suci

Kursverwaltung für Yogastudios — ohne Server, ohne Abo, ohne Konto

Die erste vollständige Anwendung auf dem Local-First-Stack: Programm, Karten, Kasse und Check-in laufen direkt zwischen den Geräten eines Studios. Verkauft wird nicht die App, sondern die Zahlungsanbindung und der Archivspeicher darunter.

FAQ

Häufige Fragen zu Local-First, Verschlüsselung, Metadaten und Infrastruktur — ehrlich beantwortet, inklusive dessen, was noch nicht fertig ist.