Le-Space

Data and software you own.

The Local-First Peer-to-Peer Stack

No servers. No accounts. No passwords. Your data lives on your device and travels directly to the people you share it with. Networks run with always-on peers or entirely without them — add one whenever a group wants more reach, and when none is reachable, devices connect directly by scanning a code. Neither mode is the fallback.

The five layers

Every layer works without a central service — and every layer is an open-source building block you can use on its own.

Projects

Demos and prototypes, not slideware — each project is a building block of the stack with demo, source, and packages.

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

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

in development
IdentityDataSync

Class booking for yoga studios with more than one location, built to show what the stack does when an application actually depends on it.

  • No relay at all: devices meet by scanning a QR code or opening an invite link — libp2p-webrtc-qr as the only transport, which makes it the working proof that the free path is enough.
  • No account, no password: a passkey is the identity, and a second device is approved by the first.
  • Passes are an append-only log: the balance is folded from the events and never stored, so two counters in different places can sell and redeem without asking anyone for permission.
  • Where it stops being comfortable is written down: the handbook has a chapter on what the app cannot do, and the repository documents the limits it ran into rather than the features it hoped for.

→ Showcase for OrbitDB and WebRTC over QR — a real application, not a demo

Relay Button screenshot

Relay Button

beta
Infrastructure

Deploy libp2p relay nodes on demand — the toolchain at the core of the local-first stack.

  • One click, one relay: deploys a libp2p/OrbitDB relay (signaling, bootstrap, IPFS pinning) — run it for a meeting, a project or years, then stop it.
  • Full automation: build qcow2 RootFS images, publish to IPFS, manage VM lifecycle & retention via CLI and GitHub Actions.
  • Embeddable UI: React & Svelte components — the actual "Relay Button" — for any app.
  • Bootstrap discovery: relays register themselves; apps discover them automatically.
  • New — remote browser replication: CI spins up a real browser on a fresh VM in another network and verifies true cross-network P2P replication end-to-end — replacing services like testingbot.com for local-first P2P apps.
  • Runs on Aleph Cloud: decentralized compute, VMs without a cloud account; further providers — decentralized and centralized — planned.

libp2p WebRTC over QR screenshot

libp2p WebRTC over QR

beta
Sync

Two browsers connect directly as libp2p peers — no relay, no signaling server. One phone scans the WebRTC handshake off the other screen.

  • Signaling as a QR code: offer and answer travel out-of-band as signed, deflate-compressed payloads instead of through a circuit relay. A text field is the copy/paste fallback.
  • Signed, not just scanned: the SDP carries the DTLS fingerprint, so signing it with the libp2p key binds the WebRTC session to the peer id — the same idea certhash uses in WebRTC-Direct. That is what makes it safe to skip the usual encryption handshake.
  • Tampering fails closed: a modified payload is rejected before any dial happens, and a browser refuses its own offer instead of self-dialing.
  • Works without infrastructure: useful where there is no relay to reach — the same room, the same LAN, an air-gapped network.

→ New — released on npm as @le-space/libp2p-webrtc-qr

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

Simple Todo

tutorial
IdentityDataSync

Tutorial for local-first P2P PWAs: WebAuthn/Passkey identity, OrbitDB data, browser-to-browser sync. No server, no accounts, no passwords.

▶ simple-todo — chapter "main" — every visitor automatically joins the same shared todo list; just open the URL.

▶ collab01 — chapter "collab01" — create your own lists and share them with chosen peers via their OrbitDB address.

▶ passkey01 — chapter "passkey01" — sign in with a passkey instead of a throwaway key. Your WebAuthn DID signs every entry and is shown as its author.

▶ acl01 — chapter "acl01" — private, owner-only lists with per-DID write permissions. Grant or revoke access at runtime, without the list address changing.

Universal Connectivity — chatUniversal Connectivity — relay button chat

Universal Connectivity

stable
Sync

Our fork of the official libp2p project with the Relay Button built in: the cross-language showcase — chat between Go, Rust, TypeScript and Nim peers in the browser — extended so anyone can deploy their own relay on demand.

▶ chat — the public room with the peers currently connected — discovery takes about half a minute after you open it.

