Skip to content

The engines

doze runs a deliberately chosen set of engines. Postgres is the real thing. The rest are picked to be cheap, real, and license-clean local stand-ins for software that’s otherwise heavy, costly, or legally encumbered to run yourself — so you get the API your code already speaks, without the baggage.

Every engine boots on first connect and reaps when idle, the same way (concepts). What differs is what each one is and when you’d reach for it.

The version column is the one you write in doze.hcl — it’s the engine’s own version (the actual Postgres major, the Kafka protocol level), never a plugin or SDK number. Each engine links to its own page — versions, platforms, config reference, and release history, generated from the module itself at build time, so they can’t drift.

EngineSpeaksUse it asversion =Runs on
PostgreSQLthe Postgres wire protocolyour primary SQL database14 – 18macOS · Linux
ValkeyRedis (RESP)an in-memory cache8 – 9macOS · Linux
KvrocksRedis (RESP)a durable, disk-backed KV store2macOS · Linux
DocumentDBthe MongoDB wire protocola document store2macOS · Linux
MariaDBMySQLa MySQL-compatible SQL database11macOS · Linux
TemporalTemporal gRPC + Web UIa durable workflow engine1.1macOS · Linux
Kafkathe Kafka protocolan event stream / message log1 – 4macOS · Linux
AWSthe AWS APIs (S3, SQS, SNS, DynamoDB, Lambda, EventBridge, KMS, SSM, Secrets Manager)the whole local cloud, one blockmacOS · Linux
processanything you can runyour own services (API, worker, frontend…)macOS · Linux

That last row is easy to overlook and shouldn’t be: the process engine runs your services — supervised, ordered, health-gated — so a doze.hcl can orchestrate a whole microservice stack, with or without any database in it. This page covers the backing engines; the microservices guide covers running your code.

doze runs genuine upstream PostgreSQL (majors 14–18). Not a fork, not an emulation — the same binary you’d run in production, so every extension, every client, and every wire feature behaves identically. On first boot doze creates the database and converges your declared roles, schemas, grants, and extensions, then gets out of the way.

postgres "app" {
version = 18
database "app" {}
}

PostgreSQL recipes

In March 2024, Redis Inc. relicensed Redis (starting with 7.4) under the dual RSALv2 / SSPLv1 licenses — by their own statement, “Redis is no longer open source under the OSI definition.”1 In response, the community forked the last open-source release (7.2.4) into Valkey, a BSD-3-Clause project stewarded by the Linux Foundation.2

For you, that means Valkey is Redis for all practical local-dev purposes: it speaks the same RESP protocol, so your existing Redis clients and REDIS_URL work unchanged — it’s just the version that stayed open source. Use it as a fast, in-memory cache.

valkey "cache" {
version = 9
maxmemory = "256mb"
}

Apache Kvrocks is a key-value store that speaks the Redis protocol but persists to disk via RocksDB instead of holding everything in memory.3 It’s an Apache Software Foundation project (Apache-2.0).

Reach for Kvrocks over Valkey when your dataset is large and you’d rather not pay to keep it all resident in RAM, or when you want the keys to survive a reap and a restart without configuring snapshots. Same client code, different trade-off: Valkey optimizes for in-memory speed and volatility; Kvrocks for durability and a small memory footprint.

kvrocks "store" {
version = 2
}

Valkey or Kvrocks? Cache that can vanish → Valkey. Durable KV you don’t want living in RAM → Kvrocks. Both talk Redis, so you can switch by changing one block.

Valkey & Kvrocks recipes

DocumentDB — MongoDB-compatible, on Postgres

Section titled “DocumentDB — MongoDB-compatible, on Postgres”

MongoDB moved its server to the SSPL in 2018, a license the OSI never approved.4 doze’s DocumentDB engine speaks the MongoDB wire protocol, so your MongoDB drivers and MONGODB_URI connect unchanged — backed by PostgreSQL with Microsoft’s DocumentDB extension, behind a FerretDB gateway.5

So you get a document store with the Mongo API, locally, without running MongoDB itself or accepting its license. It’s a single, self-contained engine: you declare one block, and doze runs the private Postgres and the gateway for you, exposing only Mongo — no backend to wire up. A faithful local stand-in for development, not a reimplementation of every MongoDB feature.

