Get Started
Liven is a database for real-time data. One query language. One binary.
Ingest streams. Transform on the fly. Store durably. No separate systems to juggle.
Stream-First
Append-only log with real-time broadcast subscriptions. Every write is immediately available to live listeners.
One Binary
Embed it, serve it, or shell into it. The same binary adapts to how you want to work. ~1.5 MB embedded core.
Crash-Proof
Integrity checks on every frame. Append-only segments with safe recovery. No data loss on power failure.
Quick Start
1. Install Liven
curl --proto '=https' --tlsv1.2 -sSfL https://livendb.com/install | sh# Install via Dockerdocker pull ghcr.io/livendb/liven:latestdocker run -p 43121:43121 -p 43120:43120 -v ./data:/var/lib/liven livendb/liven:latest
2. Launch the Server
liven start
On first start, Liven generates a secure admin auth key and prints it to stdout. Save it — it will never be shown again.
3. Open the Web Console
Open http://localhost:43120 in your browser. The Web UI is embedded in the binary — no separate server needed.
4. Run Your First Query
Insert a record and query it back using the pipeline DSL:
from("events").insert("e1", {type: "click", userId: "u1"})from("events") | filter(type == "click")
Use as an Embedded Library
Add Liven to your Cargo.toml and use it directly from Rust:
[dependencies]liven = { version = "0.0.9", default-features = false }
use liven::Liven;use liven::query::{Pipeline, Filter};use serde_json::json;let db = Liven::open("./myapp_data")?;db.insert("events", "e1", json!({"type": "click"}))?;let results = db.filter("events", Filter::field("type").eq("click"))?;assert_eq!(results.len(), 1);