Skip to content

Docker Compose

Remem’s Community Edition core is a single Rust service, remem-server: the REST API, embedded storage engine, embedding service, and MCP server (Streamable HTTP at /mcp), all in one container. Docker Compose is the supported way to run it.

  • remem-server — REST API (Axum), embedded storage engine, embedding service, MCP (Streamable HTTP at /mcp). Listens on 4545.
  • Docker and Docker Compose
  • 2GB+ RAM free
Terminal window
docker pull rememorg/remem-community:server-latest

This is the whole stack — no config file required to get started:

services:
remem-server:
image: rememorg/remem-community:server-latest
container_name: remem-server
ports:
- "4545:4545"
volumes:
- ./data/remem:/var/lib/remem
environment:
- RUST_LOG=info
- REMEM_ALLOW_AUTH_DISABLED=true # dev only — see "Enabling authentication" below
networks:
- remem-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4545/api/v1/ready"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
networks:
remem-network:
driver: bridge
name: remem-network

No config.toml is mounted here — remem-server runs on built-in defaults (port 4545, 384-dim embeddings, standard HNSW/task settings). If you want to tune any of that (storage paths, HNSW parameters, auto-discovery threshold, task schedules), see Configuration for the full file and mount it at /etc/remem/config.toml:ro — remem-server picks it up automatically when present.

The start_period: 60s on remem-server’s healthcheck exists because the embedding model loads on first boot; give it a minute before expecting healthy.

Terminal window
docker compose up -d
docker compose ps
Terminal window
curl http://localhost:4545/api/v1/health
# MCP server (Streamable HTTP, in-process)
curl -sf -X POST http://localhost:4545/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'

Both work with no Authorization header because REMEM_ALLOW_AUTH_DISABLED=true is set above — every other endpoint (/api/v1/memories, /mcp, etc.) is unauthenticated in this dev configuration. See “Enabling authentication” below before exposing this beyond your local machine.

Auth is fail-closed: leaving both REMEM_API_KEY unset and REMEM_ALLOW_AUTH_DISABLED unset makes remem-server return HTTP 500 on every non-health request rather than silently allowing access. To turn on real auth, set a key and drop the disable flag:

environment:
- REMEM_API_KEY=${REMEM_API_KEY}
# REMEM_ALLOW_AUTH_DISABLED removed
Terminal window
REMEM_API_KEY=$(openssl rand -hex 32) docker compose up -d

Then every request (except /api/v1/health, /api/v1/ready, /api/v1/openapi.json) needs the key:

Terminal window
curl http://localhost:4545/api/v1/memories \
-H "Authorization: Bearer $REMEM_API_KEY"
# or: -H "X-API-Key: $REMEM_API_KEY"
  • REST API: http://localhost:4545
  • MCP (Streamable HTTP): http://localhost:4545/mcp — or run the remem-mcp binary as a stdio bridge, see Connecting an LLM client via MCP
Terminal window
docker compose pull
docker compose up -d

Remem uses WAL-backed storage — updates are safe without stopping writes first.

Prometheus metrics scraping and pre-built Grafana dashboards are not part of the Community Edition Compose stack. They ship as part of the Business Edition’s observability tooling and are not available today.