Linux-first · REST-native · Multi-model

Small jobs,
done well.

One small, fast process on io_uring. Three shapes of data. Everything speaks REST, down to the single record. Your friendly neighborhood database.

Engine 1 · REL

Slim relational.

Tables, indexes, views and left joins for the facts that have a fixed shape. A row can point at a key or a document in the same domain.

  • /sql
  • row endpoints
  • CSV · TSV import
  • KVREF · JSONREF
$ curl -X POST localhost:3000/store-api/sql/shop \
    -H "Authorization: Bearer $KEY" \
    -d 'SELECT c.name, o.total
        FROM orders o LEFT JOIN customers c ON c.id = o.customer
        WHERE o.total > 40'
→ rows, as JSON
$ curl -X PUT localhost:3000/store-api/json/shop/docs/order-17 \
    -H "Authorization: Bearer $KEY" \
    -d '{"total": 42.5, "items": ["mug", "socks"]}'
HTTP/1.1 200 OK
ETag: "1"

$ curl 'localhost:3000/store-api/json/shop/search?q=items:mug' \
    -H "Authorization: Bearer $KEY"
Engine 2 · JSON

JSON documents.

Versioned documents with ETag for the data that arrives as it is: webhooks, catalog attributes, agent context. Index it, search it, load it in bulk.

  • secondary indexes
  • search queries
  • NDJSON bulk load
  • ETag · If-Match
Engine 3 · KV

Key-value.

Sessions that expire on their own, flags that flip live, counters and state. A resumable watch stream tells your services the moment a key changes.

  • TTL
  • prefix listings
  • watch over SSE
  • bulk delete
$ curl -X PUT localhost:3000/store-api/kv/shop/keys/session:42 \
    -H "Authorization: Bearer $KEY" -H "X-TTL: 3600" -d 'alice'

$ curl -N localhost:3000/store-api/kv/shop/watch?prefix=flag: \
    -H "Authorization: Bearer $KEY"
event: put
data: {"key":"flag:checkout","value":"on"}
REST all the way down

No driver. No protocol. Just a URL for every record.

https://db.example.com/store-api/kv/shop/keys/session:42

Every language and every standard tool can talk to LuraDB out of the box: curl, a browser, a shell script, your framework's HTTP client. HTTP, native HTTPS or a Unix domain socket on the host. API keys with per-domain permissions. An event stream, metrics and health on the same port.

And for the newest kind of client, a built-in MCP server: AI agents get the same domains, the same permissions, and a real place to keep state, context and facts.

Where LuraDB lives
  1. Your own service

    one package, one unit, a REST API it talks to directly

  2. Sessions that clean up after themselves

    no Redis on the side

  3. Memory for your agents

    keys for state, documents for context, tables for facts

  4. Flags that flip live

    no redeploy, no polling

  5. The webhook inbox

    catch every payload as it is

  6. One customer, one domain

    its own keys, its own permissions

  7. On the host, out of the way

    Unix socket, systemd, journald

All nine, with the engines that carry them →
Built in the open

Rust.
On GitHub.
Opens up.

The source is public, releases ship as a .deb, the changelog marks every API change. Functional Source License 1.1: each release becomes Apache 2.0 two years after it ships.

WHAT LURADB IS NOT

Not Oracle, PostgreSQL or MySQL. Not MongoDB, Cassandra or Spark. No analytical engine, no cluster, no data-warehouse ambition.

WHY "LURA"

Linux + io_uring + async. The letters the architecture is built on.

DURABILITY

A write is confirmed only once it is in the write-ahead log. A failed fsync stops the service; the next start recovers from the log.

Two minutes to a running database.

  1. Install the package

    $ sudo apt install ./luradb_*.deb

    apt resolves the dependencies, creates the system user and generates the admin key. Linux amd64, kernel 6.1 or newer.

  2. Start the service

    $ sudo systemctl start luradb

    Under systemd, logging to journald. Review the config first if you like: bind address, data paths, HTTPS.

  3. Curl it

    $ curl localhost:3000/health
    {"status":"ok","version":"0.5.1", …}

    Then the first five minutes in the handbook: a key, a document, a table. No Linux machine handy? Docker works too.