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.
Jede Schicht funktioniert ohne zentralen Dienst — und jede Schicht ist ein Open-Source-Baustein, den du einzeln nutzen kannst.
Bausteine
Showcases, Prototypen, Komponenten und Bibliotheken — keine Folien. Jedes ist Open Source, die meisten mit Live-Demo, viele als npm-Paket.
yogasuci.le-space.de
Yogasūcī (योगसूची)
Yogasūcī (योगसूची)
Showcase
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
simple-todo.le-space.de
Relay Button
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.
webrtc-qr.le-space.de
libp2p WebRTC over QR
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.le-space.de
simple-todo
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.
▶ 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.
▶ qr01 — Kapitel „qr01" — eine Liste per gescanntem Code an ein anderes Gerät übergeben. Kein Relay, keine Bootstrap-Liste, kein Internet: Die beiden Geräte finden sich direkt, und die Daten bleiben im Speicher des Browsers.
connect.nicokrause.com
chat
Universal Connectivity
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.
nikrause.github.io
OrbitDB Relay
OrbitDB Relay
beta
InfrastrukturDaten
Relay- und Pinning-Service, der OrbitDB-Datenbanken verfügbar hält, während Peers offline sind.
le-space.github.io
webauthn-did
OrbitDB 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.
P2P Spreadsheet + UCEP
P2P Spreadsheet + UCEP
Hackathon
DatenSync
Eine Peer-to-Peer-Tabellenkalkulation auf einem Yjs-CRDT, die ihre Fähigkeiten anderen Anwendungen anbietet. Das Universal Connectivity Extension Protocol lässt libp2p-Anwendungen ankündigen, was sie können, und die Erweiterungen der anderen direkt finden — ohne zentrale Registrierung. Die Diensterkennung läuft über libp2p-eigenes Identify: Jede Verbindung tauscht ohnehin aus, welche Protokolle beide Seiten sprechen — eine Erweiterung kündigt sich also an, indem sie eines ist. In einer Woche entstanden, beim Hackathon des libp2p-Projekts selbst, erster von fünf Beiträgen.
→ Erster Platz, libp2p Universal Connectivity Hackathon, Dezember 2025
ucan.nicokrause.com
UCAN Store
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
p2pass
Prototyp
IdentitätSync
Peer-to-Peer-Verteilung von Passkey-Credentials — Identitäts-Wiederherstellung bei Geräteverlust.
Akash Deploy PWA
Akash Deploy PWA
Prototyp
Infrastruktur
Relay-Button-artige Deployments auf dem Akash Network — zweites dezentrales Compute-Target.
→ Konsolidierung mit Relay Button geplant
Orbit Blog
Orbit Blog
Prototyp
DatenSyncArchiv
Dezentrales Bloggen mit Replikation zwischen Browsern — publizieren ohne Hosting-Anbieter.
OrbitDB ⇄ Storacha Bridge
OrbitDB ⇄ Storacha Bridge
beta
Archiv
Backup und Restore von Local-First-Daten nach Filecoin/Storacha — mit vollständiger Hash- und Identitätserhaltung.
FAQ
Häufige Fragen zu Local-First, Verschlüsselung, Metadaten und Infrastruktur — ehrlich beantwortet, inklusive dessen, was noch nicht fertig ist.
Longevity — Daten bleiben über Jahrzehnte nutzbar und überleben jeden Server
Privacy — verschlüsselte Daten, die Service-Provider nicht lesen können
User control — volle Datenhoheit: kopieren, ändern, löschen
Wir gehen einen Schritt weiter: Es gibt gar keinen Hosting-Server. Die App selbst ist ein statisches JavaScript/HTML-Bundle, als PWA auf IPFS publiziert — sie startet auf jedem Desktop- oder Mobilgerät auch ganz ohne Server: über ein IPFS-Gateway, als Download oder vom USB-Stick.
Der Sync läuft Browser-zu-Browser über libp2p. Relays sind optionale, austauschbare Peers, die jeder starten kann — nie das Backend der App.
Das Gateway lässt sich ganz weglassen. Wer diese Seite über eine Domain wie local-first.le-space.de aufruft, läuft weiterhin über ein öffentliches IPFS-Gateway — dessen Betreiber sieht deine IP-Adresse und welche Seiten du abrufst, also genau das Protokoll, das auch ein herkömmlicher Webserver führt. Wer stattdessen einen eigenen IPFS-Node betreibt (IPFS Desktop oder Kubo) und die Browser-Erweiterung IPFS Companion installiert, bekommt IPFS-Adressen direkt vom lokalen Node ausgeliefert — beim Gateway landet gar keine Anfrage mehr.
Damit klar ist, was das genau bringt: Es gibt keinen Betreiber mehr, bei dem ein Protokoll deiner Besuche zusammenläuft. Dein Node spricht aber weiterhin mit anderen Peers, um die Inhalte zu holen, und die sehen, welche CIDs du anfragst — ein echter Gewinn an Privatsphäre gegenüber einem Hosting-Anbieter also, aber keine Anonymität.
Ja. Beim ersten Start steht auf dem Consent-Screen eine Checkbox: „Mit dem öffentlichen libp2p-Relay-Netz verbinden“. Nimmst du das Häkchen raus, baut der Browser gar keine Verbindung nach außen auf — kein Bootstrap, kein Relay. Nichts kündigt dich an, niemand kann dich finden, und kein fremder Knoten pinnt deine Daten.
Verbinden kannst du dich trotzdem, nur bewusst statt automatisch: per QR-Code direkt zwischen zwei Geräten, oder indem du dir einen eigenen Relay startest, dem nur deine Geräte vertrauen.
Davon unabhängig ist die Frage, wo die Daten liegen: Das bestimmt der Storage-Typ in der IPFS/OrbitDB-Konfiguration. LevelDB bzw. IndexedDB schreibt sie auf die Platte deines Geräts, Memory-Storage hält sie nur im Arbeitsspeicher. Die Simple-Todo-Demo läuft derzeit mit Memory-Storage, ein Reload beginnt also von vorn.
Beim Transport: ja. Alle libp2p-Verbindungen sind verschlüsselt (Noise-Protokoll) — Relays und Netze leiten nur Ciphertext weiter.
At rest: standardmäßig nein. Oplog-Einträge auf Relays oder Pinning-Diensten sind lesbar, solange keine Payload-Verschlüsselung aktiviert ist.
Payload-Verschlüsselung geht heute schon mit orbitdb/simple-encryption (Stand 0.0.2 — früh, aber funktionsfähig): Einträge werden verschlüsselt, die Replikation funktioniert weiter. Unser Prototyp de2do ging weiter und leitete den Schlüssel per WebAuthn PRF aus einem Passkey ab — kein Passwort, Schlüssel wird nie gespeichert (wird derzeit wiederbelebt). Verschlüsselte Backups stehen auf der Roadmap der storacha-bridge.
Peer-to-peer heißt nicht unsichtbar. Je nach Setup fallen an: PeerIDs (pseudonyme öffentliche Schlüssel), Datenbank-Adressen und Pubsub-Topics (sichtbar für Peers in denselben Topics) sowie IP-Adressen (sichtbar für die Relays, mit denen du dich verbindest — wie bei jeder Internetverbindung).
So minimieren wir sie: eigenen Relay betreiben (dann sieht kein Dritter deine IPs), Relays on demand starten und danach stoppen, und Payload-Verschlüsselung aktivieren, sodass Relays nur Ciphertext sehen. Direkte Browser-zu-Browser-Verbindungen sind ohnehin Ende-zu-Ende verschlüsselt.
Nein. Aleph Cloud ist unser erstes Deployment-Target, nicht das einzige. akash-deploy-pwa macht Relay-Button-artige Deployments bereits auf dem Akash Network, und weitere Anbieter sind geplant — dezentrale ebenso wie bewusst zentrale, denn Provider-Unabhängigkeit schließt die Freiheit ein, zentrales Hosting zu wählen.
Die vollständige Plattform-Abstraktion des Deployment-Layers (abstraktes Provider-Interface in @le-space/core) ist ein Kern-Arbeitspaket unserer Funding-Roadmap. Das Prinzip: Die App hängt nie von einem bestimmten Anbieter ab — Infrastruktur ist austauschbar.
Aleph-Cloud-VMs laufen auf Compute Resource Nodes, die von unabhängigen Node-Betreibern betrieben werden. Wie bei jedem Hosting — zentral oder dezentral — könnte der Betreiber der physischen Maschine bei einer normalen VM prinzipiell Arbeitsspeicher und Disk einsehen. Der Unterschied zur klassischen Cloud: Es ist nicht ein Konzern, sondern viele unabhängige Betreiber — und man kann den Node wählen oder selbst betreiben.
Warum das in unserer Architektur weniger wiegt: Ein Relay ist Weiterleitungs- und Pinning-Infrastruktur, kein Daten-Treuhänder. Der Transport ist Ende-zu-Ende verschlüsselt (libp2p/Noise), Schlüssel leben in den Browsern und Authenticatoren der Nutzer — nie auf der VM. Mit aktivierter Payload-Verschlüsselung (siehe Verschlüsselungs-Frage) speichert und leitet ein Relay ausschließlich Ciphertext weiter — ein neugieriger Node-Betreiber sieht nichts Verwertbares.
Für Deployments, denen selbst das nicht genügt, gibt es Confidential VMs (TEE): Aleph Cloud unterstützt Confidential Computing auf Basis von AMD SEV — der Arbeitsspeicher der VM ist hardwareverschlüsselt, sodass selbst der Node-Betreiber nicht hineinschauen kann. Die Evaluierung TEE-gestützter Relays für sensible Anwendungsfälle steht auf unserer Roadmap.
Nichts geht verloren: Deine Daten liegen auf deinem Gerät, und jede App funktioniert offline weiter. Sind Kollaborateure gleichzeitig offline, synchronisieren sich Änderungen einfach beim nächsten Treffen zweier Peers.
Teams, die Verfügbarkeit rund um die Uhr wollen, halten die gemeinsame Datenbank mit einem Relay samt Pinning (z. B. orbitdb-relay) online, während alle schlafen — und für Daten, die Geräte und Relays überleben sollen, gibt es die Archiv-Schicht (Storacha/Filecoin) mit dauerhaften Backups.
Jede OrbitDB-Datenbank hat einen Access Controller: eine Liste kryptografischer Identitäten, die schreiben dürfen. Schreibzugriffe sind signiert; jeder Peer prüft die Signaturen selbst — kein Server entscheidet.
Mit unserem WebAuthn-Identity-Provider ist diese Identität dein Passkey (Face ID, Touch ID, Security Key) — kein Account, kein Passwort. Lesen regelt die Replikation und, falls aktiviert, die Payload-Verschlüsselung.
Zum Ausprobieren: Das Tutorial-Kapitel acl01 legt eine Liste an, die nur dem Owner gehört, teilt sie per Adresse und vergibt zur Laufzeit Schreibrecht an eine zweite DID — die Adresse bleibt dabei gleich.
Keine Tokens, kein Mining, kein globaler Konsens. OrbitDB ist eine Local-First-Datenbank: Jede Datenbank gehört den Menschen, die sie nutzen, repliziert nur zwischen deren Peers und führt parallele Änderungen zusammen (CRDT-basierter Oplog) — statt dass sich die ganze Welt auf eine Kette einigen muss.
Das macht sie schnell, kostenlos nutzbar und privat im Geltungsbereich. Benachbarte dezentrale Netze nutzen wir dort, wo sie helfen: IPFS für die App-Verteilung, Filecoin fürs Archiv, dezentrales Compute (Aleph, Akash) für Relays — aber deine Daten liegen nie auf einer öffentlichen Chain.
Ja — und der Betrieb kostet nichts. Mit libp2p-webrtc-qr tauschen zwei Geräte den WebRTC-Handshake selbst aus: als gescannten QR-Code, wenn sie im selben Raum sind, oder als Einladungslink über einen beliebigen Messenger. Steht die Verbindung, ist sie eine ganz normale libp2p-Verbindung — gossipsub bildet sein Mesh darüber, OrbitDB repliziert darüber, und ein drittes Gerät, das sich mit einem beliebigen Mitglied verbindet, ist im selben Mesh.
Der Handshake steht im Fragment des Links, dem Teil hinter dem #, den Browser grundsätzlich nicht an einen Server schicken. Kein Signalisierungsserver sieht ihn — es gibt auch keinen, der ihn sehen könnte.
Damit ist es zweierlei zugleich. Es ist der kostenlose Normalfall: Eine App kann ohne jede Infrastruktur ausgeliefert werden und Menschen trotzdem zusammenarbeiten lassen. Und es ist der Rückfallweg, der trägt, wenn jedes Relay ausfällt, unerreichbar oder blockiert ist — weil nichts mehr an einer festen Adresse steht, das man blockieren könnte. Stören müsste man einen QR-Code, den jemand vor eine Kamera hält.
Verlangt wird dafür ein menschlicher Moment. Jemand scannt oder verschickt einen Link, die andere Seite öffnet ihn. Ein Relay erspart genau das: Es ist rund um die Uhr erreichbar, und Peers finden einander, ohne dass jemand etwas tut. Besteht ein Mesh erst einmal, lässt sich eine abgerissene Verbindung über die verbliebenen Peers wiederherstellen — die erste Vorstellung macht aber immer ein Mensch.
Zwei ehrliche Grenzen. Geräte in verschiedenen Netzen brauchen weiterhin STUN, um ihre eigene öffentliche Adresse zu erfahren; das ist eine einzelne UDP-Frage an einen öffentlichen Server, transportiert keine Daten und lässt sich abschalten, wenn beide Geräte im selben Netz sind. Und ein QR-Code fasst eine begrenzte Menge, weshalb ein Handshake mit vielen Kandidaten als animierte Folge statt als einzelnes Standbild läuft.
Ein Relay ist eine kleine VM — auf dezentralem Compute (Aleph, Akash) typischerweise wenige Euro pro Monat, und bei On-Demand-Deployments zahlst du nur, solange er läuft. Stoppst du ihn, funktionieren die Apps weiter; es fehlt nur der immer erreichbare Treffpunkt.
Entscheidend: Jeder kann einen Relay sponsern — der App-Entwickler, eine Community, eine Universität, eine Firma — oder du selbst für deine eigenen Geräte. Der Relay ist austauschbare Infrastruktur, nicht das Backend eines Anbieters.