Open-source platform for offline-first, E2E encrypted, P2P applications
Osvauld is a platform for building truly decentralized applications. Write your app logic in Lua, design your UI in Slint, and osvauld handles identity, encryption, P2P sync, and offline-first storage automatically.
Your App (Lua + Slint/Raylib)
│
▼
┌─────────────────────────────────────┐
│ osvauld Runtime │
│ ┌─────────┐ ┌─────────────────┐ │
│ │ Identity │ │ Loro CRDT Sync │ │
│ │ (Herald) │ │ (Scribe/Butler)│ │
│ └─────────┘ └─────────────────┘ │
│ ┌─────────────────────────────────┐│
│ │ P2P Network (Courier + QUIC) ││
│ └─────────────────────────────────┘│
└─────────────────────────────────────┘
No servers required. Apps sync directly between devices using encrypted P2P connections.
| Capability | Description |
|---|---|
| Self-Sovereign Identity | Ed25519 keypairs for signing, X25519 for encryption. Your identity lives on your devices. |
| UCAN-Based Permits | Fine-grained, delegatable authorization. Share access without a central authority. |
| QUIC Transport | Fast, encrypted connections via iroh. NAT traversal and relay built-in. |
| Loro CRDT Sync | Conflict-free data sync. Works offline, merges automatically when peers reconnect. |
| Dynamic Apps | Hot-load Lua apps with Slint or Raylib UI. No recompilation needed. |
| Sovereign Nodes | Optional always-on nodes (Raspberry Pi, VPS) for relay and offline sync. |
┌─────────────────────────────────────────────────────────────────┐
│ Application Layer │
│ Lua apps, Slint/Raylib UI, business logic │
├─────────────────────────────────────────────────────────────────┤
│ Scribe │
│ CRDT document actors (Loro), per-document sync state │
├─────────────────────────────────────────────────────────────────┤
│ Butler │
│ Storage, services, data layer │
├─────────────────────────────────────────────────────────────────┤
│ Courier │
│ P2P orchestration, handshakes, sync protocol │
│ Actor model: Coordinator → PeerActors │
├─────────────────────────────────────────────────────────────────┤
│ Gurkha │
│ Permit parsing, capability extraction, authorization decisions │
├─────────────────────────────────────────────────────────────────┤
│ Transport │
│ QUIC connections, streams, datagrams, blob transfer │
│ "Dumb byte pipe" - no protocol knowledge │
├─────────────────────────────────────────────────────────────────┤
│ Herald │
│ Identity, encryption, signing primitives │
├─────────────────────────────────────────────────────────────────┤
│ iroh │
│ QUIC, relay, NAT traversal, blob protocol │
└─────────────────────────────────────────────────────────────────┘
| Crate | Purpose | Key Dependencies |
|---|---|---|
herald |
Identity, Ed25519/X25519 crypto, signing | - |
gurkha |
UCAN permit parsing and validation | herald |
transport |
QUIC connections, streams, blobs | iroh |
courier |
P2P orchestration, sync protocol, actors | transport, butler, gurkha |
butler |
Storage, services API, Loro CRDT scribes | herald, gurkha |
app_runtime |
Lua VM, Slint bindings, app lifecycle | butler |
slint_shell |
Desktop shell for running apps | app_runtime |
kunki |
Node runtime (relay, storage, derivations) | courier, butler |
| App | Description | Location |
|---|---|---|
| My Shop | E-commerce with owner/customer roles, order management | sample_apps/my-shop/ |
| My Booking | Service booking with provider/customer roles | sample_apps/my-booking/ |
| Canvas | Collaborative whiteboard with shapes, connectors, live cursors | sample_apps/canvas-app/ |
| Photo Gallery | Shared photo albums with blob sync | sample_apps/photo-gallery/ |
| Demos | Sthalam Guide, Snake game, Math sim, Group chat | sample_apps/osvauld-demos/ |
git clone https://github.com/osvauld/osvauld.git
cd osvauld
cargo run -p slint_shellThis launches Sthalam with the Sthalam Guide app - an interactive introduction to the Xtended Web. The guide covers:
- What is the Xtended Web
- How Sthalam and Osvauld work
- Architecture overview
- Building your own apps
- Rust 1.75+ (with nightly for some features)
- Linux, macOS, or Windows
cargo build -p slint_shell --release
./target/release/slint_shell# Unit tests
cargo test
# Integration tests (P2P sync scenarios)
cargo test -p integration_testsosvauld/
├── herald/ # Identity and crypto primitives
├── gurkha/ # Permit parsing and validation
├── transport/ # QUIC transport layer
├── courier/ # P2P orchestration
├── butler/ # Storage and services
├── app_runtime/ # Lua VM and Slint bindings
├── slint_shell/ # Desktop application shell
├── kunki/ # Node runtime
├── sample_apps/ # Example applications
├── integration_tests/# P2P sync tests
└── docs/ # Technical documentation
- Protocol Specification - P2P protocol, message types, sync flows
- Architecture - System design and crate boundaries
- Setup Guide - Build instructions and IDE setup
- Data Model - Space/Page/Layer hierarchy
- Permits - UCAN-based authorization system
- App Development - Building Lua + Slint apps
- Code Policies - Logging, comments, and code style
We welcome contributions! See CLAUDE.md for code policies and style guidelines.
- Documentation: Improve examples, add diagrams
- Sample Apps: Build new demo apps showcasing features
- UI Polish: Improve Slint components and themes
- Platform Support: Mobile (Android/iOS) improvements
- Performance: Optimize sync for large datasets
- Testing: Expand integration test coverage
- Protocol: Implement new sync strategies
- Crypto: Additional encryption schemes
- Network: Improve NAT traversal reliability
Connect with us on Telegram to discuss features and shape the roadmap
- Issues: GitHub Issues
- Email: osvauld@gmail.com
- Security: For security vulnerabilities, please email us directly instead of opening a public issue.
This project has received funding from FLOSS fund and Innovation grant.
See LICENSE.txt for details.