Skip to content
Documentation

Ship translations with confidence

Everything you need to install, configure, deploy and maintain i18n Dashboard โ€” whether you're a solo developer or an enterprise team.

Quickstart with Docker

The official image arnaudprioul/i18n-dashboard ships on Docker Hub for both linux/amd64 and linux/arm64. Three ways to run it depending on your team size.

๐ŸŸข Local mode SQLite, no auth

Single user, single team. Translations live in a Docker volume. Best for self-hosting up to ~100k keys. Save this as docker-compose.yml and run docker compose up -d:

services:
  webapp:
    image: arnaudprioul/i18n-dashboard:latest
    container_name: i18n-dashboard
    restart: unless-stopped
    ports:
      - "6001:6001"
    environment:
      I18N_APP_MODE: local
      NUXT_DB_CLIENT: better-sqlite3
      NUXT_DB_CONNECTION: /data/i18n-dashboard.db
    volumes:
      - i18n_data:/data

volumes:
  i18n_data:

Full quickstart, env vars and troubleshooting on the Docker Hub overview.

๐Ÿ”ต Server mode Postgres + central auth

Multi-team, JWT-verified via JWKS. The webapp validates tokens offline against your auth server's /api/auth/.well-known/jwks.json.

I18N_APP_MODE=server
NUXT_DB_CLIENT=pg
NUXT_DB_HOST=db
NUXT_SESSION_SECRET=$(openssl rand -hex 32)
NUXT_CENTRAL_AUTH_URL=https://auth.example.com
NUXT_PUBLIC_CENTRAL_AUTH_URL=https://auth.example.com

๐Ÿ–ฅ๏ธ Desktop mode Tauri, offline

Native macOS / Windows / Linux build with embedded Nitro server and SQLite. No Docker, no network.

Download the desktop app โ†’

Environment variables

Every runtimeConfig value is overridable at runtime via the NUXT_* prefix โ€” Nitro's canonical convention. Bare names like I18N_DB_HOST are silently ignored unless explicitly listed as wire-protocol vars.

The full reference (every variable, default, scope, and migration note) lives on the Docker Hub page where it stays close to the image:

Open the full env var reference on Docker Hub โ†’

Most common knobs

  • I18N_APP_MODE โ€” local / server / desktop. Server mode requires a real DB and a central auth.
  • NUXT_DB_CLIENT + NUXT_DB_HOST + NUXT_DB_NAME + NUXT_DB_USER + NUXT_DB_PASSWORD โ€” Postgres / SQLite / MySQL connection.
  • NUXT_SESSION_SECRET โ€” required in production. Generate with openssl rand -hex 32.
  • NUXT_CENTRAL_AUTH_URL + NUXT_PUBLIC_CENTRAL_AUTH_URL โ€” server-side and browser-side URLs of your auth issuer (must be JWKS-compatible).
  • NUXT_AUTH_JWT_ISSUER + NUXT_AUTH_JWT_AUDIENCE โ€” expected iss / aud claims on access tokens.
  • NUXT_INTERNAL_API_SECRET โ€” shared HMAC for webapp โ†” central-auth side calls. Must be identical on both sides.
  • NUXT_SMTP_HOST + NUXT_SMTP_PORT + NUXT_SMTP_USER + NUXT_SMTP_PASS + NUXT_SMTP_FROM โ€” workflow notifications. Leave host empty to disable email.
  • NUXT_DASHBOARD_URL โ€” the public URL of this webapp instance, used in transactional email links.

SMTP setup in 30 seconds

Pick any SMTP relay and pass the four values below โ€” the image will deliver email through it on every workflow event.

NUXT_SMTP_HOST=smtp.sendgrid.net      # or smtp.resend.com / smtp.mailgun.org / email-smtp.eu-west-1.amazonaws.com
NUXT_SMTP_PORT=587
NUXT_SMTP_USER=apikey                  # provider-specific
NUXT_SMTP_PASS=SG.xxxxxxxxxxxxxxxxxxxxxx
NUXT_SMTP_FROM=noreply@example.com

For local dev / smoke testing, point to the bundled Mailpit service: NUXT_SMTP_HOST=mailpit, NUXT_SMTP_PORT=1025.