Skip to content
RELKIT
Esc
↑↓navigate↵open⌘Jpreview
On this page

Local Docker services

Run graph-required Redis and MinIO recipes with immutable image versions and project-scoped lifecycle commands.

Run selected providers locally with Docker recipes while keeping their configuration in your application. check writes a deterministic plan without contacting Docker. dev then starts only the recipes required by the checked graph, waits for their health checks, and supplies their outputs to the matching binding.

Pre-setup

Start Docker and complete the selected capability’s installation and defineApp configuration from the table below. Docker recipes supply their own connection values; application-specific fields still belong in defineEnv. Keep all existing profiles and state when adding a recipe.

Supported local services

Capability Default local setup Configuration and environment
Buckets MinIO through docker(s3()) Storage pre-setup; generated local credentials
Caches Redis through docker(redis()) Caching pre-setup; generated connection
Realtime Redis through docker(redisRealtime()) Realtime pre-setup
Agent state Redis through docker(redisAgentState()) AI pre-setup; model secrets are separate
Native jobs Docker Inngest, Trigger.dev, or Effect MQ Jobs pre-setup; provider-specific composite recipes
Application database PostgreSQL through an application-owned Compose file Database pre-setup; DATABASE_URL
Application events Filesystem provider; no Docker recipe Events pre-setup; preserve .relkit/state
HTTP, local logs, Inspector No external service required HTTP and Operations

The database Compose service is managed with docker compose, not relkit local. Connected Cloudflare KV/R2, hosted models, Sentry, and OTLP have no bundled local Docker recipe.

Current bundled images

The integration packages pin an immutable digest. A RELKIT package release therefore selects an exact local-service image rather than whatever a mutable tag points to later.

Adapter Image reference Immutable digest
Redis redis:7.4.2-alpine sha256:02419de7eddf55aa5bcf49efb74e88fa8d931b4d77c07eff8a6b2144472b6952
S3 / MinIO ghcr.io/teableio/minio sha256:a1ea29fa28355559ef137d71fc570e508a214ec84ff8083e39bc5428980b015e

The MinIO reference uses a public mirror of RELEASE.2025-04-22T22-12-26Z with the same digest as the original image.

RELKIT discovers the Docker server version at startup but does not currently enforce a minimum engine version. Use a maintained Docker Engine or Docker Desktop release with the docker CLI available on PATH:

docker version
bun run relkit local status

Select local recipes

Use docker(redis()) or docker(s3()) for a local-only binding. Wrap a configured connected adapter when development should use Docker while release builds resolve named binding values. The Redis and storage guides show both forms in the commerce application.

Docker starts Redis with a persistent /data volume and waits for redis-cli PING. MinIO receives generated project-local credentials, persists /data, waits for its readiness endpoint, and initializes the relkit bucket. Both publish random loopback ports instead of claiming fixed host ports.

Optional file-backed events and legacy jobs

The filesystem event and legacy job profiles do not use Docker. localEvent() and localJob() from @relkit/local register the existing durable filesystem runtimes and store their state under .relkit/state by default. The event, event-function, and job add commands reuse compatible profiles; a full service bundle creates these local profiles when no configured defaults exist. See the Local API for direct authoring. Use a different root only when the application needs an isolated local state directory. New task-first jobs use a native Docker provider from the table above; localJob() is not that provider.

The corresponding scaffold normally installs the owner. For manual file-backed configuration, select this installation before importing those profiles:

From this guide’s application/package root, install only its selected requirements:

bun add @relkit/local@0.7.12

Keep these owner-specific versions and the lockfile together. Runtime SDKs belong in dependencies; build/type tooling belongs in devDependencies. Installing an adapter does not supply its optional SDK peers or enable the feature’s configuration.

Control the project lifecycle

bun run relkit local up --detach
bun run relkit local status
bun run dev --local=off
bun run relkit local stop
bun run relkit local reset --yes

Healthy services and volumes survive source reloads. stop stops this project’s labelled services; reset also removes its validated volumes and override state. It refuses a live attached lease and never targets another checkout. Docker is not contacted by build, deployment preview, or deployment apply.

Reference and source