strata*
0:try 1:how 2:deploy 3:api
livrasand@github — node 20.6+

a key-value store whose storage engine is git.

free, self-hosted, unlimited — where redis has usage tiers. setup asks a few more minutes of you than a managed service does, but every write ends up as a commit to your own repository: versioned, diffable, auditable. built to ship your first project on. if it later earns money and outgrows strata, moving to redis or any other database is an export, not a rewrite.

deploy on vercel one-click, free tier

deploy on netlify

deploy on render

docker / heroku / node →

try it — the whole api fits on one screen

curl -X PUT $URL/kv/welcome -H "Content-Type: application/json" -d '{"value":"hello","ttl":3600}'
{"ok":true,"key":"welcome","seq":43,"queued":false,"persisted":true}

curl $URL/kv/welcome
{"key":"welcome","value":"hello"}

curl $URL/keys
{"keys":["welcome","session:9f2c","flag:beta"]}

curl $URL/health
{"ok":true,"mode":"long","journal":{"seq":43,"pendingOps":0,"snapshotEvery":10}}

strata --help

--git
every write is a commit. history is the database — grep it, revert it, audit it.
--journal
one tiny json op appended per change; snapshot consolidates every 10 ops.
--ttl
keys expire on their own. urls, tokens, feature flags.
--token
set API_TOKEN and everything answers 401 without Bearer. timing-safe.
--concurrency
instances racing on the same op renegotiate the seq and retry. no lost writes.
--deps
zero. node ≥ 20.6 is the entire stack.

cat how-it-runs.txt

client ─▶ PUT /kv/x ─▶ journal/000043.json (one small commit per op) │ └─ every 10 ops ─▶ snapshot.json ─▶ old journal entries compacted
long-lived — node · docker · heroku · renderserverless — vercel · netlify
readsmemory, zero round-tripsrevalidated per request
writesinstant reply, async queuecommitted before answering
storagelocal file or codebergcodeberg

deploy — pick your platform

vercelbutton above; needs STORAGE + CODEBERG_* vars
netlifynetlify.toml is already in the repo
dockerdocker run -p 8787:8787 --env-file .env strata
herokuapp.json manifest, deploys from your dashboard
renderrender.yaml, healthcheck on /health
nodenpm install && npm start — that's the whole install

man strata — API

methodpath
GET/this page
GET/healthjournal status; never requires auth
GET/keyslist non-expired keys
GET/kv/:keyread a value
PUT/kv/:keywrite {"value":…,"ttl":3600}
DELETE/kv/:keydelete a key

figure out responses

writes reply with seq (journal position) plus queued/persisted, so the client always knows which durability guarantee it actually got.

EOF

github.com/livrasand/Strata MIT — free forever, migrate to redis whenever you outgrow it