Docs

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 Docker
docker pull ghcr.io/livendb/liven:latest
docker 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);