{
  "schema_version": 1,
  "generated_at": "2026-10-22T00:00:00.000Z",
  "canonical_url": "https://openlogs.fyi/tools/langfuse",
  "slug": "langfuse",
  "name": "Langfuse",
  "tagline": "Records traces of LLM application calls and supports evaluation of the results.",
  "replaces": {
    "summary": "Paid LLM tracing and evaluation services, such as LangSmith.",
    "products": [
      {
        "slug": "langsmith",
        "name": "LangSmith",
        "vendor": "LangChain",
        "url": "https://openlogs.fyi/alternatives/langsmith"
      }
    ]
  },
  "stack": [
    {
      "kind": "language",
      "name": "TypeScript"
    },
    {
      "kind": "database",
      "name": "ClickHouse"
    },
    {
      "kind": "database",
      "name": "Redis"
    },
    {
      "kind": "database",
      "name": "PostgreSQL"
    }
  ],
  "deployment_methods": [
    "docker_compose"
  ],
  "requirements": {
    "min_ram_mb": null,
    "min_cpu_cores": null,
    "source_url": null
  },
  "license": {
    "spdx": "MIT",
    "class": "osi",
    "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/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/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/README.md",
    "checked_at": "2026-10-22"
  },
  "difficulty": {
    "value": "hard",
    "reason": "6 services (4 database or broker: clickhouse-server, minio, redis, postgres), 5 volume mounts, no env values to set, no elevated host access. Heuristic score 7 of 11: hard."
  },
  "repository": {
    "owner": "langfuse",
    "name": "langfuse",
    "url": "https://github.com/langfuse/langfuse"
  },
  "compose_check": {
    "status": "config_ok",
    "validated_at": "2026-10-22",
    "summary": "config_ok on 2026-10-22"
  },
  "recipe": {
    "version": 1,
    "source_path": "docker-compose.yml",
    "source_repo": "langfuse/langfuse",
    "source_commit_sha": "2ec7d561c10068bd6949191ffa653d230782531c",
    "source_kind": "app_repo",
    "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml"
  },
  "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/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "validation_status": "unvalidated"
    },
    {
      "order": 2,
      "kind": "compose",
      "language": "yaml",
      "label": "Save the compose file as docker-compose.yml",
      "body": "# Make sure to update the credential placeholders with your own secrets.\n# We mark them with # CHANGEME in the file below.\n# In addition, we recommend to restrict inbound traffic on the host to langfuse-web (port 3000) and minio (port 9090) only.\n# All other components are bound to localhost (127.0.0.1) to only accept connections from the local machine.\n# External connections from other machines will not be able to reach these services directly.\nservices:\n  langfuse-worker:\n    image: docker.langfuse.com/langfuse/langfuse-worker:4\n    restart: always\n    depends_on: &langfuse-depends-on\n      postgres:\n        condition: service_healthy\n      minio:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n      clickhouse:\n        condition: service_healthy\n    ports:\n      - 127.0.0.1:3030:3030\n    environment: &langfuse-worker-env\n      NEXTAUTH_URL: ${NEXTAUTH_URL:-http://localhost:3000}\n      DATABASE_URL: ${DATABASE_URL:-postgresql://postgres:postgres@postgres:5432/postgres} # CHANGEME\n      SALT: ${SALT:-mysalt} # CHANGEME\n      ENCRYPTION_KEY: ${ENCRYPTION_KEY:-0000000000000000000000000000000000000000000000000000000000000000} # CHANGEME: generate via `openssl rand -hex 32`\n      TELEMETRY_ENABLED: ${TELEMETRY_ENABLED:-true}\n      LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES: ${LANGFUSE_ENABLE_EXPERIMENTAL_FEATURES:-false}\n      # Lets the worker reach the web service internally for in-app agent MCP\n      # calls without redirecting NEXTAUTH_URL, which also builds links for\n      # users. Pair it with LANGFUSE_MCP_ALLOWED_HOSTS on langfuse-web.\n      LANGFUSE_MCP_BASE_URL: ${LANGFUSE_MCP_BASE_URL:-}\n      LANGFUSE_LLM_CONNECTION_WHITELISTED_HOST: ${LANGFUSE_LLM_CONNECTION_WHITELISTED_HOST:-}\n      LANGFUSE_LLM_CONNECTION_WHITELISTED_IPS: ${LANGFUSE_LLM_CONNECTION_WHITELISTED_IPS:-}\n      LANGFUSE_LLM_CONNECTION_WHITELISTED_IP_SEGMENTS: ${LANGFUSE_LLM_CONNECTION_WHITELISTED_IP_SEGMENTS:-}\n      # Empty defaults leave egress policy unchanged until an operator sets them.\n      LANGFUSE_LLM_CONNECTION_ALLOWED_HOSTS: ${LANGFUSE_LLM_CONNECTION_ALLOWED_HOSTS:-}\n      LANGFUSE_WEBHOOK_ALLOWED_HOSTS: ${LANGFUSE_WEBHOOK_ALLOWED_HOSTS:-}\n      LANGFUSE_EXTERNAL_MEDIA_STORAGE_ENDPOINT_ALLOWED_HOSTS: ${LANGFUSE_EXTERNAL_MEDIA_STORAGE_ENDPOINT_ALLOWED_HOSTS:-}\n      LANGFUSE_OUTBOUND_BLOCKED_IP_SEGMENTS: ${LANGFUSE_OUTBOUND_BLOCKED_IP_SEGMENTS:-}\n      CLICKHOUSE_MIGRATION_URL: ${CLICKHOUSE_MIGRATION_URL:-clickhouse://clickhouse:9000}\n      CLICKHOUSE_URL: ${CLICKHOUSE_URL:-http://clickhouse:8123}\n      CLICKHOUSE_USER: ${CLICKHOUSE_USER:-clickhouse}\n      CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-clickhouse} # CHANGEME\n      CLICKHOUSE_CLUSTER_ENABLED: ${CLICKHOUSE_CLUSTER_ENABLED:-false}\n      CLICKHOUSE_CLUSTER_NAME: ${CLICKHOUSE_CLUSTER_NAME:-default}\n      LANGFUSE_JSON_BAD_UNICODE_ESCAPE: ${LANGFUSE_JSON_BAD_UNICODE_ESCAPE:-}\n      LANGFUSE_USE_AZURE_BLOB: ${LANGFUSE_USE_AZURE_BLOB:-false}\n      LANGFUSE_USE_OCI_NATIVE_OBJECT_STORAGE: ${LANGFUSE_USE_OCI_NATIVE_OBJECT_STORAGE:-false}\n      LANGFUSE_OCI_AUTH_TYPE: ${LANGFUSE_OCI_AUTH_TYPE:-workload_identity}\n      LANGFUSE_S3_EVENT_UPLOAD_BUCKET: ${LANGFUSE_S3_EVENT_UPLOAD_BUCKET:-langfuse}\n      LANGFUSE_S3_EVENT_UPLOAD_REGION: ${LANGFUSE_S3_EVENT_UPLOAD_REGION:-auto}\n      LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: ${LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID:-minio}\n      LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY: ${LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY:-miniosecret} # CHANGEME\n      LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: ${LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT:-http://minio:9000}\n      LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE: ${LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE:-true}\n      LANGFUSE_S3_EVENT_UPLOAD_PREFIX: ${LANGFUSE_S3_EVENT_UPLOAD_PREFIX:-events/}\n      LANGFUSE_S3_MEDIA_UPLOAD_BUCKET: ${LANGFUSE_S3_MEDIA_UPLOAD_BUCKET:-langfuse}\n      LANGFUSE_S3_MEDIA_UPLOAD_REGION: ${LANGFUSE_S3_MEDIA_UPLOAD_REGION:-auto}\n      LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID: ${LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID:-minio}\n      LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: ${LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY:-miniosecret} # CHANGEME\n      LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: ${LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT:-http://minio:9000}\n      LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE: ${LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE:-true}\n      LANGFUSE_S3_MEDIA_UPLOAD_PREFIX: ${LANGFUSE_S3_MEDIA_UPLOAD_PREFIX:-media/}\n      LANGFUSE_S3_MEDIA_UPLOAD_REQUEST_TIMEOUT_MS: ${LANGFUSE_S3_MEDIA_UPLOAD_REQUEST_TIMEOUT_MS:-30000}\n      LANGFUSE_OBSERVATION_FIELD_OVERFLOW_ENABLED: ${LANGFUSE_OBSERVATION_FIELD_OVERFLOW_ENABLED:-false}\n      LANGFUSE_OBSERVATION_FIELD_SIZE_LIMIT_BYTES: ${LANGFUSE_OBSERVATION_FIELD_SIZE_LIMIT_BYTES:-2097152}\n      LANGFUSE_S3_BATCH_EXPORT_ENABLED: ${LANGFUSE_S3_BATCH_EXPORT_ENABLED:-false}\n      LANGFUSE_S3_BATCH_EXPORT_BUCKET: ${LANGFUSE_S3_BATCH_EXPORT_BUCKET:-langfuse}\n      LANGFUSE_S3_BATCH_EXPORT_PREFIX: ${LANGFUSE_S3_BATCH_EXPORT_PREFIX:-exports/}\n      LANGFUSE_S3_BATCH_EXPORT_REGION: ${LANGFUSE_S3_BATCH_EXPORT_REGION:-auto}\n      LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: ${LANGFUSE_S3_BATCH_EXPORT_ENDPOINT:-http://minio:9000}\n      LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT: ${LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT:-http://localhost:9090}\n      LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID: ${LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID:-minio}\n      LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: ${LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY:-miniosecret} # CHANGEME\n      LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: ${LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE:-true}\n      LANGFUSE_INGESTION_QUEUE_DELAY_MS: ${LANGFUSE_INGESTION_QUEUE_DELAY_MS:-}\n      LANGFUSE_INGESTION_CLICKHOUSE_WRITE_INTERVAL_MS: ${LANGFUSE_INGESTION_CLICKHOUSE_WRITE_INTERVAL_MS:-}\n      REDIS_HOST: ${REDIS_HOST:-redis}\n      REDIS_PORT: ${REDIS_PORT:-6379}\n      REDIS_AUTH: ${REDIS_AUTH:-myredissecret} # CHANGEME\n      LANGFUSE_BULLMQ_SKIP_REDIS_VERSION_CHECK: ${LANGFUSE_BULLMQ_SKIP_REDIS_VERSION_CHECK:-false}\n      REDIS_TLS_ENABLED: ${REDIS_TLS_ENABLED:-false}\n      REDIS_TLS_CA: ${REDIS_TLS_CA:-/certs/ca.crt}\n      REDIS_TLS_CERT: ${REDIS_TLS_CERT:-/certs/redis.crt}\n      REDIS_TLS_KEY: ${REDIS_TLS_KEY:-/certs/redis.key}\n      EMAIL_FROM_ADDRESS: ${EMAIL_FROM_ADDRESS:-}\n      SMTP_CONNECTION_URL: ${SMTP_CONNECTION_URL:-}\n      # Shared AI features configuration. These apply to AI features that run\n      # in both web and worker.\n      LANGFUSE_IN_APP_AGENT_ENABLED: ${LANGFUSE_IN_APP_AGENT_ENABLED:-}\n      LANGFUSE_EVALUATOR_MEDIA_TRANSPORT: ${LANGFUSE_EVALUATOR_MEDIA_TRANSPORT:-}\n      LANGFUSE_EVALUATOR_MEDIA_INLINE_MAX_BYTES: ${LANGFUSE_EVALUATOR_MEDIA_INLINE_MAX_BYTES:-}\n      LANGFUSE_AI_PROVIDER: ${LANGFUSE_AI_PROVIDER:-}\n      LANGFUSE_AI_MODEL: ${LANGFUSE_AI_MODEL:-}\n      LANGFUSE_AI_SMALL_MODEL: ${LANGFUSE_AI_SMALL_MODEL:-}\n      LANGFUSE_AI_API_KEY: ${LANGFUSE_AI_API_KEY:-}\n      LANGFUSE_AI_BASE_URL: ${LANGFUSE_AI_BASE_URL:-}\n      LANGFUSE_AI_USE_RESPONSES_API: ${LANGFUSE_AI_USE_RESPONSES_API:-}\n      LANGFUSE_AI_EXTRA_HEADERS: ${LANGFUSE_AI_EXTRA_HEADERS:-}\n      LANGFUSE_AI_AWS_BEDROCK_REGION: ${LANGFUSE_AI_AWS_BEDROCK_REGION:-}\n      LANGFUSE_AI_VERTEX_LOCATION: ${LANGFUSE_AI_VERTEX_LOCATION:-}\n      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-}\n      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-}\n      AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN:-}\n      AWS_PROFILE: ${AWS_PROFILE:-}\n      LANGFUSE_AI_FEATURES_AWS_PROFILE: ${LANGFUSE_AI_FEATURES_AWS_PROFILE:-}\n      LANGFUSE_IN_APP_AGENT_AWS_PROFILE: ${LANGFUSE_IN_APP_AGENT_AWS_PROFILE:-}\n      # In-app agent worker settings (ignored by the web service).\n      LANGFUSE_IN_APP_AGENT_RUN_QUEUE_PROCESSING_CONCURRENCY: ${LANGFUSE_IN_APP_AGENT_RUN_QUEUE_PROCESSING_CONCURRENCY:-}\n      LANGFUSE_IN_APP_AGENT_SANDBOX_PROVIDER: ${LANGFUSE_IN_APP_AGENT_SANDBOX_PROVIDER:-}\n      LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_IMAGE_IDENTIFIER: ${LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_IMAGE_IDENTIFIER:-}\n      LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_EXECUTION_ROLE_ARN: ${LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_EXECUTION_ROLE_ARN:-}\n      LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_EGRESS_NETWORK_CONNECTOR_ARN: ${LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_EGRESS_NETWORK_CONNECTOR_ARN:-}\n      LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_REGION: ${LANGFUSE_IN_APP_AGENT_SANDBOX_AWS_LAMBDA_MICROVM_REGION:-}\n\n  langfuse-web:\n    image: docker.langfuse.com/langfuse/langfuse:4\n    restart: always\n    depends_on: *langfuse-depends-on\n    ports:\n      - 3000:3000\n    environment:\n      <<: *langfuse-worker-env\n      NEXTAUTH_SECRET: ${NEXTAUTH_SECRET:-mysecret} # CHANGEME\n      LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: ${LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT:-http://localhost:9090}\n      LANGFUSE_S3_MEDIA_UPLOAD_INTERNAL_ENDPOINT: ${LANGFUSE_S3_MEDIA_UPLOAD_INTERNAL_ENDPOINT:-http://minio:9000}\n      LANGFUSE_INIT_ORG_ID: ${LANGFUSE_INIT_ORG_ID:-}\n      LANGFUSE_INIT_ORG_NAME: ${LANGFUSE_INIT_ORG_NAME:-}\n      LANGFUSE_INIT_PROJECT_ID: ${LANGFUSE_INIT_PROJECT_ID:-}\n      LANGFUSE_INIT_PROJECT_NAME: ${LANGFUSE_INIT_PROJECT_NAME:-}\n      LANGFUSE_INIT_PROJECT_PUBLIC_KEY: ${LANGFUSE_INIT_PROJECT_PUBLIC_KEY:-}\n      LANGFUSE_INIT_PROJECT_SECRET_KEY: ${LANGFUSE_INIT_PROJECT_SECRET_KEY:-}\n      LANGFUSE_INIT_USER_EMAIL: ${LANGFUSE_INIT_USER_EMAIL:-}\n      LANGFUSE_INIT_USER_NAME: ${LANGFUSE_INIT_USER_NAME:-}\n      LANGFUSE_INIT_USER_PASSWORD: ${LANGFUSE_INIT_USER_PASSWORD:-}\n      LANGFUSE_MARKDOWN_RENDER_CHARACTER_LIMIT: ${LANGFUSE_MARKDOWN_RENDER_CHARACTER_LIMIT:-}\n      LANGFUSE_TRUSTED_PROXY_COUNT: ${LANGFUSE_TRUSTED_PROXY_COUNT:-}\n      LANGFUSE_DISABLE_SIGNUP_ONBOARDING: ${LANGFUSE_DISABLE_SIGNUP_ONBOARDING:-}\n      # Hostnames allowed to reach the MCP endpoint, beyond NEXTAUTH_URL's own\n      # host. Required when the worker uses LANGFUSE_MCP_BASE_URL.\n      LANGFUSE_MCP_ALLOWED_HOSTS: ${LANGFUSE_MCP_ALLOWED_HOSTS:-}\n      # In-app agent settings.\n      LANGFUSE_IN_APP_AGENT_MAX_ACTIVE_RUNS_PER_USER: ${LANGFUSE_IN_APP_AGENT_MAX_ACTIVE_RUNS_PER_USER:-}\n      LANGFUSE_IN_APP_AGENT_MAX_ACTIVE_RUNS_PER_ORG: ${LANGFUSE_IN_APP_AGENT_MAX_ACTIVE_RUNS_PER_ORG:-}\n\n  clickhouse:\n    image: docker.io/clickhouse/clickhouse-server:25.12\n    restart: always\n    user: \"101:101\"\n    environment:\n      CLICKHOUSE_DB: default\n      CLICKHOUSE_USER: ${CLICKHOUSE_USER:-clickhouse}\n      CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:-clickhouse} # CHANGEME\n    volumes:\n      - langfuse_clickhouse_data:/var/lib/clickhouse\n      - langfuse_clickhouse_logs:/var/log/clickhouse-server\n    ports:\n      - 127.0.0.1:8123:8123\n      - 127.0.0.1:9000:9000\n    healthcheck:\n      test: wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1\n      interval: 5s\n      timeout: 5s\n      retries: 10\n      start_period: 1s\n\n  minio:\n    image: cgr.dev/chainguard/minio\n    restart: always\n    entrypoint: sh\n    # create the 'langfuse' bucket before starting the service\n    command: -c 'mkdir -p /data/langfuse && minio server --address \":9000\" --console-address \":9001\" /data'\n    environment:\n      MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minio}\n      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-miniosecret} # CHANGEME\n    ports:\n      - 9090:9000\n      - 127.0.0.1:9091:9001\n    volumes:\n      - langfuse_minio_data:/data\n    healthcheck:\n      test: [\"CMD\", \"mc\", \"ready\", \"local\"]\n      interval: 1s\n      timeout: 5s\n      retries: 5\n      start_period: 1s\n\n  redis:\n    image: docker.io/redis:7\n    restart: always\n    # CHANGEME: row below to secure redis password\n    command: >\n      --requirepass ${REDIS_AUTH:-myredissecret}\n      --maxmemory-policy noeviction\n    ports:\n      - 127.0.0.1:6379:6379\n    volumes:\n      - langfuse_redis_data:/data\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 3s\n      timeout: 10s\n      retries: 10\n\n  postgres:\n    image: docker.io/postgres:${POSTGRES_VERSION:-17}\n    restart: always\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U postgres\"]\n      interval: 3s\n      timeout: 3s\n      retries: 10\n    environment:\n      POSTGRES_USER: ${POSTGRES_USER:-postgres}\n      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} # CHANGEME\n      POSTGRES_DB: ${POSTGRES_DB:-postgres}\n      TZ: UTC\n      PGTZ: UTC\n    ports:\n      - 127.0.0.1:5432:5432\n    volumes:\n      - langfuse_postgres_data:/var/lib/postgresql/data\n\nvolumes:\n  langfuse_postgres_data:\n    driver: local\n  langfuse_clickhouse_data:\n    driver: local\n  langfuse_clickhouse_logs:\n    driver: local\n  langfuse_minio_data:\n    driver: local\n  langfuse_redis_data:\n    driver: local\n",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "validation_status": "config_ok"
    },
    {
      "order": 3,
      "kind": "env",
      "language": "text",
      "label": "Set the values the compose file needs",
      "body": "Replace the placeholder values listed under Gotchas.",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "validation_status": "unvalidated"
    },
    {
      "order": 4,
      "kind": "shell",
      "language": "bash",
      "label": "Start it",
      "body": "docker compose up -d",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "validation_status": "unvalidated"
    },
    {
      "order": 5,
      "kind": "verify",
      "language": "text",
      "label": "Open the app",
      "body": "Open http://localhost:3000. The compose file publishes host port 3000 for the langfuse-web service.",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "validation_status": "unvalidated"
    }
  ],
  "notes": [
    {
      "kind": "gotcha",
      "title": "Some images use the latest tag or no tag",
      "body": "Images without a pinned version: minio: cgr.dev/chainguard/minio (no tag). A later pull can get a different version.",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file has placeholder values",
      "body": "Lines with a CHANGEME comment set: DATABASE_URL, SALT, ENCRYPTION_KEY, CLICKHOUSE_PASSWORD, LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY, LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY, LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY, REDIS_AUTH, NEXTAUTH_SECRET, MINIO_ROOT_PASSWORD, POSTGRES_PASSWORD.",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file publishes host ports",
      "body": "Host ports: 127.0.0.1:3030 (langfuse-worker), 3000 (langfuse-web), 127.0.0.1:8123 (clickhouse), 127.0.0.1:9000 (clickhouse), 9090 (minio), 127.0.0.1:9091 (minio), 127.0.0.1:6379 (redis), 127.0.0.1:5432 (postgres). A port without a host address listens on all host network interfaces.",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/docker-compose.yml",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "Some directories have a different license",
      "body": "The LICENSE file says some parts of the repository are under another license. Everything else is under the MIT license. Directories named in the file: ee/, web/src/ee/, worker/src/ee/.",
      "source_url": "https://github.com/langfuse/langfuse/blob/2ec7d561c10068bd6949191ffa653d230782531c/LICENSE",
      "checked_at": "2026-10-22"
    }
  ],
  "signals": {
    "captured_at": "2026-10-22",
    "stars": 36172,
    "forks": 4042,
    "open_issues": 1096,
    "last_push": "2026-10-22",
    "days_since_push": 0,
    "latest_release": "v4.67.0",
    "latest_release_date": "2026-10-21",
    "days_since_release": 0
  },
  "links": {
    "html": "https://openlogs.fyi/tools/langfuse",
    "markdown": "https://openlogs.fyi/tools/langfuse.md",
    "json": "https://openlogs.fyi/tools/langfuse.json"
  },
  "updated_at": "2026-10-22"
}
