{
  "schema_version": 1,
  "generated_at": "2026-10-23T00:00:00.000Z",
  "canonical_url": "https://openlogs.fyi/tools/teslamate",
  "slug": "teslamate",
  "name": "TeslaMate",
  "tagline": "Data logger and dashboards for Tesla vehicles that keep trips, charges and battery data.",
  "replaces": {
    "summary": "Paid vehicle data logging services, such as TeslaFi.",
    "products": [
      {
        "slug": "teslafi",
        "name": "TeslaFi",
        "vendor": "TeslaFi",
        "url": "https://openlogs.fyi/alternatives/teslafi"
      }
    ]
  },
  "stack": [
    {
      "kind": "language",
      "name": "Elixir"
    },
    {
      "kind": "database",
      "name": "PostgreSQL"
    }
  ],
  "deployment_methods": [
    "docker_compose"
  ],
  "requirements": {
    "min_ram_mb": null,
    "min_cpu_cores": null,
    "source_url": null
  },
  "license": {
    "spdx": "AGPL-3.0",
    "class": "osi",
    "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/LICENSE"
  },
  "business_model": {
    "value": "unknown",
    "notes": "The README at the pinned commit does not state a business model, so it stays unknown.",
    "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/README.md",
    "checked_at": "2026-10-22"
  },
  "difficulty": {
    "value": "medium",
    "reason": "4 services (1 database or broker: postgres), 5 volume mounts, no env values to set, no elevated host access. Heuristic score 5 of 11: medium."
  },
  "repository": {
    "owner": "teslamate-org",
    "name": "teslamate",
    "url": "https://github.com/teslamate-org/teslamate"
  },
  "compose_check": {
    "status": "config_ok",
    "validated_at": "2026-10-22",
    "summary": "config_ok on 2026-10-22"
  },
  "recipe": {
    "version": 1,
    "source_path": "website/docs/installation/docker.md",
    "source_repo": "teslamate-org/teslamate",
    "source_commit_sha": "9f4098eeb8460c7d56235dd8d3fe0afedcdf682b",
    "source_kind": "app_repo",
    "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md"
  },
  "install_steps": [
    {
      "order": 1,
      "kind": "prerequisite",
      "language": "text",
      "label": "Docker with the Compose plugin",
      "body": "A host with Docker and the Docker Compose plugin. This entry runs from a compose file.",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md#L26-L83",
      "validation_status": "unvalidated"
    },
    {
      "order": 2,
      "kind": "compose",
      "language": "yaml",
      "label": "Save the code block as docker-compose.yml",
      "body": "services:\n  teslamate:\n    image: teslamate/teslamate:latest\n    restart: always\n    environment:\n      - ENCRYPTION_KEY=secretkey #replace with a secure key to encrypt your Tesla API tokens\n      - DATABASE_USER=teslamate\n      - DATABASE_PASS=password #insert your secure database password!\n      - DATABASE_NAME=teslamate\n      - DATABASE_HOST=database\n      - MQTT_HOST=mosquitto\n    ports:\n      - 4000:4000\n    volumes:\n      - ./import:/opt/app/import\n    cap_drop:\n      - all\n\n  database:\n    image: postgres:18-trixie\n    restart: always\n    environment:\n      - POSTGRES_USER=teslamate\n      - POSTGRES_PASSWORD=password #insert your secure database password!\n      - POSTGRES_DB=teslamate\n    volumes:\n      - teslamate-db:/var/lib/postgresql\n\n  grafana:\n    image: teslamate/grafana:latest\n    restart: always\n    environment:\n      - DATABASE_USER=teslamate\n      - DATABASE_PASS=password #insert your secure database password!\n      - DATABASE_NAME=teslamate\n      - DATABASE_HOST=database\n    ports:\n      - 3000:3000\n    volumes:\n      - teslamate-grafana-data:/var/lib/grafana\n\n  mosquitto:\n    image: eclipse-mosquitto:2\n    restart: always\n    command: mosquitto -c /mosquitto-no-auth.conf\n    # ports:\n    #   - 1883:1883\n    volumes:\n      - mosquitto-conf:/mosquitto/config\n      - mosquitto-data:/mosquitto/data\n\nvolumes:\n  teslamate-db:\n  teslamate-grafana-data:\n  mosquitto-conf:\n  mosquitto-data:\n",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md",
      "validation_status": "config_ok"
    },
    {
      "order": 3,
      "kind": "note",
      "language": "text",
      "label": "What the compose file check ran with",
      "body": "This compose file is copied unchanged from the code block in https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md#L26-L83. The block sits inside a list in the page, so the indent of its lines was removed, as the rendered page shows it. The check ran on that block alone. The Docker installation guide tells the reader to create a docker-compose.yml with this content.",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md#L26-L83",
      "validation_status": "unvalidated"
    },
    {
      "order": 4,
      "kind": "shell",
      "language": "bash",
      "label": "Start it",
      "body": "docker compose up -d",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 5,
      "kind": "verify",
      "language": "text",
      "label": "Open the app",
      "body": "Open http://localhost:4000. The compose file publishes host port 4000 for the teslamate service.",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md",
      "validation_status": "unvalidated"
    }
  ],
  "notes": [
    {
      "kind": "gotcha",
      "title": "Some images use the latest tag or no tag",
      "body": "Images without a pinned version: teslamate: teslamate/teslamate:latest, grafana: teslamate/grafana:latest. A later pull can get a different version.",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file has placeholder values",
      "body": "Placeholder values: DATABASE_PASS is \"password\" (teslamate), POSTGRES_PASSWORD is \"password\" (database), DATABASE_PASS is \"password\" (grafana).",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file publishes host ports",
      "body": "Host ports: 4000 (teslamate), 3000 (grafana). A port without a host address listens on all host network interfaces.",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file mounts host folders",
      "body": "Host paths mounted into containers: ./import at /opt/app/import (teslamate).",
      "source_url": "https://github.com/teslamate-org/teslamate/blob/9f4098eeb8460c7d56235dd8d3fe0afedcdf682b/website/docs/installation/docker.md",
      "checked_at": "2026-10-22"
    }
  ],
  "signals": {
    "captured_at": "2026-10-22",
    "stars": 9157,
    "forks": 1022,
    "open_issues": 67,
    "last_push": "2026-10-21",
    "days_since_push": 1,
    "latest_release": "v4.3.0",
    "latest_release_date": "2026-09-29",
    "days_since_release": 23
  },
  "links": {
    "html": "https://openlogs.fyi/tools/teslamate",
    "markdown": "https://openlogs.fyi/tools/teslamate.md",
    "json": "https://openlogs.fyi/tools/teslamate.json"
  },
  "updated_at": "2026-10-22"
}
