Every recipe below is already wired into `oke docker` — pin an image in `oke.config.ts`
and get env, healthcheck, and a connection URL for free.

These recipes are real, working infrastructure choices behind the same two templates (`standard`, `advanced`) and the same eight elements — not alternative products or separate frameworks.

<Callout title="The one rule">
  Vendor choice lives in `images[…]` — never in `drivers.*`, which only ever say protocol ids
  (`postgres`, `redis`, `s3`, `smtp`, `meilisearch`, `openai-compatible`, …).
</Callout>

## SQL

<Cards>
  <Card
    title="Postgres"
    description="Default store.sql — POSTGRES_*, PGDATA, DATABASE_URL."
    href="/docs/recipes/postgres"
  />
  <Card
    title="Supabase"
    description="supabase/postgres extension bundle only."
    href="/docs/recipes/supabase-docker"
  />
  <Card
    title="CockroachDB"
    description="Self-hosted single-node — port 26257, COCKROACH_*."
    href="/docs/recipes/cockroachdb"
  />
  <Card
    title="YugabyteDB"
    description="Self-hosted YSQL — port 5433, YSQL_*."
    href="/docs/recipes/yugabytedb"
  />
  <Card
    title="Timescale"
    description="Postgres + hypertables — same POSTGRES_* contract."
    href="/docs/recipes/timescale"
  />
</Cards>

## KV

Driver id stays `redis` for every image below.

<Cards>
  <Card
    title="Redis"
    description="Default store.kv — requirepass + maxmemory."
    href="/docs/recipes/redis"
  />
  <Card title="Valkey" description="BSD-licensed Redis-wire fork." href="/docs/recipes/valkey" />
  <Card
    title="Dragonfly"
    description="Multi-threaded Redis-wire runtime."
    href="/docs/recipes/dragonfly"
  />
</Cards>

## Proxy

Opt-in via `images.proxy` — leave unset until you need an edge or `--scale app=N`.

<Cards>
  <Card title="Caddy" description="Automatic-HTTPS, single instance." href="/docs/recipes/caddy" />
  <Card
    title="Traefik"
    description="Docker-label discovery + socket-proxy."
    href="/docs/recipes/traefik"
  />
  <Card
    title="nginx"
    description="Static nginx.conf reverse proxy (HTTP)."
    href="/docs/recipes/nginx"
  />
</Cards>

## Services

<Cards>
  <Card title="PgDog" description="Transaction pooler on :6432." href="/docs/recipes/pgdog" />
  <Card
    title="RustFS"
    description="S3-compatible store.files — /data volume."
    href="/docs/recipes/rustfs"
  />
  <Card title="Mailpit" description="SMTP catcher — UI on :8025." href="/docs/recipes/mailpit" />
  <Card
    title="Meilisearch"
    description="Full-text store.index on :7700."
    href="/docs/recipes/meilisearch"
  />
</Cards>

## AI

Compose does not manage inference. Prefer [OpenRouter](/docs/recipes/openrouter)
for zero-Docker `fx.ask`, or BYO any OpenAI-shaped `/v1` via `OKE_AI_URL` /
`baseUrl` — see [Models](/docs/elements/ai/models).

| Workload                       | Where                                  |
| ------------------------------ | -------------------------------------- |
| Zero Docker / free cloud smoke | [OpenRouter](/docs/recipes/openrouter) |
| BYO OpenAI-compatible `/v1`    | [Models](/docs/elements/ai/models)     |
| Managed cloud (registry)       | [Models](/docs/elements/ai/models)     |

<Cards>
  <Card
    title="OpenRouter"
    description="Zero Docker — openrouter/free + auto baseUrl."
    href="/docs/recipes/openrouter"
  />
  <Card
    title="Models"
    description="Registry providers + custom baseUrl / OKE_AI_URL."
    href="/docs/elements/ai/models"
  />
</Cards>

## Learn more

- [Providers](/docs/providers) — managed cloud alternatives
- [Configuration](/docs/reference/configuration) — `images` roles and compose derivation
- [Store](/docs/elements/store) — `sql` / `kv` / `files` / `index` facets

## Next

<Cards>
  <Card
    title="Postgres"
    description="Start with the default SQL recipe."
    href="/docs/recipes/postgres"
  />
  <Card title="Providers" description="Managed cloud alternatives." href="/docs/providers" />
  <Card title="Caddy" description="Automatic HTTPS edge." href="/docs/recipes/caddy" />
</Cards>
