Skip to Content
DocumentationSelf-HostingOverview

Self-Hosting

Tandemu is fully self-hostable via Docker Compose. The open-source version has complete feature parity with the cloud offering — there are no gated features, no usage limits, and no license restrictions.

Why self-host?

Self-hosting Tandemu gives you full control over your data and infrastructure. All telemetry, developer metrics, AI memory, and team configuration stay on machines you own. This matters for organizations with strict compliance requirements, air-gapped environments, or teams that simply prefer data sovereignty.

The self-hosted stack runs nine services: a NestJS backend API, a Next.js dashboard frontend, PostgreSQL for application data, ClickHouse for high-throughput telemetry analytics, Redis for caching and sessions, an OpenTelemetry Collector for ingesting developer telemetry, a Mem0-powered MCP memory server for persistent AI context, a Qdrant vector store for memory search, and Watchtower for automatic container updates.

Updates are automatic — when a new GitHub Release is published, Watchtower pulls the latest container images and restarts the affected services. You can also trigger updates from the dashboard with one click.

What you need

  • Docker and Docker Compose — The entire stack runs as a single docker-compose.yml file
  • 4GB RAM minimum for small teams (1-5 developers), 8GB recommended — ClickHouse, PostgreSQL, and Qdrant are the heaviest services
  • 10GB disk space — Telemetry data grows with team size and activity; ClickHouse handles compression automatically

Quick start

git clone https://github.com/sebastiangrebe/tandemu.git cd tandemu cp .env.example .env

Edit .env and set the following:

VariableRequiredWhy
OPENAI_API_KEYYesPowers AI memory embeddings and semantic search
JWT_SECRETProductionAny random string. The default is insecure — change it before exposing to the internet
ENCRYPTION_KEYProductionEncrypts integration API tokens at rest. Generate with node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Everything else — database URLs, Redis, ClickHouse, OTEL — has working defaults in docker-compose.yml that point to the internal Docker services. You don’t need to change them.

Then start the stack:

docker compose up -d

The dashboard is now running at http://localhost:3000  and the API at http://localhost:3001 .

Next steps

  1. Open the dashboard and create your account
  2. Set up your organization and connect your ticket system (Jira, Linear, GitHub Issues, etc.)
  3. Have each developer run /tandemu:setup in Claude Code to connect to your instance

See the Configuration Reference for all available environment variables.

In this section

Last updated on