TREK logo

TREK

A self-hosted travel/trip planner with real-time collaboration, interactive maps, PWA support, SSO, budgets, packing lists, and more

Alternative to: tripit, wanderlog

TREK screenshotTREK screenshotTREK screenshot

TREK is a self-hosted, real-time collaborative travel planner. It combines drag-and-drop trip organization, interactive maps, expense tracking with multi-currency support, packing lists, and a travel journal. Trips can be shared with multiple users via role-based access, invite links, SSO, and passkeys.

TREK Docker Compose example

Self-host TREK on your own server, homelab, or VPS starting from this Docker Compose example. It runs TREK in Docker containers using the official mauriceboe/trek:latest image, with persistent volumes and automatic restarts preconfigured. Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.

services:
  app:
    image: mauriceboe/trek:latest
    read_only: true
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETUID
      - SETGID
    tmpfs:
      - /tmp:noexec,nosuid,size=128m
    environment:
      # Node runtime mode — leave as production
      NODE_ENV: "production"
      # Port the app listens on inside the container
      PORT: "3000"
      # Recommended. Encrypts secrets at rest. Generate with: openssl rand -hex 32.
      # If left empty, TREK auto-generates a key on first boot (fresh installs).
      ENCRYPTION_KEY: ""
      # Timezone for logs, reminders and scheduled tasks (e.g. Europe/Berlin)
      TZ: "UTC"
      # Log verbosity: info = concise user actions; debug = verbose admin-level details
      LOG_LEVEL: "info"
      # Comma-separated origins for CORS and email notification links (e.g. https://trek.example.com)
      ALLOWED_ORIGINS: ""
      # Public base URL — required only when OIDC/SSO is enabled; also used as the base URL for links in email notifications
      APP_URL: ""
    volumes:
      - data:/app/data
      - uploads:/app/uploads
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:3000/api/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 15s

volumes:
  data:
  uploads:

Prefer a managed setup? WinterFlow installs, configures, and updates TREK for you using this same Docker Compose configuration.