▶ relay button — the embedded Relay Button: pick a tier and deploy your own relay without leaving the chat.

OrbitDB Relay

beta
InfrastructureData

Relay and pinning service keeping OrbitDB databases available while peers are offline.

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

OrbitDB WebAuthn DID

beta
Identity

Passkey-based identity for OrbitDB — no extensions, just your browser and a biometric sensor. Every oplog entry has to be signed, so the real question is where the signing key lives:

  • Plain keystore (OrbitDB default): the Ed25519 key sits unencrypted in the browser's IndexedDB. Anything that runs script on your origin can copy your identity and write as you — permanently.
  • WebAuthn-encrypted keystore: same key, AES-GCM-encrypted at rest, rehydrated into memory only after a WebAuthn unlock (PRF, largeBlob or hmac-secret). One prompt per session, writes stay fast; safe at rest, in memory while the tab is open. The pragmatic default — demo.
  • Hardware-backed keys (varsig): no OrbitDB keystore at all. The key is generated inside the authenticator — Secure Enclave, TPM, security key — and never leaves it. One passkey prompt per write, and nothing in the browser left to steal — demo.
  • Why varsig: an authenticator never hands you a plain signature over your payload — it signs its own authenticatorData + clientDataJSON-hash structure. The algorithm varies on top of that: Apple, Android and Windows platform authenticators sign with ES256 (P-256), while EdDSA/Ed25519 (COSE -8) is in the spec and works on a handful of security keys — so a passkey DID cannot assume either curve. Varsig is the self-describing envelope carrying structure and algorithm together, so the assertion verifies as an OrbitDB oplog signature and, via toUcantoSigner(), as a UCAN delegation signature. Without it a hardware key cannot be the signer of either, whichever curve it happens to use.

▶ webauthn-did — a passkey becomes your OrbitDB identity — the DID is derived from the credential, no keystore involved.

▶ encrypted-keystore — an Ed25519 keystore encrypted at rest, unlocked once per session by WebAuthn — the pragmatic default.

▶ varsig — no keystore at all — the authenticator signs every entry itself, one passkey prompt per write.

UCAN Store screenshot

UCAN Store

in development
IdentityArchive

Browser-based storage with WebAuthn/Passkey DIDs and UCAN delegations — upload to Filecoin (planned) without accounts or passwords.

→ Storacha upload-service fork — UCAN 1.0 upgrade planned

p2pass

prototype
IdentitySync

Peer-to-peer distribution of passkey credentials — recover your identity when a device is lost.

Akash Deploy PWA

prototype
Infrastructure

Relay-Button-style deployments on Akash Network — a second decentralized compute target.

→ Consolidation with Relay Button planned

Orbit Blog

prototype
DataSyncArchive

Decentralized blogging that replicates between browsers — publish without a hosting provider.

OrbitDB ⇄ Storacha Bridge

beta
Archive

Backup and restore local-first data to Filecoin/Storacha with full hash and identity preservation.

Use cases

Standalone projects grow out of the stack. Each has a short pitch deck — as a page to link and as a PDF to forward.

A

OrbitDB Relay

Backup, pinning and recovery for local-first data

The node that keeps OrbitDB databases reachable, archives them on decentralized storage and can restore an entire collaboration environment — data, identities, permissions.

B

WebRTC Public Data Map

Where direct connections hold — and where a relay has to step in

Users connect devices directly via QR code — and in passing produce the map showing in which Wi-Fi and which mobile network WebRTC holds up and where it struggles. That is exactly where a relay sells itself.

C

Yoga Suci

Class management for yoga studios — no server, no subscription, no account

The first complete application on the local-first stack: programme, passes, till and check-in run directly between a studio's devices. What sells is not the app but the payment integration and the archive storage underneath.

D

Local-First Consulting

Consulting and delivery for local-first and peer-to-peer software

More and more companies want out of cloud dependency — and find nobody who has actually built local-first. We built the whole stack, we run it, and we pass it on as consulting, a prototype or a finished product.

FAQ

Common questions about local-first, encryption, metadata and infrastructure — answered honestly, including what isn't finished yet.