{
  "schema_version": 1,
  "generated_at": "2026-10-23T00:00:00.000Z",
  "canonical_url": "https://openlogs.fyi/tools/jellyfin",
  "slug": "jellyfin",
  "name": "Jellyfin",
  "tagline": "Media server that streams your own movies, shows, music and photos to apps and browsers.",
  "replaces": {
    "summary": "Paid media streaming services, such as Plex and Netflix.",
    "products": [
      {
        "slug": "netflix",
        "name": "Netflix",
        "vendor": "Netflix",
        "url": "https://openlogs.fyi/alternatives/netflix"
      },
      {
        "slug": "plex",
        "name": "Plex",
        "vendor": "Plex",
        "url": "https://openlogs.fyi/alternatives/plex"
      }
    ]
  },
  "stack": [
    {
      "kind": "language",
      "name": "C#"
    }
  ],
  "deployment_methods": [
    "docker_compose"
  ],
  "requirements": {
    "min_ram_mb": null,
    "min_cpu_cores": null,
    "source_url": null
  },
  "license": {
    "spdx": "GPL-2.0",
    "class": "osi",
    "source_url": "https://github.com/jellyfin/jellyfin/blob/c7ce6a1b56ee7dcc1896250df0f2f9deaa828a81/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/jellyfin/jellyfin/blob/c7ce6a1b56ee7dcc1896250df0f2f9deaa828a81/README.md",
    "checked_at": "2026-10-22"
  },
  "difficulty": {
    "value": "easy",
    "reason": "1 service, 5 volume mounts, no env values to set, no elevated host access. Heuristic score 2 of 11: easy."
  },
  "repository": {
    "owner": "jellyfin",
    "name": "jellyfin",
    "url": "https://github.com/jellyfin/jellyfin"
  },
  "compose_check": {
    "status": "config_ok",
    "validated_at": "2026-10-22",
    "summary": "config_ok on 2026-10-22"
  },
  "recipe": {
    "version": 1,
    "source_path": "docs/general/installation/_container-docker-compose.md",
    "source_repo": "jellyfin/jellyfin.org",
    "source_commit_sha": "438fb0cdc7144dcb44ebb04385a2761d81be2c5d",
    "source_kind": "packaging_repo",
    "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.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/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md#L5-L37",
      "validation_status": "unvalidated"
    },
    {
      "order": 2,
      "kind": "compose",
      "language": "yaml",
      "label": "Save the code block as docker-compose.yml",
      "body": "services:\n  jellyfin:\n    image: jellyfin/jellyfin\n    container_name: jellyfin\n    # Optional - specify the uid and gid you would like Jellyfin to use instead of root\n    user: uid:gid\n    ports:\n      - 8096:8096/tcp\n      - 7359:7359/udp\n    volumes:\n      - /path/to/config:/config\n      - /path/to/cache:/cache\n      - type: bind\n        source: /path/to/media\n        target: /media\n      - type: bind\n        source: /path/to/media2\n        target: /media2\n        read_only: true\n      # Optional - extra fonts to be used during transcoding with subtitle burn-in\n      - type: bind\n        source: /path/to/fonts\n        target: /usr/local/share/fonts/custom\n        read_only: true\n    restart: 'unless-stopped'\n    # Optional - alternative address used for autodiscovery\n    environment:\n      - JELLYFIN_PublishedServerUrl=http://example.com\n    # Optional - may be necessary for docker healthcheck to pass if running in host network mode\n    extra_hosts:\n      - 'host.docker.internal:host-gateway'\n",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.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/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md#L5-L37. The check ran on that block alone. The container installation guide of the project shows this file and tells the reader to run docker compose up in the same folder.",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md#L5-L37",
      "validation_status": "unvalidated"
    },
    {
      "order": 4,
      "kind": "shell",
      "language": "bash",
      "label": "Start it",
      "body": "docker compose up -d",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md",
      "validation_status": "unvalidated"
    },
    {
      "order": 5,
      "kind": "verify",
      "language": "text",
      "label": "Open the app",
      "body": "Open http://localhost:8096. The compose file publishes host port 8096 for the jellyfin service.",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md",
      "validation_status": "unvalidated"
    }
  ],
  "notes": [
    {
      "kind": "gotcha",
      "title": "Some images use the latest tag or no tag",
      "body": "Images without a pinned version: jellyfin: jellyfin/jellyfin (no tag). A later pull can get a different version.",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file has placeholder values",
      "body": "Placeholder values: user is \"uid:gid\" (jellyfin).",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file publishes host ports",
      "body": "Host ports: 8096 (jellyfin), 7359/udp (jellyfin). A port without a host address listens on all host network interfaces.",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md",
      "checked_at": "2026-10-22"
    },
    {
      "kind": "gotcha",
      "title": "The compose file mounts host folders",
      "body": "Host paths mounted into containers: /path/to/config at /config (jellyfin), /path/to/cache at /cache (jellyfin), /path/to/media at /media (jellyfin), /path/to/media2 at /media2 (jellyfin), /path/to/fonts at /usr/local/share/fonts/custom (jellyfin).",
      "source_url": "https://github.com/jellyfin/jellyfin.org/blob/438fb0cdc7144dcb44ebb04385a2761d81be2c5d/docs/general/installation/_container-docker-compose.md",
      "checked_at": "2026-10-22"
    }
  ],
  "signals": {
    "captured_at": "2026-10-22",
    "stars": 58371,
    "forks": 5697,
    "open_issues": 805,
    "last_push": "2026-10-22",
    "days_since_push": 0,
    "latest_release": "v12.2",
    "latest_release_date": "2026-10-05",
    "days_since_release": 17
  },
  "links": {
    "html": "https://openlogs.fyi/tools/jellyfin",
    "markdown": "https://openlogs.fyi/tools/jellyfin.md",
    "json": "https://openlogs.fyi/tools/jellyfin.json"
  },
  "updated_at": "2026-10-22"
}