ferret "docs" {
version = 2
port = 27017
}

DocumentDB recipes

MariaDB is the community fork of MySQL (GPLv2, MariaDB Foundation), begun by MySQL’s original authors after the Oracle acquisition. It speaks the MySQL protocol, so mysql:// clients and drivers connect unchanged. doze runs the upstream 11.4 LTS series.

MariaDB publishes a portable binary only for x86_64 Linux, so doze repackages that one and builds every other platform from source (the postgres approach) — you get the same engine on Apple Silicon Macs and arm64 Linux without upstream shipping a binary for them.

mariadb "db" {
version = 11.4
}

Temporal — durable workflows, one binary

Section titled “Temporal — durable workflows, one binary”

Temporal’s dev server is a single pure-Go binary bundling the Temporal services, a SQLite store, and the Web UI — no JVM, no Docker, no external database.6 doze supervises it like everything else (workers long-poll it, so it stays awake while in use), converges your declared namespaces, and exposes both the gRPC frontend and the Web UI.

temporal "dev" {
version = 1.1
port = 7233
ui_port = 8233
namespace "orders" {}
}

Kafka itself is a JVM heavyweight; the usual local answer is Docker plus a gigabyte of images. doze’s Kafka engine is a single-node, Kafka-protocol broker written in Go (the doze-kafka project) — real wire protocol, real consumer groups (classic and KIP-848), compaction, retention — verified against franz-go, usable from any Kafka client. The version you declare is the Kafka protocol profile (1–4) your clients expect, not a broker build.

It ships with a web console — topics, a live message tape, a produce panel, consumer groups with lag — served one port above the broker (:9093 for a :9092 broker).

kafka "events" {
version = 4
topic "orders" { partitions = 3 }
topic "payments" { config = { "cleanup.policy" = "compact" } }
}

A dev-grade single node for building and testing against — not a replacement for a production cluster.

Kafka recipe

The usual way to fake AWS locally is LocalStack: a ~1.2 GB Docker image running Python, with a JVM behind some services. doze takes a different path: one aws block runs the whole local cloud as a single ~20 MB process — S3, SQS, SNS, DynamoDB (with Streams), Lambda, EventBridge, KMS, SSM Parameter Store, and Secrets Manager, all pure Go (the doze-aws project), behind one endpoint your SDK already understands.

Buckets, queues, topics, tables, functions, and rules are declared inside the block and converged on boot. A web console at /_console covers all of it — browse a bucket, peek a queue, invoke a function, watch live API traffic.

aws "local" {
bucket "uploads" {}
queue "emails" { dlq = "auto" }
topic "signups" { subscribe { queue = "emails" } }
table "sessions" { key = "session_id:S" ttl = "expires_at" }
}

There is no version = here — the services track current AWS APIs, and the whole thing is dev-grade: fast and faithful enough to build and test against, not a replacement for real AWS in production.

AWS recipe


Next: put them together in Recipes, or see every field in the Configuration reference.

  1. Redis adopted dual RSALv2 / SSPLv1 licensing starting with Redis 7.4 (March 2024); per Redis, neither is an OSI-approved open-source license. See Redis’s announcement.

  2. Valkey forked from the Redis 7.2.4 codebase and is a BSD-3-Clause project under the Linux Foundation. See the Linux Foundation launch announcement and valkey.io.

  3. Apache Kvrocks is a RESP-compatible, RocksDB-backed key-value store and an Apache Software Foundation project. See kvrocks.apache.org.

  4. MongoDB issued the SSPL for MongoDB Community Server in October 2018; the SSPL is not OSI-approved. See MongoDB’s announcement.

  5. doze’s DocumentDB engine pairs Microsoft’s DocumentDB extension for PostgreSQL with a FerretDB gateway (Apache-2.0) that speaks the MongoDB wire protocol — all run privately and exposed as one engine.

  6. The Temporal CLI dev server (MIT) bundles the server, persistence, and Web UI in one process — the same tool temporal server start-dev runs.