{
  "version": "1.0.0",
  "apps": [ 
    {
      "slug": "acme-companion",
      "name": "acme-companion",
      "description": "Automated ACME SSL certificate generation and renewal companion for nginx-proxy via Let's Encrypt.",
      "category": "Networking",
      "image": "nginxproxy/acme-companion:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/nginx-proxy/acme-companion",
      "docsUrl": "https://github.com/nginx-proxy/acme-companion/blob/main/docs/Let's-Encrypt-and-ACME.md",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/acme-companion/certs",
          "container": "/etc/nginx/certs"
        },
        {
          "host": "/opt/appdata/acme-companion/html",
          "container": "/usr/share/nginx/html"
        },
        {
          "host": "/opt/appdata/acme-companion/acme",
          "container": "/etc/acme.sh"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "DEFAULT_EMAIL",
          "default": "",
          "description": "Email for Let's Encrypt account notifications",
          "secret": false
        },
        {
          "key": "NGINX_PROXY_CONTAINER",
          "default": "nginx-proxy",
          "description": "Name of the paired nginx-proxy container"
        },
        {
          "key": "LETSENCRYPT_STAGING",
          "default": "false",
          "description": "Use Let's Encrypt staging server for testing"
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    volumes_from:\n      - nginx-proxy\n    volumes:\n      - {{appDataPath}}/acme:/etc/acme.sh\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n    environment:\n      DEFAULT_EMAIL: {{env.DEFAULT_EMAIL}}\n      NGINX_PROXY_CONTAINER: {{env.NGINX_PROXY_CONTAINER}}\n      LETSENCRYPT_STAGING: {{env.LETSENCRYPT_STAGING}}\n  nginx-proxy:\n    image: nginxproxy/nginx-proxy:latest\n    container_name: nginx-proxy\n    restart: unless-stopped\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - {{appDataPath}}/certs:/etc/nginx/certs\n      - {{appDataPath}}/html:/usr/share/nginx/html\n      - /var/run/docker.sock:/tmp/docker.sock:ro\n"
    },
    {
      "slug": "activemq",
      "name": "ActiveMQ Classic",
      "description": "Open-source Java-based message broker supporting JMS, AMQP, MQTT, and OpenWire protocols.",
      "category": "Databases",
      "image": "apache/activemq-classic:latest",
      "logo": "https://icon.horse/icon/activemq.apache.org",
      "website": "https://activemq.apache.org",
      "docsUrl": "https://activemq.apache.org/components/classic/documentation",
      "ports": [
        {
          "host": 61616,
          "container": 61616,
          "protocol": "tcp"
        },
        {
          "host": 8161,
          "container": 8161,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/activemq/data",
          "container": "/data/activemq"
        }
      ],
      "envVars": [
        {
          "key": "ACTIVEMQ_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "ACTIVEMQ_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "activemq-artemis",
      "name": "ActiveMQ Artemis",
      "description": "Next-generation multi-protocol message broker from Apache with high performance and clustering.",
      "category": "Databases",
      "image": "apache/activemq-artemis:latest",
      "logo": "https://icon.horse/icon/activemq.apache.org",
      "website": "https://activemq.apache.org/components/artemis",
      "docsUrl": "https://activemq.apache.org/components/artemis/documentation/latest/",
      "ports": [
        {
          "host": 61616,
          "container": 61616,
          "protocol": "tcp"
        },
        {
          "host": 8161,
          "container": 8161,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/activemq-artemis/data",
          "container": "/var/lib/artemis/data"
        }
      ],
      "envVars": [
        {
          "key": "ARTEMIS_USER",
          "default": "artemis",
          "description": "Admin username"
        },
        {
          "key": "ARTEMIS_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "activepieces",
      "name": "Activepieces",
      "description": "Open-source no-code business automation platform. Build flows with a visual editor.",
      "category": "Productivity",
      "image": "activepieces/activepieces:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/activepieces.png",
      "website": "https://www.activepieces.com",
      "docsUrl": "https://www.activepieces.com/docs",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/activepieces/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "AP_FRONTEND_URL",
          "default": "http://localhost:80",
          "description": "Public URL of the frontend (for OAuth callbacks)"
        },
        {
          "key": "AP_ENCRYPTION_KEY",
          "default": "",
          "description": "32+ char encryption key for credentials",
          "secret": true
        },
        {
          "key": "AP_JWT_SECRET",
          "default": "",
          "description": "JWT signing secret",
          "secret": true
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "actual-budget",
      "name": "Actual Budget",
      "description": "Local-first personal finance and budgeting app.",
      "category": "Productivity",
      "image": "actualbudget/actual-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/actual-budget.png",
      "website": "https://actualbudget.org",
      "docsUrl": "https://actualbudget.org/docs",
      "ports": [
        {
          "host": 5006,
          "container": 5006,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/actual-budget/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "adguard-home",
      "name": "AdGuard Home",
      "description": "Network-wide ad and tracker blocking DNS server with a beautiful UI.",
      "category": "Networking",
      "image": "adguard/adguardhome:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/adguard-home.png",
      "website": "https://adguard.com/en/adguard-home/overview.html",
      "docsUrl": "https://github.com/AdguardTeam/AdGuardHome/wiki",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/adguard/work",
          "container": "/opt/adguardhome/work"
        },
        {
          "host": "/opt/appdata/adguard/conf",
          "container": "/opt/adguardhome/conf"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "adminer",
      "name": "Adminer",
      "description": "Single-file database administration UI.",
      "category": "Developer Tools",
      "image": "adminer:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/adminer.png",
      "website": "https://www.adminer.org",
      "docsUrl": "https://hub.docker.com/_/adminer",
      "ports": [
        {
          "host": 8084,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "aerospike",
      "name": "Aerospike",
      "description": "Flash-optimized in-memory NoSQL database for real-time workloads at scale.",
      "category": "Databases",
      "image": "aerospike/aerospike-server:latest",
      "logo": "https://icon.horse/icon/aerospike.com",
      "website": "https://aerospike.com",
      "docsUrl": "https://docs.aerospike.com/",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        },
        {
          "host": 3001,
          "container": 3001,
          "protocol": "tcp"
        },
        {
          "host": 3002,
          "container": 3002,
          "protocol": "tcp"
        },
        {
          "host": 3003,
          "container": 3003,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/aerospike/data",
          "container": "/opt/aerospike/data"
        },
        {
          "host": "/opt/appdata/aerospike/config",
          "container": "/opt/aerospike/etc"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "affine",
      "name": "AFFiNE",
      "description": "Open-source knowledge base that blends docs, whiteboard, and database into a single workspace.",
      "category": "Productivity",
      "image": "ghcr.io/toeverything/affine:stable",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/affine.png",
      "website": "https://affine.pro",
      "docsUrl": "https://docs.affine.pro/docs/self-host-affine",
      "ports": [
        {
          "host": 3010,
          "container": 3010,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/affine/config",
          "container": "/root/.affine/config"
        },
        {
          "host": "/opt/appdata/affine/storage",
          "container": "/root/.affine/storage"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "AFFINE_SERVER_HOST",
          "default": "0.0.0.0",
          "description": "Server bind address"
        },
        {
          "key": "AFFINE_SERVER_PORT",
          "default": "3010",
          "description": "Server port"
        },
        {
          "key": "AFFINE_CONFIG_PATH",
          "default": "/root/.affine/config",
          "description": "Configuration path"
        }
      ],
      "minMemory": "2GB",
      "version": "stable"
    },
    {
      "slug": "airflow",
      "name": "Apache Airflow",
      "description": "Platform to programmatically author, schedule, and monitor complex data workflows as DAGs.",
      "category": "Databases",
      "image": "apache/airflow:latest",
      "logo": "https://icon.horse/icon/airflow.apache.org",
      "website": "https://airflow.apache.org",
      "docsUrl": "https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/airflow/dags",
          "container": "/opt/airflow/dags"
        },
        {
          "host": "/opt/appdata/airflow/logs",
          "container": "/opt/airflow/logs"
        },
        {
          "host": "/opt/appdata/airflow/plugins",
          "container": "/opt/airflow/plugins"
        }
      ],
      "envVars": [
        {
          "key": "AIRFLOW__CORE__EXECUTOR",
          "default": "LocalExecutor",
          "description": "Airflow executor (LocalExecutor for single node)"
        },
        {
          "key": "AIRFLOW__DATABASE__SQL_ALCHEMY_CONN",
          "default": "postgresql+psycopg2://airflow:airflow@postgres/airflow",
          "description": "Metadata database connection string"
        },
        {
          "key": "AIRFLOW__CORE__LOAD_EXAMPLES",
          "default": "false",
          "description": "Load example DAGs on first run"
        },
        {
          "key": "AIRFLOW__CORE__FERNET_KEY",
          "default": "",
          "description": "Fernet key for credential encryption",
          "secret": true
        },
        {
          "key": "AIRFLOW__WEBSERVER__SECRET_KEY",
          "default": "",
          "description": "Flask secret key for webserver",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "akaunting",
      "name": "Akaunting",
      "description": "Free online accounting software for invoicing, expenses, and small business finances.",
      "category": "Productivity",
      "image": "akaunting/akaunting:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/akaunting.png",
      "website": "https://akaunting.com",
      "docsUrl": "https://akaunting.com/docs",
      "ports": [
        {
          "host": 8597,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/akaunting/data",
          "container": "/var/www/html/data"
        },
        {
          "host": "/opt/appdata/akaunting/storage",
          "container": "/var/www/html/storage"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DB_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "DB_DATABASE",
          "default": "akaunting",
          "description": "Database name"
        },
        {
          "key": "DB_USERNAME",
          "default": "akaunting",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "APP_KEY",
          "default": "",
          "description": "Application encryption key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "alertmanager",
      "name": "Alertmanager",
      "description": "Prometheus alert routing, grouping, and notification manager.",
      "category": "Monitoring",
      "image": "prom/alertmanager:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/alertmanager.png",
      "website": "https://prometheus.io/docs/alerting/latest/alertmanager/",
      "docsUrl": "https://prometheus.io/docs/alerting/latest/alertmanager/",
      "ports": [
        {
          "host": 9093,
          "container": 9093,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/alertmanager/config",
          "container": "/etc/alertmanager"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "alpine",
      "name": "Alpine Linux",
      "description": "Alpine Linux base image, lightweight and security-oriented for container tasks.",
      "category": "Utilities",
      "image": "alpine:latest",
      "logo": "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/svg/alpine.svg",
      "website": "https://alpinelinux.org",
      "docsUrl": "https://hub.docker.com/_/alpine",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/alpine/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ampache",
      "name": "Ampache",
      "description": "Web-based audio/video streaming server with Subsonic API support.",
      "category": "Media",
      "image": "ampache/ampache:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ampache.png",
      "website": "https://ampache.org",
      "docsUrl": "https://github.com/ampache/ampache/blob/master/docs/DOCKER.md",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ampache/data",
          "container": "/var/www/html"
        },
        {
          "host": "/opt/appdata/ampache/music",
          "container": "/music"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "android-sdk",
      "name": "Android SDK",
      "description": "Prebuilt Android SDK image with build tools and platform tools for app development and CI.",
      "category": "Developer Tools",
      "image": "thyrlian/android-sdk:latest",
      "logo": "https://icon.horse/icon/developer.android.com",
      "website": "https://developer.android.com",
      "docsUrl": "https://developer.android.com/docs",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/android-sdk/data",
          "container": "/opt/android-sdk"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ANDROID_HOME",
          "default": "/opt/android-sdk",
          "description": "Android SDK installation path"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "anything-llm",
      "name": "AnythingLLM",
      "description": "All-in-one document-based AI workspace. Chat with your docs using local or cloud LLMs.",
      "category": "AI & Voice",
      "image": "mintplexlabs/anythingllm:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/anything-llm.png",
      "website": "https://anythingllm.com",
      "docsUrl": "https://docs.anythingllm.com",
      "ports": [
        {
          "host": 3001,
          "container": 3001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/anything-llm/data",
          "container": "/app/server/storage"
        },
        {
          "host": "/opt/appdata/anything-llm/.env",
          "container": "/app/server/.env",
          "readOnly": false
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "STORAGE_DIR",
          "default": "/app/server/storage",
          "description": "Storage directory"
        },
        {
          "key": "LLM_PROVIDER",
          "default": "ollama",
          "description": "Default LLM provider"
        },
        {
          "key": "JWT_SECRET",
          "default": "",
          "description": "JWT signing secret",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "apache",
      "name": "Apache HTTP Server",
      "description": "The most widely used open source HTTP web server in the world.",
      "category": "Networking",
      "image": "httpd:alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/apache.png",
      "website": "https://httpd.apache.org",
      "docsUrl": "https://httpd.apache.org/docs/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/apache/conf",
          "container": "/usr/local/apache2/conf"
        },
        {
          "host": "/opt/appdata/apache/htdocs",
          "container": "/usr/local/apache2/htdocs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "alpine"
    },
    {
      "slug": "apache-dev",
      "name": "Apache Dev",
      "description": "Apache HTTP Server on Alpine for local web development and testing.",
      "category": "Developer Tools",
      "image": "httpd:alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/apache.png",
      "website": "https://httpd.apache.org",
      "docsUrl": "https://hub.docker.com/_/httpd",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/apache-dev/htdocs",
          "container": "/usr/local/apache2/htdocs"
        },
        {
          "host": "/opt/appdata/apache-dev/conf",
          "container": "/usr/local/apache2/conf"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "alpine"
    },
    {
      "slug": "apache-geode",
      "name": "Apache Geode",
      "description": "Distributed in-memory data store with strong consistency for transactional workloads.",
      "category": "Databases",
      "image": "apachegeode/geode:latest",
      "logo": "https://geode.apache.org/img/ApacheGeode_logo.svg",
      "website": "https://geode.apache.org",
      "docsUrl": "https://geode.apache.org/docs/",
      "ports": [
        {
          "host": 7070,
          "container": 7070,
          "protocol": "tcp"
        },
        {
          "host": 10334,
          "container": 10334,
          "protocol": "tcp"
        },
        {
          "host": 40404,
          "container": 40404,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/apache-geode/data",
          "container": "/geode"
        }
      ],
      "envVars": [
        {
          "key": "GEODE_LOCATOR_HOST",
          "default": "geode-locator",
          "description": "Locator hostname"
        },
        {
          "key": "GEODE_LOCATOR_PORT",
          "default": "10334",
          "description": "Locator port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "apache-ignite",
      "name": "Apache Ignite",
      "description": "Distributed in-memory database and compute platform for transactional and analytical workloads.",
      "category": "Databases",
      "image": "apacheignite/ignite:latest",
      "logo": "https://icon.horse/icon/ignite.apache.org",
      "website": "https://ignite.apache.org",
      "docsUrl": "https://ignite.apache.org/docs/latest/",
      "ports": [
        {
          "host": 11211,
          "container": 11211,
          "protocol": "tcp"
        },
        {
          "host": 47100,
          "container": 47100,
          "protocol": "tcp"
        },
        {
          "host": 47500,
          "container": 47500,
          "protocol": "tcp"
        },
        {
          "host": 49112,
          "container": 49112,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/apache-ignite/data",
          "container": "/opt/ignite/work"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "apereo-cas",
      "name": "Apereo CAS",
      "description": "Central Authentication Service single sign-on server for the web.",
      "category": "Security",
      "image": "apereo/cas:latest",
      "logo": "https://icon.horse/icon/www.apereo.org",
      "website": "https://www.apereo.org/projects/cas",
      "docsUrl": "https://apereo.github.io/cas",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/apereo-cas/etc",
          "container": "/etc/cas"
        },
        {
          "host": "/opt/appdata/apereo-cas/keystore",
          "container": "/etc/cas/keystore"
        }
      ],
      "envVars": [
        {
          "key": "CAS_SERVER_NAME",
          "default": "https://cas.example.com",
          "description": "Public CAS server URL"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "apicurio-registry",
      "name": "Apicurio Registry",
      "description": "Shared schema and API artifact registry for Kafka, Avro, Protobuf, JSON Schema, and OpenAPI.",
      "category": "Databases",
      "image": "apicurio/apicurio-registry:latest",
      "logo": "https://www.apicur.io/images/registry_logo.png",
      "website": "https://www.apicur.io",
      "docsUrl": "https://www.apicur.io/registry/docs/getting-started/assembly-installing-registry-docker.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/apicurio-registry/data",
          "container": "/tmp"
        }
      ],
      "envVars": [
        {
          "key": "REGISTRY_AUTH_ANONYMOUS_READ_ACCESS_ENABLED",
          "default": "true",
          "description": "Allow anonymous read access"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "appdaemon",
      "name": "AppDaemon",
      "description": "Python automation runtime for Home Assistant and MQTT with support for custom apps and tablet dashboards.",
      "category": "Home Automation",
      "image": "acockburn/appdaemon:latest",
      "logo": "https://github.githubassets.com/favicons/favicon.svg",
      "website": "https://appdaemon.readthedocs.io",
      "docsUrl": "https://appdaemon.readthedocs.io/en/latest/DOCKER_TUTORIAL.html",
      "ports": [
        {
          "host": 5050,
          "container": 5050,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/appdaemon/conf",
          "container": "/conf"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "HA_URL",
          "default": "http://homeassistant:8123",
          "description": "Home Assistant URL"
        },
        {
          "key": "TOKEN",
          "default": "",
          "description": "Home Assistant long-lived access token",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "apprise",
      "name": "Apprise",
      "description": "Universal notification API that pushes to dozens of notification services with one library.",
      "category": "Communications",
      "image": "caronc/apprise:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/apprise.png",
      "website": "https://github.com/caronc/apprise",
      "docsUrl": "https://github.com/caronc/apprise/wiki",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/apprise/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "appsmith",
      "name": "Appsmith",
      "description": "Open-source low-code platform for building internal tools, dashboards, and admin panels.",
      "category": "Developer Tools",
      "image": "appsmith/appsmith-ce:latest",
      "logo": "https://icon.horse/icon/www.appsmith.com",
      "website": "https://www.appsmith.com",
      "docsUrl": "https://docs.appsmith.com/getting-started/setup/installation-guides/docker",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/appsmith/config",
          "container": "/appsmith-stacks"
        },
        {
          "host": "/opt/appdata/appsmith/data",
          "container": "/appsmith-data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "APPSMITH_DISABLE_TELEMETRY",
          "default": "true",
          "description": "Disable anonymous telemetry"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "archivebox",
      "name": "ArchiveBox",
      "description": "Self-hosted web archiving to save, organize, and browse snapshots of websites.",
      "category": "Documents",
      "image": "archivebox/archivebox:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/archivebox.png",
      "website": "https://archivebox.io",
      "docsUrl": "https://github.com/ArchiveBox/ArchiveBox/wiki/Docker",
      "ports": [
        {
          "host": 8088,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/archivebox/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ALLOWED_HOSTS",
          "default": "*",
          "description": "Comma-separated list of allowed hostnames"
        },
        {
          "key": "PUBLIC_INDEX",
          "default": "true",
          "description": "Whether the index is publicly viewable"
        },
        {
          "key": "PUBLIC_SNAPSHOTS",
          "default": "true",
          "description": "Whether snapshots are publicly viewable"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "argo-cd",
      "name": "Argo CD",
      "description": "Declarative, GitOps continuous delivery tool for Kubernetes with drift detection and visual app management.",
      "category": "Databases",
      "image": "quay.io/argoproj/argocd:latest",
      "logo": "https://argo-cd.readthedocs.io/en/stable/assets/logo.png",
      "website": "https://argo-cd.readthedocs.io",
      "docsUrl": "https://argo-cd.readthedocs.io/en/stable/getting_started/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/argo-cd/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "ARGOCD_SERVER_INSECURE",
          "default": "true",
          "description": "Run server without TLS (dev only)"
        },
        {
          "key": "ARGOCD_SERVER_REPO_SERVER",
          "default": "argocd-repo-server:8081",
          "description": "Internal repo server address"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "artillery-load-test",
      "name": "Artillery Load Test",
      "description": "Modern, powerful load testing toolkit for APIs and microservices.",
      "category": "Developer Tools",
      "image": "artilleryio/artillery:latest",
      "logo": "https://icon.horse/icon/www.artillery.io",
      "website": "https://www.artillery.io",
      "docsUrl": "https://www.artillery.io/docs/guides/getting-started/installing-artillery",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/artillery-load-test/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/artillery-load-test/reports",
          "container": "/reports"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "asra",
      "name": "Asra",
      "description": "Self-hosted Signal-compatible server implementation. Run your own Signal infrastructure for complete control over your messaging data.",
      "category": "Communications",
      "image": "asragrim/asra:latest",
      "logo": "https://raw.githubusercontent.com/asragrim/asra/main/logo.png",
      "website": "https://github.com/asragrim/asra",
      "docsUrl": "https://github.com/asragrim/asra#readme",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/lib/asra",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "SERVER_NAME",
          "default": "",
          "description": "Public domain name for your Asra server"
        },
        {
          "key": "ADMIN_PHONE",
          "default": "",
          "description": "Admin phone number in E.164 format (e.g., +1234567890)",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone for the container"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "asterisk",
      "name": "Asterisk",
      "description": "Open-source telephony platform; powers IP PBX, VoIP gateways, and conference servers.",
      "category": "Communications",
      "image": "dougbtv/asterisk:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/asterisk.png",
      "website": "https://www.asterisk.org",
      "docsUrl": "https://docs.asterisk.org",
      "ports": [
        {
          "host": 5060,
          "container": 5060,
          "protocol": "udp"
        },
        {
          "host": 5060,
          "container": 5060,
          "protocol": "tcp"
        },
        {
          "host": 10000,
          "container": 10000,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/asterisk/etc",
          "container": "/etc/asterisk"
        },
        {
          "host": "/opt/appdata/asterisk/var",
          "container": "/var/lib/asterisk"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "astro-dev",
      "name": "Astro",
      "description": "Astro dev server on Node 22 Alpine, content-driven web framework with islands architecture.",
      "category": "Developer Tools",
      "image": "node:22-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/astro.png",
      "website": "https://astro.build",
      "docsUrl": "https://docs.astro.build",
      "ports": [
        {
          "host": 4321,
          "container": 4321,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/astro-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "HOST",
          "default": "0.0.0.0",
          "description": "Bind address for dev server"
        }
      ],
      "version": "22-alpine"
    },
    {
      "slug": "audiobookshelf",
      "name": "Audiobookshelf",
      "description": "Self-hosted audiobook and podcast server.",
      "category": "Media",
      "image": "ghcr.io/advplyr/audiobookshelf:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/audiobookshelf.png",
      "website": "https://www.audiobookshelf.org",
      "docsUrl": "https://www.audiobookshelf.org/docs",
      "ports": [
        {
          "host": 13378,
          "container": 13378,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/audiobookshelf/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/audiobookshelf/metadata",
          "container": "/metadata"
        },
        {
          "host": "/srv/audiobooks",
          "container": "/audiobooks"
        },
        {
          "host": "/srv/podcasts",
          "container": "/podcasts"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "authelia",
      "name": "Authelia",
      "description": "Authentication and authorization server providing 2FA and SSO.",
      "category": "Security",
      "image": "authelia/authelia:latest",
      "logo": "https://www.authelia.com/images/branding/logo-cropped.png",
      "website": "https://www.authelia.com",
      "docsUrl": "https://www.authelia.com/configuration/prologue/introduction/",
      "ports": [
        {
          "host": 9091,
          "container": 9091,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/authelia/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "authentik",
      "name": "Authentik",
      "description": "Identity provider with SSO, OAuth2, SAML, LDAP, and proxy auth.",
      "category": "Security",
      "image": "ghcr.io/goauthentik/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/authentik.png",
      "website": "https://goauthentik.io",
      "docsUrl": "https://docs.goauthentik.io",
      "ports": [
        {
          "host": 9002,
          "container": 9000,
          "protocol": "tcp"
        },
        {
          "host": 9443,
          "container": 9443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/authentik/media",
          "container": "/media"
        },
        {
          "host": "/opt/appdata/authentik/custom-templates",
          "container": "/templates"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "AUTHENTIK_SECRET_KEY",
          "default": "change-me",
          "description": "Secret key",
          "secret": true
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    command: server\n    environment:\n      AUTHENTIK_SECRET_KEY: {{env.AUTHENTIK_SECRET_KEY}}\n      AUTHENTIK_POSTGRESQL__HOST: {{serviceName}}-postgres\n      AUTHENTIK_POSTGRESQL__USER: authentik\n      AUTHENTIK_POSTGRESQL__NAME: authentik\n      AUTHENTIK_POSTGRESQL__PASSWORD: {{env.POSTGRES_PASSWORD}}\n      AUTHENTIK_REDIS__HOST: {{serviceName}}-redis\n      TZ: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/media:/media\n      - {{appDataPath}}/custom-templates:/templates\n    depends_on:\n      - {{serviceName}}-postgres\n      - {{serviceName}}-redis\n  {{serviceName}}-worker:\n    image: {{image}}\n    container_name: {{serviceName}}-worker\n    restart: unless-stopped\n    command: worker\n    environment:\n      AUTHENTIK_SECRET_KEY: {{env.AUTHENTIK_SECRET_KEY}}\n      AUTHENTIK_POSTGRESQL__HOST: {{serviceName}}-postgres\n      AUTHENTIK_POSTGRESQL__USER: authentik\n      AUTHENTIK_POSTGRESQL__NAME: authentik\n      AUTHENTIK_POSTGRESQL__PASSWORD: {{env.POSTGRES_PASSWORD}}\n      AUTHENTIK_REDIS__HOST: {{serviceName}}-redis\n      TZ: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/media:/media\n      - {{appDataPath}}/custom-templates:/templates\n    depends_on:\n      - {{serviceName}}-postgres\n      - {{serviceName}}-redis\n  {{serviceName}}-postgres:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-postgres\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: authentik\n      POSTGRES_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      POSTGRES_DB: authentik\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n  {{serviceName}}-redis:\n    image: redis:7-alpine\n    container_name: {{serviceName}}-redis\n    restart: unless-stopped\n"
    },
    {
      "slug": "authentik-proxy",
      "name": "Authentik Proxy",
      "description": "Forward-auth reverse proxy that gates apps behind Authentik SSO.",
      "category": "Security",
      "image": "ghcr.io/goauthentik/proxy:latest",
      "logo": "https://icon.horse/icon/goauthentik.io",
      "website": "https://goauthentik.io",
      "docsUrl": "https://docs.goauthentik.io/installation/proxy",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/authentik-proxy/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "AUTHENTIK_HOST",
          "default": "https://authentik.example.com",
          "description": "Authentik instance URL"
        },
        {
          "key": "AUTHENTIK_INSECURE",
          "default": "false",
          "description": "Skip TLS verification (dev only)"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "autobrr",
      "name": "autobrr",
      "description": "Automation for racing torrents from IRC announce channels.",
      "category": "Media",
      "image": "ghcr.io/autobrr/autobrr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/autobrr.png",
      "website": "https://autobrr.com",
      "docsUrl": "https://autobrr.com",
      "ports": [
        {
          "host": 7474,
          "container": 7474,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/autobrr/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "autoheal",
      "name": "Docker Autoheal",
      "description": "Watches Docker containers and restarts any that report an unhealthy health-check status.",
      "category": "Monitoring",
      "image": "willfarrell/autoheal:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/willfarrell/docker-autoheal",
      "docsUrl": "https://github.com/willfarrell/docker-autoheal#readme",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "AUTOHEAL_CONTAINER_LABEL",
          "default": "all",
          "description": "Label filter for containers to monitor"
        },
        {
          "key": "AUTOHEAL_INTERVAL",
          "default": "5",
          "description": "Check interval in seconds"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "azuracast",
      "name": "AzuraCast",
      "description": "Web-based radio station management with auto-DJ, playlists, and live DJs.",
      "category": "Media",
      "image": "ghcr.io/azuracast/azuracast:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/azuracast.png",
      "website": "https://www.azuracast.com",
      "docsUrl": "https://www.azuracast.com/docs/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/azuracast/groups",
          "container": "/var/lib/azuracast/storage"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "AZURACAST_BASE_URL",
          "default": "http://localhost",
          "description": "Public base URL for AzuraCast"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "bazarr",
      "name": "Bazarr",
      "description": "Subtitle management and automation for Sonarr and Radarr libraries.",
      "category": "Media",
      "image": "lscr.io/linuxserver/bazarr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/bazarr.png",
      "website": "https://docs.linuxserver.io/images/docker-bazarr/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-bazarr/",
      "ports": [
        {
          "host": 6767,
          "container": 6767,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/bazarr/config",
          "container": "/config"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "beets",
      "name": "Beets",
      "description": "Music library manager that catalogs, tags, and renames audio files automatically.",
      "category": "Media",
      "image": "linuxserver/beets:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/beets.png",
      "website": "https://beets.io",
      "docsUrl": "https://docs.linuxserver.io/images/docker-beets",
      "ports": [
        {
          "host": 8337,
          "container": 8337,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/beets/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/beets/music",
          "container": "/music"
        },
        {
          "host": "/opt/appdata/beets/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "benthos",
      "name": "Benthos",
      "description": "Declarative stream processor for connecting, transforming, and routing data between protocols.",
      "category": "Databases",
      "image": "jeffail/benthos:latest",
      "logo": "https://benthos.dev/docs/img/benthos_icon.svg",
      "website": "https://benthos.dev",
      "docsUrl": "https://benthos.dev/docs/about/docker",
      "ports": [
        {
          "host": 4195,
          "container": 4195,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/benthos/config",
          "container": "/benthos/config"
        },
        {
          "host": "/opt/appdata/benthos/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "beszel",
      "name": "Beszel",
      "description": "Lightweight server monitoring hub with historical metrics.",
      "category": "Monitoring",
      "image": "henrygd/beszel:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/beszel.png",
      "website": "https://beszel.dev",
      "docsUrl": "https://beszel.dev/guide",
      "ports": [
        {
          "host": 8090,
          "container": 8090,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/beszel/data",
          "container": "/beszel_data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "bind9",
      "name": "BIND 9",
      "description": "Most widely used DNS software on the Internet, supporting authoritative and recursive resolution.",
      "category": "Networking",
      "image": "ubuntu/bind9:latest",
      "logo": "https://www.isc.org/wp-content/uploads/2017/10/isc-logo-200x200.png",
      "website": "https://www.isc.org/bind/",
      "docsUrl": "https://hub.docker.com/r/ubuntu/bind9",
      "ports": [
        {
          "host": 53,
          "container": 53,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/bind9/config",
          "container": "/etc/bind"
        },
        {
          "host": "/opt/appdata/bind9/cache",
          "container": "/var/cache/bind"
        },
        {
          "host": "/opt/appdata/bind9/lib",
          "container": "/var/lib/bind"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BIND9_USER",
          "default": "root",
          "description": "User to run BIND as"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "blackbox-exporter",
      "name": "Blackbox Exporter",
      "description": "Prometheus blackbox probing for HTTP, HTTPS, DNS, TCP, ICMP and gRPC endpoints.",
      "category": "Monitoring",
      "image": "prom/blackbox-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/prometheus/blackbox_exporter",
      "docsUrl": "https://github.com/prometheus/blackbox_exporter#configuration",
      "ports": [
        {
          "host": 9115,
          "container": 9115,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/blackbox-exporter/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "blocky",
      "name": "Blocky",
      "description": "DNS proxy and ad-blocking resolver for home networks.",
      "category": "Networking",
      "image": "spx01/blocky:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/blocky.png",
      "website": "https://0xerr0r.github.io/blocky",
      "docsUrl": "https://0xerr0r.github.io/blocky",
      "ports": [
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        },
        {
          "host": 4000,
          "container": 4000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/blocky/config.yml",
          "container": "/app/config.yml"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "bluecherry",
      "name": "Bluecherry DVR",
      "description": "Professional video surveillance DVR server with IP camera support.",
      "category": "Home Automation",
      "image": "bluecherrydvr/bluecherry:latest",
      "logo": "https://icon.horse/icon/www.bluecherrydvr.com",
      "website": "https://www.bluecherrydvr.com",
      "docsUrl": "https://www.bluecherrydvr.com/documentation/",
      "ports": [
        {
          "host": 7001,
          "container": 7001,
          "protocol": "tcp"
        },
        {
          "host": 7002,
          "container": 7002,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/bluecherry/config",
          "container": "/etc/bluecherry"
        },
        {
          "host": "/opt/appdata/bluecherry/recordings",
          "container": "/var/lib/bluecherry/recordings"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "bookstack",
      "name": "BookStack",
      "description": "Simple and free wiki platform for organising and storing information.",
      "category": "Productivity",
      "image": "lscr.io/linuxserver/bookstack:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/bookstack.png",
      "website": "https://www.bookstackapp.com",
      "docsUrl": "https://www.bookstackapp.com/docs/",
      "ports": [
        {
          "host": 6875,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/bookstack/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "APP_URL",
          "default": "http://localhost:6875",
          "description": "Application URL"
        },
        {
          "key": "DB_HOST",
          "default": "bookstack-db",
          "description": "Database host"
        },
        {
          "key": "DB_DATABASE",
          "default": "bookstackapp",
          "description": "Database name"
        },
        {
          "key": "DB_USERNAME",
          "default": "bookstack",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "bookstack-caddy",
      "name": "BookStack (Caddy)",
      "description": "Simple wiki platform with a Caddy reverse proxy and auto-TLS on a dedicated host.",
      "category": "Documents",
      "image": "lscr.io/linuxserver/bookstack:latest",
      "logo": "https://icon.horse/icon/www.bookstackapp.com",
      "website": "https://www.bookstackapp.com",
      "docsUrl": "https://docs.linuxserver.io/images/docker-bookstack",
      "ports": [
        {
          "host": 6876,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/bookstack-caddy/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "APP_URL",
          "default": "http://localhost:6876",
          "description": "Application URL"
        },
        {
          "key": "DB_HOST",
          "default": "bookstack-caddy-db",
          "description": "Database host"
        },
        {
          "key": "DB_DATABASE",
          "default": "bookstack",
          "description": "Database name"
        },
        {
          "key": "DB_USERNAME",
          "default": "bookstack",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "bore-tunnel",
      "name": "bore",
      "description": "Modern, simple TCP tunnel in Rust that exposes local ports to a remote server.",
      "category": "Networking",
      "image": "ekzhang/bore:latest",
      "logo": "https://github.com/ekzhang/bore/raw/master/img/bore.svg",
      "website": "https://github.com/ekzhang/bore",
      "docsUrl": "https://github.com/ekzhang/bore",
      "ports": [
        {
          "host": 22016,
          "container": 22016,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "borgmatic",
      "name": "Borgmatic",
      "description": "Configuration-driven BorgBackup automation.",
      "category": "Backups",
      "image": "ghcr.io/borgmatic-collective/borgmatic:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/borgmatic.png",
      "website": "https://torsion.org/borgmatic/",
      "docsUrl": "https://torsion.org/borgmatic/docs/how-to/set-up-backups/",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/borgmatic/config",
          "container": "/etc/borgmatic.d"
        },
        {
          "host": "/srv",
          "container": "/mnt/source",
          "readOnly": true
        },
        {
          "host": "/srv/backups/borgmatic",
          "container": "/mnt/borg-repository"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "botpress",
      "name": "Botpress",
      "description": "Open-source conversational AI platform for building chatbots and virtual assistants.",
      "category": "Productivity",
      "image": "botpress/server:latest",
      "logo": "https://icon.horse/icon/botpress.com",
      "website": "https://botpress.com",
      "docsUrl": "https://botpress.com/docs",
      "ports": [
        {
          "host": 8610,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/botpress/data",
          "container": "/botpress/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BP_DATABASE_URL",
          "default": "postgresql://botpress:botpress@postgres:5432/botpress",
          "description": "PostgreSQL connection URL",
          "secret": true
        },
        {
          "key": "BP_REDIS_URL",
          "default": "redis://redis:6379/",
          "description": "Redis connection URL"
        },
        {
          "key": "BP_PRODUCTION",
          "default": "true",
          "description": "Run in production mode"
        },
        {
          "key": "CLUSTER_ENABLED",
          "default": "true",
          "description": "Enable clustering"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "brave-search-mcp",
      "name": "Brave Search MCP",
      "description": "Official Brave Search MCP server for web, news, image, video, local, and LLM-context search.",
      "category": "MCP Services",
      "image": "mcp/brave-search:latest",
      "logo": "https://brave.com/static-assets/images/brave-logo-sans-text.svg",
      "website": "https://brave.com/search/api/",
      "docsUrl": "https://github.com/brave/brave-search-mcp-server",
      "ports": [
        {
          "host": 8082,
          "container": 8082,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "BRAVE_API_KEY",
          "default": "",
          "description": "Brave Search API key",
          "secret": true
        },
        {
          "key": "BRAVE_MCP_PORT",
          "default": "8082",
          "description": "HTTP MCP port exposed by the server"
        },
        {
          "key": "BRAVE_MCP_ENABLED_TOOLS",
          "default": "",
          "description": "Optional space-separated whitelist of Brave MCP tools"
        }
      ],
      "minMemory": "256MB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    ports:\n      - \"{{envRaw.BRAVE_MCP_PORT}}:{{envRaw.BRAVE_MCP_PORT}}\"\n    environment:\n      BRAVE_API_KEY: {{env.BRAVE_API_KEY}}\n      BRAVE_MCP_TRANSPORT: \"http\"\n      BRAVE_MCP_HOST: \"0.0.0.0\"\n      BRAVE_MCP_PORT: {{env.BRAVE_MCP_PORT}}\n      BRAVE_MCP_ENABLED_TOOLS: {{env.BRAVE_MCP_ENABLED_TOOLS}}\n"
    },
    {
      "slug": "budibase",
      "name": "Budibase",
      "description": "Low-code platform for building internal tools, business apps, and workflows fast.",
      "category": "Developer Tools",
      "image": "budibase/budibase:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/budibase.png",
      "website": "https://budibase.com",
      "docsUrl": "https://docs.budibase.com/docs/docker",
      "ports": [
        {
          "host": 10000,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/budibase/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BB_ADMIN_USER_EMAIL",
          "default": "",
          "description": "Initial admin email",
          "secret": false
        },
        {
          "key": "BB_ADMIN_USER_PASSWORD",
          "default": "",
          "description": "Initial admin password",
          "secret": true
        },
        {
          "key": "JWT_SECRET",
          "default": "",
          "description": "JWT signing secret",
          "secret": true
        },
        {
          "key": "MINIO_ACCESS_KEY",
          "default": "",
          "description": "MinIO access key",
          "secret": true
        },
        {
          "key": "MINIO_SECRET_KEY",
          "default": "",
          "description": "MinIO secret key",
          "secret": true
        },
        {
          "key": "COUCH_DB_USER",
          "default": "budibase",
          "description": "CouchDB user"
        },
        {
          "key": "COUCH_DB_PASSWORD",
          "default": "",
          "description": "CouchDB password",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "buildbot-master",
      "name": "Buildbot Master",
      "description": "Build automation framework master that schedules builds across workers.",
      "category": "Developer Tools",
      "image": "buildbot/buildbot-master:latest",
      "logo": "https://icon.horse/icon/buildbot.net",
      "website": "https://buildbot.net",
      "docsUrl": "https://docs.buildbot.net/current/tutorial/docker.html",
      "ports": [
        {
          "host": 8010,
          "container": 8010,
          "protocol": "tcp"
        },
        {
          "host": 9989,
          "container": 9989,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/buildbot-master/data",
          "container": "/var/lib/buildbot/master"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BUILDBOT_MASTER_NAME",
          "default": "buildbot-master",
          "description": "Name of the Buildbot master"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "buildbot-worker",
      "name": "Buildbot Worker",
      "description": "Buildbot worker that executes jobs dispatched by the Buildbot master.",
      "category": "Developer Tools",
      "image": "buildbot/buildbot-worker:latest",
      "logo": "https://icon.horse/icon/buildbot.net",
      "website": "https://buildbot.net",
      "docsUrl": "https://docs.buildbot.net/current/tutorial/docker.html",
      "ports": [
        {
          "host": 8010,
          "container": 8010,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/buildbot-worker/data",
          "container": "/var/lib/buildbot/worker"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BUILDBOT_MASTER",
          "default": "buildbot-master:9989",
          "description": "Buildbot master host and port"
        },
        {
          "key": "BUILDBOT_NAME",
          "default": "docker-worker",
          "description": "Name of this worker"
        },
        {
          "key": "BUILDBOT_PASSWORD",
          "default": "pass",
          "description": "Worker password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "buildkit",
      "name": "BuildKit",
      "description": "Moby BuildKit daemon for concurrent, cache-efficient container image builds.",
      "category": "Developer Tools",
      "image": "moby/buildkit:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/moby/buildkit",
      "docsUrl": "https://github.com/moby/buildkit/blob/master/README.md",
      "ports": [
        {
          "host": 1234,
          "container": 1234,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/buildkit/cache",
          "container": "/var/lib/buildkit"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "bun",
      "name": "Bun",
      "description": "All-in-one JavaScript runtime and toolkit with native bundler, test runner, and package manager.",
      "category": "Developer Tools",
      "image": "oven/bun:latest",
      "logo": "https://icon.horse/icon/bun.sh",
      "website": "https://bun.sh",
      "docsUrl": "https://bun.sh/docs",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/bun/app",
          "container": "/home/bun/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "busybox",
      "name": "BusyBox",
      "description": "BusyBox combines tiny versions of common Unix utilities into a single image.",
      "category": "Utilities",
      "image": "busybox:latest",
      "logo": "https://icon.horse/icon/busybox.net",
      "website": "https://busybox.net",
      "docsUrl": "https://hub.docker.com/_/busybox",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/busybox/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "caddy",
      "name": "Caddy",
      "description": "Automatic HTTPS web server and reverse proxy.",
      "category": "Networking",
      "image": "caddy:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/caddy.png",
      "website": "https://caddyserver.com",
      "docsUrl": "https://caddyserver.com/docs",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/caddy/Caddyfile",
          "container": "/etc/caddy/Caddyfile"
        },
        {
          "host": "/opt/appdata/caddy/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/caddy/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "caddy-dev",
      "name": "Caddy Dev",
      "description": "Caddy web server on Alpine with automatic HTTPS for local development.",
      "category": "Developer Tools",
      "image": "caddy:2-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/caddy.png",
      "website": "https://caddyserver.com",
      "docsUrl": "https://hub.docker.com/_/caddy",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/caddy-dev/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/caddy-dev/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "2-alpine"
    },
    {
      "slug": "cadvisor",
      "name": "cAdvisor",
      "description": "Container resource usage and performance metrics exporter.",
      "category": "Monitoring",
      "image": "gcr.io/cadvisor/cadvisor:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/cadvisor.png",
      "website": "https://github.com/google/cadvisor",
      "docsUrl": "https://github.com/google/cadvisor",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/",
          "container": "/rootfs",
          "readOnly": true
        },
        {
          "host": "/var/run",
          "container": "/var/run",
          "readOnly": true
        },
        {
          "host": "/sys",
          "container": "/sys",
          "readOnly": true
        },
        {
          "host": "/var/lib/docker",
          "container": "/var/lib/docker",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "calcom",
      "name": "Cal.com",
      "description": "Open-source scheduling and appointment booking platform with team features.",
      "category": "Productivity",
      "image": "calcom/cal.com:latest",
      "logo": "https://icon.horse/icon/cal.com",
      "website": "https://cal.com",
      "docsUrl": "https://cal.com/docs/self-hosting/installation",
      "ports": [
        {
          "host": 3006,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/calcom/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NEXT_PUBLIC_WEBAPP_URL",
          "default": "http://localhost:3006",
          "description": "Public webapp URL"
        },
        {
          "key": "NEXTAUTH_SECRET",
          "default": "change-me",
          "description": "NextAuth secret",
          "secret": true
        },
        {
          "key": "CALENDSO_ENCRYPTION_KEY",
          "default": "change-me",
          "description": "Calendar encryption key (32 chars)",
          "secret": true
        },
        {
          "key": "POSTGRES_USER",
          "default": "calcom",
          "description": "Postgres user"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "Postgres password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "calcom",
          "description": "Postgres database name"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "calibre-desktop",
      "name": "Calibre (Desktop)",
      "description": "Full-featured self-hosted Calibre ebook library manager with web-based desktop access via KasmVNC.",
      "category": "Productivity",
      "image": "linuxserver/calibre:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/calibre.png",
      "website": "https://calibre-ebook.com",
      "docsUrl": "https://hub.docker.com/r/linuxserver/calibre",
      "ports": [
        {
          "host": 8081,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 3081,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/calibre-desktop/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/calibre-desktop/books",
          "container": "/books"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID for file permissions"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID for file permissions"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "calibre-web",
      "name": "Calibre-Web",
      "description": "Web app for browsing, reading, and managing Calibre libraries.",
      "category": "Media",
      "image": "lscr.io/linuxserver/calibre-web:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/calibre-web.png",
      "website": "https://docs.linuxserver.io/images/docker-calibre-web/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-calibre-web/",
      "ports": [
        {
          "host": 8083,
          "container": 8083,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/calibre-web/config",
          "container": "/config"
        },
        {
          "host": "/srv/books",
          "container": "/books"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cassandra",
      "name": "Apache Cassandra",
      "description": "Highly scalable distributed wide-column NoSQL database designed for availability and scale.",
      "category": "Databases",
      "image": "cassandra:latest",
      "logo": "https://icon.horse/icon/cassandra.apache.org",
      "website": "https://cassandra.apache.org",
      "docsUrl": "https://cassandra.apache.org/doc/latest/",
      "ports": [
        {
          "host": 9042,
          "container": 9042,
          "protocol": "tcp"
        },
        {
          "host": 7000,
          "container": 7000,
          "protocol": "tcp"
        },
        {
          "host": 7001,
          "container": 7001,
          "protocol": "tcp"
        },
        {
          "host": 7199,
          "container": 7199,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cassandra/data",
          "container": "/var/lib/cassandra"
        }
      ],
      "envVars": [
        {
          "key": "CASSANDRA_PASSWORD",
          "default": "",
          "description": "Cassandra password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cassandra-reaper",
      "name": "Cassandra Reaper",
      "description": "Centralized management UI for Cassandra repairs, backups, and cluster operations.",
      "category": "Databases",
      "image": "thelastpickle/cassandra-reaper:latest",
      "logo": "https://icon.horse/icon/cassandra-reaper.io",
      "website": "http://cassandra-reaper.io",
      "docsUrl": "http://cassandra-reaper.io/docs/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cassandra-reaper/data",
          "container": "/var/lib/cassandra-reaper"
        }
      ],
      "envVars": [
        {
          "key": "REAPER_AUTH_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "REAPER_AUTH_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "centrifugo",
      "name": "Centrifugo",
      "description": "Real-time messaging server with WebSocket, SSE, and HTTP streaming for chat and notifications.",
      "category": "Productivity",
      "image": "centrifugo/centrifugo:latest",
      "logo": "https://centrifugal.dev/img/logo.svg",
      "website": "https://centrifugal.dev",
      "docsUrl": "https://centrifugal.dev/docs",
      "ports": [
        {
          "host": 8604,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/centrifugo/config",
          "container": "/centrifugo"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CENTRIFUGO_TOKEN_HMAC_SECRET_KEY",
          "default": "",
          "description": "HMAC token signing secret",
          "secret": true
        },
        {
          "key": "CENTRIFUGO_API_KEY",
          "default": "",
          "description": "API key for admin API",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cfssl",
      "name": "CFSSL",
      "description": "Cloudflare's PKI toolkit for signing, verifying, and bundling TLS certificates.",
      "category": "Security",
      "image": "cfssl/cfssl:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/cloudflare/cfssl",
      "docsUrl": "https://github.com/cloudflare/cfssl/wiki",
      "ports": [
        {
          "host": 8888,
          "container": 8888,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cfssl/cert",
          "container": "/etc/cfssl"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "128MB",
      "version": "latest"
    },
    {
      "slug": "chatgpt-next-web",
      "name": "ChatGPT Next Web",
      "description": "Cross-platform ChatGPT-style web UI with one-click deployment and multi-user support.",
      "category": "AI & Voice",
      "image": "yidadaa/chatgpt-next-web:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/Yidadaa/ChatGPT-Next-Web",
      "docsUrl": "https://github.com/Yidadaa/ChatGPT-Next-Web/blob/main/README.md",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/chatgpt-next-web/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "OPENAI_API_KEY",
          "default": "",
          "description": "OpenAI API key",
          "secret": true
        },
        {
          "key": "CODE",
          "default": "",
          "description": "Access code to gate the UI (empty disables)"
        },
        {
          "key": "BASE_URL",
          "default": "",
          "description": "Custom OpenAI base URL for compatible APIs"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "chisel",
      "name": "Chisel",
      "description": "Fast TCP/UDP tunnel transported over HTTP, secured via SSH.",
      "category": "Networking",
      "image": "jpillora/chisel:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/jpillora/chisel",
      "docsUrl": "https://github.com/jpillora/chisel",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "chroma",
      "name": "Chroma",
      "description": "AI-native open-source embedding database for storing and retrieving vector embeddings.",
      "category": "Databases",
      "image": "chromadb/chroma:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/chroma.png",
      "website": "https://www.trychroma.com",
      "docsUrl": "https://docs.trychroma.com",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/chroma/data",
          "container": "/chroma/chroma"
        }
      ],
      "envVars": [
        {
          "key": "CHROMA_SERVER_AUTHN_CREDENTIALS",
          "default": "",
          "description": "Auth credentials (leave empty to disable)",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "citus",
      "name": "Citus",
      "description": "Distributed PostgreSQL that scales horizontally across multiple nodes for high performance.",
      "category": "Databases",
      "image": "citusdata/citus:12.1-alpine",
      "logo": "https://icon.horse/icon/www.citusdata.com",
      "website": "https://www.citusdata.com",
      "docsUrl": "https://docs.citusdata.com",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/citus/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "citus",
          "description": "Default database name"
        }
      ],
      "version": "12.1-alpine"
    },
    {
      "slug": "clickhouse",
      "name": "ClickHouse",
      "description": "Ultra-fast column-oriented database for real-time analytical queries and dashboards.",
      "category": "Databases",
      "image": "clickhouse/clickhouse-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/clickhouse.png",
      "website": "https://clickhouse.com",
      "docsUrl": "https://clickhouse.com/docs",
      "ports": [
        {
          "host": 8123,
          "container": 8123,
          "protocol": "tcp"
        },
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/clickhouse/data",
          "container": "/var/lib/clickhouse"
        }
      ],
      "envVars": [
        {
          "key": "CLICKHOUSE_DB",
          "default": "default",
          "description": "Default database"
        },
        {
          "key": "CLICKHOUSE_USER",
          "default": "default",
          "description": "Default user"
        },
        {
          "key": "CLICKHOUSE_PASSWORD",
          "default": "",
          "description": "Default user password",
          "secret": true
        },
        {
          "key": "CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT",
          "default": "1",
          "description": "Enable default access management"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "clojure-dev",
      "name": "Clojure",
      "description": "Clojure with Leiningen on Temurin 21, modern Lisp dialect for the JVM with persistent data structures.",
      "category": "Developer Tools",
      "image": "clojure:temurin-21-lein",
      "logo": "https://icon.horse/icon/clojure.org",
      "website": "https://clojure.org",
      "docsUrl": "https://clojure.org/guides/getting_started",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/clojure-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "temurin-21-lein"
    },
    {
      "slug": "cloudbeaver",
      "name": "CloudBeaver",
      "description": "Web database manager for SQL and NoSQL databases.",
      "category": "Developer Tools",
      "image": "dbeaver/cloudbeaver:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/cloudbeaver.png",
      "website": "https://dbeaver.com/cloudbeaver/",
      "docsUrl": "https://github.com/dbeaver/cloudbeaver/wiki",
      "ports": [
        {
          "host": 8978,
          "container": 8978,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cloudbeaver/workspace",
          "container": "/opt/cloudbeaver/workspace"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cloudflared",
      "name": "Cloudflared",
      "description": "Cloudflare Tunnel connector for exposing homelab services safely.",
      "category": "Networking",
      "image": "cloudflare/cloudflared:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/cloudflared.png",
      "website": "https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/",
      "docsUrl": "https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/",
      "ports": [],
      "volumes": [],
      "envVars": [
        {
          "key": "TUNNEL_TOKEN",
          "default": "",
          "description": "Cloudflare tunnel token",
          "secret": true
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    command: tunnel --no-autoupdate run --token {{envRaw.TUNNEL_TOKEN}}\n"
    },
    {
      "slug": "cockroachdb",
      "name": "CockroachDB",
      "description": "Distributed SQL database with strong consistency, horizontal scalability, and survivability.",
      "category": "Databases",
      "image": "cockroachdb/cockroach:latest",
      "logo": "https://icon.horse/icon/www.cockroachlabs.com",
      "website": "https://www.cockroachlabs.com",
      "docsUrl": "https://www.cockroachlabs.com/docs/",
      "ports": [
        {
          "host": 26257,
          "container": 26257,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cockroachdb/data",
          "container": "/cockroach/cockroach-data"
        }
      ],
      "envVars": [
        {
          "key": "COCKROACH_USER",
          "default": "root",
          "description": "Admin username"
        },
        {
          "key": "COCKROACH_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "code-server",
      "name": "code-server",
      "description": "VS Code in the browser. Access your development environment from anywhere.",
      "category": "Development",
      "image": "lscr.io/linuxserver/code-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/code-server.png",
      "website": "https://coder.com",
      "docsUrl": "https://coder.com/docs/code-server",
      "ports": [
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/code-server/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "PASSWORD",
          "default": "",
          "description": "Web UI password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "collabora",
      "name": "Collabora Online",
      "description": "LibreOffice in the browser for collaborative document editing in Nextcloud and others.",
      "category": "Documents",
      "image": "collabora/code:latest",
      "logo": "https://icon.horse/icon/www.collaboraoffice.com",
      "website": "https://www.collaboraoffice.com",
      "docsUrl": "https://www.collaboraoffice.com/code/",
      "ports": [
        {
          "host": 9980,
          "container": 9980,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "aliasgroup1",
          "default": "https://nextcloud.local:443",
          "description": "Allowed WOPI host (Nextcloud or other)"
        },
        {
          "key": "extra_params",
          "default": "--o:ssl.enable=false --o:ssl.termination=true",
          "description": "Extra startup parameters for code"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "compreface",
      "name": "CompreFace",
      "description": "Face recognition API service with REST endpoints and a web UI dashboard.",
      "category": "Photos & Files",
      "image": "exadel/compreface:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/compreface.png",
      "website": "https://exadel.com/compreface",
      "docsUrl": "https://github.com/exadel-inc/CompreFace",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/compreface/config",
          "container": "/app/configs"
        },
        {
          "host": "/opt/appdata/compreface/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "concourse-ci",
      "name": "Concourse CI",
      "description": "Continuous thing-doer with a UI focused on pipelines as code.",
      "category": "Developer Tools",
      "image": "concourse/concourse:latest",
      "logo": "https://icon.horse/icon/concourse-ci.org",
      "website": "https://concourse-ci.org",
      "docsUrl": "https://concourse-ci.org/quick-start.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 2222,
          "container": 2222,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/concourse-ci/keys",
          "container": "/concourse-keys"
        },
        {
          "host": "/opt/appdata/concourse-ci/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CONCOURSE_EXTERNAL_URL",
          "default": "http://localhost:8080",
          "description": "External URL of the Concourse web UI"
        },
        {
          "key": "CONCOURSE_ADD_LOCAL_USER",
          "default": "admin:admin",
          "description": "Initial local user (user:password)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "conda",
      "name": "Miniconda",
      "description": "Minimal Conda installer with Python, package manager for scientific computing and data science.",
      "category": "Developer Tools",
      "image": "continuumio/miniconda3:latest",
      "logo": "https://icon.horse/icon/docs.conda.io",
      "website": "https://docs.conda.io",
      "docsUrl": "https://docs.conda.io/projects/miniconda",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/conda/data",
          "container": "/opt/conda"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "confluent-kafka",
      "name": "Confluent Kafka",
      "description": "Confluent's distribution of Apache Kafka for local development and testing.",
      "category": "Developer Tools",
      "image": "confluentinc/cp-kafka:latest",
      "logo": "https://icon.horse/icon/kafka.apache.org",
      "website": "https://kafka.apache.org",
      "docsUrl": "https://docs.confluent.io/platform/current/installation/docker/image-reference.html",
      "ports": [
        {
          "host": 9092,
          "container": 9092,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/confluent-kafka/data",
          "container": "/var/lib/kafka/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "KAFKA_NODE_ID",
          "default": "1",
          "description": "Kafka node ID"
        },
        {
          "key": "KAFKA_PROCESS_ROLES",
          "default": "broker,controller",
          "description": "KRaft node roles"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "consul",
      "name": "HashiCorp Consul",
      "description": "Service networking platform with service discovery, health checking, and KV store.",
      "category": "Networking",
      "image": "hashicorp/consul:latest",
      "logo": "https://www.consul.io/_astro/consul-logo.DxynKyKW.svg",
      "website": "https://www.consul.io",
      "docsUrl": "https://developer.hashicorp.com/consul/docs",
      "ports": [
        {
          "host": 8500,
          "container": 8500,
          "protocol": "tcp"
        },
        {
          "host": 8600,
          "container": 8600,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/consul/config",
          "container": "/consul/config"
        },
        {
          "host": "/opt/appdata/consul/data",
          "container": "/consul/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "coqui-tts",
      "name": "Coqui TTS",
      "description": "Deep learning toolkit for Text-to-Speech with 1100+ pretrained models and voice cloning.",
      "category": "AI & Voice",
      "image": "ghcr.io/coqui-ai/tts-cpu:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/coqui-ai/TTS",
      "docsUrl": "https://github.com/coqui-ai/TTS/blob/dev/README.md",
      "ports": [
        {
          "host": 5002,
          "container": 5002,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/coqui-tts/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TTS_MODEL_NAME",
          "default": "tts_models/en/ljspeech/tacotron2-DDC",
          "description": "Default model to load on startup"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "coredns",
      "name": "CoreDNS",
      "description": "DNS server with a flexible plugin architecture, fast and cloud-native.",
      "category": "Networking",
      "image": "coredns/coredns:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/coredns.png",
      "website": "https://coredns.io",
      "docsUrl": "https://coredns.io/manual/toc/",
      "ports": [
        {
          "host": 53,
          "container": 53,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/coredns/config",
          "container": "/etc/coredns"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "couchbase",
      "name": "Couchbase Server",
      "description": "Distributed NoSQL document database with powerful query engine and full-text search.",
      "category": "Databases",
      "image": "couchbase/server:latest",
      "logo": "https://icon.horse/icon/www.couchbase.com",
      "website": "https://www.couchbase.com",
      "docsUrl": "https://docs.couchbase.com/server/current",
      "ports": [
        {
          "host": 8091,
          "container": 8091,
          "protocol": "tcp"
        },
        {
          "host": 11210,
          "container": 11210,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/couchbase/data",
          "container": "/opt/couchbase/var"
        }
      ],
      "envVars": [
        {
          "key": "USERNAME",
          "default": "Administrator",
          "description": "Admin username"
        },
        {
          "key": "PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "couchdb",
      "name": "CouchDB",
      "description": "Document-oriented NoSQL database with seamless multi-master replication and HTTP API.",
      "category": "Databases",
      "image": "couchdb:3",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/couchdb.png",
      "website": "https://couchdb.apache.org",
      "docsUrl": "https://docs.couchdb.org",
      "ports": [
        {
          "host": 5984,
          "container": 5984,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/couchdb/data",
          "container": "/opt/couchdb/data"
        },
        {
          "host": "/opt/appdata/couchdb/etc",
          "container": "/opt/couchdb/etc/local.d"
        }
      ],
      "envVars": [
        {
          "key": "COUCHDB_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "COUCHDB_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "3"
    },
    {
      "slug": "cratedb",
      "name": "CrateDB",
      "description": "Distributed SQL database for machine data and IoT with standard SQL and elastic scaling.",
      "category": "Databases",
      "image": "crate/crate:latest",
      "logo": "https://icon.horse/icon/crate.io",
      "website": "https://crate.io",
      "docsUrl": "https://crate.io/docs/crate/reference/en/latest/",
      "ports": [
        {
          "host": 4200,
          "container": 4200,
          "protocol": "tcp"
        },
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cratedb/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cross-seed",
      "name": "cross-seed",
      "description": "Find cross-seedable torrents across trackers and clients.",
      "category": "Media",
      "image": "ghcr.io/cross-seed/cross-seed:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/cross-seed.png",
      "website": "https://www.cross-seed.org",
      "docsUrl": "https://www.cross-seed.org/docs",
      "ports": [
        {
          "host": 2468,
          "container": 2468,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cross-seed/config",
          "container": "/config"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "crowdsec",
      "name": "CrowdSec",
      "description": "Collaborative security engine that parses logs and detects attacks.",
      "category": "Security",
      "image": "crowdsecurity/crowdsec:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/crowdsec.png",
      "website": "https://www.crowdsec.net",
      "docsUrl": "https://docs.crowdsec.net",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 6060,
          "container": 6060,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/crowdsec/config",
          "container": "/etc/crowdsec"
        },
        {
          "host": "/opt/appdata/crowdsec/data",
          "container": "/var/lib/crowdsec/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cryptpad",
      "name": "CryptPad",
      "description": "Zero-knowledge encrypted collaboration suite for documents, sheets, slides, and more.",
      "category": "Documents",
      "image": "cryptpad/cryptpad:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/cryptpad.png",
      "website": "https://cryptpad.org",
      "docsUrl": "https://docs.cryptpad.org",
      "ports": [
        {
          "host": 3001,
          "container": 3000,
          "protocol": "tcp"
        },
        {
          "host": 3002,
          "container": 3001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cryptpad/data",
          "container": "/cryptpad/data"
        },
        {
          "host": "/opt/appdata/cryptpad/blob",
          "container": "/cryptpad/blob"
        },
        {
          "host": "/opt/appdata/cryptpad/customize",
          "container": "/cryptpad/customize"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CPAD_MAIN_DOMAIN",
          "default": "localhost",
          "description": "Main domain hosting CryptPad"
        },
        {
          "key": "CPAD_PROXY",
          "default": "false",
          "description": "Enable reverse proxy mode (set to true behind a reverse proxy)"
        },
        {
          "key": "CPAD_HTTPS",
          "default": "false",
          "description": "Set true if serving over HTTPS directly"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "ctop",
      "name": "ctop",
      "description": "Top-like interface for monitoring Docker container metrics in real time.",
      "category": "Developer Tools",
      "image": "quay.io/vektorlab/ctop:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/bcicen/ctop",
      "docsUrl": "https://github.com/bcicen/ctop#readme",
      "ports": [],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "curl",
      "name": "cURL",
      "description": "cURL command-line tool and library for transferring data with URLs.",
      "category": "Utilities",
      "image": "curlimages/curl:latest",
      "logo": "https://icon.horse/icon/curl.se",
      "website": "https://curl.se",
      "docsUrl": "https://hub.docker.com/r/curlimages/curl",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/curl/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cyberchef",
      "name": "CyberChef",
      "description": "The Cyber Swiss Army Knife. Web-based tool for encoding, decoding, encryption, compression, and data analysis operations.",
      "category": "Utilities",
      "image": "ghcr.io/gchq/cyberchef:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/cyberchef.png",
      "website": "https://github.com/gchq/CyberChef",
      "docsUrl": "https://github.com/gchq/CyberChef/wiki",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "cypress",
      "name": "Cypress",
      "description": "Self-contained Cypress runner with all browsers and dependencies for end-to-end testing.",
      "category": "Developer Tools",
      "image": "cypress/included:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/cypress.png",
      "website": "https://www.cypress.io",
      "docsUrl": "https://docs.cypress.io/guides/continuous-integration/introduction",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/cypress/e2e",
          "container": "/e2e"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CYPRESS_RECORD_KEY",
          "default": "",
          "description": "Cypress Dashboard record key",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "dart-dev",
      "name": "Dart",
      "description": "Dart stable SDK, client-optimized language for building fast apps on any platform.",
      "category": "Developer Tools",
      "image": "dart:stable",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/dart.png",
      "website": "https://dart.dev",
      "docsUrl": "https://dart.dev/guides",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dart-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "stable"
    },
    {
      "slug": "dashy",
      "name": "Dashy",
      "description": "Highly configurable dashboard for homelab bookmarks and widgets.",
      "category": "Dashboards",
      "image": "lissy93/dashy:latest",
      "logo": "https://dashy.to/img/dashy.png",
      "website": "https://dashy.to",
      "docsUrl": "https://dashy.to/docs",
      "ports": [
        {
          "host": 8088,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dashy/conf.yml",
          "container": "/app/user-data/conf.yml"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "deconz",
      "name": "deCONZ",
      "description": "Zigbee gateway software for the Phoscon ConBee and RaspBee adapters.",
      "category": "Home Automation",
      "image": "deconzcommunity/deconz:latest",
      "logo": "https://icon.horse/icon/phoscon.de",
      "website": "https://phoscon.de",
      "docsUrl": "https://github.com/deconz-community/deconz-docker",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        },
        {
          "host": 5900,
          "container": 5900,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/deconz/config",
          "container": "/opt/deCONZ"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DECONZ_DEVICE",
          "default": "/dev/ttyACM0",
          "description": "Zigbee adapter device path"
        },
        {
          "key": "DECONZ_VNC_MODE",
          "default": "1",
          "description": "Enable VNC mode (1 to enable)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "deluge",
      "name": "Deluge",
      "description": "Cross-platform BitTorrent client with daemon and web UI.",
      "category": "Media",
      "image": "lscr.io/linuxserver/deluge:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/deluge.png",
      "website": "https://docs.linuxserver.io/images/docker-deluge/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-deluge/",
      "ports": [
        {
          "host": 8112,
          "container": 8112,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/deluge/config",
          "container": "/config"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "deno",
      "name": "Deno",
      "description": "Modern secure runtime for JavaScript and TypeScript with built-in tooling and web standards.",
      "category": "Developer Tools",
      "image": "denoland/deno:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/deno.png",
      "website": "https://deno.com",
      "docsUrl": "https://docs.deno.com",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/deno/app",
          "container": "/deno-app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "dify",
      "name": "Dify",
      "description": "Open-source LLM app development platform combining BaaS and LLMOps for production AI apps.",
      "category": "AI & Voice",
      "image": "langgenius/dify-api:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/dify.svg",
      "website": "https://dify.ai",
      "docsUrl": "https://docs.dify.ai/getting-started/install-self-hosted/docker-compose",
      "ports": [
        {
          "host": 5001,
          "container": 5001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dify/api",
          "container": "/app/api/storage"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MODE",
          "default": "api",
          "description": "Service mode"
        },
        {
          "key": "SECRET_KEY",
          "default": "",
          "description": "Application secret key",
          "secret": true
        },
        {
          "key": "DB_DATABASE",
          "default": "dify",
          "description": "Postgres database name"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "dify-web",
      "name": "Dify Web",
      "description": "Frontend for the Dify LLM app platform. Provides the visual workflow editor and chat UI.",
      "category": "AI & Voice",
      "image": "langgenius/dify-web:latest",
      "logo": "https://icon.horse/icon/dify.ai",
      "website": "https://dify.ai",
      "docsUrl": "https://docs.dify.ai/getting-started/install-self-hosted/docker-compose",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CONSOLE_API_URL",
          "default": "http://api:5001",
          "description": "Internal Dify API base URL"
        },
        {
          "key": "APP_API_URL",
          "default": "http://api:5001",
          "description": "Internal Dify API base URL for apps"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "directus",
      "name": "Directus",
      "description": "Open-source headless CMS and data platform that turns any SQL database into a powerful API and no-code app studio.",
      "category": "Web Apps",
      "image": "directus/directus:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/directus.png",
      "website": "https://directus.io",
      "docsUrl": "https://docs.directus.io",
      "ports": [
        {
          "host": 8055,
          "container": 8055,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/directus/database",
          "container": "/directus/database"
        },
        {
          "host": "/opt/appdata/directus/uploads",
          "container": "/directus/uploads"
        },
        {
          "host": "/opt/appdata/directus/extensions",
          "container": "/directus/extensions"
        }
      ],
      "envVars": [
        {
          "key": "KEY",
          "default": "change-me-32-chars-min-secret-key",
          "description": "Random string for tokens",
          "secret": true
        },
        {
          "key": "SECRET",
          "default": "change-me-secret",
          "description": "Random string for sessions",
          "secret": true
        },
        {
          "key": "DB_CLIENT",
          "default": "sqlite3",
          "description": "Database client"
        },
        {
          "key": "DB_FILENAME",
          "default": "/directus/database/data.db",
          "description": "SQLite database file"
        },
        {
          "key": "ADMIN_EMAIL",
          "default": "[email protected]",
          "description": "Initial admin email"
        },
        {
          "key": "ADMIN_PASSWORD",
          "default": "change-me-admin",
          "description": "Initial admin password",
          "secret": true
        },
        {
          "key": "WEBSOCKETS_ENABLED",
          "default": "true",
          "description": "Enable WebSockets for live updates"
        },
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "diun",
      "name": "Diun",
      "description": "Docker image update notifier with multiple notification providers.",
      "category": "Monitoring",
      "image": "crazymax/diun:latest",
      "logo": "https://crazymax.dev/diun/assets/meta/favicon-196x196.png",
      "website": "https://crazymax.dev/diun",
      "docsUrl": "https://crazymax.dev/diun",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/diun/data",
          "container": "/data"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DIUN_WATCH_WORKERS",
          "default": "10",
          "description": "Concurrent watcher workers"
        },
        {
          "key": "DIUN_WATCH_SCHEDULE",
          "default": "0 */6 * * *",
          "description": "Cron schedule"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "dive",
      "name": "Dive",
      "description": "Dive explores Docker image layers and reveals wasted space in container images.",
      "category": "Developer Tools",
      "image": "wagoodman/dive:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/wagoodman/dive",
      "docsUrl": "https://github.com/wagoodman/dive/blob/master/README.md",
      "ports": [],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "django-dev",
      "name": "Django",
      "description": "Django on Python 3.12 slim, batteries-included Python web framework with admin and ORM.",
      "category": "Developer Tools",
      "image": "python:3.12-slim",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/django.png",
      "website": "https://www.djangoproject.com",
      "docsUrl": "https://docs.djangoproject.com",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/django-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DJANGO_SETTINGS_MODULE",
          "default": "app.settings",
          "description": "Path to Django settings module"
        },
        {
          "key": "DJANGO_SECRET_KEY",
          "default": "",
          "description": "Django secret key",
          "secret": true
        }
      ],
      "version": "3.12-slim"
    },
    {
      "slug": "docker-hub-mcp",
      "name": "Docker Hub MCP",
      "description": "MCP server for searching Docker Hub images, tags, repositories, and Docker Hardened Images.",
      "category": "MCP Services",
      "image": "mcp/dockerhub:latest",
      "logo": "https://www.docker.com/wp-content/uploads/2022/03/Moby-logo.png",
      "website": "https://github.com/docker/hub-mcp",
      "docsUrl": "https://github.com/docker/hub-mcp",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "DOCKER_HUB_MCP_PORT",
          "default": "3000",
          "description": "HTTP MCP port exposed by the server"
        },
        {
          "key": "HUB_USERNAME",
          "default": "",
          "description": "Optional Docker Hub username for authenticated repository management"
        },
        {
          "key": "HUB_PAT_TOKEN",
          "default": "",
          "description": "Optional Docker Hub personal access token",
          "secret": true
        }
      ],
      "minMemory": "256MB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    ports:\n      - \"{{envRaw.DOCKER_HUB_MCP_PORT}}:{{envRaw.DOCKER_HUB_MCP_PORT}}\"\n    environment:\n      HUB_PAT_TOKEN: {{env.HUB_PAT_TOKEN}}\n    command: [\"--transport=http\", \"--port={{envRaw.DOCKER_HUB_MCP_PORT}}\", \"--username={{envRaw.HUB_USERNAME}}\"]\n"
    },
    {
      "slug": "docker-in-docker",
      "name": "Docker in Docker",
      "description": "Docker-in-Docker daemon for nested container builds and CI workloads.",
      "category": "Developer Tools",
      "image": "docker:dind",
      "logo": "https://icon.horse/icon/www.docker.com",
      "website": "https://www.docker.com",
      "docsUrl": "https://hub.docker.com/_/docker",
      "ports": [
        {
          "host": 2375,
          "container": 2375,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/docker-in-docker/data",
          "container": "/var/lib/docker"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "docker-registry",
      "name": "Docker Registry",
      "description": "Private Docker image registry.",
      "category": "Developer Tools",
      "image": "registry:2",
      "logo": "https://icon.horse/icon/distribution.github.io",
      "website": "https://distribution.github.io/distribution/",
      "docsUrl": "https://distribution.github.io/distribution/about/deploying/",
      "ports": [
        {
          "host": 5000,
          "container": 5000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/docker-registry/data",
          "container": "/var/lib/registry"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "REGISTRY_STORAGE_DELETE_ENABLED",
          "default": "true",
          "description": "Allow deleting manifests"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "docker-socket-proxy",
      "name": "Docker Socket Proxy",
      "description": "Tecnativa Docker Socket Proxy exposes filtered Docker API over TCP.",
      "category": "Developer Tools",
      "image": "tecnativa/docker-socket-proxy:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/Tecnativa/docker-socket-proxy",
      "docsUrl": "https://github.com/Tecnativa/docker-socket-proxy/blob/main/README.md",
      "ports": [
        {
          "host": 2375,
          "container": 2375,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CONTAINERS",
          "default": "1",
          "description": "Allow container operations"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "dockge",
      "name": "Dockge",
      "description": "Dockge is a fancy, easy-to-use, reactive self-hosted docker compose.yaml manager.",
      "category": "Developer Tools",
      "image": "louislam/dockge:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/dockge.png",
      "website": "https://dockge.kuma.pet",
      "docsUrl": "https://dockge.kuma.pet/#installation",
      "ports": [
        {
          "host": 5001,
          "container": 5001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dockge/data",
          "container": "/app/data"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        },
        {
          "host": "/opt/appdata",
          "container": "/opt/stacks"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DOCKGE_STACKS_DIR",
          "default": "/opt/stacks",
          "description": "Compose stacks directory"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "docling-serve",
      "name": "Docling Serve",
      "description": "IBM's Docling document AI server. Converts PDFs and docs to structured Markdown and JSON.",
      "category": "AI & Voice",
      "image": "ghcr.io/docling-project/docling-serve:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/DS4SD/docling",
      "docsUrl": "https://docling-project.github.io/docling/",
      "ports": [
        {
          "host": 5001,
          "container": 5001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/docling-serve/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DOCLING_SERVE_ENABLE_REMOTE",
          "default": "false",
          "description": "Enable remote artifact downloads (true/false)"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "docmost",
      "name": "Docmost",
      "description": "Collaborative wiki and documentation tool with spaces, permissions, and real-time editing.",
      "category": "Documents",
      "image": "docmost/docmost:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/docmost.png",
      "website": "https://docmost.com",
      "docsUrl": "https://github.com/docmost/docmost",
      "ports": [
        {
          "host": 3002,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/docmost/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "APP_URL",
          "default": "http://localhost:3002",
          "description": "Application URL"
        },
        {
          "key": "APP_SECRET",
          "default": "change-me",
          "description": "Application secret",
          "secret": true
        },
        {
          "key": "DATABASE_URL",
          "default": "postgresql://docmost:change-me@docmost-db:5432/docmost",
          "description": "Database connection URL"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "docspell",
      "name": "Docspell",
      "description": "Document organizer and OCR-assisted personal document archive.",
      "category": "Documents",
      "image": "docspell/restserver:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/docspell.png",
      "website": "https://docspell.org",
      "docsUrl": "https://docspell.org/docs",
      "ports": [
        {
          "host": 7880,
          "container": 7880,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/docspell/data",
          "container": "/opt/docspell/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DOCSPELL_SERVER_INTERNAL__URL",
          "default": "http://localhost:7880",
          "description": "Internal server URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "docspell-joex",
      "name": "Docspell JOEX",
      "description": "Job executor component for Docspell, handling OCR and asynchronous processing tasks.",
      "category": "Documents",
      "image": "docspell/joex:latest",
      "logo": "https://icon.horse/icon/docspell.org",
      "website": "https://docspell.org",
      "docsUrl": "https://docspell.org/docs",
      "ports": [
        {
          "host": 7878,
          "container": 7878,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/docspell-joex/data",
          "container": "/opt/docspell/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DOCSPELL_JOEX__SERVER__BASE_URL",
          "default": "http://docspell-restserver:7880",
          "description": "Docspell REST server URL"
        },
        {
          "key": "DOCSPELL_JOEX__DB__URL",
          "default": "jdbc:postgresql://docspell-db:5432/docspell",
          "description": "Database JDBC URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "documenso",
      "name": "Documenso",
      "description": "Open-source document signing platform with templates, teams, and audit trails.",
      "category": "Documents",
      "image": "documenso/documenso:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/documenso.png",
      "website": "https://documenso.com",
      "docsUrl": "https://docs.documenso.com",
      "ports": [
        {
          "host": 3500,
          "container": 3500,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/documenso/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NEXTAUTH_SECRET",
          "default": "change-me",
          "description": "NextAuth secret",
          "secret": true
        },
        {
          "key": "NEXTAUTH_URL",
          "default": "http://localhost:3500",
          "description": "External URL"
        },
        {
          "key": "POSTGRES_USER",
          "default": "documenso",
          "description": "Database user"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "documenso",
          "description": "Database name"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "dolibarr",
      "name": "Dolibarr",
      "description": "Open-source ERP and CRM suite for invoices, inventory, accounting, and customer management.",
      "category": "Productivity",
      "image": "dolibarr/dolibarr:latest",
      "logo": "https://www.dolibarr.org/themes/eldy/img/favicon-32x32.png",
      "website": "https://www.dolibarr.org",
      "docsUrl": "https://wiki.dolibarr.org",
      "ports": [
        {
          "host": 8590,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dolibarr/documents",
          "container": "/var/www/documents"
        },
        {
          "host": "/opt/appdata/dolibarr/custom",
          "container": "/var/www/html/custom"
        },
        {
          "host": "/opt/appdata/dolibarr/conf",
          "container": "/etc/dolibarr"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DOLI_DB_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "DOLI_DB_NAME",
          "default": "dolibarr",
          "description": "Database name"
        },
        {
          "key": "DOLI_DB_USER",
          "default": "dolibarr",
          "description": "Database user"
        },
        {
          "key": "DOLI_DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "dolt",
      "name": "Dolt",
      "description": "Git-for-data SQL database with branching, merging, and version control for your data.",
      "category": "Databases",
      "image": "dolthub/dolt-sql-server:latest",
      "logo": "https://icon.horse/icon/www.doltdb.com",
      "website": "https://www.doltdb.com",
      "docsUrl": "https://docs.dolthub.com",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dolt/data",
          "container": "/var/lib/dolt"
        }
      ],
      "envVars": [
        {
          "key": "DOLT_USER",
          "default": "root",
          "description": "Dolt username"
        },
        {
          "key": "DOLT_PASSWORD",
          "default": "",
          "description": "Dolt password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "domoticz",
      "name": "Domoticz",
      "description": "Lightweight home automation system with web UI and broad device support.",
      "category": "Home Automation",
      "image": "domoticz/domoticz:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/domoticz.png",
      "website": "https://www.domoticz.com",
      "docsUrl": "https://www.domoticz.com/wiki/Domoticz_and_Docker",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 6144,
          "container": 6144,
          "protocol": "tcp"
        },
        {
          "host": 1443,
          "container": 1443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/domoticz/config",
          "container": "/opt/domoticz/userdata"
        },
        {
          "host": "/opt/appdata/domoticz/scripts",
          "container": "/opt/domoticz/scripts"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "dotnet-8-dev",
      "name": ".NET SDK 8",
      "description": "Microsoft .NET 8 SDK, long-term support build tools for C#, F#, and Visual Basic projects.",
      "category": "Developer Tools",
      "image": "mcr.microsoft.com/dotnet/sdk:8.0",
      "logo": "https://icon.horse/icon/dotnet.microsoft.com",
      "website": "https://dotnet.microsoft.com",
      "docsUrl": "https://learn.microsoft.com/dotnet/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dotnet-8-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DOTNET_CLI_TELEMETRY_OPTOUT",
          "default": "1",
          "description": "Disable .NET CLI telemetry"
        },
        {
          "key": "DOTNET_NOLOGO",
          "default": "1",
          "description": "Suppress .NET banner messages"
        }
      ],
      "version": "8.0"
    },
    {
      "slug": "dotnet-9-dev",
      "name": ".NET SDK 9",
      "description": "Microsoft .NET 9 SDK, latest build tools for C#, F#, and Visual Basic with new runtime features.",
      "category": "Developer Tools",
      "image": "mcr.microsoft.com/dotnet/sdk:9.0",
      "logo": "https://icon.horse/icon/dotnet.microsoft.com",
      "website": "https://dotnet.microsoft.com",
      "docsUrl": "https://learn.microsoft.com/dotnet/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dotnet-9-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DOTNET_CLI_TELEMETRY_OPTOUT",
          "default": "1",
          "description": "Disable .NET CLI telemetry"
        },
        {
          "key": "DOTNET_NOLOGO",
          "default": "1",
          "description": "Suppress .NET banner messages"
        }
      ],
      "version": "9.0"
    },
    {
      "slug": "dovecot",
      "name": "Dovecot",
      "description": "Secure, fast, and reliable IMAP and POP3 email server.",
      "category": "Communications",
      "image": "dovecot/dovecot:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/dovecot.png",
      "website": "https://www.dovecot.org",
      "docsUrl": "https://doc.dovecot.org",
      "ports": [
        {
          "host": 143,
          "container": 143,
          "protocol": "tcp"
        },
        {
          "host": 993,
          "container": 993,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/dovecot/mail",
          "container": "/var/mail"
        },
        {
          "host": "/opt/appdata/dovecot/config",
          "container": "/etc/dovecot"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "dozzle",
      "name": "Dozzle",
      "description": "Realtime log viewer for Docker containers with a web-based interface.",
      "category": "Development",
      "image": "amir20/dozzle:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/dozzle.png",
      "website": "https://dozzle.dev",
      "docsUrl": "https://dozzle.dev/guide/getting-started",
      "ports": [
        {
          "host": 9999,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "drawio",
      "name": "draw.io",
      "description": "Free, online diagram and flowchart editor. Create UML, ER, network, BPMN, and many other diagrams directly in the browser.",
      "category": "Productivity",
      "image": "jgraph/drawio:latest",
      "logo": "https://icon.horse/icon/www.drawio.com",
      "website": "https://www.drawio.com",
      "docsUrl": "https://www.drawio.com/doc",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/drawio/data",
          "container": "/opt/drawio-config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "drone",
      "name": "Drone CI",
      "description": "Self-service continuous delivery platform containerized in Go.",
      "category": "Developer Tools",
      "image": "drone/drone:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/drone.png",
      "website": "https://www.drone.io",
      "docsUrl": "https://docs.drone.io/server/overview/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/drone/data",
          "container": "/data"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DRONE_RPC_SECRET",
          "default": "",
          "description": "Shared secret between server and runners",
          "secret": true
        },
        {
          "key": "DRONE_GITHUB_CLIENT_ID",
          "default": "",
          "description": "GitHub OAuth client ID"
        },
        {
          "key": "DRONE_GITHUB_CLIENT_SECRET",
          "default": "",
          "description": "GitHub OAuth client secret",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "drone-runner-docker",
      "name": "Drone Runner Docker",
      "description": "Docker-based pipeline runner for Drone CI that spawns each step in a container.",
      "category": "Developer Tools",
      "image": "drone/drone-runner-docker:latest",
      "logo": "https://icon.horse/icon/www.drone.io",
      "website": "https://www.drone.io",
      "docsUrl": "https://docs.drone.io/runner/docker/overview/",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DRONE_RPC_PROTO",
          "default": "http",
          "description": "Protocol to connect to Drone server"
        },
        {
          "key": "DRONE_RPC_HOST",
          "default": "drone",
          "description": "Drone server hostname"
        },
        {
          "key": "DRONE_RPC_SECRET",
          "default": "",
          "description": "Shared secret with Drone server",
          "secret": true
        },
        {
          "key": "DRONE_RUNNER_CAPACITY",
          "default": "2",
          "description": "Maximum concurrent pipelines"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "drupal",
      "name": "Drupal",
      "description": "Flexible open-source CMS for content-heavy websites, communities, and custom web applications.",
      "category": "Web Apps",
      "image": "drupal:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/drupal.png",
      "website": "https://www.drupal.org",
      "docsUrl": "https://hub.docker.com/_/drupal",
      "ports": [
        {
          "host": 8089,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "DRUPAL_DATA_PATH",
          "default": "/opt/appdata/drupal/html",
          "description": "Host path for Drupal files"
        },
        {
          "key": "DRUPAL_DB_PATH",
          "default": "/opt/appdata/drupal/db",
          "description": "Host path for MariaDB data"
        },
        {
          "key": "DRUPAL_DB_NAME",
          "default": "drupal",
          "description": "Database name"
        },
        {
          "key": "DRUPAL_DB_USER",
          "default": "drupal",
          "description": "Database user"
        },
        {
          "key": "DRUPAL_DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "DRUPAL_DB_ROOT_PASSWORD",
          "default": "change-root-password",
          "description": "MariaDB root password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    depends_on:\n      - {{serviceName}}-db\n{{ports}}\n    volumes:\n      - {{env.DRUPAL_DATA_PATH}}:/var/www/html\n  {{serviceName}}-db:\n    image: mariadb:11\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    volumes:\n      - {{env.DRUPAL_DB_PATH}}:/var/lib/mysql\n    environment:\n      MARIADB_DATABASE: {{env.DRUPAL_DB_NAME}}\n      MARIADB_USER: {{env.DRUPAL_DB_USER}}\n      MARIADB_PASSWORD: {{env.DRUPAL_DB_PASSWORD}}\n      MARIADB_ROOT_PASSWORD: {{env.DRUPAL_DB_ROOT_PASSWORD}}\n",
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "duckdns",
      "name": "DuckDNS",
      "description": "Free dynamic DNS service client that keeps your domain pointing to your IP.",
      "category": "Networking",
      "image": "lscr.io/linuxserver/duckdns:latest",
      "logo": "https://www.duckdns.org/img/ducky_icon.png",
      "website": "https://www.duckdns.org",
      "docsUrl": "https://www.duckdns.org/install.jsp",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/duckdns/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "SUBDOMAINS",
          "default": "",
          "description": "DuckDNS subdomain(s), comma-separated"
        },
        {
          "key": "TOKEN",
          "default": "",
          "description": "DuckDNS token",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "duplicati",
      "name": "Duplicati",
      "description": "Free backup solution with encryption and cloud storage support.",
      "category": "Utilities",
      "image": "lscr.io/linuxserver/duplicati:latest",
      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/duplicati-icon.png",
      "website": "https://www.duplicati.com",
      "docsUrl": "https://duplicati.readthedocs.io",
      "ports": [
        {
          "host": 8200,
          "container": 8200,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/duplicati/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/duplicati/backups",
          "container": "/backups"
        },
        {
          "host": "/opt/appdata/duplicati/source",
          "container": "/source"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "easy-appointments",
      "name": "Easy!Appointments",
      "description": "Lightweight appointment scheduler for service businesses with email notifications.",
      "category": "Productivity",
      "image": "alextselegidis/easyappointments:latest",
      "logo": "https://icon.horse/icon/easyappointments.org",
      "website": "https://easyappointments.org",
      "docsUrl": "https://easyappointments.org/docs.html",
      "ports": [
        {
          "host": 8089,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/easy-appointments/data",
          "container": "/var/www/html/storage"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BASE_URL",
          "default": "http://localhost:8089",
          "description": "Public base URL"
        },
        {
          "key": "DB_HOST",
          "default": "easy-appointments-db",
          "description": "Database host"
        },
        {
          "key": "DB_NAME",
          "default": "easyappointments",
          "description": "Database name"
        },
        {
          "key": "DB_USER",
          "default": "easyappointments",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "eclipse-che",
      "name": "Eclipse Che",
      "description": "Kubernetes-native cloud IDE and developer workspace server.",
      "category": "Developer Tools",
      "image": "eclipse/che-server:latest",
      "logo": "https://icon.horse/icon/www.eclipse.org",
      "website": "https://www.eclipse.org/che",
      "docsUrl": "https://www.eclipse.org/che/docs/stable/administration-guide/installing-che/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/eclipse-che/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CHE_HOST",
          "default": "che.example.com",
          "description": "Public hostname of the Che server"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "edgedb",
      "name": "EdgeDB",
      "description": "Graph-relational database with a powerful query language and strong type system.",
      "category": "Databases",
      "image": "edgedb/edgedb:latest",
      "logo": "https://icon.horse/icon/www.edgedb.com",
      "website": "https://www.edgedb.com",
      "docsUrl": "https://www.edgedb.com/docs",
      "ports": [
        {
          "host": 5656,
          "container": 5656,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/edgedb/data",
          "container": "/var/lib/edgedb"
        }
      ],
      "envVars": [
        {
          "key": "EDGEDB_SERVER_PASSWORD",
          "default": "",
          "description": "Server password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "elastalert",
      "name": "ElastAlert",
      "description": "Simple rules engine for alerting on anomalies, spikes and other patterns in Elasticsearch data.",
      "category": "Monitoring",
      "image": "karql/elastalert:latest",
      "logo": "https://icon.horse/icon/elastalert.readthedocs.io",
      "website": "https://elastalert.readthedocs.io",
      "docsUrl": "https://github.com/jertel/elastalert2",
      "ports": [
        {
          "host": 3030,
          "container": 3030,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/elastalert/config",
          "container": "/opt/elastalert/config"
        },
        {
          "host": "/opt/appdata/elastalert/rules",
          "container": "/opt/elastalert/rules"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ELASTICSEARCH_HOST",
          "default": "elasticsearch",
          "description": "Elasticsearch hostname"
        },
        {
          "key": "ELASTICSEARCH_PORT",
          "default": "9200",
          "description": "Elasticsearch port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "elasticsearch-exporter",
      "name": "Elasticsearch Exporter",
      "description": "Prometheus exporter for Elasticsearch cluster, node, index and shard metrics.",
      "category": "Monitoring",
      "image": "quay.io/prometheuscommunity/elasticsearch-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/prometheus-community/elasticsearch_exporter",
      "docsUrl": "https://github.com/prometheus-community/elasticsearch_exporter#docker",
      "ports": [
        {
          "host": 9114,
          "container": 9114,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "es.uri",
          "default": "http://elasticsearch:9200",
          "description": "Elasticsearch URI"
        },
        {
          "key": "es.all",
          "default": "true",
          "description": "Collect all metrics (cluster, indices, nodes)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "electron-dev",
      "name": "Electron",
      "description": "Electron builder image, framework for building cross-platform desktop apps with web technologies.",
      "category": "Developer Tools",
      "image": "electronuserland/builder:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/electron.png",
      "website": "https://www.electronjs.org",
      "docsUrl": "https://www.electronjs.org/docs/latest/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/electron-dev/app",
          "container": "/project"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "element-web",
      "name": "Element Web",
      "description": "Secure and private Matrix-based messenger with end-to-end encryption and VoIP.",
      "category": "Communications",
      "image": "vectorim/element-web:latest",
      "logo": "https://icon.horse/icon/element.io",
      "website": "https://element.io",
      "docsUrl": "https://element.io/help",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "elixir-dev",
      "name": "Elixir 1.17",
      "description": "Elixir 1.17 on Alpine, dynamic functional language on the Erlang VM with metaprogramming.",
      "category": "Developer Tools",
      "image": "elixir:1.17-alpine",
      "logo": "https://icon.horse/icon/elixir-lang.org",
      "website": "https://elixir-lang.org",
      "docsUrl": "https://hexdocs.pm/elixir",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/elixir-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MIX_ENV",
          "default": "dev",
          "description": "Mix build environment"
        }
      ],
      "version": "1.17-alpine"
    },
    {
      "slug": "emby",
      "name": "Emby",
      "description": "Free media server for streaming movies, TV shows, music, and photos.",
      "category": "Media",
      "image": "emby/embyserver:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/emby.png",
      "website": "https://emby.media",
      "docsUrl": "https://emby.media/community/index.php?/wiki/docker/",
      "ports": [
        {
          "host": 8096,
          "container": 8096,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/emby/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/emby/media",
          "container": "/media"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "emqx",
      "name": "EMQX",
      "description": "Scalable MQTT broker for larger IoT, Home Assistant, and automation deployments.",
      "category": "Networking",
      "image": "emqx/emqx:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/emqx.png",
      "website": "https://www.emqx.com",
      "docsUrl": "https://hub.docker.com/r/emqx/emqx/",
      "ports": [
        {
          "host": 1883,
          "container": 1883,
          "protocol": "tcp"
        },
        {
          "host": 8083,
          "container": 8083,
          "protocol": "tcp"
        },
        {
          "host": 8084,
          "container": 8084,
          "protocol": "tcp"
        },
        {
          "host": 8883,
          "container": 8883,
          "protocol": "tcp"
        },
        {
          "host": 18083,
          "container": 18083,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/emqx/data",
          "container": "/opt/emqx/data"
        },
        {
          "host": "/opt/appdata/emqx/log",
          "container": "/opt/emqx/log"
        }
      ],
      "envVars": [
        {
          "key": "EMQX_DASHBOARD__DEFAULT_PASSWORD",
          "default": "",
          "description": "Dashboard admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ente-photos-server",
      "name": "Ente Photos",
      "description": "End-to-end encrypted photo and video storage with cross-platform apps.",
      "category": "Photos & Files",
      "image": "ghcr.io/ente-io/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ente-photos.png",
      "website": "https://ente.io",
      "docsUrl": "https://github.com/ente-io/ente/tree/main/server",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ente-photos-server/config",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/ente-photos-server/uploads",
          "container": "/uploads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "envoy-dev",
      "name": "Envoy Dev",
      "description": "Envoy proxy for local service mesh and API gateway development.",
      "category": "Developer Tools",
      "image": "envoyproxy/envoy:v1.30-latest",
      "logo": "https://icon.horse/icon/www.envoyproxy.io",
      "website": "https://www.envoyproxy.io",
      "docsUrl": "https://www.envoyproxy.io/docs/envoy/latest/start/docker",
      "ports": [
        {
          "host": 10000,
          "container": 10000,
          "protocol": "tcp"
        },
        {
          "host": 9901,
          "container": 9901,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/envoy-dev/config",
          "container": "/etc/envoy"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ENVOY_UID",
          "default": "0",
          "description": "Run as root for read-only mounts"
        }
      ],
      "version": "v1.30-latest"
    },
    {
      "slug": "erlang-dev",
      "name": "Erlang 26",
      "description": "Erlang 26 on Alpine, concurrent fault-tolerant language for distributed real-time systems.",
      "category": "Developer Tools",
      "image": "erlang:26-alpine",
      "logo": "https://icon.horse/icon/www.erlang.org",
      "website": "https://www.erlang.org",
      "docsUrl": "https://www.erlang.org/doc.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/erlang-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "26-alpine"
    },
    {
      "slug": "erpnext",
      "name": "ERPNext",
      "description": "Open-source ERP for manufacturing, distribution, retail, services, and project-driven businesses.",
      "category": "Productivity",
      "image": "frappe/erpnext-worker:latest",
      "logo": "https://icon.horse/icon/erpnext.com",
      "website": "https://erpnext.com",
      "docsUrl": "https://docs.erpnext.com",
      "ports": [
        {
          "host": 8603,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/erpnext/sites",
          "container": "/home/frappe/frappe-bench/sites"
        },
        {
          "host": "/opt/appdata/erpnext/apps",
          "container": "/home/frappe/frappe-bench/apps"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DB_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "DB_PORT",
          "default": "3306",
          "description": "Database port"
        },
        {
          "key": "REDIS_CACHE_HOST",
          "default": "redis-cache",
          "description": "Redis cache host"
        },
        {
          "key": "REDIS_QUEUE_HOST",
          "default": "redis-queue",
          "description": "Redis queue host"
        },
        {
          "key": "REDIS_SOCKETIO_HOST",
          "default": "redis-socketio",
          "description": "Redis socketio host"
        },
        {
          "key": "SOCKETIO_PORT",
          "default": "9000",
          "description": "Socket.IO port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ersatztv",
      "name": "ErsatzTV",
      "description": "IPTV server with custom channels built from your media library using ffmpeg.",
      "category": "Media",
      "image": "jasongdove/ersatztv:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ersatztv.png",
      "website": "https://ersatztv.org",
      "docsUrl": "https://ersatztv.org/docs/installation",
      "ports": [
        {
          "host": 8404,
          "container": 8404,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ersatztv/config",
          "container": "/root/.local/share/ersatztv"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "esphome",
      "name": "ESPHome",
      "description": "System to control ESP8266/ESP32 microcontrollers with simple YAML configuration.",
      "category": "Home Automation",
      "image": "ghcr.io/esphome/esphome:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/esphome.png",
      "website": "https://esphome.io",
      "docsUrl": "https://esphome.io/guides/getting_started_command_line.html",
      "ports": [
        {
          "host": 6052,
          "container": 6052,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/esphome/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "esphome-web",
      "name": "ESPHome Web",
      "description": "ESPHome device manager and dashboard with YAML configuration and OTA updates.",
      "category": "Home Automation",
      "image": "esphome/esphome:latest",
      "logo": "https://icon.horse/icon/esphome.io",
      "website": "https://esphome.io",
      "docsUrl": "https://esphome.io/guides/getting_started_command_line.html",
      "ports": [
        {
          "host": 6052,
          "container": 6052,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/esphome-web/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "espocrm",
      "name": "EspoCRM",
      "description": "Open-source CRM with documents, calendars, contacts, and sales pipeline management.",
      "category": "Documents",
      "image": "espocrm/espocrm:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/espocrm.png",
      "website": "https://www.espocrm.com",
      "docsUrl": "https://github.com/espocrm/espocrm",
      "ports": [
        {
          "host": 8092,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/espocrm/data",
          "container": "/var/www/html/data"
        },
        {
          "host": "/opt/appdata/espocrm/config",
          "container": "/var/www/html/custom"
        },
        {
          "host": "/opt/appdata/espocrm/upload",
          "container": "/var/www/html/upload"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SITE_URL",
          "default": "http://localhost:8092",
          "description": "Public site URL"
        },
        {
          "key": "DB_HOST",
          "default": "espocrm-db",
          "description": "Database host"
        },
        {
          "key": "DB_NAME",
          "default": "espocrm",
          "description": "Database name"
        },
        {
          "key": "DB_USER",
          "default": "espocrm",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "ADMIN_USERNAME",
          "default": "admin",
          "description": "Initial admin username"
        },
        {
          "key": "ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "etherpad",
      "name": "Etherpad",
      "description": "Real-time collaborative text editor with plugins, exports, and rich formatting.",
      "category": "Documents",
      "image": "etherpad/etherpad:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/etherpad.png",
      "website": "https://etherpad.org",
      "docsUrl": "https://github.com/ether/etherpad-lite",
      "ports": [
        {
          "host": 9001,
          "container": 9001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/etherpad/data",
          "container": "/opt/etherpad-lite/var"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Admin password",
          "secret": true
        },
        {
          "key": "DB_TYPE",
          "default": "sqlite",
          "description": "Database type (sqlite or postgres)"
        },
        {
          "key": "DB_HOST",
          "default": "etherpad-db",
          "description": "Database host (when DB_TYPE=postgres)"
        },
        {
          "key": "DB_USER",
          "default": "etherpad",
          "description": "Database user"
        },
        {
          "key": "DB_PASS",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "DB_NAME",
          "default": "etherpad",
          "description": "Database name"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "eufy-security",
      "name": "Eufy Security",
      "description": "Access Eufy Security cameras and devices locally via RTSP streams and MQTT.",
      "category": "Home Automation",
      "image": "bropat/eufy-security-ws:latest",
      "logo": "https://github.githubassets.com/favicons/favicon.svg",
      "website": "https://github.com/bropat/eufy-security-ws",
      "docsUrl": "https://github.com/bropat/eufy-security-ws#readme",
      "ports": [
        {
          "host": 3010,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/eufy-security/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "USERNAME",
          "default": "",
          "description": "Eufy account email"
        },
        {
          "key": "PASSWORD",
          "default": "",
          "description": "Eufy account password",
          "secret": true
        },
        {
          "key": "COUNTRY",
          "default": "US",
          "description": "Country code"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "euro-office-document-server",
      "name": "Euro-Office Document Server",
      "description": "Self-hosted document editing server for text documents, spreadsheets, presentations, and PDFs.",
      "category": "Documents",
      "image": "ghcr.io/euro-office/documentserver:latest",
      "logo": "https://raw.githubusercontent.com/Euro-Office/web-apps/main/theme/euro-office/assets/img/header/eo_logo_light.svg",
      "website": "https://github.com/Euro-Office",
      "docsUrl": "https://euro-office.github.io/documentation/installation/docker/",
      "ports": [
        {
          "host": 8088,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/euro-office-document-server/data",
          "container": "/var/www/euro-office/Data"
        }
      ],
      "envVars": [
        {
          "key": "JWT_ENABLED",
          "default": "true",
          "description": "Enable JWT token validation"
        },
        {
          "key": "JWT_SECRET",
          "default": "",
          "description": "JWT secret shared with connected integrations",
          "secret": true
        },
        {
          "key": "EXAMPLE_ENABLED",
          "default": "false",
          "description": "Enable the built-in example app for testing"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "evcc",
      "name": "EVCC",
      "description": "Solar-aware EV charging controller for wallboxes, photovoltaic systems, batteries, and smart meters.",
      "category": "Home Automation",
      "image": "evcc/evcc:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/evcc.png",
      "website": "https://evcc.io",
      "docsUrl": "https://docs.evcc.io/en/installation/docker",
      "ports": [
        {
          "host": 7070,
          "container": 7070,
          "protocol": "tcp"
        },
        {
          "host": 8887,
          "container": 8887,
          "protocol": "tcp"
        },
        {
          "host": 9522,
          "container": 9522,
          "protocol": "udp"
        },
        {
          "host": 4712,
          "container": 4712,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/evcc/evcc.yaml",
          "container": "/etc/evcc.yaml"
        },
        {
          "host": "/opt/appdata/evcc/data",
          "container": "/root/.evcc"
        },
        {
          "host": "/etc/machine-id",
          "container": "/etc/machine-id",
          "readOnly": true
        },
        {
          "host": "/var/lib/dbus/machine-id",
          "container": "/var/lib/dbus/machine-id",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "evolution-api",
      "name": "Evolution API",
      "description": "Self-hosted WhatsApp integration API with Baileys support, PostgreSQL persistence, and Redis caching.",
      "category": "Communications",
      "image": "evoapicloud/evolution-api:latest",
      "logo": "https://icon.horse/icon/evolutionfoundation.com.br",
      "website": "https://evolutionfoundation.com.br",
      "docsUrl": "https://docs.evolutionfoundation.com.br",
      "ports": [
        {
          "host": 8084,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/evolution-api/instances",
          "container": "/evolution/instances"
        }
      ],
      "envVars": [
        {
          "key": "EVOLUTION_SERVER_URL",
          "default": "http://localhost:8084",
          "description": "Public URL for the Evolution API server"
        },
        {
          "key": "EVOLUTION_DB_VOLUME",
          "default": "/opt/appdata/evolution-api/postgres:/var/lib/postgresql/data",
          "description": "PostgreSQL bind mount in host:container format"
        },
        {
          "key": "EVOLUTION_REDIS_VOLUME",
          "default": "/opt/appdata/evolution-api/redis:/data",
          "description": "Redis bind mount in host:container format"
        },
        {
          "key": "EVOLUTION_DATABASE_CONNECTION_URI",
          "default": "postgresql://evolution:change-me@evolution-api-postgres:5432/evolution",
          "description": "PostgreSQL connection URI used by Evolution API",
          "secret": true
        },
        {
          "key": "EVOLUTION_REDIS_URI",
          "default": "redis://evolution-api-redis:6379",
          "description": "Redis URI used by Evolution API"
        },
        {
          "key": "EVOLUTION_API_KEY",
          "default": "change-me",
          "description": "Global Evolution API key",
          "secret": true
        },
        {
          "key": "EVOLUTION_DB_NAME",
          "default": "evolution",
          "description": "PostgreSQL database name"
        },
        {
          "key": "EVOLUTION_DB_USER",
          "default": "evolution",
          "description": "PostgreSQL user"
        },
        {
          "key": "EVOLUTION_DB_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    depends_on:\n      - {{serviceName}}-postgres\n      - {{serviceName}}-redis\n{{ports}}\n{{volumes}}\n    environment:\n      SERVER_NAME: evolution\n      SERVER_TYPE: http\n      SERVER_PORT: \"8080\"\n      SERVER_URL: {{env.EVOLUTION_SERVER_URL}}\n      SERVER_DISABLE_MANAGER: \"false\"\n      DATABASE_PROVIDER: postgresql\n      DATABASE_CONNECTION_URI: {{env.EVOLUTION_DATABASE_CONNECTION_URI}}\n      DATABASE_CONNECTION_CLIENT_NAME: evolution\n      CACHE_REDIS_ENABLED: \"true\"\n      CACHE_REDIS_URI: {{env.EVOLUTION_REDIS_URI}}\n      CACHE_REDIS_PREFIX_KEY: evolution-cache\n      CACHE_REDIS_SAVE_INSTANCES: \"true\"\n      CACHE_LOCAL_ENABLED: \"true\"\n      AUTHENTICATION_API_KEY: {{env.EVOLUTION_API_KEY}}\n      AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES: \"false\"\n      CONFIG_SESSION_PHONE_CLIENT: McHarbor\n      CONFIG_SESSION_PHONE_NAME: Chrome\n      LOG_LEVEL: ERROR,WARN,INFO\n      LOG_BAILEYS: error\n      TELEMETRY_ENABLED: \"false\"\n  {{serviceName}}-postgres:\n    image: postgres:16-alpine\n    container_name: {{containerName}}-postgres\n    restart: unless-stopped\n    command:\n      - postgres\n      - -c\n      - max_connections=1000\n      - -c\n      - listen_addresses=*\n    volumes:\n      - {{env.EVOLUTION_DB_VOLUME}}\n    environment:\n      POSTGRES_DB: {{env.EVOLUTION_DB_NAME}}\n      POSTGRES_USER: {{env.EVOLUTION_DB_USER}}\n      POSTGRES_PASSWORD: {{env.EVOLUTION_DB_PASSWORD}}\n  {{serviceName}}-redis:\n    image: redis:7-alpine\n    container_name: {{containerName}}-redis\n    restart: unless-stopped\n    command: redis-server --appendonly yes\n    volumes:\n      - {{env.EVOLUTION_REDIS_VOLUME}}\n",
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "excalidraw",
      "name": "Excalidraw",
      "description": "Virtual whiteboard for sketching hand-drawn diagrams. End-to-end encrypted collaboration with a relaxed, expressive feel.",
      "category": "Productivity",
      "image": "excalidraw/excalidraw:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/excalidraw.png",
      "website": "https://excalidraw.com",
      "docsUrl": "https://docs.excalidraw.com",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "fabio",
      "name": "Fabio",
      "description": "Consul-based HTTP and TCP load balancer with automatic service registration.",
      "category": "Networking",
      "image": "fabiolb/fabio:latest",
      "logo": "https://fabiolb.net/img/fabio.png",
      "website": "https://fabiolb.net",
      "docsUrl": "https://fabiolb.net/quickstart/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 9999,
          "container": 9999,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/fabio/config",
          "container": "/etc/fabio"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "fastapi-dev",
      "name": "FastAPI",
      "description": "Tiangolo Uvicorn-Gunicorn-FastAPI, modern high-performance Python web framework with type hints.",
      "category": "Developer Tools",
      "image": "tiangolo/uvicorn-gunicorn-fastapi:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/fastapi.png",
      "website": "https://fastapi.tiangolo.com",
      "docsUrl": "https://fastapi.tiangolo.com/tutorial/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/fastapi-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MODULE_NAME",
          "default": "app.main",
          "description": "FastAPI module entrypoint"
        },
        {
          "key": "VARIABLE_NAME",
          "default": "app",
          "description": "ASGI application variable name"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "faster-whisper",
      "name": "Faster Whisper",
      "description": "LinuxServer.io Faster Whisper Wyoming server for local speech-to-text with Home Assistant Assist.",
      "category": "AI & Voice",
      "image": "lscr.io/linuxserver/faster-whisper:latest",
      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver-ls-logo.png",
      "website": "https://hub.docker.com/r/linuxserver/faster-whisper",
      "docsUrl": "https://docs.linuxserver.io/images/docker-faster-whisper/",
      "ports": [
        {
          "host": 10300,
          "container": 10300,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/faster-whisper/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID for file ownership"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID for file ownership"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DEBUG",
          "default": "",
          "description": "Set to true to enable debug logging"
        },
        {
          "key": "LOCAL_ONLY",
          "default": "",
          "description": "Set to true to use only locally provided models"
        },
        {
          "key": "WHISPER_BEAM",
          "default": "1",
          "description": "Number of transcription candidates to consider"
        },
        {
          "key": "WHISPER_LANG",
          "default": "auto",
          "description": "Two-character language code or auto"
        },
        {
          "key": "WHISPER_MODEL",
          "default": "auto",
          "description": "Whisper model used for transcription"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "ferdium",
      "name": "Ferdium",
      "description": "Multi-messenger desktop client that combines many chat and email services into one application.",
      "category": "Productivity",
      "image": "lscr.io/linuxserver/ferdium:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ferdium.png",
      "website": "https://ferdium.org",
      "docsUrl": "https://github.com/linuxserver/docker-ferdium",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        },
        {
          "host": 3001,
          "container": 3001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ferdium/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ferretdb",
      "name": "FerretDB",
      "description": "Open-source MongoDB-compatible database proxy that translates queries to PostgreSQL backend.",
      "category": "Databases",
      "image": "ferretdb/ferretdb:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ferretdb.png",
      "website": "https://www.ferretdb.io",
      "docsUrl": "https://docs.ferretdb.io",
      "ports": [
        {
          "host": 27017,
          "container": 27017,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ferretdb/data",
          "container": "/data/db"
        }
      ],
      "envVars": [
        {
          "key": "FERRETDB_POSTGRESQL_URL",
          "default": "postgres://postgres:postgres@postgres:5432/ferretdb",
          "description": "PostgreSQL connection string"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "fhem",
      "name": "FHEM",
      "description": "Perl-based home automation server for diverse hardware and protocols.",
      "category": "Home Automation",
      "image": "fhem/fhem:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/fhem.png",
      "website": "https://fhem.de",
      "docsUrl": "https://fhem.de/commandref.html",
      "ports": [
        {
          "host": 8083,
          "container": 8083,
          "protocol": "tcp"
        },
        {
          "host": 8084,
          "container": 8084,
          "protocol": "tcp"
        },
        {
          "host": 8085,
          "container": 8085,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/fhem/config",
          "container": "/fhem"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "filebrowser",
      "name": "FileBrowser",
      "description": "Web-based file manager with a clean interface for managing files.",
      "category": "Utilities",
      "image": "filebrowser/filebrowser:latest",
      "logo": "https://raw.githubusercontent.com/filebrowser/logo/master/icon.svg",
      "website": "https://filebrowser.org",
      "docsUrl": "https://filebrowser.org/features",
      "ports": [
        {
          "host": 8585,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/filebrowser/srv",
          "container": "/srv"
        },
        {
          "host": "/opt/appdata/filebrowser/database.db",
          "container": "/database.db"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "fileflows",
      "name": "FileFlows",
      "description": "Rule-based file processing and media conversion automation.",
      "category": "Media",
      "image": "revenz/fileflows:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/fileflows.png",
      "website": "https://fileflows.com",
      "docsUrl": "https://fileflows.com/docs",
      "ports": [
        {
          "host": 5000,
          "container": 5000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/fileflows/data",
          "container": "/app/Data"
        },
        {
          "host": "/opt/appdata/fileflows/logs",
          "container": "/app/Logs"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/temp",
          "container": "/temp"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "filerun",
      "name": "FileRun",
      "description": "File manager and sharing platform with user management, previews, and integrations.",
      "category": "Photos & Files",
      "image": "filerun/filerun:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/filerun.png",
      "website": "https://www.filerun.com",
      "docsUrl": "https://docs.filerun.com/docker",
      "ports": [
        {
          "host": 8092,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/filerun/data",
          "container": "/var/www/html/data"
        },
        {
          "host": "/opt/appdata/filerun/user-files",
          "container": "/user-files"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "FR_DB_HOST",
          "default": "filerun-db",
          "description": "Database host"
        },
        {
          "key": "FR_DB_NAME",
          "default": "filerun",
          "description": "Database name"
        },
        {
          "key": "FR_DB_USER",
          "default": "filerun",
          "description": "Database user"
        },
        {
          "key": "FR_DB_PASS",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "APPS_AUTH_KEY",
          "default": "change-me",
          "description": "Authentication key for FileRun apps",
          "secret": true
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "firefly-iii",
      "name": "Firefly III",
      "description": "Personal finance manager for budgeting and account tracking.",
      "category": "Productivity",
      "image": "fireflyiii/core:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/firefly-iii.png",
      "website": "https://www.firefly-iii.org",
      "docsUrl": "https://docs.firefly-iii.org",
      "ports": [
        {
          "host": 8087,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/firefly-iii/upload",
          "container": "/var/www/html/storage/upload"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "APP_KEY",
          "default": "change-me-change-me-change-me-change-me",
          "description": "32-character application key",
          "secret": true
        },
        {
          "key": "DB_PASSWORD",
          "default": "change-me",
          "description": "MariaDB password",
          "secret": true
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      APP_KEY: {{env.APP_KEY}}\n      DB_CONNECTION: mysql\n      DB_HOST: {{serviceName}}-db\n      DB_PORT: \"3306\"\n      DB_DATABASE: firefly\n      DB_USERNAME: firefly\n      DB_PASSWORD: {{env.DB_PASSWORD}}\n      TZ: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/upload:/var/www/html/storage/upload\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: mariadb:11\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      MYSQL_RANDOM_ROOT_PASSWORD: \"yes\"\n      MYSQL_USER: firefly\n      MYSQL_PASSWORD: {{env.DB_PASSWORD}}\n      MYSQL_DATABASE: firefly\n    volumes:\n      - {{appDataPath}}/db:/var/lib/mysql\n"
    },
    {
      "slug": "firezone",
      "name": "Firezone",
      "description": "WireGuard-based VPN server with SSO, device approvals, and policy-based access.",
      "category": "Networking",
      "image": "firezone/firezone:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/firezone.svg",
      "website": "https://www.firezone.dev",
      "docsUrl": "https://www.firezone.dev/docs",
      "ports": [
        {
          "host": 51820,
          "container": 51820,
          "protocol": "udp"
        },
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/firezone/data",
          "container": "/var/firezone"
        }
      ],
      "envVars": [
        {
          "key": "FQDN",
          "default": "firezone.example.com",
          "description": "Public FQDN for the admin UI"
        },
        {
          "key": "DATABASE_NAME",
          "default": "firezone",
          "description": "Database name"
        },
        {
          "key": "DATABASE_HOST",
          "default": "firezone-postgres",
          "description": "Database host"
        },
        {
          "key": "DATABASE_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "DEFAULT_ADMIN_EMAIL",
          "default": "admin@example.com",
          "description": "Default admin email"
        },
        {
          "key": "DEFAULT_ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Default admin password",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "flame-dashboard",
      "name": "Flame",
      "description": "Self-hosted start page with a clean modern UI and app bookmarks.",
      "category": "Dashboards",
      "image": "pawelmalak/flame:latest",
      "logo": "https://raw.githubusercontent.com/pawelmalak/flame/master/.github/preview.png",
      "website": "https://github.com/pawelmalak/flame",
      "docsUrl": "https://github.com/pawelmalak/flame",
      "ports": [
        {
          "host": 5005,
          "container": 5005,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/flame-dashboard/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "flink",
      "name": "Apache Flink",
      "description": "Distributed stream and batch processing engine for stateful computations over unbounded data streams.",
      "category": "Databases",
      "image": "flink:latest",
      "logo": "https://flink.apache.org/img/logo/png/1000/flink-logo-hires.png",
      "website": "https://flink.apache.org",
      "docsUrl": "https://nightlies.apache.org/flink/flink-docs-master/docs/try-flink/local_installation/",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/flink/data",
          "container": "/opt/flink/data"
        },
        {
          "host": "/opt/appdata/flink/conf",
          "container": "/opt/flink/conf"
        }
      ],
      "envVars": [
        {
          "key": "JOB_MANAGER_RPC_ADDRESS",
          "default": "flink",
          "description": "JobManager RPC address"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "flowise",
      "name": "Flowise",
      "description": "Drag-and-drop UI to build LLM orchestration flows and agents using LangChain components.",
      "category": "AI & Voice",
      "image": "flowiseai/flowise:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/flowise.png",
      "website": "https://flowiseai.com",
      "docsUrl": "https://docs.flowiseai.com/getting-started",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/flowise/data",
          "container": "/root/.flowise"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "FLOWISE_USERNAME",
          "default": "",
          "description": "Optional basic auth username"
        },
        {
          "key": "FLOWISE_PASSWORD",
          "default": "",
          "description": "Optional basic auth password",
          "secret": true
        },
        {
          "key": "SECRETKEY_PATH",
          "default": "/run/secrets/flowise_key",
          "description": "Path to the encryption secret key file"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "fluentbit",
      "name": "Fluent Bit",
      "description": "Fast and lightweight log processor and forwarder with rich input/output plugin ecosystem.",
      "category": "Monitoring",
      "image": "fluent/fluent-bit:latest",
      "logo": "https://icon.horse/icon/fluentbit.io",
      "website": "https://fluentbit.io",
      "docsUrl": "https://docs.fluentbit.io/manual/installation/docker",
      "ports": [
        {
          "host": 2020,
          "container": 2020,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/fluentbit/config",
          "container": "/fluent-bit/etc"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "fluentd",
      "name": "Fluentd",
      "description": "Open-source data collector for unified logging with pluggable input/output architecture.",
      "category": "Monitoring",
      "image": "fluent/fluentd:latest",
      "logo": "https://icon.horse/icon/www.fluentd.org",
      "website": "https://www.fluentd.org",
      "docsUrl": "https://docs.fluentd.org/container-deployment/docker-compose",
      "ports": [
        {
          "host": 24224,
          "container": 24224,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/fluentd/config",
          "container": "/fluentd/etc"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "FLUENTD_CONF",
          "default": "fluent.conf",
          "description": "Main config file"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "flutter-dev",
      "name": "Flutter",
      "description": "CirrusCI Flutter SDK, cross-platform UI toolkit for building natively compiled mobile, web, and desktop apps.",
      "category": "Developer Tools",
      "image": "cirrusci/flutter:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/flutter.png",
      "website": "https://flutter.dev",
      "docsUrl": "https://docs.flutter.dev",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/flutter-dev/app",
          "container": "/home/cirrus/dev"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ANDROID_HOME",
          "default": "/home/cirrus/Android/sdk",
          "description": "Android SDK path"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "focalboard",
      "name": "Focalboard",
      "description": "Open-source project and team management boards for kanban, calendars, and tables.",
      "category": "Productivity",
      "image": "mattermost/focalboard:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/focalboard.png",
      "website": "https://www.focalboard.com",
      "docsUrl": "https://www.focalboard.com/docs",
      "ports": [
        {
          "host": 8605,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/focalboard/data",
          "container": "/opt/focalboard/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "formbricks",
      "name": "Formbricks",
      "description": "Open-source experience management and survey platform for in-product feedback.",
      "category": "Productivity",
      "image": "formbricks/formbricks:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/formbricks.png",
      "website": "https://formbricks.com",
      "docsUrl": "https://formbricks.com/docs",
      "ports": [
        {
          "host": 8608,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/formbricks/data",
          "container": "/apps/web/uploads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DATABASE_URL",
          "default": "postgresql://formbricks:formbricks@postgres:5432/formbricks",
          "description": "PostgreSQL connection URL",
          "secret": true
        },
        {
          "key": "NEXTAUTH_SECRET",
          "default": "",
          "description": "NextAuth secret key",
          "secret": true
        },
        {
          "key": "ENCRYPTION_KEY",
          "default": "",
          "description": "Data encryption key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "freshrss",
      "name": "FreshRSS",
      "description": "Lightweight RSS feed aggregator and reader.",
      "category": "Productivity",
      "image": "freshrss/freshrss:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/freshrss.png",
      "website": "https://freshrss.org",
      "docsUrl": "https://freshrss.github.io/FreshRSS",
      "ports": [
        {
          "host": 8085,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/freshrss/data",
          "container": "/var/www/FreshRSS/data"
        },
        {
          "host": "/opt/appdata/freshrss/extensions",
          "container": "/var/www/FreshRSS/extensions"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "frigate",
      "name": "Frigate",
      "description": "Local NVR with real-time object detection for IP cameras and deep Home Assistant integration.",
      "category": "Home Automation",
      "image": "ghcr.io/blakeblackshear/frigate:stable",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/frigate.png",
      "website": "https://frigate.video",
      "docsUrl": "https://docs.frigate.video/frigate/installation",
      "ports": [
        {
          "host": 8971,
          "container": 8971,
          "protocol": "tcp"
        },
        {
          "host": 8554,
          "container": 8554,
          "protocol": "tcp"
        },
        {
          "host": 8555,
          "container": 8555,
          "protocol": "tcp"
        },
        {
          "host": 8555,
          "container": 8555,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/etc/localtime",
          "container": "/etc/localtime",
          "readOnly": true
        },
        {
          "host": "/opt/appdata/frigate/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/frigate/media",
          "container": "/media/frigate"
        }
      ],
      "envVars": [
        {
          "key": "FRIGATE_RTSP_PASSWORD",
          "default": "",
          "description": "RTSP password used by Frigate restreams",
          "secret": true
        },
        {
          "key": "FRIGATE_SHM_SIZE",
          "default": "512mb",
          "description": "Shared memory size; increase for more or higher-resolution cameras"
        },
        {
          "key": "FRIGATE_TMPFS",
          "default": "/tmp/cache:size=1000000000",
          "description": "In-memory cache mount for recording segments"
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    stop_grace_period: 30s\n    shm_size: {{env.FRIGATE_SHM_SIZE}}\n{{ports}}\n{{volumes}}\n    tmpfs:\n      - {{env.FRIGATE_TMPFS}}\n    environment:\n      FRIGATE_RTSP_PASSWORD: {{env.FRIGATE_RTSP_PASSWORD}}\n",
      "minMemory": "4GB",
      "version": "stable"
    },
    {
      "slug": "frp",
      "name": "frp (Fast Reverse Proxy)",
      "description": "High-performance reverse proxy to expose NAT'd local servers to the public internet.",
      "category": "Networking",
      "image": "snowdreamtech/frps:latest",
      "logo": "https://github.com/fatedier/frp/raw/master/doc/pic/modal.png",
      "website": "https://github.com/fatedier/frp",
      "docsUrl": "https://github.com/fatedier/frp/blob/master/README.md",
      "ports": [
        {
          "host": 7000,
          "container": 7000,
          "protocol": "tcp"
        },
        {
          "host": 7500,
          "container": 7500,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/frp/config",
          "container": "/etc/frp"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "frpc-client",
      "name": "frp Client",
      "description": "FRP client for connecting local services to a remote FRP server.",
      "category": "Networking",
      "image": "snowdreamtech/frpc:latest",
      "logo": "https://github.com/fatedier/frp/raw/master/doc/pic/modal.png",
      "website": "https://github.com/fatedier/frp",
      "docsUrl": "https://github.com/fatedier/frp/blob/master/README.md",
      "ports": [
        {
          "host": 7000,
          "container": 7000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/frpc/config",
          "container": "/etc/frp"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "FRPC_SERVER_ADDR",
          "default": "frp.example.com",
          "description": "FRP server address"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gatus",
      "name": "Gatus",
      "description": "Developer-oriented status page and uptime monitor.",
      "category": "Monitoring",
      "image": "twinproduction/gatus:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/gatus.png",
      "website": "https://gatus.io",
      "docsUrl": "https://gatus.io/docs",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gatus/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "geonode",
      "name": "GeoNode",
      "description": "Open-source geospatial content management system for publishing and sharing maps, layers, and documents.",
      "category": "Databases",
      "image": "geonode/geonode:latest",
      "logo": "https://geonode.org/img/geonode-logo.svg",
      "website": "https://geonode.org",
      "docsUrl": "https://docs.geonode.org/en/master/install/docker/index.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/geonode/data",
          "container": "/mnt/geonode-data"
        }
      ],
      "envVars": [
        {
          "key": "GEONODE_ADMIN_USERNAME",
          "default": "admin",
          "description": "Bootstrap admin username"
        },
        {
          "key": "GEONODE_ADMIN_PASSWORD",
          "default": "",
          "description": "Bootstrap admin password",
          "secret": true
        },
        {
          "key": "GEONODE_ADMIN_EMAIL",
          "default": "admin@geonode.local",
          "description": "Bootstrap admin email"
        },
        {
          "key": "GEONODE_SITENAME",
          "default": "GeoNode",
          "description": "Display site name"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gerrit",
      "name": "Gerrit Code Review",
      "description": "Web-based team code collaboration and review tool built on Git.",
      "category": "Developer Tools",
      "image": "gerritcodereview/gerrit:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/gerrit.png",
      "website": "https://www.gerritcodereview.org",
      "docsUrl": "https://gerrit-documentation.storage.googleapis.com/Documentation/index.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 29418,
          "container": 29418,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gerrit/git",
          "container": "/var/gerrit/git"
        },
        {
          "host": "/opt/appdata/gerrit/etc",
          "container": "/var/gerrit/etc"
        },
        {
          "host": "/opt/appdata/gerrit/db",
          "container": "/var/gerrit/db"
        },
        {
          "host": "/opt/appdata/gerrit/index",
          "container": "/var/gerrit/index"
        },
        {
          "host": "/opt/appdata/gerrit/cache",
          "container": "/var/gerrit/cache"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CANONICAL_WEB_URL",
          "default": "http://localhost:8080",
          "description": "Canonical URL for Gerrit"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ghost",
      "name": "Ghost",
      "description": "Modern publishing platform for newsletters, blogs, memberships, and independent media sites.",
      "category": "Web Apps",
      "image": "ghost:5-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ghost.png",
      "website": "https://ghost.org",
      "docsUrl": "https://hub.docker.com/_/ghost",
      "ports": [
        {
          "host": 2368,
          "container": 2368,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "GHOST_CONTENT_PATH",
          "default": "/opt/appdata/ghost/content",
          "description": "Host path for Ghost content"
        },
        {
          "key": "GHOST_DB_PATH",
          "default": "/opt/appdata/ghost/db",
          "description": "Host path for MySQL data"
        },
        {
          "key": "GHOST_URL",
          "default": "http://localhost:2368",
          "description": "Public Ghost URL"
        },
        {
          "key": "GHOST_DB_NAME",
          "default": "ghost",
          "description": "Database name"
        },
        {
          "key": "GHOST_DB_USER",
          "default": "ghost",
          "description": "Database user"
        },
        {
          "key": "GHOST_DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "GHOST_DB_ROOT_PASSWORD",
          "default": "change-root-password",
          "description": "MySQL root password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    depends_on:\n      - {{serviceName}}-db\n{{ports}}\n    volumes:\n      - {{env.GHOST_CONTENT_PATH}}:/var/lib/ghost/content\n    environment:\n      url: {{env.GHOST_URL}}\n      database__client: mysql\n      database__connection__host: {{serviceName}}-db\n      database__connection__user: {{env.GHOST_DB_USER}}\n      database__connection__password: {{env.GHOST_DB_PASSWORD}}\n      database__connection__database: {{env.GHOST_DB_NAME}}\n  {{serviceName}}-db:\n    image: mysql:8\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    volumes:\n      - {{env.GHOST_DB_PATH}}:/var/lib/mysql\n    environment:\n      MYSQL_DATABASE: {{env.GHOST_DB_NAME}}\n      MYSQL_USER: {{env.GHOST_DB_USER}}\n      MYSQL_PASSWORD: {{env.GHOST_DB_PASSWORD}}\n      MYSQL_ROOT_PASSWORD: {{env.GHOST_DB_ROOT_PASSWORD}}\n",
      "minMemory": "1GB",
      "version": "5-alpine"
    },
    {
      "slug": "gitea",
      "name": "Gitea",
      "description": "Lightweight self-hosted Git service. Fork of Gogs, painless to set up.",
      "category": "Development",
      "image": "gitea/gitea:latest",
      "logo": "https://about.gitea.com/gitea.png",
      "website": "https://about.gitea.com",
      "docsUrl": "https://docs.gitea.com",
      "ports": [
        {
          "host": 3200,
          "container": 3000,
          "protocol": "tcp"
        },
        {
          "host": 2222,
          "container": 22,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gitea/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "USER_UID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "USER_GID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "GITEA__database__DB_TYPE",
          "default": "sqlite3",
          "description": "Database type"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gitea-act-runner",
      "name": "Gitea Actions Runner",
      "description": "Runner for executing Gitea Actions workflows on a self-hosted host.",
      "category": "Developer Tools",
      "image": "gitea/act_runner:latest",
      "logo": "https://about.gitea.com/gitea.png",
      "website": "https://docs.gitea.com/usage/actions/act-runner",
      "docsUrl": "https://docs.gitea.com/usage/actions/act-runner",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gitea-act-runner/data",
          "container": "/data"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GITEA_INSTANCE_URL",
          "default": "https://gitea.example.com",
          "description": "Gitea instance URL"
        },
        {
          "key": "GITEA_RUNNER_REGISTRATION_TOKEN",
          "default": "",
          "description": "Runner registration token from Gitea",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gitlab",
      "name": "GitLab CE",
      "description": "Full-featured Git hosting, CI/CD, registry, and DevOps platform.",
      "category": "Developer Tools",
      "image": "gitlab/gitlab-ce:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/gitlab.png",
      "website": "https://about.gitlab.com",
      "docsUrl": "https://docs.gitlab.com/ee/install/docker.html",
      "ports": [
        {
          "host": 8087,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 8444,
          "container": 443,
          "protocol": "tcp"
        },
        {
          "host": 2224,
          "container": 22,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gitlab/config",
          "container": "/etc/gitlab"
        },
        {
          "host": "/opt/appdata/gitlab/logs",
          "container": "/var/log/gitlab"
        },
        {
          "host": "/opt/appdata/gitlab/data",
          "container": "/var/opt/gitlab"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GITLAB_OMNIBUS_CONFIG",
          "default": "external_url 'http://localhost:8087'",
          "description": "Omnibus configuration"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "gitlab-runner",
      "name": "GitLab Runner",
      "description": "Agent that runs CI/CD jobs and sends results back to GitLab.",
      "category": "Developer Tools",
      "image": "gitlab/gitlab-runner:latest",
      "logo": "https://icon.horse/icon/docs.gitlab.com",
      "website": "https://docs.gitlab.com/runner/",
      "docsUrl": "https://docs.gitlab.com/runner/install/docker.html",
      "ports": [
        {
          "host": 9252,
          "container": 9252,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gitlab-runner/config",
          "container": "/etc/gitlab-runner"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CI_SERVER_URL",
          "default": "https://gitlab.com",
          "description": "GitLab instance URL"
        },
        {
          "key": "REGISTRATION_TOKEN",
          "default": "",
          "description": "Runner registration token from GitLab",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gitness",
      "name": "Gitness",
      "description": "Open-source code hosting, review, and CI platform from Harness.",
      "category": "Developer Tools",
      "image": "harness/gitness:latest",
      "logo": "https://icon.horse/icon/www.harness.io",
      "website": "https://www.harness.io/products/gitness",
      "docsUrl": "https://docs.gitness.com",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gitness/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/gitness/config",
          "container": "/harness"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "glance",
      "name": "Glance",
      "description": "Fast self-hosted dashboard with feeds, widgets, and service status.",
      "category": "Dashboards",
      "image": "glanceapp/glance:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/glance.png",
      "website": "https://github.com/glanceapp/glance",
      "docsUrl": "https://github.com/glanceapp/glance",
      "ports": [
        {
          "host": 8089,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/glance/config",
          "container": "/app/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "glances",
      "name": "Glances",
      "description": "Cross-platform real-time system monitor with web UI, API and exporter modes.",
      "category": "Monitoring",
      "image": "nicolargo/glances:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/glances.png",
      "website": "https://nicolargo.github.io/glances",
      "docsUrl": "https://github.com/nicolargo/glances/blob/master/docs/docker.md",
      "ports": [
        {
          "host": 61208,
          "container": 61208,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/glances/config",
          "container": "/glances/conf"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GLANCES_OPT",
          "default": "-w",
          "description": "Glances options (-w web UI, -s server, -t refresh)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "glpi",
      "name": "GLPI",
      "description": "IT asset management and helpdesk ticketing platform with inventory and software tracking.",
      "category": "Productivity",
      "image": "glpi/glpi:latest",
      "logo": "https://glpi-project.org/favicon.ico",
      "website": "https://glpi-project.org",
      "docsUrl": "https://glpi-user-documentation.readthedocs.io",
      "ports": [
        {
          "host": 8594,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/glpi/data",
          "container": "/var/www/glpi/data"
        },
        {
          "host": "/opt/appdata/glpi/config",
          "container": "/var/www/glpi/config"
        },
        {
          "host": "/opt/appdata/glpi/files",
          "container": "/var/www/glpi/files"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GLPI_DB_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "GLPI_DB_NAME",
          "default": "glpi",
          "description": "Database name"
        },
        {
          "key": "GLPI_DB_USER",
          "default": "glpi",
          "description": "Database user"
        },
        {
          "key": "GLPI_DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "go-122-dev",
      "name": "Go 1.22",
      "description": "Go 1.22 on Alpine Linux, statically typed compiled language with range over integers and improved routing.",
      "category": "Developer Tools",
      "image": "golang:1.22-alpine",
      "logo": "https://icon.horse/icon/go.dev",
      "website": "https://go.dev",
      "docsUrl": "https://go.dev/doc/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/go-122-dev/app",
          "container": "/go/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GO111MODULE",
          "default": "on",
          "description": "Enable Go modules"
        },
        {
          "key": "CGO_ENABLED",
          "default": "0",
          "description": "Disable CGO for static binaries"
        }
      ],
      "version": "1.22-alpine"
    },
    {
      "slug": "go-dev",
      "name": "Go 1.23",
      "description": "Go 1.23 on Alpine Linux, statically typed compiled language with built-in concurrency.",
      "category": "Developer Tools",
      "image": "golang:1.23-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/go.png",
      "website": "https://go.dev",
      "docsUrl": "https://go.dev/doc/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/go-dev/app",
          "container": "/go/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GO111MODULE",
          "default": "on",
          "description": "Enable Go modules"
        },
        {
          "key": "CGO_ENABLED",
          "default": "0",
          "description": "Disable CGO for static binaries"
        }
      ],
      "version": "1.23-alpine"
    },
    {
      "slug": "go2rtc",
      "name": "go2rtc",
      "description": "Low-latency camera stream relay for RTSP, WebRTC, HomeKit, FFmpeg, and many camera protocols.",
      "category": "Home Automation",
      "image": "alexxit/go2rtc:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/go2rtc.png",
      "website": "https://go2rtc.org",
      "docsUrl": "https://github.com/AlexxIT/go2rtc#readme",
      "ports": [
        {
          "host": 1984,
          "container": 1984,
          "protocol": "tcp"
        },
        {
          "host": 8554,
          "container": 8554,
          "protocol": "tcp"
        },
        {
          "host": 8555,
          "container": 8555,
          "protocol": "tcp"
        },
        {
          "host": 8555,
          "container": 8555,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/go2rtc",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gogs",
      "name": "Gogs",
      "description": "Painless, lightweight self-hosted Git service.",
      "category": "Developer Tools",
      "image": "gogs/gogs:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/gogs.png",
      "website": "https://gogs.io",
      "docsUrl": "https://gogs.io/docs",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        },
        {
          "host": 3022,
          "container": 22,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gogs/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gotenberg",
      "name": "Gotenberg",
      "description": "Docker-powered API for converting HTML, Markdown, and Office documents to PDF.",
      "category": "Documents",
      "image": "gotenberg/gotenberg:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/gotenberg.png",
      "website": "https://gotenberg.dev",
      "docsUrl": "https://gotenberg.dev/docs/install",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gotenberg/data",
          "container": "/gotenberg"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DEFAULT_GOTENBERG_API_TIMEOUT",
          "default": "30s",
          "description": "Default conversion timeout"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "gotify",
      "name": "Gotify",
      "description": "Simple server for sending and receiving push notifications.",
      "category": "Notifications",
      "image": "gotify/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/gotify.png",
      "website": "https://gotify.net",
      "docsUrl": "https://gotify.net/docs",
      "ports": [
        {
          "host": 8089,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gotify/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "gpt-researcher",
      "name": "GPT Researcher",
      "description": "Autonomous agent that conducts deep web and document research using any LLM provider.",
      "category": "AI & Voice",
      "image": "ghcr.io/assafelovic/gpt-researcher:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/assafelovic/gpt-researcher",
      "docsUrl": "https://docs.gptr.dev",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gpt-researcher/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "OPENAI_API_KEY",
          "default": "",
          "description": "OpenAI API key",
          "secret": true
        },
        {
          "key": "TAVILY_API_KEY",
          "default": "",
          "description": "Tavily API key for web search",
          "secret": true
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "gradle-dev",
      "name": "Gradle",
      "description": "Gradle 8 on JDK 21, flexible build automation tool for multi-language software projects.",
      "category": "Developer Tools",
      "image": "gradle:8-jdk21",
      "logo": "https://icon.horse/icon/gradle.org",
      "website": "https://gradle.org",
      "docsUrl": "https://docs.gradle.org",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/gradle-dev/app",
          "container": "/home/gradle/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GRADLE_USER_HOME",
          "default": "/home/gradle/.gradle",
          "description": "Gradle user home directory"
        }
      ],
      "version": "8-jdk21"
    },
    {
      "slug": "grafana",
      "name": "Grafana",
      "description": "Open-source analytics and monitoring platform with beautiful dashboards.",
      "category": "Monitoring",
      "image": "grafana/grafana:latest",
      "logo": "https://grafana.com/static/img/menu/grafana2.svg",
      "website": "https://grafana.com",
      "docsUrl": "https://grafana.com/docs/",
      "ports": [
        {
          "host": 3100,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/grafana/data",
          "container": "/var/lib/grafana"
        }
      ],
      "envVars": [
        {
          "key": "GF_SECURITY_ADMIN_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "GF_SECURITY_ADMIN_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "grafana-alloy",
      "name": "Grafana Alloy",
      "description": "OpenTelemetry collector with native pipelines for logs, metrics, traces and profiling from Grafana.",
      "category": "Monitoring",
      "image": "grafana/alloy:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/grafana-alloy.svg",
      "website": "https://grafana.com/docs/alloy",
      "docsUrl": "https://grafana.com/docs/agent/latest/flow/",
      "ports": [
        {
          "host": 12345,
          "container": 12345,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/grafana-alloy/config",
          "container": "/etc/alloy"
        },
        {
          "host": "/opt/appdata/grafana-alloy/data",
          "container": "/var/lib/alloy/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ALLOY_DEPLOY_MODE",
          "default": "single-binary",
          "description": "Deployment mode"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "grafana-dev",
      "name": "Grafana Dev",
      "description": "Grafana analytics and observability dashboards for local metric visualization.",
      "category": "Developer Tools",
      "image": "grafana/grafana:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/grafana.png",
      "website": "https://grafana.com",
      "docsUrl": "https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/grafana-dev/data",
          "container": "/var/lib/grafana"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GF_SECURITY_ADMIN_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "GF_SECURITY_ADMIN_PASSWORD",
          "default": "admin",
          "description": "Admin password",
          "secret": true
        },
        {
          "key": "GF_AUTH_ANONYMOUS_ENABLED",
          "default": "true",
          "description": "Allow anonymous access"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "grafana-oncall",
      "name": "Grafana OnCall",
      "description": "Open-source on-call management and incident response integrated with Grafana alerts.",
      "category": "Monitoring",
      "image": "grafana/oncall:latest",
      "logo": "https://icon.horse/icon/grafana.com",
      "website": "https://grafana.com/docs/oncall",
      "docsUrl": "https://grafana.com/docs/oncall/latest/open-source/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/grafana-oncall/data",
          "container": "/var/lib/oncall"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DJANGO_SECRET_KEY",
          "default": "",
          "description": "Django secret key",
          "secret": true
        },
        {
          "key": "MYSQL_HOST",
          "default": "mysql",
          "description": "MySQL host"
        },
        {
          "key": "MYSQL_PASSWORD",
          "default": "",
          "description": "MySQL password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "grocy",
      "name": "Grocy",
      "description": "ERP-style groceries, pantry, chores, and household management.",
      "category": "Productivity",
      "image": "lscr.io/linuxserver/grocy:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/grocy.png",
      "website": "https://docs.linuxserver.io/images/docker-grocy/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-grocy/",
      "ports": [
        {
          "host": 9283,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/grocy/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "groovy-dev",
      "name": "Groovy",
      "description": "Apache Groovy, dynamic language for the JVM with scripting and domain-specific language support.",
      "category": "Developer Tools",
      "image": "groovy:latest",
      "logo": "https://icon.horse/icon/groovy-lang.org",
      "website": "https://groovy-lang.org",
      "docsUrl": "https://groovy-lang.org/documentation.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/groovy-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "growi",
      "name": "GROWI",
      "description": "Team collaboration wiki with Markdown editing, diagrams, and granular page permissions.",
      "category": "Documents",
      "image": "weseek/growi:latest",
      "logo": "https://icon.horse/icon/growi.org",
      "website": "https://growi.org",
      "docsUrl": "https://docs.growi.org",
      "ports": [
        {
          "host": 3005,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/growi/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MONGO_URI",
          "default": "mongodb://growi:change-me@growi-db:27017/growi",
          "description": "MongoDB connection URI"
        },
        {
          "key": "ELASTICSEARCH_URI",
          "default": "http://growi-elasticsearch:9200/growi",
          "description": "Elasticsearch URI for full-text search"
        },
        {
          "key": "PASSWORD_SEED",
          "default": "change-me",
          "description": "Password seed for user invitations",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "guacamole",
      "name": "Apache Guacamole",
      "description": "Clientless remote desktop gateway for SSH, VNC, and RDP.",
      "category": "Networking",
      "image": "guacamole/guacamole:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/guacamole.png",
      "website": "https://guacamole.apache.org",
      "docsUrl": "https://guacamole.apache.org/doc/gug/",
      "ports": [
        {
          "host": 8089,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      GUACD_HOSTNAME: {{serviceName}}-guacd\n      POSTGRESQL_HOSTNAME: {{serviceName}}-db\n      POSTGRESQL_DATABASE: guacamole\n      POSTGRESQL_USER: guacamole\n      POSTGRESQL_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      TZ: {{env.TZ}}\n    depends_on:\n      - {{serviceName}}-guacd\n      - {{serviceName}}-db\n  {{serviceName}}-guacd:\n    image: guacamole/guacd:latest\n    container_name: {{serviceName}}-guacd\n    restart: unless-stopped\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: guacamole\n      POSTGRES_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      POSTGRES_DB: guacamole\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n"
    },
    {
      "slug": "handbrake",
      "name": "HandBrake",
      "description": "Multi-platform video transcoder with a web-based GUI for batch conversions.",
      "category": "Productivity",
      "image": "jlesage/handbrake:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/handbrake.png",
      "website": "https://handbrake.fr",
      "docsUrl": "https://github.com/jlesage/docker-handbrake",
      "ports": [
        {
          "host": 5800,
          "container": 5800,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/handbrake/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/handbrake/watch",
          "container": "/watch"
        },
        {
          "host": "/opt/appdata/handbrake/output",
          "container": "/output"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "AUTOMATED_CONVERSION_PRESET",
          "default": "",
          "description": "Preset used by the file-watcher auto conversion"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "haproxy",
      "name": "HAProxy",
      "description": "High-performance TCP and HTTP load balancer and reverse proxy.",
      "category": "Networking",
      "image": "haproxy:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/haproxy.png",
      "website": "https://www.haproxy.org",
      "docsUrl": "https://www.haproxy.org/documentation.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        },
        {
          "host": 8404,
          "container": 8404,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/haproxy/config",
          "container": "/usr/local/etc/haproxy"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "haproxy-dev",
      "name": "HAProxy Dev",
      "description": "HAProxy load balancer on Alpine for local reverse proxy and routing tests.",
      "category": "Developer Tools",
      "image": "haproxy:alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/haproxy.png",
      "website": "https://www.haproxy.org",
      "docsUrl": "https://hub.docker.com/_/haproxy",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 8404,
          "container": 8404,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/haproxy-dev/config",
          "container": "/usr/local/etc/haproxy"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "alpine"
    },
    {
      "slug": "haproxy-exporter",
      "name": "HAProxy Exporter",
      "description": "Prometheus exporter for HAProxy metrics exposed via the HAProxy stats socket.",
      "category": "Monitoring",
      "image": "prom/haproxy-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/prometheus/haproxy_exporter",
      "docsUrl": "https://github.com/prometheus/haproxy_exporter#docker",
      "ports": [
        {
          "host": 9101,
          "container": 9101,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "harness-delegate",
      "name": "Harness CI Delegate",
      "description": "Lightweight worker that connects a Harness account to your CI/CD infrastructure.",
      "category": "Developer Tools",
      "image": "harness/delegate:latest",
      "logo": "https://icon.horse/icon/www.harness.io",
      "website": "https://www.harness.io",
      "docsUrl": "https://developer.harness.io/docs/platform/delegates/install-delegates/overview",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/harness-delegate/data",
          "container": "/data"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DELEGATE_NAME",
          "default": "docker-delegate",
          "description": "Name for this delegate"
        },
        {
          "key": "ACCOUNT_ID",
          "default": "",
          "description": "Harness account ID",
          "secret": true
        },
        {
          "key": "DELEGATE_TOKEN",
          "default": "",
          "description": "Delegate registration token",
          "secret": true
        },
        {
          "key": "MANAGER_HOST_AND_PORT",
          "default": "https://app.harness.io",
          "description": "Harness manager endpoint"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "haskell-dev",
      "name": "Haskell",
      "description": "Haskell 9.4 toolchain, purely functional language with strong static typing and lazy evaluation.",
      "category": "Developer Tools",
      "image": "haskell:9.4",
      "logo": "https://icon.horse/icon/www.haskell.org",
      "website": "https://www.haskell.org",
      "docsUrl": "https://www.haskell.org/documentation/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/haskell-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "9.4"
    },
    {
      "slug": "hazelcast",
      "name": "Hazelcast",
      "description": "Distributed in-memory data grid and compute platform for low-latency workloads.",
      "category": "Databases",
      "image": "hazelcast/hazelcast:latest",
      "logo": "https://icon.horse/icon/hazelcast.com",
      "website": "https://hazelcast.com",
      "docsUrl": "https://docs.hazelcast.com/",
      "ports": [
        {
          "host": 5701,
          "container": 5701,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/hazelcast/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "HZ_NETWORK_PORT",
          "default": "5701",
          "description": "Port for cluster member communication"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "hbase",
      "name": "Apache HBase",
      "description": "Distributed, scalable NoSQL database on top of Hadoop for large sparse datasets.",
      "category": "Databases",
      "image": "harisekhon/hbase:latest",
      "logo": "https://icon.horse/icon/hbase.apache.org",
      "website": "https://hbase.apache.org",
      "docsUrl": "https://hbase.apache.org/book.html",
      "ports": [
        {
          "host": 16010,
          "container": 16010,
          "protocol": "tcp"
        },
        {
          "host": 16030,
          "container": 16030,
          "protocol": "tcp"
        },
        {
          "host": 2181,
          "container": 2181,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/hbase/data",
          "container": "/hbase/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "headscale",
      "name": "Headscale",
      "description": "Self-hosted coordination server for Tailscale-compatible networks.",
      "category": "Networking",
      "image": "headscale/headscale:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/headscale.png",
      "website": "https://headscale.net",
      "docsUrl": "https://headscale.net",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/headscale/config",
          "container": "/etc/headscale"
        },
        {
          "host": "/opt/appdata/headscale/data",
          "container": "/var/lib/headscale"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "healthchecks",
      "name": "Healthchecks",
      "description": "Cron job monitoring and alerting. Get notified when scheduled jobs fail or run late.",
      "category": "Monitoring",
      "image": "healthchecks/healthchecks:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/healthchecks.png",
      "website": "https://healthchecks.io",
      "docsUrl": "https://github.com/healthchecks/healthchecks",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/healthchecks/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DB",
          "default": "sqlite",
          "description": "Database backend (sqlite/postgres)"
        },
        {
          "key": "SECRET_KEY",
          "default": "",
          "description": "Django secret key",
          "secret": true
        },
        {
          "key": "ALLOWED_HOSTS",
          "default": "*",
          "description": "Allowed hosts (comma-separated)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "heimdall",
      "name": "Heimdall",
      "description": "Application dashboard and launcher for self-hosted services.",
      "category": "Dashboards",
      "image": "lscr.io/linuxserver/heimdall:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/heimdall.png",
      "website": "https://docs.linuxserver.io/images/docker-heimdall/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-heimdall/",
      "ports": [
        {
          "host": 8087,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/heimdall/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "hivemq-ce",
      "name": "HiveMQ Community Edition",
      "description": "Enterprise-grade MQTT broker with native Kafka integration and observability features.",
      "category": "Databases",
      "image": "hivemq/hivemq-ce:latest",
      "logo": "https://icon.horse/icon/www.hivemq.com",
      "website": "https://www.hivemq.com",
      "docsUrl": "https://docs.hivemq.com/hivemq-ce/",
      "ports": [
        {
          "host": 1883,
          "container": 1883,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/hivemq-ce/data",
          "container": "/opt/hivemq/data"
        },
        {
          "host": "/opt/appdata/hivemq-ce/conf",
          "container": "/opt/hivemq/conf"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "homarr",
      "name": "Homarr",
      "description": "Customizable dashboard for your server with service integrations.",
      "category": "Utilities",
      "image": "ghcr.io/ajnart/homarr:latest",
      "logo": "https://homarr.dev/img/logo.png",
      "website": "https://homarr.dev",
      "docsUrl": "https://homarr.dev/docs/getting-started/",
      "ports": [
        {
          "host": 7575,
          "container": 7575,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/homarr/configs",
          "container": "/app/data/configs"
        },
        {
          "host": "/opt/appdata/homarr/icons",
          "container": "/app/public/icons"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "homeassistant",
      "name": "Home Assistant",
      "description": "Open-source home automation platform with thousands of integrations.",
      "category": "Home Automation",
      "image": "ghcr.io/home-assistant/home-assistant:stable",
      "logo": "https://www.home-assistant.io/images/favicon-192x192-full.png",
      "website": "https://www.home-assistant.io",
      "docsUrl": "https://www.home-assistant.io/docs/",
      "ports": [
        {
          "host": 8123,
          "container": 8123,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/homeassistant/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "stable"
    },
    {
      "slug": "homebox",
      "name": "Homebox",
      "description": "Inventory and organization system for household items.",
      "category": "Productivity",
      "image": "ghcr.io/sysadminsmedia/homebox:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/homebox.png",
      "website": "https://homebox.software",
      "docsUrl": "https://homebox.software/en/quick-start/",
      "ports": [
        {
          "host": 3100,
          "container": 7745,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/homebox/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "homebridge",
      "name": "Homebridge",
      "description": "Expose devices to Apple HomeKit through a large plugin ecosystem. Uses host networking for mDNS reliability.",
      "category": "Home Automation",
      "image": "homebridge/homebridge:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/homebridge.png",
      "website": "https://homebridge.io",
      "docsUrl": "https://github.com/homebridge/docker-homebridge/wiki/Homebridge-on-Docker",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/homebridge",
          "container": "/homebridge"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "ENABLE_AVAHI",
          "default": "1",
          "description": "Enable Avahi/mDNS inside the container"
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    network_mode: host\n{{volumes}}\n{{environment}}\n    logging:\n      options:\n        max-size: \"10mb\"\n        max-file: \"1\"\n",
      "version": "latest"
    },
    {
      "slug": "homepage",
      "name": "Homepage",
      "description": "Modern application dashboard for homelab services.",
      "category": "Dashboards",
      "image": "ghcr.io/gethomepage/homepage:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/homepage.png",
      "website": "https://gethomepage.dev",
      "docsUrl": "https://gethomepage.dev",
      "ports": [
        {
          "host": 3004,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/homepage/config",
          "container": "/app/config"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "homey-self-hosted-server",
      "name": "Homey Self-Hosted Server",
      "description": "Run Homey's smart home platform on your own Docker host with local Matter and LAN integrations.",
      "category": "Home Automation",
      "image": "ghcr.io/athombv/homey-shs:latest",
      "logo": "https://etc.athom.com/logo/transparent/1024.png",
      "website": "https://homey.app/en-us/homey-self-hosted-server/",
      "docsUrl": "https://support.homey.app/hc/en-us/articles/24010537261980-How-to-install-Homey-Self-Hosted-Server-with-Docker-on-Linux",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/homey-shs",
          "container": "/homey/user"
        }
      ],
      "envVars": [
        {
          "key": "PORT_SERVER_HTTP",
          "default": "4859",
          "description": "TCP port for the HTTP and Socket.io server"
        },
        {
          "key": "PORT_SERVER_HTTPS",
          "default": "4860",
          "description": "TCP port for the HTTPS and Socket.io server"
        },
        {
          "key": "PORT_SERVER_BRIDGE_V1",
          "default": "4861",
          "description": "TCP port for the Homey Bridge server"
        },
        {
          "key": "PORT_SERVER_BRIDGE_V2",
          "default": "4862",
          "description": "TCP port for the Homey Bridge server"
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    network_mode: host\n    privileged: true\n{{volumes}}\n{{environment}}\n",
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "hoppscotch",
      "name": "Hoppscotch",
      "description": "Open-source API development ecosystem with a friendly web-based interface.",
      "category": "Developer Tools",
      "image": "hoppscotch/hoppscotch:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/hoppscotch.png",
      "website": "https://hoppscotch.io",
      "docsUrl": "https://docs.hoppscotch.io/documentation/getting-started/self-host",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "hoppscotch-backend",
      "name": "Hoppscotch Backend",
      "description": "Open-source API development backend paired with Hoppscotch for self-hosted testing.",
      "category": "Developer Tools",
      "image": "hoppscotch/hoppscotch-backend:latest",
      "logo": "https://icon.horse/icon/hoppscotch.io",
      "website": "https://hoppscotch.io",
      "docsUrl": "https://docs.hoppscotch.io/documentation/self-host/getting-started",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/hoppscotch-backend/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DATASTORE_URL",
          "default": "mongodb://mongo:27017/hoppscotch",
          "description": "MongoDB connection URL"
        },
        {
          "key": "SECRET",
          "default": "changeme",
          "description": "Server secret",
          "secret": true
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "hoverfly",
      "name": "Hoverfly",
      "description": "Lightweight API simulation tool for intercepting and modifying HTTP traffic.",
      "category": "Developer Tools",
      "image": "spectolabs/hoverfly:latest",
      "logo": "https://icon.horse/icon/hoverfly.io",
      "website": "https://hoverfly.io",
      "docsUrl": "https://hoverfly.io/docs/pages/installation/docker/",
      "ports": [
        {
          "host": 8888,
          "container": 8888,
          "protocol": "tcp"
        },
        {
          "host": 8500,
          "container": 8500,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/hoverfly/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "icecast",
      "name": "Icecast",
      "description": "Streaming media server for internet radio stations and audio broadcasts.",
      "category": "Media",
      "image": "moul/icecast:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/icecast.png",
      "website": "https://icecast.org",
      "docsUrl": "https://icecast.org/docs/icecast-2.5.0/",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/icecast/config",
          "container": "/etc/icecast2"
        },
        {
          "host": "/opt/appdata/icecast/logs",
          "container": "/var/log/icecast2"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "immich",
      "name": "Immich",
      "description": "Photo and video backup with mobile apps, search, and sharing.",
      "category": "Photos & Files",
      "image": "ghcr.io/immich-app/immich-server:release",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/immich.png",
      "website": "https://immich.app",
      "docsUrl": "https://immich.app/docs",
      "ports": [
        {
          "host": 2283,
          "container": 2283,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/immich/upload",
          "container": "/usr/src/app/upload"
        },
        {
          "host": "/etc/localtime",
          "container": "/etc/localtime",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DB_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "DB_USERNAME",
          "default": "postgres",
          "description": "PostgreSQL username"
        },
        {
          "key": "DB_DATABASE_NAME",
          "default": "immich",
          "description": "PostgreSQL database"
        },
        {
          "key": "DB_HOSTNAME",
          "default": "immich-postgres",
          "description": "PostgreSQL host"
        },
        {
          "key": "REDIS_HOSTNAME",
          "default": "immich-redis",
          "description": "Redis host"
        }
      ],
      "minMemory": "4GB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      DB_HOSTNAME: {{env.DB_HOSTNAME}}\n      DB_USERNAME: {{env.DB_USERNAME}}\n      DB_PASSWORD: {{env.DB_PASSWORD}}\n      DB_DATABASE_NAME: {{env.DB_DATABASE_NAME}}\n      REDIS_HOSTNAME: {{env.REDIS_HOSTNAME}}\n      TZ: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/upload:/usr/src/app/upload\n      - /etc/localtime:/etc/localtime:ro\n    depends_on:\n      - {{serviceName}}-redis\n      - {{serviceName}}-postgres\n  {{serviceName}}-machine-learning:\n    image: ghcr.io/immich-app/immich-machine-learning:release\n    container_name: {{serviceName}}-machine-learning\n    restart: unless-stopped\n    volumes:\n      - {{appDataPath}}/model-cache:/cache\n  {{serviceName}}-redis:\n    image: redis:7-alpine\n    container_name: {{serviceName}}-redis\n    restart: unless-stopped\n  {{serviceName}}-postgres:\n    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0\n    container_name: {{serviceName}}-postgres\n    restart: unless-stopped\n    environment:\n      POSTGRES_PASSWORD: {{env.DB_PASSWORD}}\n      POSTGRES_USER: {{env.DB_USERNAME}}\n      POSTGRES_DB: {{env.DB_DATABASE_NAME}}\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n"
    },
    {
      "slug": "infisical",
      "name": "Infisical",
      "description": "End-to-end encrypted secrets management for developers and teams.",
      "category": "Security",
      "image": "infisical/infisical:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/infisical.png",
      "website": "https://infisical.com",
      "docsUrl": "https://infisical.com/docs/self-hosting",
      "ports": [
        {
          "host": 80,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/infisical/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "ENCRYPTION_KEY",
          "default": "change-me-32-characters-long",
          "description": "Data encryption key",
          "secret": true
        },
        {
          "key": "JWT_AUTH_SECRET",
          "default": "change-me",
          "description": "JWT signing secret",
          "secret": true
        },
        {
          "key": "JWT_AUTH_LIFETIME",
          "default": "10d",
          "description": "Session JWT lifetime"
        },
        {
          "key": "SITE_URL",
          "default": "https://infisical.example.com",
          "description": "Public site URL"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "influxdb",
      "name": "InfluxDB",
      "description": "Time-series database for Home Assistant history, sensor metrics, energy data, and Grafana dashboards.",
      "category": "Databases",
      "image": "influxdb:2",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/influxdb.png",
      "website": "https://www.influxdata.com",
      "docsUrl": "https://docs.influxdata.com/influxdb/v2/install/use-docker-compose/",
      "ports": [
        {
          "host": 8086,
          "container": 8086,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/influxdb/data",
          "container": "/var/lib/influxdb2"
        },
        {
          "host": "/opt/appdata/influxdb/config",
          "container": "/etc/influxdb2"
        }
      ],
      "envVars": [
        {
          "key": "DOCKER_INFLUXDB_INIT_MODE",
          "default": "setup",
          "description": "Initial setup mode"
        },
        {
          "key": "DOCKER_INFLUXDB_INIT_USERNAME",
          "default": "admin",
          "description": "Initial admin username"
        },
        {
          "key": "DOCKER_INFLUXDB_INIT_PASSWORD",
          "default": "",
          "description": "Initial admin password",
          "secret": true
        },
        {
          "key": "DOCKER_INFLUXDB_INIT_ORG",
          "default": "home",
          "description": "Initial organization name"
        },
        {
          "key": "DOCKER_INFLUXDB_INIT_BUCKET",
          "default": "homeassistant",
          "description": "Initial bucket name"
        },
        {
          "key": "DOCKER_INFLUXDB_INIT_ADMIN_TOKEN",
          "default": "",
          "description": "Initial admin API token",
          "secret": true
        }
      ],
      "version": "2"
    },
    {
      "slug": "invoice-ninja",
      "name": "Invoice Ninja",
      "description": "Invoicing, billing, expense tracking, and time management for freelancers and small teams.",
      "category": "Productivity",
      "image": "invoiceninja/invoiceninja:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/invoice-ninja.png",
      "website": "https://invoiceninja.com",
      "docsUrl": "https://invoiceninja.github.io",
      "ports": [
        {
          "host": 8598,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/invoice-ninja/data",
          "container": "/var/www/app/data"
        },
        {
          "host": "/opt/appdata/invoice-ninja/storage",
          "container": "/var/www/app/storage"
        },
        {
          "host": "/opt/appdata/invoice-ninja/public",
          "container": "/var/www/app/public"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DB_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "DB_DATABASE",
          "default": "ninja",
          "description": "Database name"
        },
        {
          "key": "DB_USERNAME",
          "default": "ninja",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "APP_KEY",
          "default": "",
          "description": "Application encryption key",
          "secret": true
        },
        {
          "key": "APP_URL",
          "default": "http://localhost:8598",
          "description": "Application public URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "iobroker",
      "name": "ioBroker",
      "description": "IoT automation platform with a rich adapter ecosystem and visualization.",
      "category": "Home Automation",
      "image": "buanet/iobroker:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/iobroker.png",
      "website": "https://www.iobroker.net",
      "docsUrl": "https://docs.iobroker.net/en/install/docker.html",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/iobroker/iobroker-data",
          "container": "/opt/iobroker/iobroker-data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "iperf",
      "name": "iperf3",
      "description": "iperf3 network bandwidth measurement tool for testing TCP and UDP performance.",
      "category": "Developer Tools",
      "image": "networkstatic/iperf3:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/esnet/iperf",
      "docsUrl": "https://github.com/esnet/iperf/blob/master/README.md",
      "ports": [
        {
          "host": 5201,
          "container": 5201,
          "protocol": "tcp"
        },
        {
          "host": 5201,
          "container": 5201,
          "protocol": "udp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ipfs-cluster",
      "name": "IPFS Cluster",
      "description": "Coordinator for pinning and replicating content across IPFS daemons.",
      "category": "Networking",
      "image": "ipfs/ipfs-cluster:latest",
      "logo": "https://icon.horse/icon/cluster.ipfs.io",
      "website": "https://cluster.ipfs.io",
      "docsUrl": "https://ipfscluster.io/documentation",
      "ports": [
        {
          "host": 9094,
          "container": 9094,
          "protocol": "tcp"
        },
        {
          "host": 9095,
          "container": 9095,
          "protocol": "tcp"
        },
        {
          "host": 9096,
          "container": 9096,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ipfs-cluster/data",
          "container": "/data/ipfs-cluster"
        }
      ],
      "envVars": [
        {
          "key": "CLUSTER_PEERNAME",
          "default": "cluster0",
          "description": "Peer name"
        },
        {
          "key": "CLUSTER_SECRET",
          "default": "change-me-32-chars",
          "description": "Shared cluster secret",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "it-tools",
      "name": "IT Tools",
      "description": "Collection of handy developer and sysadmin utilities.",
      "category": "Productivity",
      "image": "ghcr.io/corentinth/it-tools:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/it-tools.png",
      "website": "https://it-tools.tech",
      "docsUrl": "https://github.com/CorentinTh/it-tools",
      "ports": [
        {
          "host": 8089,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "jaeger",
      "name": "Jaeger",
      "description": "End-to-end distributed tracing platform for microservices with a modern web UI.",
      "category": "Monitoring",
      "image": "jaegertracing/all-in-one:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/jaeger.png",
      "website": "https://www.jaegertracing.io",
      "docsUrl": "https://www.jaegertracing.io/docs/1.55/getting-started/",
      "ports": [
        {
          "host": 16686,
          "container": 16686,
          "protocol": "tcp"
        },
        {
          "host": 14268,
          "container": 14268,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "COLLECTOR_OTLP_ENABLED",
          "default": "true",
          "description": "Enable OTLP receiver"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "jaeger-agent",
      "name": "Jaeger Agent",
      "description": "Jaeger agent daemon that batches and ships spans from instrumented client libraries.",
      "category": "Monitoring",
      "image": "jaegertracing/jaeger-agent:latest",
      "logo": "https://icon.horse/icon/www.jaegertracing.io",
      "website": "https://www.jaegertracing.io",
      "docsUrl": "https://www.jaegertracing.io/docs/1.55/deployment/",
      "ports": [
        {
          "host": 6831,
          "container": 6831,
          "protocol": "udp"
        },
        {
          "host": 6832,
          "container": 6832,
          "protocol": "udp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "REPORTER_COLLECTOR_HOST_PORT",
          "default": "jaeger-collector:14267",
          "description": "Collector host:port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "jaeger-collector",
      "name": "Jaeger Collector",
      "description": "Standalone Jaeger collector component for receiving and processing trace data.",
      "category": "Monitoring",
      "image": "jaegertracing/jaeger-collector:latest",
      "logo": "https://icon.horse/icon/www.jaegertracing.io",
      "website": "https://www.jaegertracing.io",
      "docsUrl": "https://www.jaegertracing.io/docs/1.55/deployment/",
      "ports": [
        {
          "host": 9411,
          "container": 9411,
          "protocol": "tcp"
        },
        {
          "host": 14250,
          "container": 14250,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "jaeger-query",
      "name": "Jaeger Query",
      "description": "Jaeger query service component for trace search and web UI front-end.",
      "category": "Monitoring",
      "image": "jaegertracing/jaeger-query:latest",
      "logo": "https://icon.horse/icon/www.jaegertracing.io",
      "website": "https://www.jaegertracing.io",
      "docsUrl": "https://www.jaegertracing.io/docs/1.55/deployment/",
      "ports": [
        {
          "host": 16686,
          "container": 16686,
          "protocol": "tcp"
        },
        {
          "host": 16687,
          "container": 16687,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SPAN_STORAGE_TYPE",
          "default": "cassandra",
          "description": "Backend storage type"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "janusgraph",
      "name": "JanusGraph",
      "description": "Distributed graph database optimized for storing and querying massive-scale graphs.",
      "category": "Databases",
      "image": "janusgraph/janusgraph:latest",
      "logo": "https://icon.horse/icon/janusgraph.org",
      "website": "http://janusgraph.org",
      "docsUrl": "https://docs.janusgraph.org",
      "ports": [
        {
          "host": 8182,
          "container": 8182,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/janusgraph/data",
          "container": "/var/lib/janusgraph"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "java-11-dev",
      "name": "Java JDK 11",
      "description": "Eclipse Temurin 11 JDK on Alpine, legacy long-term support Java for maintained enterprise applications.",
      "category": "Developer Tools",
      "image": "eclipse-temurin:11-jdk-alpine",
      "logo": "https://icon.horse/icon/adoptium.net",
      "website": "https://adoptium.net",
      "docsUrl": "https://adoptium.net/docs",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/java-11-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "JAVA_HOME",
          "default": "/opt/java/openjdk",
          "description": "Java installation directory"
        }
      ],
      "version": "11-jdk-alpine"
    },
    {
      "slug": "java-17-dev",
      "name": "Java JDK 17",
      "description": "Eclipse Temurin 17 JDK on Alpine, long-term support Java LTS with sealed classes and records.",
      "category": "Developer Tools",
      "image": "eclipse-temurin:17-jdk-alpine",
      "logo": "https://icon.horse/icon/adoptium.net",
      "website": "https://adoptium.net",
      "docsUrl": "https://adoptium.net/docs",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/java-17-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "JAVA_HOME",
          "default": "/opt/java/openjdk",
          "description": "Java installation directory"
        }
      ],
      "version": "17-jdk-alpine"
    },
    {
      "slug": "java-21-dev",
      "name": "Java JDK 21",
      "description": "Eclipse Temurin 21 JDK on Alpine, latest long-term support Java with virtual threads and pattern matching.",
      "category": "Developer Tools",
      "image": "eclipse-temurin:21-jdk-alpine",
      "logo": "https://icon.horse/icon/adoptium.net",
      "website": "https://adoptium.net",
      "docsUrl": "https://adoptium.net/docs",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/java-21-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "JAVA_HOME",
          "default": "/opt/java/openjdk",
          "description": "Java installation directory"
        }
      ],
      "version": "21-jdk-alpine"
    },
    {
      "slug": "jeedom",
      "name": "Jeedom",
      "description": "French home automation hub with strong Z-Wave, Zigbee, and KNX support.",
      "category": "Home Automation",
      "image": "jeedom/jeedom:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/jeedom.png",
      "website": "https://www.jeedom.com",
      "docsUrl": "https://doc.jeedom.com/en_US/installation/docker",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/jeedom/html",
          "container": "/var/www/html"
        },
        {
          "host": "/opt/appdata/jeedom/db",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Europe/Paris",
          "description": "Timezone"
        },
        {
          "key": "SHARE",
          "default": "",
          "description": "Network share (CIFS) for Jeedom market"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "jellyfin",
      "name": "Jellyfin",
      "description": "Free and open-source media server. Stream movies, TV, music, and more.",
      "category": "Media",
      "image": "jellyfin/jellyfin:latest",
      "logo": "https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG/icon-transparent.svg",
      "website": "https://jellyfin.org",
      "docsUrl": "https://jellyfin.org/docs/",
      "ports": [
        {
          "host": 8096,
          "container": 8096,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/jellyfin/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/jellyfin/cache",
          "container": "/cache"
        },
        {
          "host": "/opt/appdata/jellyfin/media",
          "container": "/media"
        }
      ],
      "envVars": [
        {
          "key": "JELLYFIN_PublishedServerUrl",
          "default": "http://localhost:8096",
          "description": "Public URL for the server"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "jellyseerr",
      "name": "Jellyseerr",
      "description": "Media request management for Jellyfin and Emby users.",
      "category": "Media",
      "image": "fallenbagel/jellyseerr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/jellyseerr.png",
      "website": "https://docs.jellyseerr.dev",
      "docsUrl": "https://docs.jellyseerr.dev",
      "ports": [
        {
          "host": 5055,
          "container": 5055,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/jellyseerr/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "jenkins",
      "name": "Jenkins",
      "description": "Automation server for builds, tests, and deployment pipelines.",
      "category": "Developer Tools",
      "image": "jenkins/jenkins:lts",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/jenkins.png",
      "website": "https://www.jenkins.io",
      "docsUrl": "https://www.jenkins.io/doc/book/installing/docker/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 50000,
          "container": 50000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/jenkins/home",
          "container": "/var/jenkins_home"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "jenkins-dev",
      "name": "Jenkins Dev",
      "description": "Jenkins LTS automation server on Alpine for local CI/CD development.",
      "category": "Developer Tools",
      "image": "jenkins/jenkins:lts",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/jenkins.png",
      "website": "https://www.jenkins.io",
      "docsUrl": "https://www.jenkins.io/doc/book/installing/docker/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 50000,
          "container": 50000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/jenkins-dev/home",
          "container": "/var/jenkins_home"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "lts"
    },
    {
      "slug": "joomla",
      "name": "Joomla",
      "description": "Open-source CMS for websites, portals, directories, and content publishing workflows.",
      "category": "Web Apps",
      "image": "joomla:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/joomla.png",
      "website": "https://www.joomla.org",
      "docsUrl": "https://hub.docker.com/_/joomla",
      "ports": [
        {
          "host": 8090,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "JOOMLA_DATA_PATH",
          "default": "/opt/appdata/joomla/html",
          "description": "Host path for Joomla files"
        },
        {
          "key": "JOOMLA_DB_PATH",
          "default": "/opt/appdata/joomla/db",
          "description": "Host path for MariaDB data"
        },
        {
          "key": "JOOMLA_DB_NAME",
          "default": "joomla",
          "description": "Database name"
        },
        {
          "key": "JOOMLA_DB_USER",
          "default": "joomla",
          "description": "Database user"
        },
        {
          "key": "JOOMLA_DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "JOOMLA_DB_ROOT_PASSWORD",
          "default": "change-root-password",
          "description": "MariaDB root password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    depends_on:\n      - {{serviceName}}-db\n{{ports}}\n    volumes:\n      - {{env.JOOMLA_DATA_PATH}}:/var/www/html\n    environment:\n      JOOMLA_DB_HOST: {{serviceName}}-db:3306\n      JOOMLA_DB_NAME: {{env.JOOMLA_DB_NAME}}\n      JOOMLA_DB_USER: {{env.JOOMLA_DB_USER}}\n      JOOMLA_DB_PASSWORD: {{env.JOOMLA_DB_PASSWORD}}\n  {{serviceName}}-db:\n    image: mariadb:11\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    volumes:\n      - {{env.JOOMLA_DB_PATH}}:/var/lib/mysql\n    environment:\n      MARIADB_DATABASE: {{env.JOOMLA_DB_NAME}}\n      MARIADB_USER: {{env.JOOMLA_DB_USER}}\n      MARIADB_PASSWORD: {{env.JOOMLA_DB_PASSWORD}}\n      MARIADB_ROOT_PASSWORD: {{env.JOOMLA_DB_ROOT_PASSWORD}}\n",
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "joplin-server",
      "name": "Joplin Server",
      "description": "Sync server for Joplin, the cross-platform note-taking and to-do application.",
      "category": "Documents",
      "image": "joplin/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/joplin.png",
      "website": "https://joplinapp.org",
      "docsUrl": "https://github.com/laurent22/joplin/tree/dev/packages/server",
      "ports": [
        {
          "host": 22300,
          "container": 22300,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/joplin-server/data",
          "container": "/home/joplin/packages/server/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "APP_BASE_URL",
          "default": "http://localhost:22300",
          "description": "Public base URL"
        },
        {
          "key": "POSTGRES_HOST",
          "default": "joplin-server-db",
          "description": "Database host"
        },
        {
          "key": "POSTGRES_DATABASE",
          "default": "joplindb",
          "description": "Database name"
        },
        {
          "key": "POSTGRES_USER",
          "default": "joplin",
          "description": "Database user"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "POSTGRES_PORT",
          "default": "5432",
          "description": "Database port"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "jruby-dev",
      "name": "JRuby",
      "description": "JRuby on the JVM, Ruby implementation for fast scripting and Java interoperability.",
      "category": "Developer Tools",
      "image": "jruby:latest",
      "logo": "https://icon.horse/icon/www.jruby.org",
      "website": "https://www.jruby.org",
      "docsUrl": "https://www.jruby.org/documentation",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/jruby-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "juicefs",
      "name": "JuiceFS",
      "description": "Distributed POSIX file system built on top of object storage and Redis or TiKV metadata.",
      "category": "Photos & Files",
      "image": "juicedata/juicefs:latest",
      "logo": "https://icon.horse/icon/juicefs.com",
      "website": "https://juicefs.com",
      "docsUrl": "https://juicefs.com/docs",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/juicefs/config",
          "container": "/root/.juicefs"
        },
        {
          "host": "/opt/appdata/juicefs/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "k6",
      "name": "k6 Load Testing",
      "description": "Modern load testing tool from Grafana with a developer-friendly scripting API.",
      "category": "Developer Tools",
      "image": "grafana/k6:latest",
      "logo": "https://icon.horse/icon/k6.io",
      "website": "https://k6.io",
      "docsUrl": "https://k6.io/docs/getting-started/installation/",
      "ports": [
        {
          "host": 6565,
          "container": 6565,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/k6/scripts",
          "container": "/scripts"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "K6_OUT",
          "default": "",
          "description": "Output sink URL (e.g. influxdb=http://...)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kafka",
      "name": "Apache Kafka",
      "description": "Distributed event streaming platform for high-throughput pipelines, real-time analytics, and replayable data feeds.",
      "category": "Databases",
      "image": "confluentinc/cp-kafka:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/kafka.png",
      "website": "https://kafka.apache.org",
      "docsUrl": "https://docs.confluent.io/platform/current/installation/docker/image-reference.html",
      "ports": [
        {
          "host": 9092,
          "container": 9092,
          "protocol": "tcp"
        },
        {
          "host": 29092,
          "container": 29092,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kafka/data",
          "container": "/var/lib/kafka/data"
        }
      ],
      "envVars": [
        {
          "key": "KAFKA_NODE_ID",
          "default": "1",
          "description": "Unique broker node ID"
        },
        {
          "key": "KAFKA_PROCESS_ROLES",
          "default": "broker,controller",
          "description": "Combined mode roles (KRaft)"
        },
        {
          "key": "KAFKA_LISTENERS",
          "default": "PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093",
          "description": "Internal listener bindings"
        },
        {
          "key": "KAFKA_ADVERTISED_LISTENERS",
          "default": "PLAINTEXT://kafka:9092",
          "description": "Listeners advertised to clients"
        },
        {
          "key": "KAFKA_CONTROLLER_LISTENER_NAMES",
          "default": "CONTROLLER",
          "description": "Controller listener name"
        },
        {
          "key": "KAFKA_LISTENER_SECURITY_PROTOCOL_MAP",
          "default": "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT",
          "description": "Listener to security protocol mapping"
        },
        {
          "key": "KAFKA_INTER_BROKER_LISTENER_NAME",
          "default": "PLAINTEXT",
          "description": "Inter-broker listener"
        },
        {
          "key": "KAFKA_CONTROLLER_QUORUM_VOTERS",
          "default": "1@kafka:9093",
          "description": "Controller quorum voters"
        },
        {
          "key": "KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR",
          "default": "1",
          "description": "Replication factor for offsets topic"
        },
        {
          "key": "CLUSTER_ID",
          "default": "MkU3OEVBNTcwNTJENDM2Qk",
          "description": "Kafka cluster ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kafka-connect",
      "name": "Confluent Kafka Connect",
      "description": "Scalable, fault-tolerant framework for streaming data between Kafka and external systems using connectors.",
      "category": "Databases",
      "image": "confluentinc/cp-kafka-connect:latest",
      "logo": "https://icon.horse/icon/docs.confluent.io",
      "website": "https://docs.confluent.io",
      "docsUrl": "https://docs.confluent.io/platform/current/connect/installation/docker.html",
      "ports": [
        {
          "host": 8083,
          "container": 8083,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kafka-connect/data",
          "container": "/var/lib/kafka-connect"
        },
        {
          "host": "/opt/appdata/kafka-connect/plugins",
          "container": "/usr/share/java/plugins"
        }
      ],
      "envVars": [
        {
          "key": "CONNECT_BOOTSTRAP_SERVERS",
          "default": "kafka:9092",
          "description": "Kafka bootstrap servers"
        },
        {
          "key": "CONNECT_REST_ADVERTISED_HOST_NAME",
          "default": "kafka-connect",
          "description": "Advertised hostname for REST"
        },
        {
          "key": "CONNECT_REST_PORT",
          "default": "8083",
          "description": "REST API port"
        },
        {
          "key": "CONNECT_GROUP_ID",
          "default": "kafka-connect",
          "description": "Connect cluster group ID"
        },
        {
          "key": "CONNECT_CONFIG_STORAGE_TOPIC",
          "default": "_connect-configs",
          "description": "Configuration storage topic"
        },
        {
          "key": "CONNECT_OFFSET_STORAGE_TOPIC",
          "default": "_connect-offsets",
          "description": "Offset storage topic"
        },
        {
          "key": "CONNECT_STATUS_STORAGE_TOPIC",
          "default": "_connect-status",
          "description": "Status storage topic"
        },
        {
          "key": "CONNECT_KEY_CONVERTER",
          "default": "org.apache.kafka.connect.storage.StringConverter",
          "description": "Key converter class"
        },
        {
          "key": "CONNECT_VALUE_CONVERTER",
          "default": "org.apache.kafka.connect.storage.StringConverter",
          "description": "Value converter class"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kafka-exporter",
      "name": "Kafka Exporter",
      "description": "Prometheus exporter for Apache Kafka consumer group, topic and broker metrics.",
      "category": "Monitoring",
      "image": "danielqsj/kafka-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/danielqsj/kafka_exporter",
      "docsUrl": "https://github.com/danielqsj/kafka_exporter#docker",
      "ports": [
        {
          "host": 9308,
          "container": 9308,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "KAFKA_BROKERS",
          "default": "kafka:9092",
          "description": "Comma-separated list of Kafka brokers"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kafka-rest",
      "name": "Confluent Kafka REST Proxy",
      "description": "HTTP gateway to a Kafka cluster allowing produce and consume operations over REST.",
      "category": "Databases",
      "image": "confluentinc/cp-kafka-rest:latest",
      "logo": "https://icon.horse/icon/docs.confluent.io",
      "website": "https://docs.confluent.io",
      "docsUrl": "https://docs.confluent.io/platform/current/kafka-rest/installation/install-rest.html",
      "ports": [
        {
          "host": 8082,
          "container": 8082,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kafka-rest/data",
          "container": "/var/lib/kafka-rest"
        }
      ],
      "envVars": [
        {
          "key": "KAFKA_REST_HOST_NAME",
          "default": "kafka-rest",
          "description": "Hostname advertised to clients"
        },
        {
          "key": "KAFKA_REST_BOOTSTRAP_SERVERS",
          "default": "kafka:9092",
          "description": "Kafka bootstrap servers"
        },
        {
          "key": "KAFKA_REST_LISTENERS",
          "default": "http://0.0.0.0:8082",
          "description": "HTTP listen address"
        },
        {
          "key": "KAFKA_REST_SCHEMA_REGISTRY_URL",
          "default": "http://schema-registry:8081",
          "description": "Schema Registry URL"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kanboard",
      "name": "Kanboard",
      "description": "Kanban-style project management focused on simplicity, visualization, and team efficiency.",
      "category": "Productivity",
      "image": "kanboard/kanboard:latest",
      "logo": "https://kanboard.org/img/kanboard-logo.svg",
      "website": "https://kanboard.org",
      "docsUrl": "https://docs.kanboard.org",
      "ports": [
        {
          "host": 8595,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kanboard/data",
          "container": "/var/www/app/data"
        },
        {
          "host": "/opt/appdata/kanboard/plugins",
          "container": "/var/www/app/plugins"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "karakeep",
      "name": "Karakeep",
      "description": "Self-hosted bookmark, note, and read-it-later archive.",
      "category": "Productivity",
      "image": "ghcr.io/karakeep-app/karakeep:release",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/karakeep.png",
      "website": "https://karakeep.app",
      "docsUrl": "https://docs.karakeep.app",
      "ports": [
        {
          "host": 3002,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/karakeep/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NEXTAUTH_SECRET",
          "default": "change-me",
          "description": "NextAuth secret",
          "secret": true
        },
        {
          "key": "MEILI_MASTER_KEY",
          "default": "change-me",
          "description": "Meilisearch master key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kavita",
      "name": "Kavita",
      "description": "Reading server for manga, comics, and ebooks.",
      "category": "Media",
      "image": "jvmilazz0/kavita:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/kavita.png",
      "website": "https://www.kavitareader.com",
      "docsUrl": "https://wiki.kavitareader.com",
      "ports": [
        {
          "host": 5000,
          "container": 5000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kavita/config",
          "container": "/kavita/config"
        },
        {
          "host": "/srv/books",
          "container": "/books"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kestra",
      "name": "Kestra",
      "description": "Event-driven declarative orchestrator for data pipelines, ETL, and infrastructure automation.",
      "category": "Databases",
      "image": "kestra/kestra:latest",
      "logo": "https://kestra.io/docs/logo.svg",
      "website": "https://kestra.io",
      "docsUrl": "https://kestra.io/docs/installation/docker",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kestra/data",
          "container": "/app/data"
        },
        {
          "host": "/opt/appdata/kestra/storage",
          "container": "/storage"
        }
      ],
      "envVars": [
        {
          "key": "MICRONAUT_DATASOURCES_DEFAULT_URL",
          "default": "jdbc:postgresql://postgres:5432/kestra",
          "description": "JDBC database URL"
        },
        {
          "key": "MICRONAUT_DATASOURCES_DEFAULT_USERNAME",
          "default": "kestra",
          "description": "Database user"
        },
        {
          "key": "MICRONAUT_DATASOURCES_DEFAULT_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "MICRONAUT_DATASOURCES_DEFAULT_DRIVER_CLASS_NAME",
          "default": "org.postgresql.Driver",
          "description": "Database driver class"
        },
        {
          "key": "KESTRA_CONFIGURATION",
          "default": "local",
          "description": "Configuration profile"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "keycloak",
      "name": "Keycloak",
      "description": "Identity and access management with OAuth2, OIDC, and SAML.",
      "category": "Security",
      "image": "quay.io/keycloak/keycloak:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/keycloak.png",
      "website": "https://www.keycloak.org",
      "docsUrl": "https://www.keycloak.org/documentation",
      "ports": [
        {
          "host": 8088,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "KEYCLOAK_ADMIN",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "KEYCLOAK_ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Admin password",
          "secret": true
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    command: start-dev\n    environment:\n      KC_DB: postgres\n      KC_DB_URL_HOST: {{serviceName}}-db\n      KC_DB_URL_DATABASE: keycloak\n      KC_DB_USERNAME: keycloak\n      KC_DB_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      KEYCLOAK_ADMIN: {{env.KEYCLOAK_ADMIN}}\n      KEYCLOAK_ADMIN_PASSWORD: {{env.KEYCLOAK_ADMIN_PASSWORD}}\n      TZ: {{env.TZ}}\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: keycloak\n      POSTGRES_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      POSTGRES_DB: keycloak\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n"
    },
    {
      "slug": "keydb",
      "name": "KeyDB",
      "description": "High-performance fork of Redis with multi-threading and active-active replication.",
      "category": "Databases",
      "image": "eqalpha/keydb:latest",
      "logo": "https://icon.horse/icon/keydb.dev",
      "website": "https://keydb.dev",
      "docsUrl": "https://docs.keydb.dev",
      "ports": [
        {
          "host": 6379,
          "container": 6379,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/keydb/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "KEYDB_PASSWORD",
          "default": "",
          "description": "Server password (leave empty for no auth)",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "knot",
      "name": "Knot Resolver",
      "description": "Modern, fast, and programmable DNS resolver with caching and DNSSEC validation.",
      "category": "Networking",
      "image": "cznic/knot-resolver:latest",
      "logo": "https://www.knot-resolver.cz/assets/img/logo.svg",
      "website": "https://www.knot-resolver.cz",
      "docsUrl": "https://www.knot-resolver.cz/documentation/",
      "ports": [
        {
          "host": 53,
          "container": 53,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/knot/config",
          "container": "/etc/kresd"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "koboldcpp",
      "name": "KoboldCpp",
      "description": "Self-contained, easy-to-use inference server for GGUF models with a built-in web UI.",
      "category": "AI & Voice",
      "image": "koboldai/koboldcpp:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/koboldcpp.png",
      "website": "https://github.com/LostRuins/koboldcpp",
      "docsUrl": "https://github.com/LostRuins/koboldcpp/blob/concedo/README.md",
      "ports": [
        {
          "host": 5001,
          "container": 5001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/koboldcpp/models",
          "container": "/models"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MODEL",
          "default": "",
          "description": "Filename of the GGUF model to load (in /models)"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "kolide-fleet",
      "name": "Kolide Fleet",
      "description": "Osquery manager providing a web UI for live and scheduled endpoint queries.",
      "category": "Security",
      "image": "kolide/fleet:latest",
      "logo": "https://icon.horse/icon/www.kolide.com",
      "website": "https://www.kolide.com",
      "docsUrl": "https://www.kolide.com/docs",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kolide-fleet/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "FLEET_SERVER_ADDRESS",
          "default": "https://kolide.example.com",
          "description": "Public Fleet server address"
        },
        {
          "key": "MYSQL_ADDRESS",
          "default": "kolide-mysql:3306",
          "description": "MySQL host:port"
        },
        {
          "key": "MYSQL_PASSWORD",
          "default": "change-me",
          "description": "MySQL password",
          "secret": true
        },
        {
          "key": "REDIS_ADDRESS",
          "default": "kolide-redis:6379",
          "description": "Redis address"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "komga",
      "name": "Komga",
      "description": "Media server for comics, manga, magazines, and books.",
      "category": "Media",
      "image": "gotson/komga:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/komga.png",
      "website": "https://komga.org",
      "docsUrl": "https://komga.org/docs",
      "ports": [
        {
          "host": 25600,
          "container": 25600,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/komga/config",
          "container": "/config"
        },
        {
          "host": "/srv/books",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kong",
      "name": "Kong Gateway",
      "description": "Cloud-native API gateway with a powerful plugin ecosystem for microservices.",
      "category": "Networking",
      "image": "kong:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/kong.png",
      "website": "https://konghq.com",
      "docsUrl": "https://docs.konghq.com/gateway/latest/",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        },
        {
          "host": 8001,
          "container": 8001,
          "protocol": "tcp"
        },
        {
          "host": 8002,
          "container": 8002,
          "protocol": "tcp"
        },
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kong/config",
          "container": "/etc/kong"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "KONG_DATABASE",
          "default": "off",
          "description": "Database backend (off uses DB-less mode)"
        },
        {
          "key": "KONG_ADMIN_LISTEN",
          "default": "0.0.0.0:8001",
          "description": "Admin API listen address"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kong-dev",
      "name": "Kong Dev",
      "description": "Kong API Gateway in DB-less mode for local API management development.",
      "category": "Developer Tools",
      "image": "kong:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/kong.png",
      "website": "https://konghq.com",
      "docsUrl": "https://docs.konghq.com/gateway/latest/install/docker/",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        },
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        },
        {
          "host": 8001,
          "container": 8001,
          "protocol": "tcp"
        },
        {
          "host": 8444,
          "container": 8444,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kong-dev/data",
          "container": "/var/lib/kong"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "KONG_DATABASE",
          "default": "off",
          "description": "DB-less mode"
        },
        {
          "key": "KONG_DECLARATIVE_CONFIG",
          "default": "/etc/kong/kong.yml",
          "description": "Declarative config file"
        },
        {
          "key": "KONG_ADMIN_LISTEN",
          "default": "0.0.0.0:8001",
          "description": "Admin API listen address"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "kopia",
      "name": "Kopia",
      "description": "Fast encrypted backup tool with a web UI.",
      "category": "Backups",
      "image": "kopia/kopia:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/kopia.png",
      "website": "https://kopia.io",
      "docsUrl": "https://kopia.io/docs",
      "ports": [
        {
          "host": 51515,
          "container": 51515,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kopia/config",
          "container": "/app/config"
        },
        {
          "host": "/opt/appdata/kopia/cache",
          "container": "/app/cache"
        },
        {
          "host": "/srv",
          "container": "/data",
          "readOnly": true
        },
        {
          "host": "/srv/backups/kopia",
          "container": "/repository"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    volumes:\n      - {{appDataPath}}/config:/app/config\n      - {{appDataPath}}/cache:/app/cache\n      - /srv:/data:ro\n      - /srv/backups/kopia:/repository\n    command: server start --insecure --address=0.0.0.0:51515 --server-username=admin --server-password=change-me\n"
    },
    {
      "slug": "kotlin-dev",
      "name": "Kotlin",
      "description": "Zenika Kotlin on Alpine, concise JVM-targeted language with null safety and modern features.",
      "category": "Developer Tools",
      "image": "zenika/alpine-kotlin:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/kotlin.png",
      "website": "https://kotlinlang.org",
      "docsUrl": "https://kotlinlang.org/docs/home.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kotlin-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "JAVA_HOME",
          "default": "/usr/lib/jvm/default-jvm",
          "description": "Java installation directory"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kowl-kafka-ui",
      "name": "Kowl",
      "description": "Modern web UI for Apache Kafka with topic browsing, message inspection, and consumer-group monitoring.",
      "category": "Databases",
      "image": "quay.io/cloudhut/kowl:latest",
      "logo": "https://github.com/cloudhut/kowl/raw/master/frontend/src/svg/kowl-logo.svg",
      "website": "https://github.com/cloudhut/kowl",
      "docsUrl": "https://github.com/cloudhut/kowl/blob/master/docs/config/config-file.md",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kowl-kafka-ui/config",
          "container": "/etc/kowl"
        }
      ],
      "envVars": [
        {
          "key": "KAFKA_BROKERS",
          "default": "kafka:9092",
          "description": "Comma-separated Kafka bootstrap servers"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "krakend",
      "name": "KrakenD",
      "description": "High-performance API gateway that aggregates data from multiple sources in a single call.",
      "category": "Networking",
      "image": "devopsfaith/krakend:latest",
      "logo": "https://www.krakend.io/images/logo_krakend.svg",
      "website": "https://www.krakend.io",
      "docsUrl": "https://www.krakend.io/docs/",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        },
        {
          "host": 8090,
          "container": 8090,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/krakend/config",
          "container": "/etc/krakend"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "kroki",
      "name": "Kroki",
      "description": "Unified API for diagrams. Generate BlockDiag, BPMN, C4, D2, Excalidraw, GraphViz, Mermaid, PlantUML, and many more diagrams from text.",
      "category": "Productivity",
      "image": "yuzutech/kroki:latest",
      "logo": "https://icon.horse/icon/kroki.io",
      "website": "https://kroki.io",
      "docsUrl": "https://docs.kroki.io",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/kroki/data",
          "container": "/tmp/kroki"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "KROKI_MAX_URI_LENGTH",
          "default": "8192",
          "description": "Maximum URI length for incoming requests"
        },
        {
          "key": "KROKI_MAX_FILE_SIZE",
          "default": "1048576",
          "description": "Maximum source file size in bytes"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "langflow",
      "name": "Langflow",
      "description": "Visual builder for LangChain pipelines. Prototype LLM apps by dragging components together.",
      "category": "AI & Voice",
      "image": "langflowai/langflow:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/langflow.png",
      "website": "https://www.langflow.org",
      "docsUrl": "https://docs.langflow.org",
      "ports": [
        {
          "host": 7860,
          "container": 7860,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/langflow/data",
          "container": "/app/langflow"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LANGFLOW_AUTO_LOGIN",
          "default": "false",
          "description": "Auto-login with default credentials (true/false)"
        },
        {
          "key": "LANGFLOW_SECRET_KEY",
          "default": "",
          "description": "Encryption secret key",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "laravel-dev",
      "name": "Laravel",
      "description": "Bitnami Laravel image, expressive PHP framework with elegant syntax and rich ecosystem.",
      "category": "Developer Tools",
      "image": "bitnami/laravel:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/laravel.png",
      "website": "https://laravel.com",
      "docsUrl": "https://laravel.com/docs",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/laravel-dev/app",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "APP_ENV",
          "default": "local",
          "description": "Application environment"
        },
        {
          "key": "APP_KEY",
          "default": "",
          "description": "Laravel application key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "lazylibrarian",
      "name": "LazyLibrarian",
      "description": "Self-hosted ebook and audiobook library manager that automates searching, downloading, and metadata.",
      "category": "Productivity",
      "image": "linuxserver/lazylibrarian:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/lazylibrarian.png",
      "website": "https://lazylibrarian.gitlab.io",
      "docsUrl": "https://hub.docker.com/r/linuxserver/lazylibrarian",
      "ports": [
        {
          "host": 5299,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/lazylibrarian/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/lazylibrarian/downloads",
          "container": "/downloads"
        },
        {
          "host": "/opt/appdata/lazylibrarian/books",
          "container": "/books"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID for file permissions"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID for file permissions"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "leantime",
      "name": "Leantime",
      "description": "Project management system designed for ADHD and non-project managers with ease of use.",
      "category": "Productivity",
      "image": "leantime/leantime:latest",
      "logo": "https://leantime.io/favicon.ico",
      "website": "https://leantime.io",
      "docsUrl": "https://leantime.io/docs",
      "ports": [
        {
          "host": 8596,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/leantime/data",
          "container": "/var/www/html/data"
        },
        {
          "host": "/opt/appdata/leantime/config",
          "container": "/var/www/html/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LEAN_DB_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "LEAN_DB_NAME",
          "default": "leantime",
          "description": "Database name"
        },
        {
          "key": "LEAN_DB_USER",
          "default": "leantime",
          "description": "Database user"
        },
        {
          "key": "LEAN_DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "letsencrypt-companion",
      "name": "Let's Encrypt Companion",
      "description": "Automated SSL certificate creation and renewal for Nginx reverse proxy containers.",
      "category": "Networking",
      "image": "nginxproxy/acme-companion:latest",
      "logo": "https://letsencrypt.org/images/letsencrypt-logo-horizontal.svg",
      "website": "https://letsencrypt.org",
      "docsUrl": "https://github.com/nginx-proxy/acme-companion#readme",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/letsencrypt/certs",
          "container": "/etc/nginx/certs"
        },
        {
          "host": "/opt/appdata/letsencrypt/acme",
          "container": "/etc/acme.sh"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "DEFAULT_EMAIL",
          "default": "",
          "description": "Default email for certificate registration"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "librechat",
      "name": "LibreChat",
      "description": "Multi-model AI chat platform with support for OpenAI, Anthropic, Bedrock, Ollama, and more.",
      "category": "AI & Voice",
      "image": "ghcr.io/danny-avila/librechat-dev:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/librechat.png",
      "website": "https://www.librechat.ai",
      "docsUrl": "https://www.librechat.ai/docs",
      "ports": [
        {
          "host": 3080,
          "container": 3080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/librechat/data",
          "container": "/app/data"
        },
        {
          "host": "/opt/appdata/librechat/uploads",
          "container": "/app/uploads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "HOST",
          "default": "0.0.0.0",
          "description": "Bind address"
        },
        {
          "key": "PORT",
          "default": "3080",
          "description": "Internal application port"
        },
        {
          "key": "MONGO_URI",
          "default": "mongodb://mongo:27017/LibreChat",
          "description": "MongoDB connection string"
        },
        {
          "key": "CREDS_KEY",
          "default": "",
          "description": "Encryption key for credentials (32-byte hex)",
          "secret": true
        },
        {
          "key": "CREDS_IV",
          "default": "",
          "description": "Encryption IV for credentials (16-byte hex)",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "libreoffice-online",
      "name": "LibreOffice Online",
      "description": "LibreOffice Online for viewing and editing office documents in the browser.",
      "category": "Documents",
      "image": "libreoffice/online:latest",
      "logo": "https://icon.horse/icon/www.libreoffice.org",
      "website": "https://www.libreoffice.org",
      "docsUrl": "https://github.com/LibreOffice/online",
      "ports": [
        {
          "host": 9981,
          "container": 9980,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DONT_GEN_SSL_CERT",
          "default": "1",
          "description": "Disable self-signed SSL generation"
        },
        {
          "key": "extra_params",
          "default": "--o:ssl.enable=false --o:ssl.termination=true",
          "description": "Extra startup parameters"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "librephotos",
      "name": "LibrePhotos",
      "description": "Self-hosted photo management service with object and face recognition.",
      "category": "Photos & Files",
      "image": "reallibrephotos/librephotos:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/librephotos.png",
      "website": "https://docs.librephotos.com",
      "docsUrl": "https://docs.librephotos.com",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/librephotos/data",
          "container": "/data"
        },
        {
          "host": "/srv/photos",
          "container": "/data/protected_media"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "lidarr",
      "name": "Lidarr",
      "description": "Music collection manager for Usenet and BitTorrent users.",
      "category": "Media",
      "image": "lscr.io/linuxserver/lidarr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/lidarr.png",
      "website": "https://docs.linuxserver.io/images/docker-lidarr/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-lidarr/",
      "ports": [
        {
          "host": 8686,
          "container": 8686,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/lidarr/config",
          "container": "/config"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "linkding",
      "name": "linkding",
      "description": "Minimal bookmark manager designed to be simple, fast, and easy to self-host.",
      "category": "Documents",
      "image": "sissbruecker/linkding:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/linkding.png",
      "website": "https://linkding.link",
      "docsUrl": "https://github.com/sissbruecker/linkding",
      "ports": [
        {
          "host": 9090,
          "container": 9090,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/linkding/data",
          "container": "/etc/linkding/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LD_DB_HOST",
          "default": "linkding-db",
          "description": "Database host"
        },
        {
          "key": "LD_DB_PORT",
          "default": "3306",
          "description": "Database port"
        },
        {
          "key": "LD_DB_DATABASE",
          "default": "linkding",
          "description": "Database name"
        },
        {
          "key": "LD_DB_USER",
          "default": "linkding",
          "description": "Database user"
        },
        {
          "key": "LD_DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "LD_SECRET_KEY",
          "default": "change-me",
          "description": "Django secret key",
          "secret": true
        }
      ],
      "minMemory": "512MB",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    depends_on:\n      - {{serviceName}}-db\n    environment:\n      TZ: {{env.TZ}}\n      LD_DB_HOST: {{serviceName}}-db\n      LD_DB_PORT: {{env.LD_DB_PORT}}\n      LD_DB_DATABASE: {{env.LD_DB_DATABASE}}\n      LD_DB_USER: {{env.LD_DB_USER}}\n      LD_DB_PASSWORD: {{env.LD_DB_PASSWORD}}\n      LD_SECRET_KEY: {{env.LD_SECRET_KEY}}\n    volumes:\n      - {{appDataPath}}/data:/etc/linkding/data\n  {{serviceName}}-db:\n    image: mariadb:11\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    environment:\n      MARIADB_DATABASE: {{env.LD_DB_DATABASE}}\n      MARIADB_USER: {{env.LD_DB_USER}}\n      MARIADB_PASSWORD: {{env.LD_DB_PASSWORD}}\n      MARIADB_RANDOM_ROOT_PASSWORD: \"yes\"\n    volumes:\n      - {{appDataPath}}/mysql:/var/lib/mysql\n",
      "version": "latest"
    },
    {
      "slug": "linkwarden",
      "name": "Linkwarden",
      "description": "Collaborative bookmark manager and web archive.",
      "category": "Productivity",
      "image": "ghcr.io/linkwarden/linkwarden:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/linkwarden.png",
      "website": "https://linkwarden.app",
      "docsUrl": "https://docs.linkwarden.app",
      "ports": [
        {
          "host": 3003,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/linkwarden/data",
          "container": "/data/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "NEXTAUTH_SECRET",
          "default": "change-me",
          "description": "NextAuth secret",
          "secret": true
        },
        {
          "key": "NEXTAUTH_URL",
          "default": "http://localhost:3003",
          "description": "External URL"
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      DATABASE_URL: \"postgresql://linkwarden:{{envRaw.POSTGRES_PASSWORD}}@{{serviceName}}-db:5432/linkwarden\"\n      NEXTAUTH_SECRET: {{env.NEXTAUTH_SECRET}}\n      NEXTAUTH_URL: {{env.NEXTAUTH_URL}}\n      TZ: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/data:/data/data\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: linkwarden\n      POSTGRES_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      POSTGRES_DB: linkwarden\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n"
    },
    {
      "slug": "linkwarden-pro",
      "name": "Linkwarden Pro",
      "description": "Bookmark and web archive manager with link previews, snapshots, and collections.",
      "category": "Documents",
      "image": "ghcr.io/linkwarden/linkwarden:latest",
      "logo": "https://icon.horse/icon/linkwarden.app",
      "website": "https://linkwarden.app",
      "docsUrl": "https://docs.linkwarden.app",
      "ports": [
        {
          "host": 3004,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/linkwarden-pro/data",
          "container": "/data/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "NEXTAUTH_SECRET",
          "default": "change-me",
          "description": "NextAuth secret",
          "secret": true
        },
        {
          "key": "NEXTAUTH_URL",
          "default": "http://localhost:3004",
          "description": "External URL"
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      DATABASE_URL: \"postgresql://linkwarden:{{envRaw.POSTGRES_PASSWORD}}@{{serviceName}}-db:5432/linkwarden\"\n      NEXTAUTH_SECRET: {{env.NEXTAUTH_SECRET}}\n      NEXTAUTH_URL: {{env.NEXTAUTH_URL}}\n      TZ: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/data:/data/data\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: linkwarden\n      POSTGRES_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      POSTGRES_DB: linkwarden\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n"
    },
    {
      "slug": "listmonk",
      "name": "listmonk",
      "description": "High-performance self-hosted newsletter and mailing list manager with a modern dashboard.",
      "category": "Communications",
      "image": "listmonk/listmonk:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/listmonk.png",
      "website": "https://listmonk.app",
      "docsUrl": "https://listmonk.app/docs/installation",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/listmonk/config",
          "container": "/etc/listmonk"
        },
        {
          "host": "/opt/appdata/listmonk/data",
          "container": "/var/lib/listmonk/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LISTMONK_DB__HOST",
          "default": "listmonk-db",
          "description": "PostgreSQL host"
        },
        {
          "key": "LISTMONK_DB__PORT",
          "default": "5432",
          "description": "PostgreSQL port"
        },
        {
          "key": "LISTMONK_DB__USER",
          "default": "listmonk",
          "description": "PostgreSQL user"
        },
        {
          "key": "LISTMONK_DB__PASSWORD",
          "default": "",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "LISTMONK_DB__DATABASE",
          "default": "listmonk",
          "description": "PostgreSQL database"
        },
        {
          "key": "LISTMONK_ADMIN_USER",
          "default": "",
          "description": "Initial admin username"
        },
        {
          "key": "LISTMONK_ADMIN_PASSWORD",
          "default": "",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "minMemory": "1GB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      TZ: {{env.TZ}}\n      LISTMONK_DB__HOST: {{serviceName}}-db\n      LISTMONK_DB__PORT: {{env.LISTMONK_DB__PORT}}\n      LISTMONK_DB__USER: {{env.LISTMONK_DB__USER}}\n      LISTMONK_DB__PASSWORD: {{env.LISTMONK_DB__PASSWORD}}\n      LISTMONK_DB__DATABASE: {{env.LISTMONK_DB__DATABASE}}\n      LISTMONK_ADMIN_USER: {{env.LISTMONK_ADMIN_USER}}\n      LISTMONK_ADMIN_PASSWORD: {{env.LISTMONK_ADMIN_PASSWORD}}\n    volumes:\n      - {{appDataPath}}/config:/etc/listmonk\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: {{env.LISTMONK_DB__USER}}\n      POSTGRES_PASSWORD: {{env.LISTMONK_DB__PASSWORD}}\n      POSTGRES_DB: {{env.LISTMONK_DB__DATABASE}}\n    volumes:\n      - {{appDataPath}}/db:/var/lib/postgresql/data\n"
    },
    {
      "slug": "livekit",
      "name": "LiveKit Server",
      "description": "Scalable, low-latency WebRTC SFU for video and audio conferencing.",
      "category": "Communications",
      "image": "livekit/livekit-server:latest",
      "logo": "https://icon.horse/icon/livekit.io",
      "website": "https://livekit.io",
      "docsUrl": "https://docs.livekit.io/home",
      "ports": [
        {
          "host": 7880,
          "container": 7880,
          "protocol": "tcp"
        },
        {
          "host": 7881,
          "container": 7881,
          "protocol": "tcp"
        },
        {
          "host": 7882,
          "container": 7882,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/livekit/config",
          "container": "/etc/livekit"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LIVEKIT_KEYS",
          "default": "devkey: secret",
          "description": "API key:secret pair for LiveKit",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "lldap",
      "name": "LLDAP",
      "description": "Lightweight LDAP server for homelab authentication.",
      "category": "Security",
      "image": "lldap/lldap:stable",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/lldap.png",
      "website": "https://github.com/lldap/lldap",
      "docsUrl": "https://github.com/lldap/lldap",
      "ports": [
        {
          "host": 17170,
          "container": 17170,
          "protocol": "tcp"
        },
        {
          "host": 3890,
          "container": 3890,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/lldap/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LLDAP_JWT_SECRET",
          "default": "change-me",
          "description": "JWT secret",
          "secret": true
        },
        {
          "key": "LLDAP_KEY_SEED",
          "default": "change-me",
          "description": "Private key seed",
          "secret": true
        },
        {
          "key": "LLDAP_LDAP_USER_PASS",
          "default": "change-me",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "lobe-chat",
      "name": "Lobe Chat",
      "description": "Open-source, modern design AI chat framework with multi-model support, plugins, and knowledge base.",
      "category": "AI & Voice",
      "image": "lobehub/lobe-chat:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/lobe-chat.png",
      "website": "https://lobehub.com",
      "docsUrl": "https://lobehub.com/docs/self-hosting",
      "ports": [
        {
          "host": 3210,
          "container": 3210,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/lobe-chat/data",
          "container": "/app/.next"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "OPENAI_API_KEY",
          "default": "",
          "description": "OpenAI API key for default provider",
          "secret": true
        },
        {
          "key": "ACCESS_CODE",
          "default": "",
          "description": "Access code to gate the UI (empty disables)",
          "secret": true
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "localai",
      "name": "LocalAI",
      "description": "OpenAI-compatible API for running LLMs, embeddings, and image generation locally on CPU or GPU.",
      "category": "AI & Voice",
      "image": "localai/localai:latest",
      "logo": "https://icon.horse/icon/localai.io",
      "website": "https://localai.io",
      "docsUrl": "https://localai.io/docs/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/localai/models",
          "container": "/models"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CONTEXT_SIZE",
          "default": "512",
          "description": "Default model context size"
        },
        {
          "key": "MODELS_PATH",
          "default": "/models",
          "description": "Path to model gallery cache"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "locust",
      "name": "Locust",
      "description": "Python-based distributed load testing with a real-time web UI.",
      "category": "Developer Tools",
      "image": "locustio/locust:latest",
      "logo": "https://icon.horse/icon/locust.io",
      "website": "https://locust.io",
      "docsUrl": "https://docs.locust.io/en/stable/running-in-docker.html",
      "ports": [
        {
          "host": 8089,
          "container": 8089,
          "protocol": "tcp"
        },
        {
          "host": 5557,
          "container": 5557,
          "protocol": "tcp"
        },
        {
          "host": 5558,
          "container": 5558,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/locust/scripts",
          "container": "/home/locust"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LOCUST_FILE",
          "default": "locustfile.py",
          "description": "Locust test file"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "logagent",
      "name": "Sematext Logagent",
      "description": "Lightweight log shipper with built-in parsers for common log formats and log enrichment.",
      "category": "Monitoring",
      "image": "sematext/logagent:latest",
      "logo": "https://icon.horse/icon/sematext.com",
      "website": "https://sematext.com",
      "docsUrl": "https://github.com/sematext/logagent-js",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/logagent/config",
          "container": "/opt/logagent"
        },
        {
          "host": "/var/log",
          "container": "/var/log"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "LOGAGENT_TOKEN",
          "default": "",
          "description": "Sematext Logs token",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "logto",
      "name": "Logto",
      "description": "Auth0 alternative for building sign-in, MFA, and B2B identity flows.",
      "category": "Security",
      "image": "ghcr.io/logto-io/logto:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/logto.png",
      "website": "https://logto.io",
      "docsUrl": "https://docs.logto.io",
      "ports": [
        {
          "host": 3001,
          "container": 3001,
          "protocol": "tcp"
        },
        {
          "host": 3002,
          "container": 3002,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/logto/data",
          "container": "/etc/logto"
        }
      ],
      "envVars": [
        {
          "key": "ENDPOINT",
          "default": "https://logto.example.com",
          "description": "Public endpoint URL"
        },
        {
          "key": "DB_URL",
          "default": "postgresql://logto:change-me@logto-postgres:5432/logto",
          "description": "PostgreSQL connection URL",
          "secret": true
        },
        {
          "key": "ADMIN_ENDPOINT",
          "default": "https://admin.logto.example.com",
          "description": "Management console URL"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "loki",
      "name": "Loki",
      "description": "Log aggregation backend from Grafana Labs.",
      "category": "Monitoring",
      "image": "grafana/loki:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/loki.png",
      "website": "https://grafana.com/oss/loki",
      "docsUrl": "https://grafana.com/docs/loki/latest/",
      "ports": [
        {
          "host": 3100,
          "container": 3100,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/loki/data",
          "container": "/loki"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "loki-dev",
      "name": "Loki Dev",
      "description": "Grafana Loki log aggregation system for local log shipping and querying.",
      "category": "Developer Tools",
      "image": "grafana/loki:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/loki.png",
      "website": "https://grafana.com/oss/loki",
      "docsUrl": "https://grafana.com/docs/loki/latest/installation/docker/",
      "ports": [
        {
          "host": 3100,
          "container": 3100,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/loki-dev/config",
          "container": "/etc/loki"
        },
        {
          "host": "/opt/appdata/loki-dev/data",
          "container": "/loki"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "lychee",
      "name": "Lychee",
      "description": "Self-hosted photo-management system with a clean responsive interface.",
      "category": "Photos & Files",
      "image": "lycheeorg/lychee:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/lychee.png",
      "website": "https://lycheeorg.github.io",
      "docsUrl": "https://lycheeorg.github.io/docs/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/lychee/config",
          "container": "/conf"
        },
        {
          "host": "/opt/appdata/lychee/uploads",
          "container": "/uploads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mage-ai",
      "name": "Mage",
      "description": "Modern data pipeline tool for transforming and integrating data with notebooks, scripts, and triggers.",
      "category": "Databases",
      "image": "mageai/mageai:latest",
      "logo": "https://www.mage.ai/favicon.svg",
      "website": "https://www.mage.ai",
      "docsUrl": "https://docs.mage.ai/getting-started/setup",
      "ports": [
        {
          "host": 6789,
          "container": 6789,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mage-ai/mage_data",
          "container": "/home/src/mage_data"
        }
      ],
      "envVars": [
        {
          "key": "MAGE_REQUIRE_USER_AUTHENTICATION",
          "default": "0",
          "description": "Require user authentication (1 = yes)"
        },
        {
          "key": "MAGE_DATABASE_CONNECTION_URL",
          "default": "postgresql://postgres:postgres@postgres:5432/mage",
          "description": "Metadata database connection"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mailhog",
      "name": "MailHog",
      "description": "Web and API based SMTP testing tool for developers; catches outgoing mail locally.",
      "category": "Communications",
      "image": "mailhog/mailhog:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mailhog.png",
      "website": "https://github.com/mailhog/MailHog",
      "docsUrl": "https://github.com/mailhog/MailHog",
      "ports": [
        {
          "host": 1025,
          "container": 1025,
          "protocol": "tcp"
        },
        {
          "host": 8025,
          "container": 8025,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mailhog/data",
          "container": "/tmp/mailhog"
        }
      ],
      "envVars": [
        {
          "key": "MH_STORAGE",
          "default": "maildir",
          "description": "Storage backend"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mailtrain",
      "name": "Mailtrain",
      "description": "Self-hosted newsletter application with rich templates, segmentation, and built-in Zone-MTA delivery.",
      "category": "Communications",
      "image": "mailtrain/mailtrain:latest",
      "logo": "https://icon.horse/icon/mailtrain.org",
      "website": "https://mailtrain.org",
      "docsUrl": "https://github.com/Mailtrain-org/mailtrain",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        },
        {
          "host": 3003,
          "container": 3003,
          "protocol": "tcp"
        },
        {
          "host": 3004,
          "container": 3004,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mailtrain",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PORT_TRUSTED",
          "default": "3000",
          "description": "Trusted UI port"
        },
        {
          "key": "PORT_SANDBOX",
          "default": "3003",
          "description": "Sandbox editor port"
        },
        {
          "key": "PORT_PUBLIC",
          "default": "3004",
          "description": "Public subscribers port"
        },
        {
          "key": "URL_BASE_TRUSTED",
          "default": "http://localhost:3000",
          "description": "Trusted public URL"
        },
        {
          "key": "URL_BASE_SANDBOX",
          "default": "http://localhost:3003",
          "description": "Sandbox public URL"
        },
        {
          "key": "URL_BASE_PUBLIC",
          "default": "http://localhost:3004",
          "description": "Public subscribers URL"
        },
        {
          "key": "MYSQL_PASSWORD",
          "default": "",
          "description": "MariaDB password",
          "secret": true
        },
        {
          "key": "WWW_SECRET",
          "default": "",
          "description": "Session secret",
          "secret": true
        }
      ],
      "minMemory": "4GB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      TZ: {{env.TZ}}\n      PORT_TRUSTED: {{env.PORT_TRUSTED}}\n      PORT_SANDBOX: {{env.PORT_SANDBOX}}\n      PORT_PUBLIC: {{env.PORT_PUBLIC}}\n      URL_BASE_TRUSTED: {{env.URL_BASE_TRUSTED}}\n      URL_BASE_SANDBOX: {{env.URL_BASE_SANDBOX}}\n      URL_BASE_PUBLIC: {{env.URL_BASE_PUBLIC}}\n      MYSQL_HOST: {{serviceName}}-db\n      MYSQL_USER: mailtrain\n      MYSQL_PASSWORD: {{env.MYSQL_PASSWORD}}\n      MYSQL_DATABASE: mailtrain\n      MONGO_HOST: {{serviceName}}-mongo\n      REDIS_HOST: {{serviceName}}-redis\n      WWW_SECRET: {{env.WWW_SECRET}}\n    volumes:\n      - {{appDataPath}}:/app/data\n    depends_on:\n      - {{serviceName}}-db\n      - {{serviceName}}-mongo\n      - {{serviceName}}-redis\n  {{serviceName}}-db:\n    image: mariadb:10\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      MYSQL_ROOT_PASSWORD: {{env.MYSQL_PASSWORD}}\n      MYSQL_USER: mailtrain\n      MYSQL_PASSWORD: {{env.MYSQL_PASSWORD}}\n      MYSQL_DATABASE: mailtrain\n    volumes:\n      - {{appDataPath}}/mysql:/var/lib/mysql\n  {{serviceName}}-mongo:\n    image: mongo:6\n    container_name: {{serviceName}}-mongo\n    restart: unless-stopped\n    volumes:\n      - {{appDataPath}}/mongo:/data/db\n  {{serviceName}}-redis:\n    image: redis:7-alpine\n    container_name: {{serviceName}}-redis\n    restart: unless-stopped\n"
    },
    {
      "slug": "makemkv",
      "name": "MakeMKV",
      "description": "DVD and Blu-ray disc ripping tool with a web-based GUI for scheduled rips.",
      "category": "Productivity",
      "image": "jlesage/makemkv:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/makemkv.png",
      "website": "https://www.makemkv.com",
      "docsUrl": "https://github.com/jlesage/docker-makemkv",
      "ports": [
        {
          "host": 5801,
          "container": 5800,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/makemkv/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/makemkv/storage",
          "container": "/storage"
        },
        {
          "host": "/opt/appdata/makemkv/output",
          "container": "/output"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "MAKEMKV_KEY",
          "default": "",
          "description": "MakeMKV beta key (leave blank to register on first run)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mariadb",
      "name": "MariaDB",
      "description": "Community-developed fork of MySQL. Fast, scalable, and robust.",
      "category": "Databases",
      "image": "mariadb:11",
      "logo": "https://mariadb.com/wp-content/uploads/2019/11/mariadb-logo-vert_blue-transparent.png",
      "website": "https://mariadb.org",
      "docsUrl": "https://mariadb.com/kb/en/documentation/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mariadb/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MYSQL_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MYSQL_DATABASE",
          "default": "mydb",
          "description": "Default database name"
        },
        {
          "key": "MYSQL_USER",
          "default": "user",
          "description": "Database user"
        },
        {
          "key": "MYSQL_PASSWORD",
          "default": "",
          "description": "Database user password",
          "secret": true
        }
      ],
      "version": "11"
    },
    {
      "slug": "mariadb-10-dev",
      "name": "MariaDB 10.11 Dev",
      "description": "MariaDB 10.11 LTS for development and testing.",
      "category": "Databases",
      "image": "mariadb:10.11",
      "logo": "https://mariadb.com/wp-content/uploads/2019/11/mariadb-logo-vert_blue-transparent.png",
      "website": "https://mariadb.org",
      "docsUrl": "https://mariadb.com/kb/en/mariadb-10-11/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mariadb-10-dev/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MARIADB_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MARIADB_DATABASE",
          "default": "dev",
          "description": "Default database name"
        },
        {
          "key": "MARIADB_USER",
          "default": "dev",
          "description": "Database user"
        },
        {
          "key": "MARIADB_PASSWORD",
          "default": "",
          "description": "Database user password",
          "secret": true
        }
      ],
      "version": "10.11"
    },
    {
      "slug": "mariadb-dev",
      "name": "MariaDB 11 Dev",
      "description": "MariaDB 11 LTS for development and testing.",
      "category": "Databases",
      "image": "mariadb:11",
      "logo": "https://mariadb.com/wp-content/uploads/2019/11/mariadb-logo-vert_blue-transparent.png",
      "website": "https://mariadb.org",
      "docsUrl": "https://mariadb.com/kb/en/documentation/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mariadb-dev/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MARIADB_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MARIADB_DATABASE",
          "default": "dev",
          "description": "Default database name"
        },
        {
          "key": "MARIADB_USER",
          "default": "dev",
          "description": "Database user"
        },
        {
          "key": "MARIADB_PASSWORD",
          "default": "",
          "description": "Database user password",
          "secret": true
        }
      ],
      "version": "11"
    },
    {
      "slug": "marqo",
      "name": "Marqo",
      "description": "End-to-end vector search engine that combines storage, embeddings, and ranking out of the box.",
      "category": "Databases",
      "image": "marqoai/marqo:latest",
      "logo": "https://icon.horse/icon/marqo.ai",
      "website": "https://marqo.ai",
      "docsUrl": "https://docs.marqo.ai",
      "ports": [
        {
          "host": 8882,
          "container": 8882,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/marqo/data",
          "container": "/opt/marqo"
        }
      ],
      "envVars": [
        {
          "key": "MARQO_API_KEY",
          "default": "",
          "description": "API key for authentication (leave empty to disable)",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "matomo",
      "name": "Matomo",
      "description": "Privacy-focused web analytics platform for tracking websites and apps without third-party SaaS.",
      "category": "Web Apps",
      "image": "matomo:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/matomo.png",
      "website": "https://matomo.org",
      "docsUrl": "https://hub.docker.com/_/matomo",
      "ports": [
        {
          "host": 8091,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "MATOMO_DATA_PATH",
          "default": "/opt/appdata/matomo/html",
          "description": "Host path for Matomo files"
        },
        {
          "key": "MATOMO_DB_PATH",
          "default": "/opt/appdata/matomo/db",
          "description": "Host path for MariaDB data"
        },
        {
          "key": "MATOMO_DB_NAME",
          "default": "matomo",
          "description": "Database name"
        },
        {
          "key": "MATOMO_DB_USER",
          "default": "matomo",
          "description": "Database user"
        },
        {
          "key": "MATOMO_DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "MATOMO_DB_ROOT_PASSWORD",
          "default": "change-root-password",
          "description": "MariaDB root password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    depends_on:\n      - {{serviceName}}-db\n{{ports}}\n    volumes:\n      - {{env.MATOMO_DATA_PATH}}:/var/www/html\n    environment:\n      MATOMO_DATABASE_HOST: {{serviceName}}-db\n      MATOMO_DATABASE_ADAPTER: mysql\n      MATOMO_DATABASE_TABLES_PREFIX: matomo_\n      MATOMO_DATABASE_USERNAME: {{env.MATOMO_DB_USER}}\n      MATOMO_DATABASE_PASSWORD: {{env.MATOMO_DB_PASSWORD}}\n      MATOMO_DATABASE_DBNAME: {{env.MATOMO_DB_NAME}}\n  {{serviceName}}-db:\n    image: mariadb:11\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    command: --max-allowed-packet=64MB\n    volumes:\n      - {{env.MATOMO_DB_PATH}}:/var/lib/mysql\n    environment:\n      MARIADB_DATABASE: {{env.MATOMO_DB_NAME}}\n      MARIADB_USER: {{env.MATOMO_DB_USER}}\n      MARIADB_PASSWORD: {{env.MATOMO_DB_PASSWORD}}\n      MARIADB_ROOT_PASSWORD: {{env.MATOMO_DB_ROOT_PASSWORD}}\n",
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "matrix-synapse",
      "name": "Synapse",
      "description": "Reference Matrix homeserver implementation written in Python with federated chat.",
      "category": "Communications",
      "image": "matrixdotorg/synapse:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/matrix-synapse.png",
      "website": "https://matrix.org",
      "docsUrl": "https://element-hq.github.io/synapse/latest",
      "ports": [
        {
          "host": 8008,
          "container": 8008,
          "protocol": "tcp"
        },
        {
          "host": 8448,
          "container": 8448,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/matrix-synapse/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SYNAPSE_SERVER_NAME",
          "default": "matrix.example.com",
          "description": "Public server name"
        },
        {
          "key": "SYNAPSE_REGISTRATION_SHARED_SECRET",
          "default": "",
          "description": "Shared secret for registration",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "matter-server",
      "name": "Matter Server",
      "description": "Python-based Matter controller server for smart home device interoperability.",
      "category": "Home Automation",
      "image": "ghcr.io/home-assistant-libs/python-matter-server:stable",
      "logo": "https://www.home-assistant.io/images/favicon-192x192-full.png",
      "website": "https://github.com/home-assistant-libs/python-matter-server",
      "docsUrl": "https://github.com/home-assistant-libs/python-matter-server#readme",
      "ports": [
        {
          "host": 5580,
          "container": 5580,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/matter-server/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "stable"
    },
    {
      "slug": "mattermost",
      "name": "Mattermost",
      "description": "Self-hosted Slack alternative for team collaboration with channels, calls, and integrations.",
      "category": "Communications",
      "image": "mattermost/mattermost-team-edition:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mattermost.png",
      "website": "https://mattermost.com",
      "docsUrl": "https://docs.mattermost.com",
      "ports": [
        {
          "host": 8065,
          "container": 8065,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mattermost/config",
          "container": "/mattermost/config"
        },
        {
          "host": "/opt/appdata/mattermost/data",
          "container": "/mattermost/data"
        },
        {
          "host": "/opt/appdata/mattermost/logs",
          "container": "/mattermost/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MM_SITE_URL",
          "default": "http://localhost:8065",
          "description": "Public site URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mautic",
      "name": "Mautic",
      "description": "Open-source marketing automation platform for email campaigns, lead nurturing, and analytics.",
      "category": "Productivity",
      "image": "mautic/mautic:latest",
      "logo": "https://www.mautic.org/media/images/favicon.ico",
      "website": "https://www.mautic.org",
      "docsUrl": "https://docs.mautic.org",
      "ports": [
        {
          "host": 8589,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mautic/data",
          "container": "/var/www/html/data"
        },
        {
          "host": "/opt/appdata/mautic/config",
          "container": "/var/www/html/config"
        },
        {
          "host": "/opt/appdata/mautic/logs",
          "container": "/var/www/html/var/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MAUTIC_DB_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "MAUTIC_DB_PORT",
          "default": "3306",
          "description": "Database port"
        },
        {
          "key": "MAUTIC_DB_NAME",
          "default": "mautic",
          "description": "Database name"
        },
        {
          "key": "MAUTIC_DB_USER",
          "default": "mautic",
          "description": "Database user"
        },
        {
          "key": "MAUTIC_DB_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "maven-dev",
      "name": "Maven",
      "description": "Apache Maven 3.9 on Temurin 21, project management and comprehension tool for Java projects.",
      "category": "Developer Tools",
      "image": "maven:3.9-eclipse-temurin-21",
      "logo": "https://icon.horse/icon/maven.apache.org",
      "website": "https://maven.apache.org",
      "docsUrl": "https://maven.apache.org/guides/index.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/maven-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MAVEN_CONFIG",
          "default": "",
          "description": "Optional Maven configuration file path"
        }
      ],
      "version": "3.9-eclipse-temurin-21"
    },
    {
      "slug": "maxscale",
      "name": "MariaDB MaxScale",
      "description": "Database proxy for MariaDB with load balancing, query routing, and high availability.",
      "category": "Databases",
      "image": "mariadb/maxscale:latest",
      "logo": "https://icon.horse/icon/mariadb.com",
      "website": "https://mariadb.com/products/maxscale",
      "docsUrl": "https://mariadb.com/kb/en/maxscale/",
      "ports": [
        {
          "host": 8981,
          "container": 8981,
          "protocol": "tcp"
        },
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/maxscale/config",
          "container": "/etc/maxscale.cnf.d"
        }
      ],
      "envVars": [
        {
          "key": "MXS_USER",
          "default": "admin",
          "description": "MaxScale admin user"
        },
        {
          "key": "MXS_PASSWORD",
          "default": "",
          "description": "MaxScale admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "maxwell-cdc",
      "name": "Maxwell's Daemon",
      "description": "MySQL change data capture tool that reads binlogs and produces JSON messages to Kafka, Redis, RabbitMQ, and others.",
      "category": "Databases",
      "image": "zendesk/maxwell:latest",
      "logo": "https://maxwells-daemon.io/img/logo.svg",
      "website": "https://maxwells-daemon.io",
      "docsUrl": "https://maxwells-daemon.io/quickstart/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/maxwell-cdc/data",
          "container": "/var/lib/maxwell"
        }
      ],
      "envVars": [
        {
          "key": "MAXWELL_HOST",
          "default": "mysql",
          "description": "MySQL host"
        },
        {
          "key": "MAXWELL_USER",
          "default": "maxwell",
          "description": "MySQL user"
        },
        {
          "key": "MAXWELL_PASSWORD",
          "default": "",
          "description": "MySQL password",
          "secret": true
        },
        {
          "key": "MAXWELL_PRODUCER",
          "default": "stdout",
          "description": "Producer type (kafka, redis, rabbitmq, stdout)"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mbin",
      "name": "Mbin",
      "description": "Federated content aggregator and microblogging server that combines threads, magazines, and microblogging via ActivityPub.",
      "category": "Web Apps",
      "image": "ghcr.io/mbinorg/mbin:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mbin.png",
      "website": "https://github.com/MbinOrg/mbin",
      "docsUrl": "https://docs.mbin.social",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mbin/media",
          "container": "/srv/mbin/media"
        },
        {
          "host": "/opt/appdata/mbin/var",
          "container": "/srv/mbin/var"
        }
      ],
      "envVars": [
        {
          "key": "APP_ENV",
          "default": "prod",
          "description": "Application environment"
        },
        {
          "key": "APP_SECRET",
          "default": "change-me-app-secret",
          "description": "Application secret",
          "secret": true
        },
        {
          "key": "DATABASE_URL",
          "default": "postgresql://mbin:[email protected]:5432/mbin?serverVersion=15&charset=utf8",
          "description": "PostgreSQL connection string",
          "secret": true
        },
        {
          "key": "REDIS_URL",
          "default": "redis://mbin-redis:6379",
          "description": "Redis URL"
        },
        {
          "key": "MERCURE_URL",
          "default": "http://mbin-mercure:3000/.well-known/mercure",
          "description": "Mercure hub URL"
        },
        {
          "key": "MERCURE_PUBLIC_URL",
          "default": "http://localhost/.well-known/mercure",
          "description": "Mercure public URL"
        },
        {
          "key": "DOMAIN_NAME",
          "default": "localhost",
          "description": "Domain name"
        },
        {
          "key": "KBIN_FEDERATION_ENABLED",
          "default": "true",
          "description": "Enable federation"
        },
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "mc-router",
      "name": "MC-Router",
      "description": "Lightweight Minecraft proxy that routes players to backend servers based on hostname.",
      "category": "Gaming",
      "image": "itzg/mc-router:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/itzg/mc-router",
      "docsUrl": "https://github.com/itzg/mc-router/blob/master/README.md",
      "ports": [
        {
          "host": 25565,
          "container": 25565,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "MC_ROUTER_API_HOST",
          "default": "0.0.0.0:8080",
          "description": "API listen address"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mealie",
      "name": "Mealie",
      "description": "Self-hosted recipe manager and meal planner with a clean UI.",
      "category": "Productivity",
      "image": "ghcr.io/mealie-recipes/mealie:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mealie.png",
      "website": "https://mealie.io",
      "docsUrl": "https://docs.mealie.io",
      "ports": [
        {
          "host": 9925,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mealie/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "BASE_URL",
          "default": "http://localhost:9925",
          "description": "Base URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mediawiki",
      "name": "MediaWiki",
      "description": "Wiki engine that powers Wikipedia. Useful for team knowledge bases and public documentation sites.",
      "category": "Web Apps",
      "image": "mediawiki:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mediawiki.png",
      "website": "https://www.mediawiki.org",
      "docsUrl": "https://hub.docker.com/_/mediawiki",
      "ports": [
        {
          "host": 8092,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "MEDIAWIKI_IMAGES_PATH",
          "default": "/opt/appdata/mediawiki/images",
          "description": "Host path for uploaded images"
        },
        {
          "key": "MEDIAWIKI_DB_PATH",
          "default": "/opt/appdata/mediawiki/db",
          "description": "Host path for MariaDB data"
        },
        {
          "key": "MEDIAWIKI_DB_NAME",
          "default": "mediawiki",
          "description": "Database name"
        },
        {
          "key": "MEDIAWIKI_DB_USER",
          "default": "mediawiki",
          "description": "Database user"
        },
        {
          "key": "MEDIAWIKI_DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "MEDIAWIKI_DB_ROOT_PASSWORD",
          "default": "change-root-password",
          "description": "MariaDB root password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    depends_on:\n      - {{serviceName}}-db\n{{ports}}\n    volumes:\n      - {{env.MEDIAWIKI_IMAGES_PATH}}:/var/www/html/images\n  {{serviceName}}-db:\n    image: mariadb:11\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    volumes:\n      - {{env.MEDIAWIKI_DB_PATH}}:/var/lib/mysql\n    environment:\n      MARIADB_DATABASE: {{env.MEDIAWIKI_DB_NAME}}\n      MARIADB_USER: {{env.MEDIAWIKI_DB_USER}}\n      MARIADB_PASSWORD: {{env.MEDIAWIKI_DB_PASSWORD}}\n      MARIADB_ROOT_PASSWORD: {{env.MEDIAWIKI_DB_ROOT_PASSWORD}}\n",
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "meilisearch",
      "name": "Meilisearch",
      "description": "Blazing-fast open-source search engine with typo tolerance, filters, and instant results.",
      "category": "Databases",
      "image": "getmeili/meilisearch:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/meilisearch.png",
      "website": "https://www.meilisearch.com",
      "docsUrl": "https://www.meilisearch.com/docs",
      "ports": [
        {
          "host": 7700,
          "container": 7700,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/meilisearch/data",
          "container": "/meili_data"
        }
      ],
      "envVars": [
        {
          "key": "MEILI_MASTER_KEY",
          "default": "",
          "description": "Master key for API access",
          "secret": true
        },
        {
          "key": "MEILI_NO_ANALYTICS",
          "default": "true",
          "description": "Disable anonymous analytics"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "memcached",
      "name": "Memcached",
      "description": "High-performance distributed memory object caching system for speeding up dynamic applications.",
      "category": "Databases",
      "image": "memcached:1.6-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/memcached.svg",
      "website": "https://memcached.org",
      "docsUrl": "https://github.com/memcached/memcached/wiki",
      "ports": [
        {
          "host": 11211,
          "container": 11211,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "1.6-alpine"
    },
    {
      "slug": "memgraph",
      "name": "Memgraph",
      "description": "In-memory graph database built for real-time streaming and high-performance analytics.",
      "category": "Databases",
      "image": "memgraph/memgraph:latest",
      "logo": "https://icon.horse/icon/memgraph.com",
      "website": "https://memgraph.com",
      "docsUrl": "https://memgraph.com/docs",
      "ports": [
        {
          "host": 7687,
          "container": 7687,
          "protocol": "tcp"
        },
        {
          "host": 7444,
          "container": 7444,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/memgraph/data",
          "container": "/var/lib/memgraph"
        }
      ],
      "envVars": [
        {
          "key": "MEMGRAPH_USER",
          "default": "",
          "description": "Auth username"
        },
        {
          "key": "MEMGRAPH_PASSWORD",
          "default": "",
          "description": "Auth password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "memos",
      "name": "Memos",
      "description": "Lightweight note-taking and knowledge capture app.",
      "category": "Productivity",
      "image": "neosmemo/memos:stable",
      "logo": "https://usememos.com/logo-rounded.png",
      "website": "https://www.usememos.com",
      "docsUrl": "https://www.usememos.com/docs",
      "ports": [
        {
          "host": 5230,
          "container": 5230,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/memos/data",
          "container": "/var/opt/memos"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "metabase",
      "name": "Metabase",
      "description": "Open-source business intelligence platform with dashboards, queries, and visualizations.",
      "category": "Databases",
      "image": "metabase/metabase:latest",
      "logo": "https://www.metabase.com/images/logo.svg",
      "website": "https://www.metabase.com",
      "docsUrl": "https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker.html",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/metabase/data",
          "container": "/metabase-data"
        }
      ],
      "envVars": [
        {
          "key": "MB_DB_TYPE",
          "default": "postgres",
          "description": "Application database type"
        },
        {
          "key": "MB_DB_HOST",
          "default": "postgres",
          "description": "Application database host"
        },
        {
          "key": "MB_DB_PORT",
          "default": "5432",
          "description": "Application database port"
        },
        {
          "key": "MB_DB_DB_NAME",
          "default": "metabase",
          "description": "Application database name"
        },
        {
          "key": "MB_DB_USER",
          "default": "metabase",
          "description": "Application database user"
        },
        {
          "key": "MB_DB_PASS",
          "default": "",
          "description": "Application database password",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "metube",
      "name": "MeTube",
      "description": "Web UI for yt-dlp with playlist, channel, and queue support.",
      "category": "Media",
      "image": "ghcr.io/alexta69/metube:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/metube.png",
      "website": "https://github.com/alexta69/metube",
      "docsUrl": "https://github.com/alexta69/metube#docker",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/metube/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/metube/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "milvus",
      "name": "Milvus",
      "description": "Open-source vector database built for scalable similarity search and AI applications.",
      "category": "Databases",
      "image": "milvusdb/milvus:latest",
      "logo": "https://icon.horse/icon/milvus.io",
      "website": "https://milvus.io",
      "docsUrl": "https://milvus.io/docs",
      "ports": [
        {
          "host": 19530,
          "container": 19530,
          "protocol": "tcp"
        },
        {
          "host": 9091,
          "container": 9091,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/milvus/data",
          "container": "/var/lib/milvus"
        }
      ],
      "envVars": [
        {
          "key": "MILVUS_ROOT_PASSWORD",
          "default": "",
          "description": "Root password (recommended)",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mimir-tsdb",
      "name": "Grafana Mimir",
      "description": "Horizontally scalable, multi-tenant Prometheus-compatible time-series database.",
      "category": "Databases",
      "image": "grafana/mimir:latest",
      "logo": "https://icon.horse/icon/grafana.com",
      "website": "https://grafana.com/oss/mimir",
      "docsUrl": "https://grafana.com/docs/mimir/latest/",
      "ports": [
        {
          "host": 9009,
          "container": 9009,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mimir-tsdb/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/mimir-tsdb/config",
          "container": "/etc/mimir"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "minecraft",
      "name": "Minecraft Server",
      "description": "Dedicated Minecraft Java Edition server with easy configuration.",
      "category": "Gaming",
      "image": "itzg/minecraft-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/minecraft.png",
      "website": "https://www.minecraft.net",
      "docsUrl": "https://docker-minecraft-server.readthedocs.io",
      "ports": [
        {
          "host": 25565,
          "container": 25565,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/minecraft/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "EULA",
          "default": "TRUE",
          "description": "Accept Minecraft EULA"
        },
        {
          "key": "TYPE",
          "default": "VANILLA",
          "description": "Server type (VANILLA, PAPER, FORGE, FABRIC)"
        },
        {
          "key": "MEMORY",
          "default": "2G",
          "description": "Server memory allocation"
        },
        {
          "key": "DIFFICULTY",
          "default": "normal",
          "description": "Game difficulty"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "minecraft-bedrock",
      "name": "Minecraft Bedrock",
      "description": "Dedicated Minecraft Bedrock Edition server supporting cross-play with consoles and mobile.",
      "category": "Gaming",
      "image": "itzg/minecraft-bedrock-server:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/itzg/docker-minecraft-bedrock-server",
      "docsUrl": "https://github.com/itzg/docker-minecraft-bedrock-server/blob/master/README.md",
      "ports": [
        {
          "host": 19132,
          "container": 19132,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/minecraft-bedrock/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/minecraft-bedrock/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "EULA",
          "default": "TRUE",
          "description": "Accept Minecraft EULA"
        },
        {
          "key": "SERVER_NAME",
          "default": "Bedrock Server",
          "description": "Server name"
        },
        {
          "key": "GAMEMODE",
          "default": "survival",
          "description": "Game mode (survival, creative, adventure)"
        },
        {
          "key": "DIFFICULTY",
          "default": "normal",
          "description": "Difficulty"
        },
        {
          "key": "MAX_PLAYERS",
          "default": "10",
          "description": "Maximum players"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "mineos",
      "name": "MineOS",
      "description": "Web-based Minecraft server manager with built-in Java/Forge/Bukkit/Spigot support.",
      "category": "Gaming",
      "image": "hexparrot/mineos:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mineos.png",
      "website": "https://minecraft.codeemo.com",
      "docsUrl": "https://github.com/hexparrot/mineos-node",
      "ports": [
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        },
        {
          "host": 25565,
          "container": 25565,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mineos/config",
          "container": "/var/games/minecraft"
        },
        {
          "host": "/opt/appdata/mineos/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "miniflux",
      "name": "Miniflux",
      "description": "Minimalist and opinionated RSS feed reader.",
      "category": "Productivity",
      "image": "miniflux/miniflux:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/miniflux.png",
      "website": "https://miniflux.app",
      "docsUrl": "https://miniflux.app/docs",
      "ports": [
        {
          "host": 8086,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "ADMIN_USERNAME",
          "default": "admin",
          "description": "Initial admin username"
        },
        {
          "key": "ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      DATABASE_URL: \"postgres://miniflux:{{envRaw.POSTGRES_PASSWORD}}@{{serviceName}}-db/miniflux?sslmode=disable\"\n      RUN_MIGRATIONS: \"1\"\n      CREATE_ADMIN: \"1\"\n      ADMIN_USERNAME: {{env.ADMIN_USERNAME}}\n      ADMIN_PASSWORD: {{env.ADMIN_PASSWORD}}\n      TZ: {{env.TZ}}\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: miniflux\n      POSTGRES_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      POSTGRES_DB: miniflux\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n"
    },
    {
      "slug": "minio",
      "name": "MinIO",
      "description": "S3-compatible object storage for backups and homelab data.",
      "category": "Photos & Files",
      "image": "quay.io/minio/minio:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/minio.png",
      "website": "https://min.io",
      "docsUrl": "https://min.io/docs",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        },
        {
          "host": 9001,
          "container": 9001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/minio/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "MINIO_ROOT_USER",
          "default": "minioadmin",
          "description": "Root access key"
        },
        {
          "key": "MINIO_ROOT_PASSWORD",
          "default": "minioadmin",
          "description": "Root secret key",
          "secret": true
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      MINIO_ROOT_USER: {{env.MINIO_ROOT_USER}}\n      MINIO_ROOT_PASSWORD: {{env.MINIO_ROOT_PASSWORD}}\n    volumes:\n      - {{appDataPath}}/data:/data\n    command: server /data --console-address \":9001\"\n"
    },
    {
      "slug": "mitmproxy",
      "name": "mitmproxy",
      "description": "Interactive HTTPS intercepting proxy for debugging, testing, and privacy audits.",
      "category": "Security",
      "image": "mitmproxy/mitmproxy:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/mitmproxy.svg",
      "website": "https://mitmproxy.org",
      "docsUrl": "https://docs.mitmproxy.org",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mitmproxy/config",
          "container": "/home/mitmproxy/.mitmproxy"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "256MB",
      "version": "latest"
    },
    {
      "slug": "mockoon",
      "name": "Mockoon",
      "description": "Mock APIs locally and serve them with a single CLI binary.",
      "category": "Developer Tools",
      "image": "mockoon/cli:latest",
      "logo": "https://icon.horse/icon/mockoon.com",
      "website": "https://mockoon.com",
      "docsUrl": "https://mockoon.com/cli/",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mockoon/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mockserver",
      "name": "MockServer",
      "description": "Easy mocking of HTTP and HTTPS services for integration testing.",
      "category": "Developer Tools",
      "image": "mockserver/mockserver:latest",
      "logo": "https://icon.horse/icon/www.mock-server.com",
      "website": "http://www.mock-server.com",
      "docsUrl": "https://www.mock-server.com/docker.html",
      "ports": [
        {
          "host": 1080,
          "container": 1080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mockserver/data",
          "container": "/mockserver"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MOCKSERVER_LOG_LEVEL",
          "default": "INFO",
          "description": "Logging level"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mongo-6-dev",
      "name": "MongoDB 6 Dev",
      "description": "MongoDB 6 for development and testing on legacy stacks.",
      "category": "Databases",
      "image": "mongo:6",
      "logo": "https://www.mongodb.com/assets/images/global/favicon.ico",
      "website": "https://www.mongodb.com",
      "docsUrl": "https://www.mongodb.com/docs/v6.0/",
      "ports": [
        {
          "host": 27017,
          "container": 27017,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mongo-6-dev/data",
          "container": "/data/db"
        }
      ],
      "envVars": [
        {
          "key": "MONGO_INITDB_ROOT_USERNAME",
          "default": "admin",
          "description": "Root username"
        },
        {
          "key": "MONGO_INITDB_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MONGO_INITDB_DATABASE",
          "default": "dev",
          "description": "Default database name"
        }
      ],
      "version": "6"
    },
    {
      "slug": "mongo-dev",
      "name": "MongoDB 7 Dev",
      "description": "MongoDB 7 for development and testing.",
      "category": "Databases",
      "image": "mongo:7",
      "logo": "https://www.mongodb.com/assets/images/global/favicon.ico",
      "website": "https://www.mongodb.com",
      "docsUrl": "https://www.mongodb.com/docs/v7.0/",
      "ports": [
        {
          "host": 27017,
          "container": 27017,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mongo-dev/data",
          "container": "/data/db"
        }
      ],
      "envVars": [
        {
          "key": "MONGO_INITDB_ROOT_USERNAME",
          "default": "admin",
          "description": "Root username"
        },
        {
          "key": "MONGO_INITDB_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MONGO_INITDB_DATABASE",
          "default": "dev",
          "description": "Default database name"
        }
      ],
      "version": "7"
    },
    {
      "slug": "mongodb",
      "name": "MongoDB",
      "description": "Document-oriented NoSQL database for modern applications.",
      "category": "Databases",
      "image": "mongo:7",
      "logo": "https://www.mongodb.com/assets/images/global/favicon.ico",
      "website": "https://www.mongodb.com",
      "docsUrl": "https://www.mongodb.com/docs/",
      "ports": [
        {
          "host": 27017,
          "container": 27017,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mongodb/data",
          "container": "/data/db"
        }
      ],
      "envVars": [
        {
          "key": "MONGO_INITDB_ROOT_USERNAME",
          "default": "admin",
          "description": "Root username"
        },
        {
          "key": "MONGO_INITDB_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        }
      ],
      "version": "7"
    },
    {
      "slug": "mongodb-mcp",
      "name": "MongoDB MCP",
      "description": "Official MongoDB MCP server for databases, Atlas projects, schema inspection, and queries.",
      "category": "MCP Services",
      "image": "mongodb/mongodb-mcp-server:latest",
      "logo": "https://www.mongodb.com/assets/images/global/favicon.ico",
      "website": "https://www.mongodb.com/docs/mcp-server/",
      "docsUrl": "https://github.com/mongodb-js/mongodb-mcp-server",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mongodb-mcp/logs",
          "container": "/data/logs"
        }
      ],
      "envVars": [
        {
          "key": "MDB_MCP_CONNECTION_STRING",
          "default": "",
          "description": "MongoDB connection string",
          "secret": true
        },
        {
          "key": "MDB_MCP_API_CLIENT_ID",
          "default": "",
          "description": "Optional MongoDB Atlas service account client ID",
          "secret": true
        },
        {
          "key": "MDB_MCP_API_CLIENT_SECRET",
          "default": "",
          "description": "Optional MongoDB Atlas service account client secret",
          "secret": true
        },
        {
          "key": "MDB_MCP_READ_ONLY",
          "default": "true",
          "description": "Restrict MongoDB tools to read, connect, and metadata operations"
        },
        {
          "key": "MDB_MCP_HTTP_PORT",
          "default": "8081",
          "description": "HTTP MCP port exposed by the server"
        }
      ],
      "minMemory": "512MB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    ports:\n      - \"{{envRaw.MDB_MCP_HTTP_PORT}}:{{envRaw.MDB_MCP_HTTP_PORT}}\"\n    volumes:\n      - /opt/appdata/mongodb-mcp/logs:/data/logs\n    environment:\n      MDB_MCP_CONNECTION_STRING: {{env.MDB_MCP_CONNECTION_STRING}}\n      MDB_MCP_API_CLIENT_ID: {{env.MDB_MCP_API_CLIENT_ID}}\n      MDB_MCP_API_CLIENT_SECRET: {{env.MDB_MCP_API_CLIENT_SECRET}}\n      MDB_MCP_READ_ONLY: {{env.MDB_MCP_READ_ONLY}}\n      MDB_MCP_LOG_PATH: /data/logs\n      MDB_MCP_LOGGERS: stderr\n    command: [\"--transport\", \"http\", \"--httpHost=0.0.0.0\", \"--httpPort={{envRaw.MDB_MCP_HTTP_PORT}}\"]\n"
    },
    {
      "slug": "monitoror",
      "name": "Monitoror",
      "description": "Wallboard monitoring for the whole stack: HTTP, TCP, ping, DNS, Docker and more.",
      "category": "Monitoring",
      "image": "monitoror/monitoror:latest",
      "logo": "https://icon.horse/icon/monitoror.com",
      "website": "https://monitoror.com",
      "docsUrl": "https://github.com/monitoror/monitoror",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/monitoror/config",
          "container": "/etc/monitoror"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MO_CONFIG",
          "default": "/etc/monitoror/config.json",
          "description": "Path to monitoror config"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mosquitto",
      "name": "Mosquitto",
      "description": "Lightweight MQTT message broker for IoT and home automation.",
      "category": "Home Automation",
      "image": "eclipse-mosquitto:latest",
      "logo": "https://mosquitto.org/images/mosquitto-text-side-28.png",
      "website": "https://mosquitto.org",
      "docsUrl": "https://mosquitto.org/documentation/",
      "ports": [
        {
          "host": 1883,
          "container": 1883,
          "protocol": "tcp"
        },
        {
          "host": 9001,
          "container": 9001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mosquitto/config",
          "container": "/mosquitto/config"
        },
        {
          "host": "/opt/appdata/mosquitto/data",
          "container": "/mosquitto/data"
        },
        {
          "host": "/opt/appdata/mosquitto/log",
          "container": "/mosquitto/log"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mosquitto-dev",
      "name": "Mosquitto Dev",
      "description": "Eclipse Mosquitto MQTT broker for local IoT and pubsub development.",
      "category": "Developer Tools",
      "image": "eclipse-mosquitto:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mosquitto.png",
      "website": "https://mosquitto.org",
      "docsUrl": "https://mosquitto.org/documentation/",
      "ports": [
        {
          "host": 1883,
          "container": 1883,
          "protocol": "tcp"
        },
        {
          "host": 9001,
          "container": 9001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mosquitto-dev/config",
          "container": "/mosquitto/config"
        },
        {
          "host": "/opt/appdata/mosquitto-dev/data",
          "container": "/mosquitto/data"
        },
        {
          "host": "/opt/appdata/mosquitto-dev/log",
          "container": "/mosquitto/log"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mssql",
      "name": "SQL Server 2022",
      "description": "Microsoft SQL Server 2022 developer edition for development.",
      "category": "Databases",
      "image": "mcr.microsoft.com/mssql/server:2022-latest",
      "logo": "https://icon.horse/icon/www.microsoft.com",
      "website": "https://www.microsoft.com/en-us/sql-server",
      "docsUrl": "https://learn.microsoft.com/en-us/sql/sql-server/",
      "ports": [
        {
          "host": 1433,
          "container": 1433,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mssql/data",
          "container": "/var/opt/mssql"
        }
      ],
      "envVars": [
        {
          "key": "ACCEPT_EULA",
          "default": "Y",
          "description": "Accept the SQL Server EULA (required)"
        },
        {
          "key": "MSSQL_SA_PASSWORD",
          "default": "",
          "description": "SA password (must meet complexity requirements)",
          "secret": true
        },
        {
          "key": "MSSQL_PID",
          "default": "Developer",
          "description": "SQL Server edition: Developer, Express, Standard, or Enterprise"
        }
      ],
      "version": "2022-latest"
    },
    {
      "slug": "mumble",
      "name": "Mumble Server",
      "description": "Low-latency, high-quality voice chat primarily used for gaming; Murmur server.",
      "category": "Communications",
      "image": "mumblevoip/mumble-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mumble.png",
      "website": "https://www.mumble.info",
      "docsUrl": "https://wiki.mumble.info/wiki/Murmur",
      "ports": [
        {
          "host": 64738,
          "container": 64738,
          "protocol": "tcp"
        },
        {
          "host": 64738,
          "container": 64738,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mumble/config",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MUMBLE_SUPW",
          "default": "",
          "description": "SuperUser password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "music-assistant",
      "name": "Music Assistant",
      "description": "Manage and stream your music collection to various players from a single interface.",
      "category": "Media",
      "image": "ghcr.io/music-assistant/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/music-assistant.png",
      "website": "https://music-assistant.io",
      "docsUrl": "https://music-assistant.io/docs/",
      "ports": [
        {
          "host": 8095,
          "container": 8095,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/music-assistant/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/music-assistant/media",
          "container": "/media"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "mybb-forum",
      "name": "MyBB",
      "description": "Free, open-source forum software with plugin and theme support, designed for ease of use and extensibility.",
      "category": "Web Apps",
      "image": "mybb/mybb:latest",
      "logo": "https://icon.horse/icon/mybb.com",
      "website": "https://mybb.com",
      "docsUrl": "https://docs.mybb.com",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mybb/html",
          "container": "/var/www/html"
        },
        {
          "host": "/opt/appdata/mybb/uploads",
          "container": "/var/www/html/uploads"
        }
      ],
      "envVars": [
        {
          "key": "DB_HOST",
          "default": "mybb-db",
          "description": "Database host"
        },
        {
          "key": "DB_NAME",
          "default": "mybb",
          "description": "Database name"
        },
        {
          "key": "DB_USER",
          "default": "mybb",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWORD",
          "default": "change-me-db",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "mysql",
      "name": "MySQL",
      "description": "World's most popular open-source relational database management system.",
      "category": "Databases",
      "image": "mysql:8",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mysql.png",
      "website": "https://www.mysql.com",
      "docsUrl": "https://dev.mysql.com/doc/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mysql/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MYSQL_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MYSQL_DATABASE",
          "default": "mydb",
          "description": "Default database name"
        },
        {
          "key": "MYSQL_USER",
          "default": "user",
          "description": "Database user"
        },
        {
          "key": "MYSQL_PASSWORD",
          "default": "",
          "description": "Database user password",
          "secret": true
        }
      ],
      "version": "8"
    },
    {
      "slug": "mysql-57",
      "name": "MySQL 5.7",
      "description": "Legacy MySQL 5.7 server for legacy application compatibility.",
      "category": "Databases",
      "image": "mysql:5.7",
      "logo": "https://icon.horse/icon/www.mysql.com",
      "website": "https://www.mysql.com",
      "docsUrl": "https://dev.mysql.com/doc/refman/5.7/en/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mysql-57/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MYSQL_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MYSQL_DATABASE",
          "default": "mydb",
          "description": "Default database name"
        }
      ],
      "version": "5.7"
    },
    {
      "slug": "mysql-dev",
      "name": "MySQL 8 Dev",
      "description": "MySQL 8 for development and testing.",
      "category": "Databases",
      "image": "mysql:8",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/mysql.png",
      "website": "https://www.mysql.com",
      "docsUrl": "https://dev.mysql.com/doc/refman/8.0/en/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/mysql-dev/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MYSQL_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MYSQL_DATABASE",
          "default": "dev",
          "description": "Default database name"
        },
        {
          "key": "MYSQL_USER",
          "default": "dev",
          "description": "Database user"
        },
        {
          "key": "MYSQL_PASSWORD",
          "default": "",
          "description": "Database user password",
          "secret": true
        }
      ],
      "version": "8"
    },
    {
      "slug": "mysql-exporter",
      "name": "MySQL Exporter",
      "description": "Prometheus exporter for MySQL server metrics, including InnoDB and replication stats.",
      "category": "Monitoring",
      "image": "prom/mysqld-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/prometheus/mysqld_exporter",
      "docsUrl": "https://github.com/prometheus/mysqld_exporter#docker",
      "ports": [
        {
          "host": 9104,
          "container": 9104,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DATA_SOURCE_NAME",
          "default": "exporter:password@(mysql:3306)/",
          "description": "MySQL DSN",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "n8n",
      "name": "n8n",
      "description": "Workflow automation tool that connects apps and services with a visual editor.",
      "category": "Productivity",
      "image": "n8nio/n8n:latest",
      "logo": "https://n8n.io/favicon.ico",
      "website": "https://n8n.io",
      "docsUrl": "https://docs.n8n.io",
      "ports": [
        {
          "host": 5678,
          "container": 5678,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/n8n/data",
          "container": "/home/node/.n8n"
        }
      ],
      "envVars": [
        {
          "key": "N8N_BASIC_AUTH_ACTIVE",
          "default": "true",
          "description": "Enable basic auth"
        },
        {
          "key": "N8N_BASIC_AUTH_USER",
          "default": "admin",
          "description": "Basic auth username"
        },
        {
          "key": "N8N_BASIC_AUTH_PASSWORD",
          "default": "",
          "description": "Basic auth password",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "GENERIC_TIMEZONE",
          "default": "America/New_York",
          "description": "Timezone for cron"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nats",
      "name": "NATS",
      "description": "Lightweight, high-performance cloud-native messaging system with at-most/at-least once delivery.",
      "category": "Databases",
      "image": "nats:2-alpine",
      "logo": "https://icon.horse/icon/nats.io",
      "website": "https://nats.io",
      "docsUrl": "https://docs.nats.io",
      "ports": [
        {
          "host": 4222,
          "container": 4222,
          "protocol": "tcp"
        },
        {
          "host": 8222,
          "container": 8222,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nats/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "2-alpine"
    },
    {
      "slug": "nats-dev",
      "name": "NATS Dev",
      "description": "NATS lightweight high-performance messaging system on Alpine for development.",
      "category": "Developer Tools",
      "image": "nats:2-alpine",
      "logo": "https://icon.horse/icon/nats.io",
      "website": "https://nats.io",
      "docsUrl": "https://hub.docker.com/_/nats",
      "ports": [
        {
          "host": 4222,
          "container": 4222,
          "protocol": "tcp"
        },
        {
          "host": 8222,
          "container": 8222,
          "protocol": "tcp"
        },
        {
          "host": 6222,
          "container": 6222,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nats-dev/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "2-alpine"
    },
    {
      "slug": "navidrome",
      "name": "Navidrome",
      "description": "Lightweight Subsonic-compatible music server.",
      "category": "Media",
      "image": "deluan/navidrome:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/navidrome.png",
      "website": "https://www.navidrome.org",
      "docsUrl": "https://www.navidrome.org/docs",
      "ports": [
        {
          "host": 4533,
          "container": 4533,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/navidrome/data",
          "container": "/data"
        },
        {
          "host": "/srv/music",
          "container": "/music",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ND_SCANINTERVAL",
          "default": "1h",
          "description": "Music library scan interval"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "neo4j",
      "name": "Neo4j",
      "description": "Leading graph database with native graph storage and the powerful Cypher query language.",
      "category": "Databases",
      "image": "neo4j:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/neo4j.png",
      "website": "https://neo4j.com",
      "docsUrl": "https://neo4j.com/docs/",
      "ports": [
        {
          "host": 7474,
          "container": 7474,
          "protocol": "tcp"
        },
        {
          "host": 7687,
          "container": 7687,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/neo4j/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/neo4j/logs",
          "container": "/logs"
        }
      ],
      "envVars": [
        {
          "key": "NEO4J_AUTH",
          "default": "neo4j/",
          "description": "Auth in form neo4j/<password>",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nestjs-dev",
      "name": "NestJS",
      "description": "NestJS on Node 22 Alpine, progressive Node.js framework for scalable server-side applications.",
      "category": "Developer Tools",
      "image": "node:22-alpine",
      "logo": "https://icon.horse/icon/nestjs.com",
      "website": "https://nestjs.com",
      "docsUrl": "https://docs.nestjs.com",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nestjs-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NODE_ENV",
          "default": "development",
          "description": "Node environment"
        },
        {
          "key": "PORT",
          "default": "3000",
          "description": "Application port"
        }
      ],
      "version": "22-alpine"
    },
    {
      "slug": "netalertx",
      "name": "NetAlertX",
      "description": "Network presence, device discovery, and alerting dashboard.",
      "category": "Networking",
      "image": "jokobsk/netalertx:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/netalertx.png",
      "website": "https://github.com/jokob-sk/NetAlertX",
      "docsUrl": "https://github.com/jokob-sk/NetAlertX",
      "ports": [
        {
          "host": 20211,
          "container": 20211,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/netalertx/config",
          "container": "/app/config"
        },
        {
          "host": "/opt/appdata/netalertx/db",
          "container": "/app/db"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "netbird",
      "name": "NetBird",
      "description": "Zero-config WireGuard mesh networking with SSO, ACLs, and a management UI.",
      "category": "Networking",
      "image": "netbirdio/netbird:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/netbird.png",
      "website": "https://netbird.io",
      "docsUrl": "https://docs.netbird.io",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 51820,
          "container": 51820,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/netbird/config",
          "container": "/etc/netbird"
        },
        {
          "host": "/opt/appdata/netbird/data",
          "container": "/var/lib/netbird"
        }
      ],
      "envVars": [
        {
          "key": "NB_DOMAIN",
          "default": "netbird.example.com",
          "description": "Public domain"
        },
        {
          "key": "NB_LISTEN_ADDRESS",
          "default": "0.0.0.0:80",
          "description": "HTTP listen address"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "256MB",
      "version": "latest"
    },
    {
      "slug": "netdata",
      "name": "Netdata",
      "description": "Real-time performance and health monitoring with zero configuration.",
      "category": "Monitoring",
      "image": "netdata/netdata:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/netdata.png",
      "website": "https://www.netdata.cloud",
      "docsUrl": "https://learn.netdata.cloud",
      "ports": [
        {
          "host": 19999,
          "container": 19999,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/netdata/config",
          "container": "/etc/netdata"
        },
        {
          "host": "/opt/appdata/netdata/lib",
          "container": "/var/lib/netdata"
        },
        {
          "host": "/opt/appdata/netdata/cache",
          "container": "/var/cache/netdata"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "netmaker",
      "name": "Netmaker",
      "description": "WireGuard-based mesh VPN platform for fast and secure site-to-site networking.",
      "category": "Networking",
      "image": "gravitl/netmaker:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/netmaker.png",
      "website": "https://netmaker.org",
      "docsUrl": "https://docs.netmaker.org",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        },
        {
          "host": 51821,
          "container": 51821,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/netmaker/config",
          "container": "/root/config"
        },
        {
          "host": "/opt/appdata/netmaker/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "SERVER_NAME",
          "default": "netmaker.example.com",
          "description": "Public server name"
        },
        {
          "key": "COREDNS_ADDR",
          "default": "",
          "description": "CoreDNS service address"
        },
        {
          "key": "DATABASE",
          "default": "sqlite",
          "description": "Database backend"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "newapi-llm",
      "name": "New API",
      "description": "Next-generation LLM gateway and API management platform, a community fork of One API.",
      "category": "AI & Voice",
      "image": "calciumion/new-api:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/quantum-suite/new-api",
      "docsUrl": "https://github.com/quantum-suite/new-api/blob/main/README.md",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/newapi-llm/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SQL_DSN",
          "default": "sqlite:///data/new-api.db",
          "description": "Database connection string"
        },
        {
          "key": "SESSION_SECRET",
          "default": "",
          "description": "Session signing secret",
          "secret": true
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "nextcloud",
      "name": "Nextcloud",
      "description": "Self-hosted productivity platform with file sync, contacts, calendar, and more.",
      "category": "Productivity",
      "image": "nextcloud:latest",
      "logo": "https://nextcloud.com/c/uploads/2022/11/logo_nextcloud_blue.svg",
      "website": "https://nextcloud.com",
      "docsUrl": "https://docs.nextcloud.com",
      "ports": [
        {
          "host": 8880,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nextcloud/html",
          "container": "/var/www/html"
        },
        {
          "host": "/opt/appdata/nextcloud/data",
          "container": "/var/www/html/data"
        }
      ],
      "envVars": [
        {
          "key": "NEXTCLOUD_ADMIN_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "NEXTCLOUD_ADMIN_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        },
        {
          "key": "NEXTCLOUD_TRUSTED_DOMAINS",
          "default": "localhost",
          "description": "Trusted domains"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "nginx",
      "name": "Nginx",
      "description": "High-performance HTTP server, reverse proxy, and IMAP/POP3 proxy.",
      "category": "Networking",
      "image": "nginx:alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/nginx.png",
      "website": "https://nginx.org",
      "docsUrl": "https://nginx.org/en/docs/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nginx/conf",
          "container": "/etc/nginx/conf.d"
        },
        {
          "host": "/opt/appdata/nginx/html",
          "container": "/usr/share/nginx/html"
        },
        {
          "host": "/opt/appdata/nginx/certs",
          "container": "/etc/nginx/certs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "alpine"
    },
    {
      "slug": "nginx-dev",
      "name": "Nginx Dev",
      "description": "Nginx on Alpine for development, reverse proxy testing, and local routing.",
      "category": "Developer Tools",
      "image": "nginx:alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/nginx.png",
      "website": "https://nginx.org",
      "docsUrl": "https://nginx.org/en/docs/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nginx-dev/conf",
          "container": "/etc/nginx/conf.d"
        },
        {
          "host": "/opt/appdata/nginx-dev/html",
          "container": "/usr/share/nginx/html"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "alpine"
    },
    {
      "slug": "nginx-exporter",
      "name": "NGINX Prometheus Exporter",
      "description": "NGINX stub_status metrics exporter for Prometheus with Prometheus integration.",
      "category": "Monitoring",
      "image": "nginx/nginx-prometheus-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/nginxinc/nginx-prometheus-exporter",
      "docsUrl": "https://github.com/nginxinc/nginx-prometheus-exporter#docker",
      "ports": [
        {
          "host": 9113,
          "container": 9113,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nginx-proxy-manager",
      "name": "Nginx Proxy Manager",
      "description": "Expose your services with free SSL, reverse proxy management, and a clean UI.",
      "category": "Networking",
      "image": "jc21/nginx-proxy-manager:latest",
      "logo": "https://nginxproxymanager.com/icon.png",
      "website": "https://nginxproxymanager.com",
      "docsUrl": "https://nginxproxymanager.com/guide/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        },
        {
          "host": 81,
          "container": 81,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/npm/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/npm/letsencrypt",
          "container": "/etc/letsencrypt"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nifi",
      "name": "Apache NiFi",
      "description": "Visual data flow programming tool for routing, transforming, and mediating between systems.",
      "category": "Databases",
      "image": "apache/nifi:latest",
      "logo": "https://nifi.apache.org/logos/nifi-logo.png",
      "website": "https://nifi.apache.org",
      "docsUrl": "https://nifi.apache.org/docs/nifi-docs/getting-started.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nifi/data",
          "container": "/opt/nifi/nifi-current/data"
        },
        {
          "host": "/opt/appdata/nifi/logs",
          "container": "/opt/nifi/nifi-current/logs"
        },
        {
          "host": "/opt/appdata/nifi/conf",
          "container": "/opt/nifi/nifi-current/conf"
        }
      ],
      "envVars": [
        {
          "key": "NIFI_WEB_HTTP_PORT",
          "default": "8080",
          "description": "NiFi HTTP UI port"
        },
        {
          "key": "SINGLE_USER_CREDENTIALS_USERNAME",
          "default": "admin",
          "description": "Single-user auth username"
        },
        {
          "key": "SINGLE_USER_CREDENTIALS_PASSWORD",
          "default": "",
          "description": "Single-user auth password",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nitter",
      "name": "Nitter",
      "description": "Privacy-focused alternative Twitter front-end that serves public timelines without JavaScript, ads, or tracking.",
      "category": "Communications",
      "image": "zedeus/nitter:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/nitter.png",
      "website": "https://nitter.net",
      "docsUrl": "https://github.com/zedeus/nitter#readme",
      "ports": [
        {
          "host": 8085,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nitter/config",
          "container": "/src/nitter.conf"
        },
        {
          "host": "/opt/appdata/nitter/data",
          "container": "/src/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NITTER_TITLE",
          "default": "Nitter",
          "description": "Site title displayed in the header"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nocodb",
      "name": "NocoDB",
      "description": "Open-source Airtable alternative for databases and APIs.",
      "category": "Developer Tools",
      "image": "nocodb/nocodb:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/nocodb.png",
      "website": "https://nocodb.com",
      "docsUrl": "https://docs.nocodb.com",
      "ports": [
        {
          "host": 8086,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nocodb/data",
          "container": "/usr/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "node-20-dev",
      "name": "Node.js 20",
      "description": "Node.js 20 LTS runtime on Alpine Linux, balanced for production workloads and long-term support.",
      "category": "Developer Tools",
      "image": "node:20-alpine",
      "logo": "https://icon.horse/icon/nodejs.org",
      "website": "https://nodejs.org",
      "docsUrl": "https://nodejs.org/en/docs",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/node-20-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NODE_ENV",
          "default": "development",
          "description": "Node environment"
        }
      ],
      "version": "20-alpine"
    },
    {
      "slug": "node-dev",
      "name": "Node.js 22",
      "description": "JavaScript runtime built on Chrome's V8 engine, lightweight Alpine image for development workloads.",
      "category": "Developer Tools",
      "image": "node:22-alpine",
      "logo": "https://icon.horse/icon/nodejs.org",
      "website": "https://nodejs.org",
      "docsUrl": "https://nodejs.org/en/docs",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/node-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NODE_ENV",
          "default": "development",
          "description": "Node environment"
        }
      ],
      "version": "22-alpine"
    },
    {
      "slug": "node-exporter",
      "name": "Node Exporter",
      "description": "Prometheus exporter for host hardware and OS metrics.",
      "category": "Monitoring",
      "image": "prom/node-exporter:latest",
      "logo": "https://icon.horse/icon/prometheus.io",
      "website": "https://prometheus.io/docs/guides/node-exporter/",
      "docsUrl": "https://prometheus.io/docs/guides/node-exporter/",
      "ports": [
        {
          "host": 9100,
          "container": 9100,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/proc",
          "container": "/host/proc",
          "readOnly": true
        },
        {
          "host": "/sys",
          "container": "/host/sys",
          "readOnly": true
        },
        {
          "host": "/",
          "container": "/rootfs",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "node-lts-dev",
      "name": "Node.js LTS",
      "description": "Latest long-term support Node.js runtime on Alpine Linux for stable, supported development.",
      "category": "Developer Tools",
      "image": "node:lts-alpine",
      "logo": "https://icon.horse/icon/nodejs.org",
      "website": "https://nodejs.org",
      "docsUrl": "https://nodejs.org/en/docs",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/node-lts-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NODE_ENV",
          "default": "development",
          "description": "Node environment"
        }
      ],
      "version": "lts-alpine"
    },
    {
      "slug": "nodered",
      "name": "Node-RED",
      "description": "Flow-based programming tool for wiring together hardware, APIs, and services.",
      "category": "Home Automation",
      "image": "nodered/node-red:latest",
      "logo": "https://nodered.org/about/resources/media/node-red-icon-2.svg",
      "website": "https://nodered.org",
      "docsUrl": "https://nodered.org/docs/",
      "ports": [
        {
          "host": 1880,
          "container": 1880,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nodered/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nomad",
      "name": "HashiCorp Nomad",
      "description": "Workload orchestrator that deploys, manages, and scales containers and non-containerized apps.",
      "category": "Networking",
      "image": "hashicorp/nomad:latest",
      "logo": "https://www.nomadproject.io/assets/images/logo-hashicorp-nomad-color.svg",
      "website": "https://www.nomadproject.io",
      "docsUrl": "https://developer.hashicorp.com/nomad/docs",
      "ports": [
        {
          "host": 4646,
          "container": 4646,
          "protocol": "tcp"
        },
        {
          "host": 4647,
          "container": 4647,
          "protocol": "tcp"
        },
        {
          "host": 4648,
          "container": 4648,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nomad/config",
          "container": "/nomad/config"
        },
        {
          "host": "/opt/appdata/nomad/data",
          "container": "/nomad/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ntfy",
      "name": "ntfy",
      "description": "HTTP-based pub-sub notification service.",
      "category": "Notifications",
      "image": "binwiederhier/ntfy:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ntfy.png",
      "website": "https://ntfy.sh",
      "docsUrl": "https://docs.ntfy.sh",
      "ports": [
        {
          "host": 8091,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ntfy/cache",
          "container": "/var/cache/ntfy"
        },
        {
          "host": "/opt/appdata/ntfy/config",
          "container": "/etc/ntfy"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "nzbget",
      "name": "NZBGet",
      "description": "Efficient Usenet downloader with a web interface.",
      "category": "Media",
      "image": "lscr.io/linuxserver/nzbget:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/nzbget.png",
      "website": "https://docs.linuxserver.io/images/docker-nzbget/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-nzbget/",
      "ports": [
        {
          "host": 6789,
          "container": 6789,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/nzbget/config",
          "container": "/config"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "oauth2-proxy",
      "name": "oauth2-proxy",
      "description": "Reverse proxy that provides authentication as a service for OIDC and OAuth providers.",
      "category": "Networking",
      "image": "quay.io/oauth2-proxy/oauth2-proxy:latest",
      "logo": "https://oauth2-proxy.github.io/oauth2-proxy/images/logos/OAuth2_Proxy_horizontal.svg",
      "website": "https://oauth2-proxy.github.io/oauth2-proxy/",
      "docsUrl": "https://oauth2-proxy.github.io/oauth2-proxy/docs/",
      "ports": [
        {
          "host": 4180,
          "container": 4180,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/oauth2-proxy/config",
          "container": "/etc/oauth2-proxy"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "OAUTH2_PROXY_CLIENT_ID",
          "default": "",
          "description": "OAuth2 client ID"
        },
        {
          "key": "OAUTH2_PROXY_CLIENT_SECRET",
          "default": "",
          "description": "OAuth2 client secret",
          "secret": true
        },
        {
          "key": "OAUTH2_PROXY_COOKIE_SECRET",
          "default": "",
          "description": "Random 32-byte cookie secret",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "odoo",
      "name": "Odoo",
      "description": "Open-source business web suite for CRM, sales, inventory, accounting, websites, and internal apps.",
      "category": "Web Apps",
      "image": "odoo:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/odoo.png",
      "website": "https://www.odoo.com",
      "docsUrl": "https://hub.docker.com/_/odoo",
      "ports": [
        {
          "host": 8069,
          "container": 8069,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "ODOO_DATA_PATH",
          "default": "/opt/appdata/odoo/data",
          "description": "Host path for Odoo data"
        },
        {
          "key": "ODOO_ADDONS_PATH",
          "default": "/opt/appdata/odoo/addons",
          "description": "Host path for custom Odoo addons"
        },
        {
          "key": "ODOO_DB_PATH",
          "default": "/opt/appdata/odoo/db",
          "description": "Host path for PostgreSQL data"
        },
        {
          "key": "ODOO_DB_USER",
          "default": "odoo",
          "description": "PostgreSQL user"
        },
        {
          "key": "ODOO_DB_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    user: root\n    command: bash -lc 'mkdir -p /var/lib/odoo /mnt/extra-addons && chown -R 100:101 /var/lib/odoo /mnt/extra-addons && exec runuser -u odoo -- /entrypoint.sh odoo'\n    depends_on:\n      - {{serviceName}}-db\n{{ports}}\n    volumes:\n      - {{env.ODOO_DATA_PATH}}:/var/lib/odoo\n      - {{env.ODOO_ADDONS_PATH}}:/mnt/extra-addons\n    environment:\n      HOST: {{serviceName}}-db\n      USER: {{env.ODOO_DB_USER}}\n      PASSWORD: {{env.ODOO_DB_PASSWORD}}\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    volumes:\n      - {{env.ODOO_DB_PATH}}:/var/lib/postgresql/data\n    environment:\n      POSTGRES_DB: postgres\n      POSTGRES_USER: {{env.ODOO_DB_USER}}\n      POSTGRES_PASSWORD: {{env.ODOO_DB_PASSWORD}}\n",
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "ollama",
      "name": "Ollama",
      "description": "Run large language models locally. Supports Llama 3, Mistral, Gemma, Phi, and many more open-source models.",
      "category": "AI & Voice",
      "image": "ollama/ollama:latest",
      "logo": "https://ollama.com/public/ollama.png",
      "website": "https://ollama.com",
      "docsUrl": "https://github.com/ollama/ollama/blob/main/docs/README.md",
      "ports": [
        {
          "host": 11434,
          "container": 11434,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ollama/models",
          "container": "/root/.ollama"
        }
      ],
      "envVars": [
        {
          "key": "OLLAMA_HOST",
          "default": "0.0.0.0",
          "description": "Bind address for the Ollama API"
        },
        {
          "key": "OLLAMA_MODELS",
          "default": "/root/.ollama",
          "description": "Path to model storage directory"
        },
        {
          "key": "OLLAMA_NUM_PARALLEL",
          "default": "1",
          "description": "Number of parallel model requests"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "omada-controller",
      "name": "Omada Controller",
      "description": "TP-Link Omada SDN controller for access points and switches.",
      "category": "Networking",
      "image": "mbentley/omada-controller:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/mbentley/docker-omada-controller",
      "docsUrl": "https://github.com/mbentley/docker-omada-controller",
      "ports": [
        {
          "host": 8043,
          "container": 8043,
          "protocol": "tcp"
        },
        {
          "host": 8088,
          "container": 8088,
          "protocol": "tcp"
        },
        {
          "host": 8843,
          "container": 8843,
          "protocol": "tcp"
        },
        {
          "host": 29810,
          "container": 29810,
          "protocol": "tcp"
        },
        {
          "host": 29811,
          "container": 29811,
          "protocol": "tcp"
        },
        {
          "host": 29812,
          "container": 29812,
          "protocol": "tcp"
        },
        {
          "host": 29813,
          "container": 29813,
          "protocol": "tcp"
        },
        {
          "host": 29814,
          "container": 29814,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/omada-controller/data",
          "container": "/opt/tplink/EAPController/data"
        },
        {
          "host": "/opt/appdata/omada-controller/logs",
          "container": "/opt/tplink/EAPController/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MANAGE_HTTP_PORT",
          "default": "8088",
          "description": "Management HTTP port"
        },
        {
          "key": "MANAGE_HTTPS_PORT",
          "default": "8043",
          "description": "Management HTTPS port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "omnivore",
      "name": "Omnivore",
      "description": "Read-it-later app with highlighting, organization, and a personal knowledge base.",
      "category": "Documents",
      "image": "ghcr.io/omnivore-app/backend:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/omnivore.png",
      "website": "https://omnivore.app",
      "docsUrl": "https://github.com/omnivore-app/omnivore",
      "ports": [
        {
          "host": 8089,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/omnivore/data",
          "container": "/opt/omnivore-backend/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "JWT_SECRET",
          "default": "change-me",
          "description": "JWT signing secret",
          "secret": true
        },
        {
          "key": "DATABASE_URL",
          "default": "postgres://omnivore:change-me@omnivore-db:5432/omnivore",
          "description": "Postgres connection URL"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "onedev",
      "name": "OneDev",
      "description": "Self-hosted Git server with built-in CI/CD, kanban, and code search.",
      "category": "Developer Tools",
      "image": "1dev/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/onedev.png",
      "website": "https://onedev.io",
      "docsUrl": "https://docs.onedev.io/installation-guide",
      "ports": [
        {
          "host": 6610,
          "container": 6610,
          "protocol": "tcp"
        },
        {
          "host": 6611,
          "container": 6611,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/onedev/data",
          "container": "/var/lib/onedev"
        },
        {
          "host": "/opt/appdata/onedev/backup",
          "container": "/backup"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "onlyoffice",
      "name": "ONLYOFFICE Docs",
      "description": "Open-source online office suite for documents, spreadsheets, and presentations.",
      "category": "Documents",
      "image": "onlyoffice/documentserver:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/onlyoffice.png",
      "website": "https://www.onlyoffice.com",
      "docsUrl": "https://helpcenter.onlyoffice.com/installation/docs-community-install-docker.aspx",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/onlyoffice/data",
          "container": "/var/www/onlyoffice/Data"
        },
        {
          "host": "/opt/appdata/onlyoffice/logs",
          "container": "/var/log/onlyoffice"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "JWT_SECRET",
          "default": "change-me",
          "description": "JWT secret used for document signing",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "onlyoffice-workspace",
      "name": "ONLYOFFICE Workspace",
      "description": "All-in-one collaboration platform with documents, mail, CRM, projects, and calendar.",
      "category": "Documents",
      "image": "onlyoffice/communityserver:latest",
      "logo": "https://icon.horse/icon/www.onlyoffice.com",
      "website": "https://www.onlyoffice.com",
      "docsUrl": "https://helpcenter.onlyoffice.com/installation/workspace-install-docker.aspx",
      "ports": [
        {
          "host": 8081,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 8082,
          "container": 8081,
          "protocol": "tcp"
        },
        {
          "host": 8083,
          "container": 8083,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/onlyoffice-workspace/data",
          "container": "/var/www/onlyoffice/Data"
        },
        {
          "host": "/opt/appdata/onlyoffice-workspace/mysql",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ONLYOFFICE_HTTPS_PORT",
          "default": "443",
          "description": "External HTTPS port"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "open-webui",
      "name": "Open WebUI",
      "description": "Feature-rich self-hosted web interface for LLMs. Supports Ollama and OpenAI-compatible APIs with chat, RAG, model management, and more.",
      "category": "AI & Voice",
      "image": "ghcr.io/open-webui/open-webui:main",
      "logo": "https://raw.githubusercontent.com/open-webui/open-webui/main/static/favicon.png",
      "website": "https://openwebui.com",
      "docsUrl": "https://docs.openwebui.com",
      "ports": [
        {
          "host": 3000,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/open-webui/data",
          "container": "/app/backend/data"
        }
      ],
      "envVars": [
        {
          "key": "OLLAMA_BASE_URL",
          "default": "http://ollama:11434",
          "description": "Ollama API base URL"
        },
        {
          "key": "WEBUI_SECRET_KEY",
          "default": "",
          "description": "Secret key for session encryption",
          "secret": true
        },
        {
          "key": "WEBUI_AUTH",
          "default": "true",
          "description": "Enable authentication (true/false)"
        }
      ],
      "minMemory": "1GB",
      "version": "main"
    },
    {
      "slug": "openbao",
      "name": "OpenBao",
      "description": "Community-driven open-source fork of HashiCorp Vault for secrets management.",
      "category": "Security",
      "image": "openbao/openbao:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/openbao.png",
      "website": "https://openbao.org",
      "docsUrl": "https://openbao.org/docs",
      "ports": [
        {
          "host": 8200,
          "container": 8200,
          "protocol": "tcp"
        },
        {
          "host": 8201,
          "container": 8201,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/openbao/config",
          "container": "/openbao/config"
        },
        {
          "host": "/opt/appdata/openbao/data",
          "container": "/openbao/data"
        }
      ],
      "envVars": [
        {
          "key": "BAO_DEV_ROOT_TOKEN_ID",
          "default": "",
          "description": "Dev mode root token",
          "secret": true
        },
        {
          "key": "BAO_DEV_LISTEN_ADDRESS",
          "default": "0.0.0.0:8200",
          "description": "Dev mode listen address"
        },
        {
          "key": "BAO_LOCAL_CONFIG",
          "default": "",
          "description": "Inline HCL config"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "openhab",
      "name": "openHAB",
      "description": "Vendor-neutral home automation platform with a powerful rule engine.",
      "category": "Home Automation",
      "image": "openhab/openhab:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/openhab.png",
      "website": "https://www.openhab.org",
      "docsUrl": "https://www.openhab.org/docs/installation/docker.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/openhab/conf",
          "container": "/openhab/conf"
        },
        {
          "host": "/opt/appdata/openhab/userdata",
          "container": "/openhab/userdata"
        },
        {
          "host": "/opt/appdata/openhab/addons",
          "container": "/openhab/addons"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "OPENHAB_HTTP_PORT",
          "default": "8080",
          "description": "HTTP port"
        },
        {
          "key": "OPENHAB_HTTPS_PORT",
          "default": "8443",
          "description": "HTTPS port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "openresty",
      "name": "OpenResty",
      "description": "Nginx plus LuaJIT and a curated set of Lua libraries for powerful web apps.",
      "category": "Networking",
      "image": "openresty/openresty:alpine",
      "logo": "https://openresty.org/images/logo.png",
      "website": "https://openresty.org",
      "docsUrl": "https://openresty.org/en/documentation.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/openresty/conf",
          "container": "/etc/nginx/conf.d"
        },
        {
          "host": "/opt/appdata/openresty/html",
          "container": "/usr/local/openresty/nginx/html"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "alpine"
    },
    {
      "slug": "openresty-dev",
      "name": "OpenResty Dev",
      "description": "OpenResty full-fledged web platform with Nginx and LuaJIT for development.",
      "category": "Developer Tools",
      "image": "openresty/openresty:alpine",
      "logo": "https://icon.horse/icon/openresty.org",
      "website": "https://openresty.org",
      "docsUrl": "https://openresty.org/en/docker.html",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/openresty-dev/conf",
          "container": "/usr/local/openresty/conf"
        },
        {
          "host": "/opt/appdata/openresty-dev/logs",
          "container": "/usr/local/openresty/nginx/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "alpine"
    },
    {
      "slug": "openrouteservice",
      "name": "openrouteservice",
      "description": "Open-source routing engine for directions, isochrones, matrix, and geospatial analysis over OpenStreetMap data.",
      "category": "Databases",
      "image": "giscience/openrouteservice:latest",
      "logo": "https://openrouteservice.org/img/ors-logo.svg",
      "website": "https://openrouteservice.org",
      "docsUrl": "https://giscience.github.io/openrouteservice/installation/Running-with-Docker.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/openrouteservice/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/openrouteservice/conf",
          "container": "/conf"
        }
      ],
      "envVars": [
        {
          "key": "XMS",
          "default": "1g",
          "description": "JVM initial heap size"
        },
        {
          "key": "XMX",
          "default": "4g",
          "description": "JVM max heap size"
        },
        {
          "key": "ORS_APP_PROFILE",
          "default": "default",
          "description": "App configuration profile"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "opensearch",
      "name": "OpenSearch",
      "description": "Community-driven fork of Elasticsearch for search, observability, and analytics workloads.",
      "category": "Databases",
      "image": "opensearchproject/opensearch:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/opensearch.png",
      "website": "https://opensearch.org",
      "docsUrl": "https://opensearch.org/docs/latest/",
      "ports": [
        {
          "host": 9200,
          "container": 9200,
          "protocol": "tcp"
        },
        {
          "host": 9600,
          "container": 9600,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/opensearch/data",
          "container": "/usr/share/opensearch/data"
        }
      ],
      "envVars": [
        {
          "key": "discovery.type",
          "default": "single-node",
          "description": "Discovery mode (single-node for standalone)"
        },
        {
          "key": "OPENSEARCH_INITIAL_ADMIN_PASSWORD",
          "default": "",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "opensips",
      "name": "OpenSIPS",
      "description": "Open-source SIP proxy/registrar with routing, billing, and advanced VoIP features.",
      "category": "Communications",
      "image": "opensips/opensips:latest",
      "logo": "https://icon.horse/icon/www.opensips.org",
      "website": "https://www.opensips.org",
      "docsUrl": "https://opensips.org/docs",
      "ports": [
        {
          "host": 5060,
          "container": 5060,
          "protocol": "udp"
        },
        {
          "host": 5060,
          "container": 5060,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/opensips/etc",
          "container": "/etc/opensips"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "openstreetmap-tiles",
      "name": "OpenStreetMap Tile Server",
      "description": "Self-hosted OpenStreetMap raster tile server rendering map tiles from PostgreSQL/PostGIS data.",
      "category": "Databases",
      "image": "overv/openstreetmap-tile-server:latest",
      "logo": "https://www.openstreetmap.org/assets/osm_logo_256x256.png",
      "website": "https://github.com/overv/openstreetmap-tile-server",
      "docsUrl": "https://github.com/overv/openstreetmap-tile-server/blob/master/README.md",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/openstreetmap-tiles/data",
          "container": "/var/lib/postgresql/16/main"
        },
        {
          "host": "/opt/appdata/openstreetmap-tiles/tiles",
          "container": "/var/lib/mod_tile"
        }
      ],
      "envVars": [
        {
          "key": "THREADS",
          "default": "2",
          "description": "Render thread count"
        },
        {
          "key": "OSM2PGSQL_EXTRA_ARGS",
          "default": "",
          "description": "Extra arguments for osm2pgsql import"
        },
        {
          "key": "ALLOW_CORS",
          "default": "1",
          "description": "Allow CORS on tile endpoint"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "openthread-border-router",
      "name": "OpenThread Border Router",
      "description": "Thread border router enabling Thread mesh networking for Matter and IoT devices.",
      "category": "Home Automation",
      "image": "openthread/otbr:latest",
      "logo": "https://openthread.io/images/ot-contrib-google.png",
      "website": "https://openthread.io",
      "docsUrl": "https://openthread.io/guides/border-router",
      "ports": [
        {
          "host": 8086,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/otbr/data",
          "container": "/var/lib/thread"
        }
      ],
      "envVars": [
        {
          "key": "INFRA_IF_NAME",
          "default": "eth0",
          "description": "Infrastructure network interface"
        },
        {
          "key": "BACKBONE_IF_NAME",
          "default": "eth0",
          "description": "Backbone network interface"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "openwakeword",
      "name": "openWakeWord",
      "description": "Open-source wake word detection for voice assistants using on-device processing.",
      "category": "AI & Voice",
      "image": "rhasspy/wyoming-openwakeword:latest",
      "logo": "https://github.githubassets.com/favicons/favicon.svg",
      "website": "https://github.com/dscripka/openWakeWord",
      "docsUrl": "https://github.com/rhasspy/wyoming-openwakeword#readme",
      "ports": [
        {
          "host": 10400,
          "container": 10400,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/openwakeword/custom",
          "container": "/custom"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "orientdb",
      "name": "OrientDB",
      "description": "Multi-model NoSQL database supporting graph, document, object, and key-value models.",
      "category": "Databases",
      "image": "orientdb:3.2",
      "logo": "https://icon.horse/icon/www.orientdb.org",
      "website": "https://www.orientdb.org",
      "docsUrl": "https://orientdb.org/docs",
      "ports": [
        {
          "host": 2480,
          "container": 2480,
          "protocol": "tcp"
        },
        {
          "host": 2424,
          "container": 2424,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/orientdb/data",
          "container": "/orientdb/databases"
        },
        {
          "host": "/opt/appdata/orientdb/config",
          "container": "/orientdb/config"
        }
      ],
      "envVars": [
        {
          "key": "ORIENTDB_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        }
      ],
      "version": "3.2"
    },
    {
      "slug": "ory-hydra",
      "name": "Ory Hydra",
      "description": "Open-source OAuth2 and OpenID Connect server with full spec compliance.",
      "category": "Security",
      "image": "oryd/hydra:latest",
      "logo": "https://icon.horse/icon/www.ory.sh",
      "website": "https://www.ory.sh/hydra",
      "docsUrl": "https://www.ory.sh/hydra/docs",
      "ports": [
        {
          "host": 4444,
          "container": 4444,
          "protocol": "tcp"
        },
        {
          "host": 4445,
          "container": 4445,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ory-hydra/config",
          "container": "/etc/config/hydra"
        }
      ],
      "envVars": [
        {
          "key": "DSN",
          "default": "postgres://hydra:change-me@ory-hydra-postgres:5432/hydra?sslmode=disable",
          "description": "Database DSN",
          "secret": true
        },
        {
          "key": "SECRETS_SYSTEM",
          "default": "change-me-32-chars-or-more",
          "description": "System secret",
          "secret": true
        },
        {
          "key": "URLS_PUBLIC",
          "default": "http://localhost:4444",
          "description": "Public URL"
        },
        {
          "key": "URLS_ADMIN",
          "default": "http://localhost:4445",
          "description": "Admin URL"
        },
        {
          "key": "URLS_CONSENT",
          "default": "http://localhost:3000/consent",
          "description": "Consent URL"
        },
        {
          "key": "URLS_LOGIN",
          "default": "http://localhost:3000/login",
          "description": "Login URL"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "ory-kratos",
      "name": "Ory Kratos",
      "description": "Identity server with login, registration, account recovery, and profile management.",
      "category": "Security",
      "image": "oryd/kratos:latest",
      "logo": "https://icon.horse/icon/www.ory.sh",
      "website": "https://www.ory.sh/kratos",
      "docsUrl": "https://www.ory.sh/kratos/docs",
      "ports": [
        {
          "host": 4433,
          "container": 4433,
          "protocol": "tcp"
        },
        {
          "host": 4434,
          "container": 4434,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ory-kratos/config",
          "container": "/etc/config/kratos"
        },
        {
          "host": "/opt/appdata/ory-kratos/db",
          "container": "/var/lib/sqlite"
        }
      ],
      "envVars": [
        {
          "key": "DSN",
          "default": "sqlite:///var/lib/sqlite/kratos.db?mode=rwc&_fk=true",
          "description": "Database DSN",
          "secret": true
        },
        {
          "key": "SECRETS_DEFAULT",
          "default": "change-me-32-chars-or-more",
          "description": "Default secret for cookie/HMAC",
          "secret": true
        },
        {
          "key": "SERVE_PUBLIC_BASE_URL",
          "default": "https://auth.example.com",
          "description": "Public base URL"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "ory-oathkeeper",
      "name": "Ory Oathkeeper",
      "description": "Identity and access proxy that authenticates and authorizes incoming HTTP requests.",
      "category": "Security",
      "image": "oryd/oathkeeper:latest",
      "logo": "https://icon.horse/icon/www.ory.sh",
      "website": "https://www.ory.sh/oathkeeper",
      "docsUrl": "https://www.ory.sh/oathkeeper/docs",
      "ports": [
        {
          "host": 4455,
          "container": 4455,
          "protocol": "tcp"
        },
        {
          "host": 4456,
          "container": 4456,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ory-oathkeeper/config",
          "container": "/etc/config/oathkeeper"
        }
      ],
      "envVars": [
        {
          "key": "ACCESS_RULES",
          "default": "/etc/config/oathkeeper/access-rules.yml",
          "description": "Path to access rules"
        },
        {
          "key": "MUTATORS",
          "default": "/etc/config/oathkeeper/mutators.yml",
          "description": "Path to mutators config"
        },
        {
          "key": "AUTHENTICATORS",
          "default": "/etc/config/oathkeeper/authenticators.yml",
          "description": "Path to authenticators config"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "osrm-backend",
      "name": "OSRM Backend",
      "description": "High-performance Open Source Routing Machine for shortest paths, distances, and map matching over OSM data.",
      "category": "Databases",
      "image": "osrm/osrm-backend:latest",
      "logo": "http://project-osrm.org/img/osrm-logo.png",
      "website": "http://project-osrm.org",
      "docsUrl": "http://project-osrm.org/docs/v5.24.0/api/",
      "ports": [
        {
          "host": 5000,
          "container": 5000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/osrm-backend/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ossec",
      "name": "OSSEC",
      "description": "Open-source host-based intrusion detection system for log monitoring and file integrity.",
      "category": "Security",
      "image": "atomicorp/ossec-docker:latest",
      "logo": "https://icon.horse/icon/www.ossec.net",
      "website": "https://www.ossec.net",
      "docsUrl": "https://www.ossec.net/docs",
      "ports": [
        {
          "host": 1514,
          "container": 1514,
          "protocol": "udp"
        },
        {
          "host": 514,
          "container": 514,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ossec/etc",
          "container": "/var/ossec/etc"
        },
        {
          "host": "/opt/appdata/ossec/var",
          "container": "/var/ossec/var"
        },
        {
          "host": "/opt/appdata/ossec/logs",
          "container": "/var/ossec/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "osticket",
      "name": "osTicket",
      "description": "Open-source support ticket system for managing customer service requests and workflows.",
      "category": "Productivity",
      "image": "osticket/osticket:latest",
      "logo": "https://osticket.com/sites/default/files/favicon_0.ico",
      "website": "https://osticket.com",
      "docsUrl": "https://docs.osticket.com",
      "ports": [
        {
          "host": 8593,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/osticket/html",
          "container": "/var/www/html"
        },
        {
          "host": "/opt/appdata/osticket/attachments",
          "container": "/var/www/html/attachments"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MYSQL_HOST",
          "default": "mariadb",
          "description": "Database host"
        },
        {
          "key": "MYSQL_DATABASE",
          "default": "osticket",
          "description": "Database name"
        },
        {
          "key": "MYSQL_USER",
          "default": "osticket",
          "description": "Database user"
        },
        {
          "key": "MYSQL_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "otel-collector",
      "name": "OpenTelemetry Collector",
      "description": "Vendor-agnostic OpenTelemetry Collector for receiving, processing and exporting telemetry data.",
      "category": "Monitoring",
      "image": "otel/opentelemetry-collector:latest",
      "logo": "https://icon.horse/icon/opentelemetry.io",
      "website": "https://opentelemetry.io",
      "docsUrl": "https://opentelemetry.io/docs/collector/",
      "ports": [
        {
          "host": 4317,
          "container": 4317,
          "protocol": "tcp"
        },
        {
          "host": 4318,
          "container": 4318,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/otel-collector/config",
          "container": "/etc/otelcol"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "outline",
      "name": "Outline",
      "description": "Team knowledge base and wiki with real-time collaborative editing and search.",
      "category": "Documents",
      "image": "outlinewiki/outline:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/outline.png",
      "website": "https://www.getoutline.com",
      "docsUrl": "https://docs.getoutline.com/s/hosting",
      "ports": [
        {
          "host": 3003,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/outline/data",
          "container": "/var/lib/outline"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "URL",
          "default": "http://localhost:3003",
          "description": "Public URL where Outline is hosted"
        },
        {
          "key": "SECRET_KEY",
          "default": "change-me",
          "description": "Outline secret key (64+ hex chars)",
          "secret": true
        },
        {
          "key": "UTILS_SECRET",
          "default": "change-me",
          "description": "Utility secret (32+ chars)",
          "secret": true
        },
        {
          "key": "DATABASE_URL",
          "default": "postgres://outline:change-me@outline-db:5432/outline",
          "description": "Postgres connection URL"
        },
        {
          "key": "REDIS_URL",
          "default": "redis://outline-redis:6379",
          "description": "Redis connection URL"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "overseerr",
      "name": "Overseerr",
      "description": "Request management and media discovery tool for your Plex ecosystem.",
      "category": "Media",
      "image": "lscr.io/linuxserver/overseerr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/overseerr.png",
      "website": "https://overseerr.dev",
      "docsUrl": "https://docs.overseerr.dev",
      "ports": [
        {
          "host": 5055,
          "container": 5055,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/overseerr/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "owncast",
      "name": "Owncast",
      "description": "Self-hosted live video streaming and chat server for your community.",
      "category": "Media",
      "image": "owncast/owncast:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/owncast.png",
      "website": "https://owncast.online",
      "docsUrl": "https://owncast.online/docs/installation/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 1935,
          "container": 1935,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/owncast/config",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "owncloud",
      "name": "ownCloud",
      "description": "Self-hosted file sync, sharing, and collaboration platform with strong data sovereignty.",
      "category": "Photos & Files",
      "image": "owncloud/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/owncloud.png",
      "website": "https://owncloud.com",
      "docsUrl": "https://doc.owncloud.com",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/owncloud/config",
          "container": "/var/www/html/config"
        },
        {
          "host": "/opt/appdata/owncloud/data",
          "container": "/var/www/html/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "OWNCLOUD_ADMIN_USERNAME",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "OWNCLOUD_ADMIN_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        },
        {
          "key": "OWNCLOUD_DOMAIN",
          "default": "localhost",
          "description": "Trusted domain"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "paperless",
      "name": "Paperless-ngx",
      "description": "Community-supported document management system with OCR, tagging, and search.",
      "category": "Documents",
      "image": "ghcr.io/paperless-ngx/paperless-ngx:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/paperless.png",
      "website": "https://docs.paperless-ngx.com",
      "docsUrl": "https://docs.paperless-ngx.com/setup/",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/paperless/data",
          "container": "/usr/src/paperless/data"
        },
        {
          "host": "/opt/appdata/paperless/media",
          "container": "/usr/src/paperless/media"
        },
        {
          "host": "/opt/appdata/paperless/consume",
          "container": "/usr/src/paperless/consume"
        },
        {
          "host": "/opt/appdata/paperless/export",
          "container": "/usr/src/paperless/export"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "USERMAP_UID",
          "default": "1000",
          "description": "UID for the paperless user"
        },
        {
          "key": "USERMAP_GID",
          "default": "1000",
          "description": "GID for the paperless user"
        },
        {
          "key": "PAPERLESS_REDIS",
          "default": "redis://paperless-redis:6379",
          "description": "Redis connection URL"
        },
        {
          "key": "PAPERLESS_DBHOST",
          "default": "paperless-db",
          "description": "Database host"
        },
        {
          "key": "PAPERLESS_DBNAME",
          "default": "paperless",
          "description": "Database name"
        },
        {
          "key": "PAPERLESS_DBUSER",
          "default": "paperless",
          "description": "Database user"
        },
        {
          "key": "PAPERLESS_DBPASS",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "PAPERLESS_SECRET_KEY",
          "default": "change-me",
          "description": "Django secret key",
          "secret": true
        }
      ],
      "minMemory": "1GB",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    depends_on:\n      - {{serviceName}}-db\n      - {{serviceName}}-redis\n    environment:\n      TZ: {{env.TZ}}\n      USERMAP_UID: {{env.USERMAP_UID}}\n      USERMAP_GID: {{env.USERMAP_GID}}\n      PAPERLESS_REDIS: {{env.PAPERLESS_REDIS}}\n      PAPERLESS_DBHOST: {{serviceName}}-db\n      PAPERLESS_DBNAME: {{env.PAPERLESS_DBNAME}}\n      PAPERLESS_DBUSER: {{env.PAPERLESS_DBUSER}}\n      PAPERLESS_DBPASS: {{env.PAPERLESS_DBPASS}}\n      PAPERLESS_SECRET_KEY: {{env.PAPERLESS_SECRET_KEY}}\n    volumes:\n      - {{appDataPath}}/data:/usr/src/paperless/data\n      - {{appDataPath}}/media:/usr/src/paperless/media\n      - {{appDataPath}}/consume:/usr/src/paperless/consume\n      - {{appDataPath}}/export:/usr/src/paperless/export\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: {{env.PAPERLESS_DBNAME}}\n      POSTGRES_USER: {{env.PAPERLESS_DBUSER}}\n      POSTGRES_PASSWORD: {{env.PAPERLESS_DBPASS}}\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n  {{serviceName}}-redis:\n    image: redis:7-alpine\n    container_name: {{containerName}}-redis\n    restart: unless-stopped\n    volumes:\n      - {{appDataPath}}/redis:/data\n",
      "version": "latest"
    },
    {
      "slug": "paperless-ai",
      "name": "Paperless-AI",
      "description": "AI-powered auto-tagging and summarization for paperless-ngx documents.",
      "category": "Documents",
      "image": "clusterzx/paperless-ai:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/paperless-ai.png",
      "website": "https://github.com/clusterzx/paperless-ai",
      "docsUrl": "https://github.com/clusterzx/paperless-ai",
      "ports": [
        {
          "host": 8098,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/paperless-ai/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PAPERLESS_URL",
          "default": "http://paperless:8000",
          "description": "Paperless-ngx base URL"
        },
        {
          "key": "PAPERLESS_TOKEN",
          "default": "change-me",
          "description": "Paperless-ngx API token",
          "secret": true
        },
        {
          "key": "OPENAI_API_KEY",
          "default": "",
          "description": "OpenAI API key",
          "secret": true
        },
        {
          "key": "AI_MODEL",
          "default": "gpt-4o-mini",
          "description": "OpenAI model to use"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "paperless-ngx",
      "name": "Paperless-ngx",
      "description": "Document management system that transforms physical documents into a searchable archive.",
      "category": "Productivity",
      "image": "ghcr.io/paperless-ngx/paperless-ngx:latest",
      "logo": "https://docs.paperless-ngx.com/assets/favicon.png",
      "website": "https://docs.paperless-ngx.com",
      "docsUrl": "https://docs.paperless-ngx.com",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/paperless/data",
          "container": "/usr/src/paperless/data"
        },
        {
          "host": "/opt/appdata/paperless/media",
          "container": "/usr/src/paperless/media"
        },
        {
          "host": "/opt/appdata/paperless/consume",
          "container": "/usr/src/paperless/consume"
        }
      ],
      "envVars": [
        {
          "key": "PAPERLESS_SECRET_KEY",
          "default": "",
          "description": "Secret key for sessions",
          "secret": true
        },
        {
          "key": "PAPERLESS_ADMIN_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "PAPERLESS_ADMIN_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "papermerge",
      "name": "Papermerge",
      "description": "Document management system for scanned documents and PDFs.",
      "category": "Documents",
      "image": "papermerge/papermerge:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/papermerge.png",
      "website": "https://papermerge.com",
      "docsUrl": "https://docs.papermerge.io",
      "ports": [
        {
          "host": 12000,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/papermerge/data",
          "container": "/db"
        },
        {
          "host": "/opt/appdata/papermerge/media",
          "container": "/media"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "passbolt",
      "name": "Passbolt",
      "description": "Team-oriented password manager with end-to-end encryption and sharing.",
      "category": "Security",
      "image": "passbolt/passbolt:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/passbolt.png",
      "website": "https://www.passbolt.com",
      "docsUrl": "https://www.passbolt.com/docs/hosting",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/passbolt/config",
          "container": "/etc/passbolt"
        },
        {
          "host": "/opt/appdata/passbolt/backup",
          "container": "/mnt/backup"
        }
      ],
      "envVars": [
        {
          "key": "APP_FULL_BASE_URL",
          "default": "https://passbolt.example.com",
          "description": "Public base URL"
        },
        {
          "key": "DATASOURCES_DEFAULT_HOST",
          "default": "passbolt-db",
          "description": "Database host"
        },
        {
          "key": "DATASOURCES_DEFAULT_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "EMAIL_DEFAULT_FROM",
          "default": "passbolt@example.com",
          "description": "Default sender email"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "percona-server",
      "name": "Percona Server",
      "description": "Enterprise-grade MySQL-compatible database with enhanced performance and diagnostics.",
      "category": "Databases",
      "image": "percona/percona-server:8.0",
      "logo": "https://icon.horse/icon/www.percona.com",
      "website": "https://www.percona.com",
      "docsUrl": "https://docs.percona.com/percona-server/8.0/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/percona-server/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MYSQL_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "MYSQL_DATABASE",
          "default": "mydb",
          "description": "Default database name"
        }
      ],
      "version": "8.0"
    },
    {
      "slug": "percona-xtradb",
      "name": "Percona XtraDB Cluster",
      "description": "High-availability MySQL cluster with synchronous replication and multi-master topology.",
      "category": "Databases",
      "image": "percona/percona-xtradb-cluster:8.0",
      "logo": "https://icon.horse/icon/www.percona.com",
      "website": "https://www.percona.com/software/mysql-database/percona-xtradb-cluster",
      "docsUrl": "https://docs.percona.com/percona-xtradb-cluster/8.0/",
      "ports": [
        {
          "host": 3306,
          "container": 3306,
          "protocol": "tcp"
        },
        {
          "host": 4567,
          "container": 4567,
          "protocol": "tcp"
        },
        {
          "host": 4568,
          "container": 4568,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/percona-xtradb/data",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "MYSQL_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        },
        {
          "key": "CLUSTER_NAME",
          "default": "pxc-cluster",
          "description": "Name of the Galera cluster"
        },
        {
          "key": "XTRABACKUP_PASSWORD",
          "default": "",
          "description": "Password for SST/IST authentication",
          "secret": true
        }
      ],
      "version": "8.0"
    },
    {
      "slug": "pgadmin",
      "name": "pgAdmin",
      "description": "PostgreSQL administration and query UI.",
      "category": "Developer Tools",
      "image": "dpage/pgadmin4:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/pgadmin.png",
      "website": "https://www.pgadmin.org",
      "docsUrl": "https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html",
      "ports": [
        {
          "host": 5050,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pgadmin/data",
          "container": "/var/lib/pgadmin"
        }
      ],
      "envVars": [
        {
          "key": "PGADMIN_DEFAULT_EMAIL",
          "default": "admin@example.com",
          "description": "Default login email"
        },
        {
          "key": "PGADMIN_DEFAULT_PASSWORD",
          "default": "change-me",
          "description": "Default login password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "pgvector",
      "name": "pgvector",
      "description": "PostgreSQL with the pgvector extension for storing and searching vector embeddings.",
      "category": "Databases",
      "image": "pgvector/pgvector:pg16",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/pgvector/pgvector",
      "docsUrl": "https://github.com/pgvector/pgvector#readme",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pgvector/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "vectordb",
          "description": "Default database name"
        }
      ],
      "version": "pg16"
    },
    {
      "slug": "phabricator",
      "name": "Phabricator",
      "description": "Suite of code review, project management, and collaboration tools.",
      "category": "Developer Tools",
      "image": "phabricator/phabricator:latest",
      "logo": "https://icon.horse/icon/www.phacility.com",
      "website": "https://www.phacility.com",
      "docsUrl": "https://www.phacility.com/phabricator/",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/phabricator/repo",
          "container": "/var/repo"
        },
        {
          "host": "/opt/appdata/phabricator/conf",
          "container": "/etc/phacility"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "photoprism",
      "name": "PhotoPrism",
      "description": "AI-powered photo management for private photo collections.",
      "category": "Photos & Files",
      "image": "photoprism/photoprism:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/photoprism.png",
      "website": "https://www.photoprism.app",
      "docsUrl": "https://docs.photoprism.app",
      "ports": [
        {
          "host": 2342,
          "container": 2342,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/photoprism/storage",
          "container": "/photoprism/storage"
        },
        {
          "host": "/srv/photos",
          "container": "/photoprism/originals"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PHOTOPRISM_ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "photoprism-stable",
      "name": "PhotoPrism Stable",
      "description": "AI-powered photo management for private collections (stable track).",
      "category": "Photos & Files",
      "image": "photoprism/photoprism:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/photoprism.png",
      "website": "https://www.photoprism.app",
      "docsUrl": "https://docs.photoprism.app",
      "ports": [
        {
          "host": 2342,
          "container": 2342,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/photoprism-stable/storage",
          "container": "/photoprism/storage"
        },
        {
          "host": "/srv/photos",
          "container": "/photoprism/originals"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PHOTOPRISM_ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "photoview",
      "name": "Photoview",
      "description": "Simple, fast photo gallery with sharing, EXIF, and user authentication.",
      "category": "Photos & Files",
      "image": "photoview/photoview:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/photoview.png",
      "website": "https://photoview.github.io",
      "docsUrl": "https://github.com/photoview/photoview",
      "ports": [
        {
          "host": 4000,
          "container": 4000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/photoview/config",
          "container": "/app/data"
        },
        {
          "host": "/srv/photos",
          "container": "/photos"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PHOTOVIEW_DATABASE_URL",
          "default": "postgresql://photoview:photoview@photoview-db:5432/photoview",
          "description": "Database connection URL"
        },
        {
          "key": "PHOTOVIEW_LISTEN_IP",
          "default": "0.0.0.0",
          "description": "Listen IP"
        },
        {
          "key": "PHOTOVIEW_LISTEN_PORT",
          "default": "4000",
          "description": "Listen port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "php-82-dev",
      "name": "PHP-FPM 8.2",
      "description": "PHP-FPM 8.2 on Alpine, FastCGI Process Manager for serving PHP behind a web server.",
      "category": "Developer Tools",
      "image": "php:8.2-fpm-alpine",
      "logo": "https://icon.horse/icon/www.php.net",
      "website": "https://www.php.net",
      "docsUrl": "https://www.php.net/manual/en/",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/php-82-dev/app",
          "container": "/var/www/html"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "8.2-fpm-alpine"
    },
    {
      "slug": "php-dev",
      "name": "PHP-FPM 8.3",
      "description": "PHP-FPM 8.3 on Alpine, FastCGI Process Manager for serving PHP behind a web server.",
      "category": "Developer Tools",
      "image": "php:8.3-fpm-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/php.png",
      "website": "https://www.php.net",
      "docsUrl": "https://www.php.net/manual/en/",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/php-dev/app",
          "container": "/var/www/html"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "8.3-fpm-alpine"
    },
    {
      "slug": "phpldapadmin",
      "name": "phpLDAPadmin",
      "description": "Web-based LDAP administration interface for browsing and editing directory entries.",
      "category": "Security",
      "image": "osixia/phpldapadmin:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/phpldapadmin.png",
      "website": "https://github.com/leenooks/phpLDAPadmin",
      "docsUrl": "https://github.com/osixia/docker-phpLDAPadmin",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/phpldapadmin/config",
          "container": "/container/service/phpldapadmin/assets/config"
        }
      ],
      "envVars": [
        {
          "key": "PHPLDAPADMIN_LDAP_HOSTS",
          "default": "ldap://openldap:389",
          "description": "LDAP server URI"
        },
        {
          "key": "PHPLDAPADMIN_HTTPS",
          "default": "false",
          "description": "Force HTTPS"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "128MB",
      "version": "latest"
    },
    {
      "slug": "phpmyadmin",
      "name": "phpMyAdmin",
      "description": "Web administration UI for MySQL and MariaDB.",
      "category": "Developer Tools",
      "image": "phpmyadmin:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/phpmyadmin.png",
      "website": "https://www.phpmyadmin.net",
      "docsUrl": "https://hub.docker.com/_/phpmyadmin",
      "ports": [
        {
          "host": 8085,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PMA_ARBITRARY",
          "default": "1",
          "description": "Allow connecting to arbitrary servers"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "pigallery2",
      "name": "PiGallery2",
      "description": "Fast directory-based photo gallery with face recognition and map view.",
      "category": "Photos & Files",
      "image": "bpatrik/pigallery2:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/pigallery2.png",
      "website": "https://bpatrik.github.io/pigallery2/",
      "docsUrl": "https://github.com/bpatrik/pigallery2",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pigallery2/config",
          "container": "/app/data"
        },
        {
          "host": "/srv/photos",
          "container": "/app/picture"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "pihole",
      "name": "Pi-hole",
      "description": "Network-wide ad blocking via your own DNS server.",
      "category": "Networking",
      "image": "pihole/pihole:latest",
      "logo": "https://icon.horse/icon/pi-hole.net",
      "website": "https://pi-hole.net",
      "docsUrl": "https://docs.pi-hole.net",
      "ports": [
        {
          "host": 53,
          "container": 53,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        },
        {
          "host": 8880,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pihole/etc-pihole",
          "container": "/etc/pihole"
        },
        {
          "host": "/opt/appdata/pihole/etc-dnsmasq.d",
          "container": "/etc/dnsmasq.d"
        }
      ],
      "envVars": [
        {
          "key": "WEBPASSWORD",
          "default": "",
          "description": "Admin dashboard password",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "PIHOLE_DNS_",
          "default": "8.8.8.8;8.8.4.4",
          "description": "Upstream DNS servers"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ping-exporter",
      "name": "Ping Exporter",
      "description": "ICMP ping exporter for Prometheus with RTT, packet loss and per-target reachability.",
      "category": "Monitoring",
      "image": "czerwonk/ping_exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/czerwonk/ping_exporter",
      "docsUrl": "https://github.com/czerwonk/ping_exporter#docker",
      "ports": [
        {
          "host": 9427,
          "container": 9427,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PING_ARGS",
          "default": "-i 1s -W 2s",
          "description": "Args passed to ping command"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "pingvin-share",
      "name": "Pingvin Share",
      "description": "Simple self-hosted file sharing with expiring links.",
      "category": "Photos & Files",
      "image": "stonith404/pingvin-share:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/pingvin-share.png",
      "website": "https://stonith404.github.io/pingvin-share",
      "docsUrl": "https://stonith404.github.io/pingvin-share",
      "ports": [
        {
          "host": 3001,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pingvin-share/data",
          "container": "/opt/app/backend/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "pinot",
      "name": "Apache Pinot",
      "description": "Real-time distributed OLAP datastore for low-latency analytics on streaming data.",
      "category": "Databases",
      "image": "apachepinot/pinot:latest",
      "logo": "https://icon.horse/icon/pinot.apache.org",
      "website": "https://pinot.apache.org",
      "docsUrl": "https://docs.pinot.apache.org",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        },
        {
          "host": 8099,
          "container": 8099,
          "protocol": "tcp"
        },
        {
          "host": 7500,
          "container": 7500,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pinot/data",
          "container": "/var/pinot"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "piper",
      "name": "Piper",
      "description": "Fast local neural text-to-speech engine exposed as a Wyoming protocol server for Home Assistant Assist.",
      "category": "AI & Voice",
      "image": "lscr.io/linuxserver/piper:latest",
      "logo": "https://raw.githubusercontent.com/rhasspy/piper/master/etc/logo.png",
      "website": "https://github.com/OHF-Voice/piper1-gpl",
      "docsUrl": "https://docs.linuxserver.io/images/docker-piper/",
      "ports": [
        {
          "host": 10200,
          "container": 10200,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/piper/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "PIPER_VOICE",
          "default": "en_US-lessac-medium",
          "description": "Piper voice model to use"
        },
        {
          "key": "LOCAL_ONLY",
          "default": "",
          "description": "Set to true to use only locally provided models"
        },
        {
          "key": "PIPER_LENGTH",
          "default": "1.0",
          "description": "Speaking rate; lower values are faster"
        },
        {
          "key": "PIPER_NOISE",
          "default": "0.667",
          "description": "Voice variability"
        },
        {
          "key": "PIPER_NOISEW",
          "default": "0.333",
          "description": "Speaking cadence variability"
        },
        {
          "key": "PIPER_SPEAKER",
          "default": "0",
          "description": "Speaker number for multi-speaker voices"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "piwigo",
      "name": "Piwigo",
      "description": "Photo gallery web application with categories, tags, and user management.",
      "category": "Photos & Files",
      "image": "linuxserver/piwigo:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/piwigo.png",
      "website": "https://piwigo.org",
      "docsUrl": "https://docs.linuxserver.io/images/docker-piwigo",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/piwigo/config",
          "container": "/config"
        },
        {
          "host": "/srv/photos",
          "container": "/gallery"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "plane",
      "name": "Plane",
      "description": "Open-source project, sprint, and issue tracking platform for engineering and product teams.",
      "category": "Productivity",
      "image": "makeplane/plane-backend:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/plane.png",
      "website": "https://plane.so",
      "docsUrl": "https://developers.plane.so",
      "ports": [
        {
          "host": 8606,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/plane/data",
          "container": "/code/plane-app/media"
        },
        {
          "host": "/opt/appdata/plane/logs",
          "container": "/code/plane-app/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DATABASE_URL",
          "default": "postgresql://plane:plane@postgres/plane",
          "description": "PostgreSQL connection URL",
          "secret": true
        },
        {
          "key": "REDIS_URL",
          "default": "redis://redis:6379/",
          "description": "Redis connection URL"
        },
        {
          "key": "SECRET_KEY",
          "default": "",
          "description": "Application secret key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "planka",
      "name": "Planka",
      "description": "Kanban board for project and task management.",
      "category": "Productivity",
      "image": "ghcr.io/plankanban/planka:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/planka.png",
      "website": "https://planka.app",
      "docsUrl": "https://docs.planka.cloud",
      "ports": [
        {
          "host": 3000,
          "container": 1337,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/planka/user-avatars",
          "container": "/app/public/user-avatars"
        },
        {
          "host": "/opt/appdata/planka/project-background-images",
          "container": "/app/public/project-background-images"
        },
        {
          "host": "/opt/appdata/planka/attachments",
          "container": "/app/private/attachments"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BASE_URL",
          "default": "http://localhost:3000",
          "description": "External URL"
        },
        {
          "key": "SECRET_KEY",
          "default": "change-me",
          "description": "Secret key",
          "secret": true
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      BASE_URL: {{env.BASE_URL}}\n      SECRET_KEY: {{env.SECRET_KEY}}\n      DATABASE_URL: \"postgresql://planka:{{envRaw.POSTGRES_PASSWORD}}@{{serviceName}}-db:5432/planka\"\n      TZ: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/user-avatars:/app/public/user-avatars\n      - {{appDataPath}}/project-background-images:/app/public/project-background-images\n      - {{appDataPath}}/attachments:/app/private/attachments\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: postgres:16-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_USER: planka\n      POSTGRES_PASSWORD: {{env.POSTGRES_PASSWORD}}\n      POSTGRES_DB: planka\n    volumes:\n      - {{appDataPath}}/postgres:/var/lib/postgresql/data\n"
    },
    {
      "slug": "plantuml-server",
      "name": "PlantUML Server",
      "description": "Web server that generates UML diagrams (sequence, class, activity, state, component, deployment) from plain text descriptions.",
      "category": "Productivity",
      "image": "plantuml/plantuml-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/plantuml.png",
      "website": "https://plantuml.com",
      "docsUrl": "https://plantuml.com/guide",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/plantuml-server/data",
          "container": "/opt/plantuml-service"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "playwright",
      "name": "Playwright",
      "description": "Microsoft Playwright image with browsers and tools for reliable end-to-end testing.",
      "category": "Developer Tools",
      "image": "mcr.microsoft.com/playwright:latest",
      "logo": "https://icon.horse/icon/playwright.dev",
      "website": "https://playwright.dev",
      "docsUrl": "https://playwright.dev/docs/docker",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/playwright/data",
          "container": "/ms-playwright"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PLAYWRIGHT_BROWSERS_PATH",
          "default": "/ms-playwright",
          "description": "Browsers install path"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "playwright-mcp",
      "name": "Playwright MCP",
      "description": "Browser automation MCP server for AI-driven testing, screenshots, and web interaction.",
      "category": "MCP Services",
      "image": "mcr.microsoft.com/playwright/mcp:latest",
      "logo": "https://raw.githubusercontent.com/microsoft/playwright/main/packages/web/src/assets/playwright-logo.svg",
      "website": "https://playwright.dev",
      "docsUrl": "https://github.com/microsoft/playwright-mcp",
      "ports": [
        {
          "host": 8931,
          "container": 8931,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "PLAYWRIGHT_MCP_PORT",
          "default": "8931",
          "description": "HTTP MCP port exposed by the server"
        },
        {
          "key": "PLAYWRIGHT_MCP_HOST",
          "default": "0.0.0.0",
          "description": "HTTP bind address inside the container"
        },
        {
          "key": "PLAYWRIGHT_HEADLESS",
          "default": "true",
          "description": "Run browsers in headless mode"
        }
      ],
      "minMemory": "1GB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    ports:\n      - \"{{envRaw.PLAYWRIGHT_MCP_PORT}}:{{envRaw.PLAYWRIGHT_MCP_PORT}}\"\n    environment:\n      PLAYWRIGHT_HEADLESS: {{env.PLAYWRIGHT_HEADLESS}}\n    command: [\"--port\", \"{{envRaw.PLAYWRIGHT_MCP_PORT}}\", \"--host\", \"{{envRaw.PLAYWRIGHT_MCP_HOST}}\"]\n"
    },
    {
      "slug": "plex",
      "name": "Plex",
      "description": "Organize and stream your personal media collection to any device.",
      "category": "Media",
      "image": "lscr.io/linuxserver/plex:latest",
      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/plex-icon.png",
      "website": "https://www.plex.tv",
      "docsUrl": "https://support.plex.tv",
      "ports": [
        {
          "host": 32400,
          "container": 32400,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/plex/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/plex/media",
          "container": "/media"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "PLEX_CLAIM",
          "default": "",
          "description": "Plex claim token from plex.tv/claim",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "pocketid",
      "name": "Pocket ID",
      "description": "OIDC SSO provider that uses passkeys for passwordless authentication.",
      "category": "Security",
      "image": "ghcr.io/pocket-id/pocket-id:latest",
      "logo": "https://icon.horse/icon/pocket-id.org",
      "website": "https://pocket-id.org",
      "docsUrl": "https://pocket-id.org/docs",
      "ports": [
        {
          "host": 1411,
          "container": 1411,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pocketid/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "APP_URL",
          "default": "https://pocketid.example.com",
          "description": "Public application URL"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PORT",
          "default": "1411",
          "description": "Listen port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "portainer",
      "name": "Portainer CE",
      "description": "Portainer Community Edition web UI for managing Docker, Swarm, and Kubernetes.",
      "category": "Developer Tools",
      "image": "portainer/portainer-ce:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/portainer.png",
      "website": "https://www.portainer.io",
      "docsUrl": "https://docs.portainer.io/start/install-ce/server/docker/linux",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        },
        {
          "host": 9443,
          "container": 9443,
          "protocol": "tcp"
        },
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/portainer/data",
          "container": "/data"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "portainer-agent",
      "name": "Portainer Agent",
      "description": "Agent for managing remote Docker environments via Portainer.",
      "category": "Development",
      "image": "portainer/agent:latest",
      "logo": "https://icon.horse/icon/www.portainer.io",
      "website": "https://www.portainer.io",
      "docsUrl": "https://docs.portainer.io",
      "ports": [
        {
          "host": 9001,
          "container": 9001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        },
        {
          "host": "/var/lib/docker/volumes",
          "container": "/var/lib/docker/volumes"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "poste",
      "name": "Poste.io",
      "description": "Complete mail server with webmail, antivirus, antispam, and ActiveSync in one container.",
      "category": "Communications",
      "image": "analogic/poste.io:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/poste.png",
      "website": "https://poste.io",
      "docsUrl": "https://poste.io/documentation.html",
      "ports": [
        {
          "host": 25,
          "container": 25,
          "protocol": "tcp"
        },
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/poste/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "HOSTNAME",
          "default": "mail.example.com",
          "description": "Public mail hostname"
        },
        {
          "key": "POSTE_ADMIN_PASSWORD",
          "default": "",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "postfix-relay",
      "name": "Postfix Relay",
      "description": "Lightweight Postfix MTA container for outbound mail relay and SMTP forwarding.",
      "category": "Communications",
      "image": "mwader/postfix-relay:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/wader/postfix-relay",
      "docsUrl": "https://github.com/wader/postfix-relay",
      "ports": [
        {
          "host": 25,
          "container": 25,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/postfix-relay/data",
          "container": "/var/spool/postfix"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "RELAYHOST",
          "default": "smtp.example.com",
          "description": "Upstream SMTP relay host"
        },
        {
          "key": "RELAY_PORT",
          "default": "587",
          "description": "Upstream SMTP relay port"
        },
        {
          "key": "RELAY_USERNAME",
          "default": "",
          "description": "SMTP relay username",
          "secret": true
        },
        {
          "key": "RELAY_PASSWORD",
          "default": "",
          "description": "SMTP relay password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "postgis",
      "name": "PostGIS",
      "description": "PostgreSQL with the PostGIS spatial database extension for geographic objects.",
      "category": "Databases",
      "image": "postgis/postgis:16-3.4-alpine",
      "logo": "https://icon.horse/icon/postgis.net",
      "website": "https://postgis.net",
      "docsUrl": "https://postgis.net/documentation/",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/postgis/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "gis",
          "description": "Default database name"
        }
      ],
      "version": "16-3.4-alpine"
    },
    {
      "slug": "postgis-dev",
      "name": "PostGIS Dev",
      "description": "PostgreSQL 16 with the PostGIS 3.4 extension on Alpine for spatial development.",
      "category": "Databases",
      "image": "postgis/postgis:16-3.4-alpine",
      "logo": "https://icon.horse/icon/postgis.net",
      "website": "https://postgis.net",
      "docsUrl": "https://postgis.net/documentation/",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/postgis-dev/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "gis",
          "description": "Default database name"
        }
      ],
      "version": "16-3.4-alpine"
    },
    {
      "slug": "postgres-14-dev",
      "name": "Postgres 14 Dev",
      "description": "PostgreSQL 14 on Alpine for development and testing.",
      "category": "Databases",
      "image": "postgres:14-alpine",
      "logo": "https://www.postgresql.org/media/img/about/press/elephant.png",
      "website": "https://www.postgresql.org",
      "docsUrl": "https://www.postgresql.org/docs/14/",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/postgres-14-dev/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "dev",
          "description": "Default database name"
        }
      ],
      "version": "14-alpine"
    },
    {
      "slug": "postgres-15-dev",
      "name": "Postgres 15 Dev",
      "description": "PostgreSQL 15 on Alpine for development and testing.",
      "category": "Databases",
      "image": "postgres:15-alpine",
      "logo": "https://www.postgresql.org/media/img/about/press/elephant.png",
      "website": "https://www.postgresql.org",
      "docsUrl": "https://www.postgresql.org/docs/15/",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/postgres-15-dev/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "dev",
          "description": "Default database name"
        }
      ],
      "version": "15-alpine"
    },
    {
      "slug": "postgres-dev",
      "name": "Postgres 16 Dev",
      "description": "PostgreSQL 16 on Alpine for development and testing.",
      "category": "Databases",
      "image": "postgres:16-alpine",
      "logo": "https://www.postgresql.org/media/img/about/press/elephant.png",
      "website": "https://www.postgresql.org",
      "docsUrl": "https://www.postgresql.org/docs/16/",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/postgres-dev/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "dev",
          "description": "Default database name"
        }
      ],
      "version": "16-alpine"
    },
    {
      "slug": "postgres-exporter",
      "name": "Postgres Exporter",
      "description": "Prometheus exporter for PostgreSQL server metrics with auto-discovery of databases.",
      "category": "Monitoring",
      "image": "prometheuscommunity/postgres-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/prometheus-community/postgres_exporter",
      "docsUrl": "https://github.com/prometheus-community/postgres_exporter#docker",
      "ports": [
        {
          "host": 9187,
          "container": 9187,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DATA_SOURCE_NAME",
          "default": "postgresql://postgres:postgres@postgres:5432/postgres?sslmode=disable",
          "description": "Postgres DSN",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "postgres-mcp",
      "name": "Postgres MCP Pro",
      "description": "MCP server for PostgreSQL schema inspection, safe SQL execution, health checks, and index tuning.",
      "category": "MCP Services",
      "image": "crystaldba/postgres-mcp:latest",
      "logo": "https://www.postgresql.org/favicon.ico",
      "website": "https://github.com/crystaldba/postgres-mcp",
      "docsUrl": "https://github.com/crystaldba/postgres-mcp",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "DATABASE_URI",
          "default": "postgresql://username:password@host.docker.internal:5432/dbname",
          "description": "PostgreSQL connection URI",
          "secret": true
        },
        {
          "key": "POSTGRES_MCP_ACCESS_MODE",
          "default": "restricted",
          "description": "Access mode: restricted for read-only safety, unrestricted for development"
        },
        {
          "key": "POSTGRES_MCP_PORT",
          "default": "8000",
          "description": "SSE MCP port exposed by the server"
        }
      ],
      "minMemory": "512MB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    ports:\n      - \"{{envRaw.POSTGRES_MCP_PORT}}:{{envRaw.POSTGRES_MCP_PORT}}\"\n    environment:\n      DATABASE_URI: {{env.DATABASE_URI}}\n    command: [\"--access-mode={{envRaw.POSTGRES_MCP_ACCESS_MODE}}\", \"--transport=sse\"]\n"
    },
    {
      "slug": "postgresql",
      "name": "PostgreSQL",
      "description": "Powerful open-source relational database system.",
      "category": "Databases",
      "image": "postgres:16-alpine",
      "logo": "https://www.postgresql.org/media/img/about/press/elephant.png",
      "website": "https://www.postgresql.org",
      "docsUrl": "https://www.postgresql.org/docs/",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/postgres/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "postgres",
          "description": "Default database name"
        }
      ],
      "version": "16-alpine"
    },
    {
      "slug": "prefect",
      "name": "Prefect",
      "description": "Modern workflow orchestration for data pipelines with dynamic scheduling, retries, and observability.",
      "category": "Databases",
      "image": "prefecthq/prefect:latest",
      "logo": "https://icon.horse/icon/www.prefect.io",
      "website": "https://www.prefect.io",
      "docsUrl": "https://docs.prefect.io/latest/guides/self-hosted/",
      "ports": [
        {
          "host": 4200,
          "container": 4200,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/prefect/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "PREFECT_HOME",
          "default": "/data/.prefect",
          "description": "Prefect home directory"
        },
        {
          "key": "PREFECT_API_URL",
          "default": "http://localhost:4200/api",
          "description": "Prefect API URL"
        },
        {
          "key": "PREFECT_SERVER_API_AUTH_STRING",
          "default": "",
          "description": "API auth string (leave empty to disable)",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "prestashop",
      "name": "PrestaShop",
      "description": "Leading open-source e-commerce solution powering 250,000+ shops worldwide with 5,000+ modules and themes.",
      "category": "Web Apps",
      "image": "prestashop/prestashop:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/prestashop.svg",
      "website": "https://www.prestashop.com",
      "docsUrl": "https://devdocs.prestashop-project.org",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/prestashop/data",
          "container": "/var/www/html"
        },
        {
          "host": "/opt/appdata/prestashop/modules",
          "container": "/var/www/html/modules"
        }
      ],
      "envVars": [
        {
          "key": "DB_SERVER",
          "default": "prestashop-db",
          "description": "Database server"
        },
        {
          "key": "DB_NAME",
          "default": "prestashop",
          "description": "Database name"
        },
        {
          "key": "DB_USER",
          "default": "prestashop",
          "description": "Database user"
        },
        {
          "key": "DB_PASSWD",
          "default": "change-me-db",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "PS_ADMIN_USER",
          "default": "admin",
          "description": "Admin user"
        },
        {
          "key": "PS_ADMIN_PASSWD",
          "default": "change-me-admin",
          "description": "Admin password",
          "secret": true
        },
        {
          "key": "PS_ADMIN_EMAIL",
          "default": "[email protected]",
          "description": "Admin email"
        },
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "prism",
      "name": "Prism",
      "description": "Open-source HTTP mock server that generates responses from OpenAPI specifications.",
      "category": "Developer Tools",
      "image": "stoplight/prism:latest",
      "logo": "https://icon.horse/icon/stoplight.io",
      "website": "https://stoplight.io/open-source/prism",
      "docsUrl": "https://meta.stoplight.io/docs/prism/",
      "ports": [
        {
          "host": 4010,
          "container": 4010,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/prism/specs",
          "container": "/tmp/specs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PRISM_SPEC_URL",
          "default": "https://raw.githubusercontent.com/stoplightio/PublicDocs/master/openapi/petstore.json",
          "description": "URL of the OpenAPI spec"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "private-gpt",
      "name": "PrivateGPT",
      "description": "Production-ready, privacy-first LLM chat with document ingestion. No data ever leaves your machine.",
      "category": "AI & Voice",
      "image": "zylonai/private-gpt:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/zylon-ai/private-gpt",
      "docsUrl": "https://docs.privategpt.dev",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/private-gpt/data",
          "container": "/app/private_gpt/settings.yaml"
        },
        {
          "host": "/opt/appdata/private-gpt/ingest",
          "container": "/ingest"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "process-exporter",
      "name": "Process Exporter",
      "description": "Prometheus exporter that mines /proc to expose named process metrics and resource usage.",
      "category": "Monitoring",
      "image": "ncabatoff/process-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/ncabatoff/process-exporter",
      "docsUrl": "https://github.com/ncabatoff/process-exporter#readme",
      "ports": [
        {
          "host": 9256,
          "container": 9256,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/process-exporter/config",
          "container": "/config"
        },
        {
          "host": "/proc",
          "container": "/proc"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "prometheus",
      "name": "Prometheus",
      "description": "Systems monitoring and alerting toolkit with a powerful query language.",
      "category": "Monitoring",
      "image": "prom/prometheus:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/prometheus.png",
      "website": "https://prometheus.io",
      "docsUrl": "https://prometheus.io/docs/",
      "ports": [
        {
          "host": 9090,
          "container": 9090,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/prometheus/config",
          "container": "/etc/prometheus"
        },
        {
          "host": "/opt/appdata/prometheus/data",
          "container": "/prometheus"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "prometheus-dev",
      "name": "Prometheus Dev",
      "description": "Prometheus monitoring system for collecting metrics during local development.",
      "category": "Developer Tools",
      "image": "prom/prometheus:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/prometheus.png",
      "website": "https://prometheus.io",
      "docsUrl": "https://prometheus.io/docs/prometheus/latest/installation/",
      "ports": [
        {
          "host": 9090,
          "container": 9090,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/prometheus-dev/config",
          "container": "/etc/prometheus"
        },
        {
          "host": "/opt/appdata/prometheus-dev/data",
          "container": "/prometheus"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "promtail",
      "name": "Promtail",
      "description": "Loki log shipping agent that tails local log files and pushes them to a Loki instance.",
      "category": "Monitoring",
      "image": "grafana/promtail:latest",
      "logo": "https://icon.horse/icon/grafana.com",
      "website": "https://grafana.com/docs/loki/latest/clients/promtail/",
      "docsUrl": "https://grafana.com/docs/loki/latest/clients/promtail/configuration/",
      "ports": [
        {
          "host": 9080,
          "container": 9080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/promtail/config",
          "container": "/etc/promtail"
        },
        {
          "host": "/var/log",
          "container": "/var/log"
        },
        {
          "host": "/var/lib/docker/containers",
          "container": "/var/lib/docker/containers"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "prowlarr",
      "name": "Prowlarr",
      "description": "Indexer manager and proxy for the Servarr media automation stack.",
      "category": "Media",
      "image": "lscr.io/linuxserver/prowlarr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/prowlarr.png",
      "website": "https://docs.linuxserver.io/images/docker-prowlarr/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-prowlarr/",
      "ports": [
        {
          "host": 9696,
          "container": 9696,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/prowlarr/config",
          "container": "/config"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "psono-server",
      "name": "Psono Server",
      "description": "Open-source password manager for teams with end-to-end encryption and sharing.",
      "category": "Productivity",
      "image": "psono/psono-client:latest",
      "logo": "https://icon.horse/icon/psono.com",
      "website": "https://psono.com",
      "docsUrl": "https://doc.psono.com",
      "ports": [
        {
          "host": 8090,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/psono-server/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PSONO_URL",
          "default": "http://localhost:8090",
          "description": "Psono URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "pulsar",
      "name": "Apache Pulsar",
      "description": "Cloud-native, distributed messaging and streaming platform with multi-tenancy and tiered storage.",
      "category": "Databases",
      "image": "apachepulsar/pulsar:latest",
      "logo": "https://pulsar.apache.org/img/logo.svg",
      "website": "https://pulsar.apache.org",
      "docsUrl": "https://pulsar.apache.org/docs/en/standalone-docker/",
      "ports": [
        {
          "host": 6650,
          "container": 6650,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pulsar/data",
          "container": "/pulsar/data"
        },
        {
          "host": "/opt/appdata/pulsar/conf",
          "container": "/pulsar/conf"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "pyroscope",
      "name": "Grafana Pyroscope",
      "description": "Continuous profiling backend for CPU, memory, goroutine and lock analysis.",
      "category": "Monitoring",
      "image": "grafana/pyroscope:latest",
      "logo": "https://icon.horse/icon/grafana.com",
      "website": "https://grafana.com/oss/pyroscope",
      "docsUrl": "https://grafana.com/docs/pyroscope/latest/",
      "ports": [
        {
          "host": 4040,
          "container": 4040,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/pyroscope/data",
          "container": "/var/lib/pyroscope"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "python-310-dev",
      "name": "Python 3.10",
      "description": "Python 3.10 slim image, stable interpreter with structural pattern matching and parenthesized context managers.",
      "category": "Developer Tools",
      "image": "python:3.10-slim",
      "logo": "https://icon.horse/icon/www.python.org",
      "website": "https://www.python.org",
      "docsUrl": "https://docs.python.org/3.10/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/python-310-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PYTHONDONTWRITEBYTECODE",
          "default": "1",
          "description": "Prevent Python from writing .pyc files"
        },
        {
          "key": "PYTHONUNBUFFERED",
          "default": "1",
          "description": "Force stdout/stderr streams to be unbuffered"
        }
      ],
      "version": "3.10-slim"
    },
    {
      "slug": "python-311-dev",
      "name": "Python 3.11",
      "description": "Python 3.11 slim image, performance-tuned interpreter with significantly faster execution.",
      "category": "Developer Tools",
      "image": "python:3.11-slim",
      "logo": "https://icon.horse/icon/www.python.org",
      "website": "https://www.python.org",
      "docsUrl": "https://docs.python.org/3.11/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/python-311-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PYTHONDONTWRITEBYTECODE",
          "default": "1",
          "description": "Prevent Python from writing .pyc files"
        },
        {
          "key": "PYTHONUNBUFFERED",
          "default": "1",
          "description": "Force stdout/stderr streams to be unbuffered"
        }
      ],
      "version": "3.11-slim"
    },
    {
      "slug": "python-dev",
      "name": "Python 3.12",
      "description": "Python 3.12 slim image, modern interpreter with improved error messages and faster CPython.",
      "category": "Developer Tools",
      "image": "python:3.12-slim",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/python.png",
      "website": "https://www.python.org",
      "docsUrl": "https://docs.python.org/3/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/python-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PYTHONDONTWRITEBYTECODE",
          "default": "1",
          "description": "Prevent Python from writing .pyc files"
        },
        {
          "key": "PYTHONUNBUFFERED",
          "default": "1",
          "description": "Force stdout/stderr streams to be unbuffered"
        }
      ],
      "version": "3.12-slim"
    },
    {
      "slug": "qbittorrent",
      "name": "qBittorrent",
      "description": "Feature-rich BitTorrent client with a web interface.",
      "category": "Media",
      "image": "lscr.io/linuxserver/qbittorrent:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/qbittorrent.png",
      "website": "https://docs.linuxserver.io/images/docker-qbittorrent/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-qbittorrent/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/qbittorrent/config",
          "container": "/config"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "WEBUI_PORT",
          "default": "8080",
          "description": "Web UI port"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "qdrant",
      "name": "Qdrant",
      "description": "High-performance vector database and similarity search engine written in Rust.",
      "category": "Databases",
      "image": "qdrant/qdrant:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/qdrant.png",
      "website": "https://qdrant.tech",
      "docsUrl": "https://qdrant.tech/documentation/",
      "ports": [
        {
          "host": 6333,
          "container": 6333,
          "protocol": "tcp"
        },
        {
          "host": 6334,
          "container": 6334,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/qdrant/data",
          "container": "/qdrant/storage"
        }
      ],
      "envVars": [
        {
          "key": "QDRANT_API_KEY",
          "default": "",
          "description": "API key for authentication (leave empty to disable)",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "qgis-server",
      "name": "QGIS Server",
      "description": "Open-source geographic information system server providing WMS, WFS, and WCS services from QGIS projects.",
      "category": "Databases",
      "image": "qgis/qgis-server:latest",
      "logo": "https://qgis.org/uploads/media/qgis-logo-7f19696c39.svg",
      "website": "https://qgis.org",
      "docsUrl": "https://docs.qgis.org/latest/en/docs/server_manual/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/qgis-server/projects",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "QGIS_PROJECT_FILE",
          "default": "/data/default.qgs",
          "description": "Default QGIS project file"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "questdb",
      "name": "QuestDB",
      "description": "High-performance open-source time-series database with SQL analytics and low latency.",
      "category": "Databases",
      "image": "questdb/questdb:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/questdb.png",
      "website": "https://questdb.io",
      "docsUrl": "https://questdb.io/docs/",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        },
        {
          "host": 9009,
          "container": 9009,
          "protocol": "tcp"
        },
        {
          "host": 8812,
          "container": 8812,
          "protocol": "tcp"
        },
        {
          "host": 9003,
          "container": 9003,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/questdb/data",
          "container": "/var/lib/questdb"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "quickchart-api",
      "name": "QuickChart",
      "description": "Chart and QR code image web API. Generate Chart.js, Plotly, and GraphViz charts as PNG or SVG from simple URL parameters.",
      "category": "Productivity",
      "image": "ianw/quickchart:latest",
      "logo": "https://icon.horse/icon/quickchart.io",
      "website": "https://quickchart.io",
      "docsUrl": "https://quickchart.io/documentation",
      "ports": [
        {
          "host": 3400,
          "container": 3400,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/quickchart-api/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "quickwit",
      "name": "Quickwit",
      "description": "Cloud-native distributed log search engine built for petabyte-scale log analytics.",
      "category": "Monitoring",
      "image": "quickwit/quickwit:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/quickwit.png",
      "website": "https://quickwit.io",
      "docsUrl": "https://quickwit.io/docs/",
      "ports": [
        {
          "host": 7280,
          "container": 7280,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/quickwit/config",
          "container": "/quickwit/config"
        },
        {
          "host": "/opt/appdata/quickwit/data",
          "container": "/quickwit/qwdata"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "QW_CONFIG",
          "default": "/quickwit/config/quickwit.yaml",
          "description": "Path to Quickwit config"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rabbitmq",
      "name": "RabbitMQ",
      "description": "Reliable, widely-deployed AMQP message broker with management UI and clustering support.",
      "category": "Databases",
      "image": "rabbitmq:3-management-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rabbitmq.png",
      "website": "https://www.rabbitmq.com",
      "docsUrl": "https://www.rabbitmq.com/documentation.html",
      "ports": [
        {
          "host": 5672,
          "container": 5672,
          "protocol": "tcp"
        },
        {
          "host": 15672,
          "container": 15672,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rabbitmq/data",
          "container": "/var/lib/rabbitmq"
        }
      ],
      "envVars": [
        {
          "key": "RABBITMQ_DEFAULT_USER",
          "default": "guest",
          "description": "Default admin username"
        },
        {
          "key": "RABBITMQ_DEFAULT_PASS",
          "default": "",
          "description": "Default admin password",
          "secret": true
        }
      ],
      "version": "3-management-alpine"
    },
    {
      "slug": "rabbitmq-dev",
      "name": "RabbitMQ Dev",
      "description": "RabbitMQ message broker with management UI on Alpine for local development.",
      "category": "Developer Tools",
      "image": "rabbitmq:3-management-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rabbitmq.png",
      "website": "https://www.rabbitmq.com",
      "docsUrl": "https://www.rabbitmq.com/docs/install-docker",
      "ports": [
        {
          "host": 5672,
          "container": 5672,
          "protocol": "tcp"
        },
        {
          "host": 15672,
          "container": 15672,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rabbitmq-dev/data",
          "container": "/var/lib/rabbitmq"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "RABBITMQ_DEFAULT_USER",
          "default": "guest",
          "description": "Default admin username"
        },
        {
          "key": "RABBITMQ_DEFAULT_PASS",
          "default": "guest",
          "description": "Default admin password",
          "secret": true
        }
      ],
      "version": "3-management-alpine"
    },
    {
      "slug": "radarr",
      "name": "Radarr",
      "description": "Automatic movie downloading and management for Usenet and BitTorrent.",
      "category": "Media",
      "image": "lscr.io/linuxserver/radarr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/radarr.png",
      "website": "https://radarr.video",
      "docsUrl": "https://wiki.servarr.com/radarr",
      "ports": [
        {
          "host": 7878,
          "container": 7878,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/radarr/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/radarr/downloads",
          "container": "/downloads"
        },
        {
          "host": "/opt/appdata/radarr/movies",
          "container": "/movies"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rails-dev",
      "name": "Ruby on Rails",
      "description": "Rails framework on Ruby, opinionated full-stack web framework for rapid application development.",
      "category": "Developer Tools",
      "image": "rails:latest",
      "logo": "https://icon.horse/icon/rubyonrails.org",
      "website": "https://rubyonrails.org",
      "docsUrl": "https://guides.rubyonrails.org",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rails-dev/app",
          "container": "/rails"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "RAILS_ENV",
          "default": "development",
          "description": "Rails environment"
        },
        {
          "key": "SECRET_KEY_BASE",
          "default": "",
          "description": "Rails secret key base",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rclone",
      "name": "Rclone",
      "description": "Cloud storage sync and mount tool with a web UI mode.",
      "category": "Backups",
      "image": "rclone/rclone:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rclone.png",
      "website": "https://rclone.org",
      "docsUrl": "https://rclone.org/docs/",
      "ports": [
        {
          "host": 5572,
          "container": 5572,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rclone/config",
          "container": "/config/rclone"
        },
        {
          "host": "/srv",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    volumes:\n      - {{appDataPath}}/config:/config/rclone\n      - /srv:/data\n    command: rcd --rc-web-gui --rc-addr :5572 --rc-user admin --rc-pass change-me\n"
    },
    {
      "slug": "redash",
      "name": "Redash",
      "description": "Connect to data sources, query them with SQL, build dashboards, and share insights with your team.",
      "category": "Databases",
      "image": "redash/redash:latest",
      "logo": "https://redash.io/assets/images/redash_icon.png",
      "website": "https://redash.io",
      "docsUrl": "https://redash.io/help/open-source/setup-guide",
      "ports": [
        {
          "host": 5000,
          "container": 5000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/redash/data",
          "container": "/app/redash_data"
        }
      ],
      "envVars": [
        {
          "key": "REDASH_DATABASE_URL",
          "default": "postgresql://postgres@postgres/postgres",
          "description": "Metadata database connection"
        },
        {
          "key": "REDASH_COOKIE_SECRET",
          "default": "",
          "description": "Cookie signing secret",
          "secret": true
        },
        {
          "key": "REDASH_SECRET_KEY",
          "default": "",
          "description": "Application secret key",
          "secret": true
        },
        {
          "key": "PYTHONUNBUFFERED",
          "default": "0",
          "description": "Disable Python output buffering"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "redis",
      "name": "Redis",
      "description": "In-memory data store used as database, cache, and message broker.",
      "category": "Databases",
      "image": "redis:7-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/redis.png",
      "website": "https://redis.io",
      "docsUrl": "https://redis.io/docs/",
      "ports": [
        {
          "host": 6379,
          "container": 6379,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/redis/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "7-alpine"
    },
    {
      "slug": "redis-dev",
      "name": "Redis 7 Dev",
      "description": "Redis 7 on Alpine for development, caching, and testing.",
      "category": "Databases",
      "image": "redis:7-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/redis.png",
      "website": "https://redis.io",
      "docsUrl": "https://redis.io/docs/",
      "ports": [
        {
          "host": 6379,
          "container": 6379,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/redis-dev/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "7-alpine"
    },
    {
      "slug": "redis-exporter",
      "name": "Redis Exporter",
      "description": "Prometheus exporter for Redis metrics with keyspace, command stats and replication info.",
      "category": "Monitoring",
      "image": "oliver006/redis_exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/oliver006/redis_exporter",
      "docsUrl": "https://github.com/oliver006/redis_exporter#docker",
      "ports": [
        {
          "host": 9121,
          "container": 9121,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "REDIS_ADDR",
          "default": "redis://redis:6379",
          "description": "Redis server URL"
        },
        {
          "key": "REDIS_PASSWORD",
          "default": "",
          "description": "Redis password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "redis-stack",
      "name": "Redis Stack",
      "description": "Redis with RediSearch, RedisJSON, RedisGraph, RedisBloom, and RedisTimeSeries modules.",
      "category": "Databases",
      "image": "redis/redis-stack:latest",
      "logo": "https://icon.horse/icon/redis.io",
      "website": "https://redis.io/docs/latest/develop/interact/search-and-query/",
      "docsUrl": "https://redis.io/docs/latest/develop/interact/search-and-query/",
      "ports": [
        {
          "host": 6379,
          "container": 6379,
          "protocol": "tcp"
        },
        {
          "host": 8001,
          "container": 8001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/redis-stack/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "redmine",
      "name": "Redmine",
      "description": "Flexible project management web application with wiki, issues, and Gantt charts.",
      "category": "Developer Tools",
      "image": "redmine:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/redmine.png",
      "website": "https://www.redmine.org",
      "docsUrl": "https://www.redmine.org/projects/redmine/wiki/RedmineInstall",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/redmine/data",
          "container": "/usr/src/redmine/files"
        },
        {
          "host": "/opt/appdata/redmine/plugins",
          "container": "/usr/src/redmine/plugins"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "REDMINE_DB_POSTGRES_HOST",
          "default": "db",
          "description": "PostgreSQL host"
        },
        {
          "key": "REDMINE_DB_POSTGRES_PORT",
          "default": "5432",
          "description": "PostgreSQL port"
        },
        {
          "key": "REDMINE_DB_POSTGRES_USER",
          "default": "redmine",
          "description": "Database user"
        },
        {
          "key": "REDMINE_DB_POSTGRES_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "redpanda",
      "name": "Redpanda",
      "description": "Kafka-compatible streaming platform written in C++ for low-latency, high-throughput workloads.",
      "category": "Databases",
      "image": "redpandadata/redpanda:latest",
      "logo": "https://icon.horse/icon/redpanda.com",
      "website": "https://redpanda.com",
      "docsUrl": "https://docs.redpanda.com/current/get-started/quick-start/",
      "ports": [
        {
          "host": 9092,
          "container": 9092,
          "protocol": "tcp"
        },
        {
          "host": 9644,
          "container": 9644,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/redpanda/data",
          "container": "/var/lib/redpanda/data"
        }
      ],
      "envVars": [
        {
          "key": "REDPANDA_NODE_ID",
          "default": "1",
          "description": "Unique node ID in cluster"
        },
        {
          "key": "REDPANDA_KAFKA_ADDRESS",
          "default": "0.0.0.0:9092",
          "description": "Kafka listener address"
        },
        {
          "key": "REDPANDA_ADVERTISE_KAFKA_ADDRESS",
          "default": "redpanda:9092",
          "description": "Advertised Kafka address"
        },
        {
          "key": "REDPANDA_RPC_ADDRESS",
          "default": "0.0.0.0:33145",
          "description": "Internal RPC address"
        },
        {
          "key": "REDPANDA_SEEDS",
          "default": "redpanda:33145",
          "description": "Seeds for cluster discovery"
        },
        {
          "key": "REDPANDA_ADMIN",
          "default": "0.0.0.0:9644",
          "description": "Internal admin API listen address"
        },
        {
          "key": "REDPANDA_DEVELOPMENT_MODE",
          "default": "true",
          "description": "Enable development mode (single-node)"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "redpanda-dev",
      "name": "Redpanda Dev",
      "description": "Redpanda Kafka-compatible streaming platform for local development and testing.",
      "category": "Developer Tools",
      "image": "redpandadata/redpanda:latest",
      "logo": "https://icon.horse/icon/redpanda.com",
      "website": "https://redpanda.com",
      "docsUrl": "https://docs.redpanda.com/current/get-started/quick-start-docker/",
      "ports": [
        {
          "host": 9092,
          "container": 9092,
          "protocol": "tcp"
        },
        {
          "host": 9644,
          "container": 9644,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/redpanda-dev/data",
          "container": "/var/lib/redpanda/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "registry-ui",
      "name": "Docker Registry UI",
      "description": "Web UI for browsing a Docker Registry v2 instance.",
      "category": "Developer Tools",
      "image": "joxit/docker-registry-ui:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/Joxit/docker-registry-ui",
      "docsUrl": "https://github.com/Joxit/docker-registry-ui",
      "ports": [
        {
          "host": 8083,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "REGISTRY_TITLE",
          "default": "Docker Registry",
          "description": "UI title"
        },
        {
          "key": "NGINX_PROXY_PASS_URL",
          "default": "http://registry:5000",
          "description": "Registry URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rembg",
      "name": "rembg",
      "description": "Remove image backgrounds automatically using deep learning models via a simple HTTP API.",
      "category": "AI & Voice",
      "image": "danielgatis/rembg:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/danielgatis/rembg",
      "docsUrl": "https://github.com/danielgatis/rembg",
      "ports": [
        {
          "host": 7000,
          "container": 7000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rembg/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "RembgHost",
          "default": "0.0.0.0",
          "description": "Bind address"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "requestrr",
      "name": "Requestrr",
      "description": "Chat-driven media request bot for Sonarr, Radarr, and Overseerr.",
      "category": "Media",
      "image": "darkalfx/requestrr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/requestrr.png",
      "website": "https://github.com/darkalfx/requestrr",
      "docsUrl": "https://github.com/darkalfx/requestrr",
      "ports": [
        {
          "host": 4545,
          "container": 4545,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/requestrr/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "resilio-sync",
      "name": "Resilio Sync",
      "description": "Peer-to-peer file synchronization across devices with no cloud required.",
      "category": "Photos & Files",
      "image": "linuxserver/resilio-sync:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/resilio-sync.svg",
      "website": "https://www.resilio.com",
      "docsUrl": "https://docs.linuxserver.io/images/docker-resilio-sync",
      "ports": [
        {
          "host": 8888,
          "container": 8888,
          "protocol": "tcp"
        },
        {
          "host": 55555,
          "container": 55555,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/resilio-sync/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/resilio-sync/downloads",
          "container": "/downloads"
        },
        {
          "host": "/opt/appdata/resilio-sync/data",
          "container": "/sync"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "restic-rest-server",
      "name": "restic REST Server",
      "description": "REST backend server for restic backup repositories.",
      "category": "Backups",
      "image": "restic/rest-server:latest",
      "logo": "https://restic.net/apple-touch-icon-144-precomposed.png",
      "website": "https://github.com/restic/rest-server",
      "docsUrl": "https://github.com/restic/rest-server",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/srv/backups/restic",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "OPTIONS",
          "default": "--append-only",
          "description": "Server options"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rethinkdb",
      "name": "RethinkDB",
      "description": "Open-source real-time NoSQL database that pushes JSON queries to client applications.",
      "category": "Databases",
      "image": "rethinkdb:latest",
      "logo": "https://icon.horse/icon/rethinkdb.com",
      "website": "https://rethinkdb.com",
      "docsUrl": "https://rethinkdb.com/docs",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 28015,
          "container": 28015,
          "protocol": "tcp"
        },
        {
          "host": 29015,
          "container": 29015,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rethinkdb/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "revolt",
      "name": "Revolt",
      "description": "Open-source user-first chat platform; Discord alternative with end-to-end encryption.",
      "category": "Communications",
      "image": "revoltchat/server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/revolt.png",
      "website": "https://revolt.chat",
      "docsUrl": "https://developers.revolt.chat",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/revolt/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "REVOLT_APP_URL",
          "default": "http://localhost:80",
          "description": "Public Revolt URL"
        },
        {
          "key": "REVOLT_CONFIG",
          "default": "default",
          "description": "Configuration template to use"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "ring-mqtt",
      "name": "Ring-MQTT",
      "description": "Bridge Ring cameras, alarms, sensors, and smart lighting into MQTT with Home Assistant discovery.",
      "category": "Home Automation",
      "image": "tsightler/ring-mqtt:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/tsightler/ring-mqtt",
      "docsUrl": "https://github.com/tsightler/ring-mqtt/wiki/Installation-(Docker)",
      "ports": [
        {
          "host": 8554,
          "container": 8554,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ring-mqtt",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "BRANCH",
          "default": "",
          "description": "Optional branch override; leave empty for bundled image code"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rocket-chat",
      "name": "Rocket.Chat",
      "description": "Open-source team communication platform with channels, voice, video, and chatbots.",
      "category": "Communications",
      "image": "rocket.chat:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rocket-chat.png",
      "website": "https://www.rocket.chat",
      "docsUrl": "https://docs.rocket.chat",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rocket-chat/uploads",
          "container": "/app/uploads"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ROOT_URL",
          "default": "http://localhost:3000",
          "description": "Public URL of Rocket.Chat"
        },
        {
          "key": "MONGO_URL",
          "default": "mongodb://mongo:27017/rocketchat",
          "description": "MongoDB connection string",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rocketmq",
      "name": "Apache RocketMQ",
      "description": "Low-latency, high-throughput distributed message queue for transactional and streaming workloads.",
      "category": "Databases",
      "image": "apache/rocketmq:latest",
      "logo": "https://rocketmq.apache.org/img/rmq-logo.svg",
      "website": "https://rocketmq.apache.org",
      "docsUrl": "https://rocketmq.apache.org/docs/quickStart/02quickstartWithDocker",
      "ports": [
        {
          "host": 9876,
          "container": 9876,
          "protocol": "tcp"
        },
        {
          "host": 10909,
          "container": 10909,
          "protocol": "tcp"
        },
        {
          "host": 10911,
          "container": 10911,
          "protocol": "tcp"
        },
        {
          "host": 10912,
          "container": 10912,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rocketmq/logs",
          "container": "/home/rocketmq/logs"
        },
        {
          "host": "/opt/appdata/rocketmq/store",
          "container": "/home/rocketmq/store"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "roundcube",
      "name": "Roundcube",
      "description": "Open-source webmail client with a modern UI, PGP support, and rich plugin ecosystem.",
      "category": "Communications",
      "image": "roundcube/roundcubemail:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/roundcube.png",
      "website": "https://roundcube.net",
      "docsUrl": "https://github.com/roundcube/roundcubemail/wiki",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/roundcube/config",
          "container": "/var/www/html/config"
        },
        {
          "host": "/opt/appdata/roundcube/data",
          "container": "/var/www/html/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ROUNDCUBEMAIL_DEFAULT_HOST",
          "default": "localhost",
          "description": "Default IMAP host"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rss-bridge",
      "name": "RSS-Bridge",
      "description": "Generates RSS/ATOM feeds for web sites that don't natively support them.",
      "category": "Dashboards",
      "image": "rssbridge/rss-bridge:latest",
      "logo": "https://rss-bridge.github.io/rss-bridge/favicon.ico",
      "website": "https://rss-bridge.github.io/rss-bridge/",
      "docsUrl": "https://github.com/RSS-Bridge/rss-bridge",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rss-bridge/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rss-proxy",
      "name": "RSS Proxy",
      "description": "RSS proxy server that lets you subscribe to RSS feeds behind CORS-blocked sources.",
      "category": "Dashboards",
      "image": "damoeb/rss-proxy:latest",
      "logo": "https://raw.githubusercontent.com/damoeb/rss-proxy/master/logo.png",
      "website": "https://github.com/damoeb/rss-proxy",
      "docsUrl": "https://github.com/damoeb/rss-proxy",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rsyslog",
      "name": "Rsyslog",
      "description": "Rocket-fast system and application log processing with a powerful configuration language.",
      "category": "Monitoring",
      "image": "rsyslog/rsyslog:latest",
      "logo": "https://icon.horse/icon/www.rsyslog.com",
      "website": "https://www.rsyslog.com",
      "docsUrl": "https://www.rsyslog.com/doc/",
      "ports": [
        {
          "host": 514,
          "container": 514,
          "protocol": "udp"
        },
        {
          "host": 514,
          "container": 514,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rsyslog/config",
          "container": "/etc/rsyslog.d"
        },
        {
          "host": "/opt/appdata/rsyslog/data",
          "container": "/var/log"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rtl-433",
      "name": "rtl_433",
      "description": "Decode 433 MHz and other ISM-band sensors, weather stations, and meters, then publish readings to MQTT.",
      "category": "Home Automation",
      "image": "hertzg/rtl_433:latest",
      "logo": "https://github.githubassets.com/favicons/favicon.svg",
      "website": "https://github.com/merbanan/rtl_433",
      "docsUrl": "https://github.com/hertzg/rtl_433_docker#readme",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/rtl-433",
          "container": "/etc/rtl_433"
        }
      ],
      "envVars": [
        {
          "key": "RTL_DEVICE",
          "default": "/dev/bus/usb:/dev/bus/usb",
          "description": "SDR device mapping for Docker Compose devices"
        },
        {
          "key": "RTL_433_COMMAND",
          "default": "-F mqtt://mosquitto:1883,retain=0,devices=rtl_433[/model][/id]",
          "description": "rtl_433 command arguments"
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{volumes}}\n    devices:\n      - {{env.RTL_DEVICE}}\n    command: {{env.RTL_433_COMMAND}}\n",
      "version": "latest"
    },
    {
      "slug": "ruby-dev",
      "name": "Ruby 3.3",
      "description": "Ruby 3.3 on Alpine Linux, dynamic open-source language focused on simplicity and productivity.",
      "category": "Developer Tools",
      "image": "ruby:3.3-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ruby.png",
      "website": "https://www.ruby-lang.org",
      "docsUrl": "https://www.ruby-lang.org/en/documentation/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/ruby-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "BUNDLE_PATH",
          "default": "/usr/local/bundle",
          "description": "Bundle install path"
        }
      ],
      "version": "3.3-alpine"
    },
    {
      "slug": "rust",
      "name": "Rust",
      "description": "Dedicated Rust server for the open-world survival game with oxide mod support.",
      "category": "Gaming",
      "image": "didstopia/rust-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rust.png",
      "website": "https://rust.facepunch.com",
      "docsUrl": "https://github.com/didstopia/rust-server",
      "ports": [
        {
          "host": 28015,
          "container": 28015,
          "protocol": "tcp"
        },
        {
          "host": 28016,
          "container": 28016,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rust/config",
          "container": "/steamcmd/rust/server"
        },
        {
          "host": "/opt/appdata/rust/oxide",
          "container": "/steamcmd/rust/oxide"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "RUST_SERVER_NAME",
          "default": "Rust Server",
          "description": "Server hostname"
        },
        {
          "key": "RUST_SERVER_SEED",
          "default": "12345",
          "description": "World map seed"
        },
        {
          "key": "RUST_SERVER_MAXPLAYERS",
          "default": "50",
          "description": "Maximum players"
        }
      ],
      "minMemory": "8GB",
      "version": "latest"
    },
    {
      "slug": "rust-dev",
      "name": "Rust",
      "description": "Rust toolchain on Debian Bookworm, memory-safe systems language with zero-cost abstractions.",
      "category": "Developer Tools",
      "image": "rust:1-bookworm",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rust.png",
      "website": "https://www.rust-lang.org",
      "docsUrl": "https://doc.rust-lang.org/book/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rust-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "CARGO_HOME",
          "default": "/usr/local/cargo",
          "description": "Cargo home directory"
        },
        {
          "key": "RUST_BACKTRACE",
          "default": "1",
          "description": "Enable backtraces on panic"
        }
      ],
      "version": "1-bookworm"
    },
    {
      "slug": "rustdesk-server",
      "name": "RustDesk Server",
      "description": "Self-hosted relay and rendezvous server for RustDesk remote desktop.",
      "category": "Networking",
      "image": "rustdesk/rustdesk-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rustdesk.png",
      "website": "https://rustdesk.com",
      "docsUrl": "https://rustdesk.com/docs",
      "ports": [
        {
          "host": 21115,
          "container": 21115,
          "protocol": "tcp"
        },
        {
          "host": 21116,
          "container": 21116,
          "protocol": "tcp"
        },
        {
          "host": 21117,
          "container": 21117,
          "protocol": "tcp"
        },
        {
          "host": 21118,
          "container": 21118,
          "protocol": "tcp"
        },
        {
          "host": 21119,
          "container": 21119,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rustdesk-server/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "rustfs",
      "name": "RustFS",
      "description": "High-performance S3-compatible distributed object storage written in Rust.",
      "category": "Photos & Files",
      "image": "rustfs/rustfs:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/rustfs.png",
      "website": "https://github.com/rustfs/rustfs",
      "docsUrl": "https://github.com/rustfs/rustfs/blob/main/README.md",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        },
        {
          "host": 9001,
          "container": 9001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/rustfs/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/rustfs/config",
          "container": "/root/.rustfs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "RUSTFS_ACCESS_KEY",
          "default": "rustfsadmin",
          "description": "S3 access key"
        },
        {
          "key": "RUSTFS_SECRET_KEY",
          "default": "",
          "description": "S3 secret key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "sabnzbd",
      "name": "SABnzbd",
      "description": "Free and open-source binary newsreader for Usenet downloading.",
      "category": "Media",
      "image": "lscr.io/linuxserver/sabnzbd:latest",
      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sabnzbd-icon.png",
      "website": "https://sabnzbd.org",
      "docsUrl": "https://sabnzbd.org/wiki/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sabnzbd/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/sabnzbd/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "saleor",
      "name": "Saleor",
      "description": "GraphQL-first, headless e-commerce platform built with Python and React for high-performance online stores.",
      "category": "Web Apps",
      "image": "ghcr.io/saleor/saleor:latest",
      "logo": "https://icon.horse/icon/saleor.io",
      "website": "https://saleor.io",
      "docsUrl": "https://docs.saleor.io",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/saleor/media",
          "container": "/app/media"
        },
        {
          "host": "/opt/appdata/saleor/static",
          "container": "/app/static"
        }
      ],
      "envVars": [
        {
          "key": "DATABASE_URL",
          "default": "postgres://saleor:[email protected]:5432/saleor",
          "description": "PostgreSQL connection string",
          "secret": true
        },
        {
          "key": "REDIS_URL",
          "default": "redis://saleor-redis:6379/0",
          "description": "Redis connection string"
        },
        {
          "key": "SECRET_KEY",
          "default": "change-me-secret-key",
          "description": "Django secret key",
          "secret": true
        },
        {
          "key": "ALLOWED_HOSTS",
          "default": "*",
          "description": "Allowed hosts"
        },
        {
          "key": "DEBUG",
          "default": "False",
          "description": "Debug mode (False in production)"
        },
        {
          "key": "EMAIL_URL",
          "default": "smtp://user:[email protected]:587/?tls=True",
          "description": "Email backend URL"
        },
        {
          "key": "DEFAULT_FROM_EMAIL",
          "default": "[email protected]",
          "description": "Default from email"
        },
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "samba",
      "name": "Samba",
      "description": "SMB/CIFS file server for cross-platform network shares compatible with Windows and macOS.",
      "category": "Photos & Files",
      "image": "dperson/samba:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/dperson/samba",
      "docsUrl": "https://github.com/dperson/samba/blob/master/README.md",
      "ports": [
        {
          "host": 445,
          "container": 445,
          "protocol": "tcp"
        },
        {
          "host": 139,
          "container": 139,
          "protocol": "tcp"
        },
        {
          "host": 137,
          "container": 137,
          "protocol": "udp"
        },
        {
          "host": 138,
          "container": 138,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/samba/share",
          "container": "/mount"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "USER",
          "default": "smbuser",
          "description": "SMB username"
        },
        {
          "key": "PASS",
          "default": "",
          "description": "SMB password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "satisfactory",
      "name": "Satisfactory",
      "description": "Dedicated server for Satisfactory factory building game.",
      "category": "Gaming",
      "image": "wolveix/satisfactory-server:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/satisfactory.png",
      "website": "https://www.satisfactorygame.com",
      "docsUrl": "https://github.com/wolveix/satisfactory-server",
      "ports": [
        {
          "host": 7777,
          "container": 7777,
          "protocol": "udp"
        },
        {
          "host": 15000,
          "container": 15000,
          "protocol": "udp"
        },
        {
          "host": 15777,
          "container": 15777,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/satisfactory/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "MAXPLAYERS",
          "default": "4",
          "description": "Maximum number of players"
        },
        {
          "key": "STEAMBETA",
          "default": "false",
          "description": "Use Steam beta branch"
        }
      ],
      "minMemory": "6GB",
      "version": "latest"
    },
    {
      "slug": "schema-registry",
      "name": "Confluent Schema Registry",
      "description": "Centralized schema management and compatibility service for Kafka with Avro, JSON Schema, and Protobuf.",
      "category": "Databases",
      "image": "confluentinc/cp-schema-registry:latest",
      "logo": "https://icon.horse/icon/docs.confluent.io",
      "website": "https://docs.confluent.io",
      "docsUrl": "https://docs.confluent.io/platform/current/schema-registry/installation/deployment.html",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/schema-registry/data",
          "container": "/var/lib/schema-registry"
        }
      ],
      "envVars": [
        {
          "key": "SCHEMA_REGISTRY_HOST_NAME",
          "default": "schema-registry",
          "description": "Hostname advertised to clients"
        },
        {
          "key": "SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS",
          "default": "kafka:9092",
          "description": "Kafka bootstrap servers"
        },
        {
          "key": "SCHEMA_REGISTRY_LISTENERS",
          "default": "http://0.0.0.0:8081",
          "description": "HTTP listen address"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "scrutiny",
      "name": "Scrutiny",
      "description": "Web UI for SMART disk health, temperature, and metrics.",
      "category": "Monitoring",
      "image": "ghcr.io/analogj/scrutiny:master-omnibus",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/scrutiny.png",
      "website": "https://github.com/AnalogJ/scrutiny",
      "docsUrl": "https://github.com/AnalogJ/scrutiny",
      "ports": [
        {
          "host": 8086,
          "container": 8086,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/scrutiny/config",
          "container": "/opt/scrutiny/config"
        },
        {
          "host": "/opt/appdata/scrutiny/influxdb",
          "container": "/opt/scrutiny/influxdb"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "scrypted",
      "name": "Scrypted",
      "description": "High-performance camera integration, automation, and NVR platform for HomeKit, Google Home, Alexa, and Home Assistant.",
      "category": "Home Automation",
      "image": "ghcr.io/koush/scrypted:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/scrypted.png",
      "website": "https://www.scrypted.app",
      "docsUrl": "https://docs.scrypted.app/install/linux-docker.html",
      "ports": [],
      "volumes": [
        {
          "host": "/opt/appdata/scrypted",
          "container": "/server/volume"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    network_mode: host\n{{volumes}}\n{{environment}}\n",
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "scylladb",
      "name": "ScyllaDB",
      "description": "Drop-in Apache Cassandra replacement written in C++ for extreme low-latency and throughput.",
      "category": "Databases",
      "image": "scylladb/scylla:latest",
      "logo": "https://icon.horse/icon/www.scylladb.com",
      "website": "https://www.scylladb.com",
      "docsUrl": "https://docs.scylladb.com",
      "ports": [
        {
          "host": 9042,
          "container": 9042,
          "protocol": "tcp"
        },
        {
          "host": 7000,
          "container": 7000,
          "protocol": "tcp"
        },
        {
          "host": 7001,
          "container": 7001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/scylladb/data",
          "container": "/var/lib/scylla"
        }
      ],
      "envVars": [
        {
          "key": "SCYLLA_PASSWORD",
          "default": "",
          "description": "Scylla password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "seafile",
      "name": "Seafile",
      "description": "File sync and sharing platform for teams and personal clouds.",
      "category": "Photos & Files",
      "image": "seafileltd/seafile-mc:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/seafile.png",
      "website": "https://www.seafile.com",
      "docsUrl": "https://manual.seafile.com",
      "ports": [
        {
          "host": 8088,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/seafile/data",
          "container": "/shared"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DB_ROOT_PASSWD",
          "default": "change-me",
          "description": "MariaDB root password",
          "secret": true
        },
        {
          "key": "SEAFILE_ADMIN_EMAIL",
          "default": "admin@example.com",
          "description": "Initial admin email"
        },
        {
          "key": "SEAFILE_ADMIN_PASSWORD",
          "default": "change-me",
          "description": "Initial admin password",
          "secret": true
        },
        {
          "key": "SEAFILE_SERVER_HOSTNAME",
          "default": "localhost",
          "description": "External hostname"
        },
        {
          "key": "DB_HOST",
          "default": "seafile-db",
          "description": "Database host"
        }
      ],
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      DB_HOST: {{env.DB_HOST}}\n      DB_ROOT_PASSWD: {{env.DB_ROOT_PASSWD}}\n      SEAFILE_ADMIN_EMAIL: {{env.SEAFILE_ADMIN_EMAIL}}\n      SEAFILE_ADMIN_PASSWORD: {{env.SEAFILE_ADMIN_PASSWORD}}\n      SEAFILE_SERVER_HOSTNAME: {{env.SEAFILE_SERVER_HOSTNAME}}\n      TIME_ZONE: {{env.TZ}}\n    volumes:\n      - {{appDataPath}}/data:/shared\n    depends_on:\n      - {{serviceName}}-db\n      - {{serviceName}}-memcached\n  {{serviceName}}-db:\n    image: mariadb:10.11\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      MYSQL_ROOT_PASSWORD: {{env.DB_ROOT_PASSWD}}\n      MYSQL_LOG_CONSOLE: \"true\"\n    volumes:\n      - {{appDataPath}}/db:/var/lib/mysql\n  {{serviceName}}-memcached:\n    image: memcached:1.6-alpine\n    container_name: {{serviceName}}-memcached\n    restart: unless-stopped\n"
    },
    {
      "slug": "searxng",
      "name": "SearXNG",
      "description": "Privacy-respecting metasearch engine.",
      "category": "Productivity",
      "image": "searxng/searxng:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/searxng.png",
      "website": "https://docs.searxng.org",
      "docsUrl": "https://docs.searxng.org",
      "ports": [
        {
          "host": 8090,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/searxng/config",
          "container": "/etc/searxng"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SEARXNG_BASE_URL",
          "default": "http://localhost:8090/",
          "description": "Base URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "seaweedfs",
      "name": "SeaweedFS",
      "description": "Fast distributed file system for billions of files with S3 API and FUSE mount support.",
      "category": "Photos & Files",
      "image": "chrislusf/seaweedfs:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/seaweedfs.svg",
      "website": "https://github.com/chrislusf/seaweedfs",
      "docsUrl": "https://github.com/chrislusf/seaweedfs/wiki/Docker",
      "ports": [
        {
          "host": 8333,
          "container": 8333,
          "protocol": "tcp"
        },
        {
          "host": 9333,
          "container": 9333,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/seaweedfs/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "selenium",
      "name": "Selenium Chrome",
      "description": "Standalone Selenium with Chrome and ChromeDriver pre-installed for browser automation.",
      "category": "Developer Tools",
      "image": "selenium/standalone-chrome:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/selenium.png",
      "website": "https://www.selenium.dev",
      "docsUrl": "https://github.com/SeleniumHQ/docker-selenium",
      "ports": [
        {
          "host": 4444,
          "container": 4444,
          "protocol": "tcp"
        },
        {
          "host": 7900,
          "container": 7900,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/selenium/downloads",
          "container": "/home/seluser/Downloads"
        },
        {
          "host": "/dev/shm",
          "container": "/dev/shm"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SE_SCREEN_WIDTH",
          "default": "1920",
          "description": "Browser screen width"
        },
        {
          "key": "SE_SCREEN_HEIGHT",
          "default": "1080",
          "description": "Browser screen height"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "selenium-hub",
      "name": "Selenium Hub",
      "description": "Selenium Grid hub that distributes tests across registered node containers.",
      "category": "Developer Tools",
      "image": "selenium/hub:latest",
      "logo": "https://icon.horse/icon/www.selenium.dev",
      "website": "https://www.selenium.dev",
      "docsUrl": "https://github.com/SeleniumHQ/docker-selenium",
      "ports": [
        {
          "host": 4442,
          "container": 4442,
          "protocol": "tcp"
        },
        {
          "host": 4443,
          "container": 4443,
          "protocol": "tcp"
        },
        {
          "host": 4444,
          "container": 4444,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "GRID_MAX_SESSION",
          "default": "16",
          "description": "Maximum concurrent sessions"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "sentry",
      "name": "Sentry",
      "description": "Application monitoring and error tracking that helps you fix bugs in real time.",
      "category": "Developer Tools",
      "image": "getsentry/sentry:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/sentry.png",
      "website": "https://sentry.io",
      "docsUrl": "https://develop.sentry.dev/self-hosted/",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sentry/data",
          "container": "/var/lib/sentry"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SENTRY_SECRET_KEY",
          "default": "",
          "description": "Application secret key",
          "secret": true
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "sftpgo",
      "name": "SFTPGo",
      "description": "SFTP, HTTP/S, FTP/S, and WebDAV server with a web admin UI.",
      "category": "Photos & Files",
      "image": "drakkan/sftpgo:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/sftpgo.png",
      "website": "https://sftpgo.com",
      "docsUrl": "https://docs.sftpgo.com",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        },
        {
          "host": 2022,
          "container": 2022,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sftpgo/data",
          "container": "/srv/sftpgo"
        },
        {
          "host": "/opt/appdata/sftpgo/home",
          "container": "/var/lib/sftpgo"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "shaarli",
      "name": "Shaarli",
      "description": "Personal bookmark and link sharing service with tagging and RSS feeds.",
      "category": "Documents",
      "image": "shaarli/shaarli:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/shaarli.png",
      "website": "https://shaarli.readthedocs.io",
      "docsUrl": "https://shaarli.readthedocs.io/en/master/Guides/Docker.html",
      "ports": [
        {
          "host": 8091,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/shaarli/data",
          "container": "/var/www/shaarli/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "shinobi",
      "name": "Shinobi",
      "description": "CCTV NVR software with multi-monitor, motion detection, and deep learning analysis.",
      "category": "Home Automation",
      "image": "shinobisystems/shinobi:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/shinobi.png",
      "website": "https://shinobi.video",
      "docsUrl": "https://docs.shinobi.video/installation/docker",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/shinobi/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/shinobi/videos",
          "container": "/var/lib/shinobi/videos"
        },
        {
          "host": "/opt/appdata/shinobi/database",
          "container": "/var/lib/mysql"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "signal-cli",
      "name": "Signal CLI",
      "description": "Unofficial command-line client for Signal Messenger. Send and receive Signal messages programmatically from your McHarbor workflows.",
      "category": "Communications",
      "image": "asamk/signal-cli:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/signal.png",
      "website": "https://github.com/AsamK/signal-cli",
      "docsUrl": "https://github.com/AsamK/signal-cli#readme",
      "ports": [],
      "volumes": [
        {
          "host": "/var/lib/signal-cli",
          "container": "/root/.local/share/signal-cli"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone for the container"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "signoz",
      "name": "SigNoz",
      "description": "Open-source observability platform: traces, metrics and logs in a single application.",
      "category": "Monitoring",
      "image": "signoz/signoz:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/signoz.png",
      "website": "https://signoz.io",
      "docsUrl": "https://signoz.io/docs/install/docker/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 4317,
          "container": 4317,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SIGNOZ_OTEL_COLLECTOR_ADDR",
          "default": "signoz-otel-collector:4317",
          "description": "OTel collector address"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "sillytavern",
      "name": "SillyTavern",
      "description": "Frontend for power users to interact with LLMs and roleplay characters with rich prompt control.",
      "category": "AI & Voice",
      "image": "ghcr.io/sillytavern/sillytavern:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/sillytavern.png",
      "website": "https://sillytavern.app",
      "docsUrl": "https://docs.sillytavern.app",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sillytavern/data",
          "container": "/home/node/app/data"
        },
        {
          "host": "/opt/appdata/sillytavern/plugins",
          "container": "/home/node/app/plugins"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "smokeping",
      "name": "SmokePing",
      "description": "Latency measurement and graphing tool with multiple probe types and historical analysis.",
      "category": "Monitoring",
      "image": "linuxserver/smokeping:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/smokeping.png",
      "website": "https://oss.oetiker.ch/smokeping",
      "docsUrl": "https://github.com/linuxserver/docker-smokeping",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/smokeping/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/smokeping/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "sms-gateway-android",
      "name": "SMS Gateway (Android)",
      "description": "Use your Android phone as an SMS gateway; sends SMS via REST API.",
      "category": "Communications",
      "image": "capcom6/sms-gateway:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/capcom6/sms-gateway",
      "docsUrl": "https://github.com/capcom6/sms-gateway",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sms-gateway/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "API_AUTH_TOKEN",
          "default": "",
          "description": "Bearer token for the gateway API",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "smtp4dev",
      "name": "smtp4dev",
      "description": "Dummy SMTP server for development; captures emails and displays them in a web UI.",
      "category": "Communications",
      "image": "rnwood/smtp4dev:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/rnwood/smtp4dev",
      "docsUrl": "https://github.com/rnwood/smtp4dev",
      "ports": [
        {
          "host": 25,
          "container": 25,
          "protocol": "tcp"
        },
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 143,
          "container": 143,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/smtp4dev/data",
          "container": "/var/mail"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "snmp-exporter",
      "name": "SNMP Exporter",
      "description": "Prometheus exporter for SNMP-enabled network devices, switches and routers.",
      "category": "Monitoring",
      "image": "prom/snmp-exporter:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/prometheus/snmp_exporter",
      "docsUrl": "https://github.com/prometheus/snmp_exporter#readme",
      "ports": [
        {
          "host": 9116,
          "container": 9116,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/snmp-exporter/config",
          "container": "/etc/snmp_exporter"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "solr",
      "name": "Apache Solr",
      "description": "Apache Solr 9 open-source enterprise search platform built on Apache Lucene.",
      "category": "Databases",
      "image": "solr:9",
      "logo": "https://icon.horse/icon/solr.apache.org",
      "website": "https://solr.apache.org",
      "docsUrl": "https://solr.apache.org/guide/",
      "ports": [
        {
          "host": 8983,
          "container": 8983,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/solr/data",
          "container": "/var/solr"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "9"
    },
    {
      "slug": "sonarqube",
      "name": "SonarQube Community",
      "description": "Continuous inspection of code quality and security for many languages.",
      "category": "Developer Tools",
      "image": "sonarqube:lts-community",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/sonarqube.png",
      "website": "https://www.sonarsource.com",
      "docsUrl": "https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/intro/sonarqube-in-docker/",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sonarqube/data",
          "container": "/opt/sonarqube/data"
        },
        {
          "host": "/opt/appdata/sonarqube/extensions",
          "container": "/opt/sonarqube/extensions"
        },
        {
          "host": "/opt/appdata/sonarqube/logs",
          "container": "/opt/sonarqube/logs"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SONAR_JDBC_USERNAME",
          "default": "sonar",
          "description": "Database username"
        },
        {
          "key": "SONAR_JDBC_PASSWORD",
          "default": "",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "SONAR_JDBC_URL",
          "default": "jdbc:h2:tcp://localhost:9092/sonar",
          "description": "JDBC connection string"
        }
      ],
      "minMemory": "4GB",
      "version": "lts"
    },
    {
      "slug": "sonarr",
      "name": "Sonarr",
      "description": "Automatic TV show downloading and management for Usenet and BitTorrent.",
      "category": "Media",
      "image": "lscr.io/linuxserver/sonarr:latest",
      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/sonarr-icon.png",
      "website": "https://sonarr.tv",
      "docsUrl": "https://wiki.servarr.com/sonarr",
      "ports": [
        {
          "host": 8989,
          "container": 8989,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sonarr/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/sonarr/downloads",
          "container": "/downloads"
        },
        {
          "host": "/opt/appdata/sonarr/tv",
          "container": "/tv"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "sonatype-nexus",
      "name": "Sonatype Nexus Repository",
      "description": "Universal artifact repository manager for binaries, containers, and build outputs.",
      "category": "Developer Tools",
      "image": "sonatype/nexus3:latest",
      "logo": "https://icon.horse/icon/www.sonatype.com",
      "website": "https://www.sonatype.com/products/nexus-repository",
      "docsUrl": "https://hub.docker.com/r/sonatype/nexus3/",
      "ports": [
        {
          "host": 8081,
          "container": 8081,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sonatype-nexus/data",
          "container": "/nexus-data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "sonic",
      "name": "Sonic",
      "description": "Fast, lightweight, and schema-less search backend written in Rust.",
      "category": "Databases",
      "image": "valeriansaliou/sonic:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/valeriansaliou/sonic",
      "docsUrl": "https://github.com/valeriansaliou/sonic#readme",
      "ports": [
        {
          "host": 1491,
          "container": 1491,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sonic/config",
          "container": "/etc/sonic"
        },
        {
          "host": "/opt/appdata/sonic/data",
          "container": "/var/lib/sonic/store"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "speech-to-phrase",
      "name": "Speech-to-Phrase",
      "description": "Fast local speech-to-text for Home Assistant Assist that matches known sentence templates and exposed entity names.",
      "category": "AI & Voice",
      "image": "rhasspy/wyoming-speech-to-phrase:latest",
      "logo": "https://raw.githubusercontent.com/OHF-Voice/speech-to-phrase/main/icon.png",
      "website": "https://github.com/OHF-Voice/speech-to-phrase",
      "docsUrl": "https://github.com/OHF-Voice/speech-to-phrase#docker-container",
      "ports": [
        {
          "host": 10300,
          "container": 10300,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/speech-to-phrase/models",
          "container": "/models"
        },
        {
          "host": "/opt/appdata/speech-to-phrase/train",
          "container": "/train"
        },
        {
          "host": "/opt/appdata/speech-to-phrase/custom-sentences",
          "container": "/custom-sentences"
        }
      ],
      "envVars": [
        {
          "key": "HASS_WEBSOCKET_URI",
          "default": "ws://homeassistant.local:8123/api/websocket",
          "description": "Home Assistant WebSocket API URL"
        },
        {
          "key": "HASS_TOKEN",
          "default": "",
          "description": "Home Assistant long-lived access token",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n{{volumes}}\n{{environment}}\n    command:\n      - --hass-websocket-uri\n      - {{env.HASS_WEBSOCKET_URI}}\n      - --hass-token\n      - {{env.HASS_TOKEN}}\n      - --custom-sentences-dir\n      - /custom-sentences\n      - --retrain-on-start\n",
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "speedtest-tracker",
      "name": "Speedtest Tracker",
      "description": "Run scheduled internet speed tests and track results over time.",
      "category": "Utilities",
      "image": "lscr.io/linuxserver/speedtest-tracker:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/speedtest-tracker.png",
      "website": "https://docs.speedtest-tracker.dev",
      "docsUrl": "https://docs.speedtest-tracker.dev",
      "ports": [
        {
          "host": 8765,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/speedtest-tracker/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "APP_KEY",
          "default": "",
          "description": "Laravel app key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "sqlite-web",
      "name": "sqlite-web",
      "description": "Web-based SQLite database browser and editor written in Python.",
      "category": "Databases",
      "image": "ghcr.io/coleifer/sqlite-web:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/coleifer/sqlite-web",
      "docsUrl": "https://github.com/coleifer/sqlite-web#readme",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sqlite-web/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "SQLITE_DATABASE",
          "default": "db.sqlite3",
          "description": "Path to the SQLite database file"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "sqlitebrowser",
      "name": "SQLite Browser",
      "description": "Web-based visual editor for SQLite database files, powered by LinuxServer.io.",
      "category": "Databases",
      "image": "linuxserver/sqlitebrowser:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/sqlitebrowser.png",
      "website": "https://sqlitebrowser.org",
      "docsUrl": "https://hub.docker.com/r/linuxserver/sqlitebrowser",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/sqlitebrowser/data",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID for the application"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID for the application"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "squid",
      "name": "Squid",
      "description": "Caching HTTP and HTTPS forward proxy with rich access controls.",
      "category": "Networking",
      "image": "sameersbn/squid:latest",
      "logo": "https://www.squid-cache.org/favicon.ico",
      "website": "http://www.squid-cache.org",
      "docsUrl": "https://github.com/sameersbn/docker-squid",
      "ports": [
        {
          "host": 3128,
          "container": 3128,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/squid/config",
          "container": "/etc/squid"
        },
        {
          "host": "/opt/appdata/squid/cache",
          "container": "/var/spool/squid"
        },
        {
          "host": "/opt/appdata/squid/log",
          "container": "/var/log/squid"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "standard-notes",
      "name": "Standard Notes",
      "description": "End-to-end encrypted notes platform with extended features for power users.",
      "category": "Documents",
      "image": "standardnotes/web:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/standard-notes.png",
      "website": "https://standardnotes.com",
      "docsUrl": "https://docs.standardnotes.com",
      "ports": [
        {
          "host": 8099,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "starrocks",
      "name": "StarRocks",
      "description": "High-performance MPP analytical database for sub-second real-time analytics at scale.",
      "category": "Databases",
      "image": "starrocks/allin1-ubuntu:latest",
      "logo": "https://icon.horse/icon/www.starrocks.io",
      "website": "https://www.starrocks.io",
      "docsUrl": "https://docs.starrocks.io",
      "ports": [
        {
          "host": 9030,
          "container": 9030,
          "protocol": "tcp"
        },
        {
          "host": 8030,
          "container": 8030,
          "protocol": "tcp"
        },
        {
          "host": 8040,
          "container": 8040,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/starrocks/data",
          "container": "/opt/starrocks/var"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "statping",
      "name": "Statping",
      "description": "Status page and monitoring for HTTP, TCP, ICMP and gRPC services with a beautiful dashboard.",
      "category": "Monitoring",
      "image": "statping/statping:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/statping.png",
      "website": "https://statping.com",
      "docsUrl": "https://github.com/statping/statping/wiki",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/statping/data",
          "container": "/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ADMIN_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "ADMIN_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "step-ca",
      "name": "Step-CA",
      "description": "Online certificate authority for issuing short-lived, automatically renewed X.509 certificates.",
      "category": "Security",
      "image": "smallstep/step-ca:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/step-ca.png",
      "website": "https://smallstep.com/certificates",
      "docsUrl": "https://smallstep.com/docs/step-ca",
      "ports": [
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/step-ca/step",
          "container": "/home/step"
        }
      ],
      "envVars": [
        {
          "key": "DOCKER_STEPCA_INIT_NAME",
          "default": "Smallstep CA",
          "description": "CA display name"
        },
        {
          "key": "DOCKER_STEPCA_INIT_DNS_NAMES",
          "default": "ca.example.com",
          "description": "Comma-separated DNS names"
        },
        {
          "key": "DOCKER_STEPCA_INIT_PASSWORD",
          "default": "change-me",
          "description": "CA key passphrase",
          "secret": true
        },
        {
          "key": "DOCKER_STEPCA_INIT_PROVISIONER_NAME",
          "default": "admin",
          "description": "Provisioner name"
        }
      ],
      "minMemory": "256MB",
      "version": "latest"
    },
    {
      "slug": "stirling-pdf",
      "name": "Stirling PDF",
      "description": "Local web tools for PDF conversion, editing, OCR, and signing.",
      "category": "Documents",
      "image": "frooodle/s-pdf:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/stirling-pdf.png",
      "website": "https://www.stirlingpdf.com",
      "docsUrl": "https://docs.stirlingpdf.com",
      "ports": [
        {
          "host": 8082,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/stirling-pdf/trainingData",
          "container": "/usr/share/tessdata"
        },
        {
          "host": "/opt/appdata/stirling-pdf/configs",
          "container": "/configs"
        },
        {
          "host": "/opt/appdata/stirling-pdf/customFiles",
          "container": "/customFiles"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "superset",
      "name": "Apache Superset",
      "description": "Modern, enterprise-ready data exploration and visualization platform for dashboards and charts.",
      "category": "Databases",
      "image": "apache/superset:latest",
      "logo": "https://superset.apache.org/img/superset-logo-horiz.svg",
      "website": "https://superset.apache.org",
      "docsUrl": "https://superset.apache.org/docs/installation/installing-superset-using-docker-compose",
      "ports": [
        {
          "host": 8088,
          "container": 8088,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/superset/data",
          "container": "/app/superset_home"
        },
        {
          "host": "/opt/appdata/superset/config",
          "container": "/etc/superset"
        }
      ],
      "envVars": [
        {
          "key": "SUPERSET_SECRET_KEY",
          "default": "",
          "description": "Flask secret key for sessions",
          "secret": true
        },
        {
          "key": "DATABASE_URL",
          "default": "postgresql://superset:superset@postgres:5432/superset",
          "description": "Metadata database connection"
        },
        {
          "key": "SUPERSET_ADMIN_USERNAME",
          "default": "admin",
          "description": "Bootstrap admin username"
        },
        {
          "key": "SUPERSET_ADMIN_PASSWORD",
          "default": "admin",
          "description": "Bootstrap admin password",
          "secret": true
        },
        {
          "key": "SUPERSET_ADMIN_EMAIL",
          "default": "admin@superset.local",
          "description": "Bootstrap admin email"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "suricata",
      "name": "Suricata",
      "description": "High-performance network IDS, IPS, and network security monitoring engine.",
      "category": "Security",
      "image": "jasonish/suricata:latest",
      "logo": "https://icon.horse/icon/suricata.io",
      "website": "https://suricata.io",
      "docsUrl": "https://docs.suricata.io",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/suricata/config",
          "container": "/etc/suricata"
        },
        {
          "host": "/opt/appdata/suricata/logs",
          "container": "/var/log/suricata"
        },
        {
          "host": "/opt/appdata/suricata/rules",
          "container": "/var/lib/suricata/rules"
        }
      ],
      "envVars": [
        {
          "key": "INTERFACE",
          "default": "eth0",
          "description": "Capture interface"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "surrealdb",
      "name": "SurrealDB",
      "description": "Multi-model database combining document, graph, and key-value capabilities with SQL-like queries.",
      "category": "Databases",
      "image": "surrealdb/surrealdb:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/surrealdb.png",
      "website": "https://surrealdb.com",
      "docsUrl": "https://surrealdb.com/docs",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/surrealdb/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "SURREAL_USER",
          "default": "root",
          "description": "Root username"
        },
        {
          "key": "SURREAL_PASS",
          "default": "",
          "description": "Root password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "swag",
      "name": "SWAG",
      "description": "Secure Web Application Gateway with Nginx, Certbot, and fail2ban built in.",
      "category": "Networking",
      "image": "lscr.io/linuxserver/swag:latest",
      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/swag.gif",
      "website": "https://docs.linuxserver.io/images/docker-swag/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-swag/",
      "ports": [
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        },
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/swag/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "URL",
          "default": "",
          "description": "Top-level domain (e.g. example.com)"
        },
        {
          "key": "SUBDOMAINS",
          "default": "wildcard",
          "description": "Subdomains (comma-separated or wildcard)"
        },
        {
          "key": "VALIDATION",
          "default": "http",
          "description": "Validation method (http, dns, duckdns)"
        },
        {
          "key": "EMAIL",
          "default": "",
          "description": "Email for Let's Encrypt notifications"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "swagger-editor",
      "name": "Swagger Editor",
      "description": "Swagger Editor for designing, defining, and documenting REST APIs in OpenAPI.",
      "category": "Developer Tools",
      "image": "swaggerapi/swagger-editor:latest",
      "logo": "https://icon.horse/icon/editor.swagger.io",
      "website": "https://editor.swagger.io",
      "docsUrl": "https://github.com/swagger-api/swagger-editor/blob/develop/README.md",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "swagger-ui",
      "name": "Swagger UI",
      "description": "Interactive documentation for OpenAPI specifications served in the browser.",
      "category": "Developer Tools",
      "image": "swaggerapi/swagger-ui:latest",
      "logo": "https://icon.horse/icon/swagger.io",
      "website": "https://swagger.io",
      "docsUrl": "https://swagger.io/docs/specification/about/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SWAGGER_JSON",
          "default": "/api/openapi.json",
          "description": "Path or URL to the OpenAPI spec"
        },
        {
          "key": "BASE_URL",
          "default": "/swagger",
          "description": "Base URL under which Swagger UI is served"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "syncthing",
      "name": "Syncthing",
      "description": "Continuous decentralized file synchronization.",
      "category": "Photos & Files",
      "image": "lscr.io/linuxserver/syncthing:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/syncthing.png",
      "website": "https://docs.linuxserver.io/images/docker-syncthing/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-syncthing/",
      "ports": [
        {
          "host": 8384,
          "container": 8384,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/syncthing/config",
          "container": "/config"
        },
        {
          "host": "/srv/sync",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "syslog-ng",
      "name": "syslog-ng",
      "description": "Log management solution with syslog protocol parsing and flexible routing/filtering.",
      "category": "Monitoring",
      "image": "balabit/syslog-ng:latest",
      "logo": "https://icon.horse/icon/www.syslog-ng.com",
      "website": "https://www.syslog-ng.com",
      "docsUrl": "https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.37/administration-guide/27",
      "ports": [
        {
          "host": 514,
          "container": 514,
          "protocol": "udp"
        },
        {
          "host": 601,
          "container": 601,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/syslog-ng/config",
          "container": "/etc/syslog-ng"
        },
        {
          "host": "/opt/appdata/syslog-ng/data",
          "container": "/var/lib/syslog-ng"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tabbyapi",
      "name": "TabbyAPI",
      "description": "An OpenAI-compatible LLM inference server optimized for ExLlamaV2, designed for self-hosted AI.",
      "category": "AI & Voice",
      "image": "ghcr.io/theroyallab/tabbyapi:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/theroyallab/tabbyAPI",
      "docsUrl": "https://github.com/theroyallab/tabbyAPI/wiki",
      "ports": [
        {
          "host": 5000,
          "container": 5000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tabbyapi/models",
          "container": "/models"
        },
        {
          "host": "/opt/appdata/tabbyapi/config",
          "container": "/app/config.yml"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TABBY_API_KEY",
          "default": "",
          "description": "API key to gate the server",
          "secret": true
        }
      ],
      "minMemory": "6GB",
      "version": "latest"
    },
    {
      "slug": "taiga",
      "name": "Taiga",
      "description": "Agile project management platform with kanban, scrum, and issue tracking.",
      "category": "Developer Tools",
      "image": "taigaio/taiga-back:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/taiga.png",
      "website": "https://www.taiga.io",
      "docsUrl": "https://docs.taiga.io/",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/taiga/media",
          "container": "/taiga-back/media"
        },
        {
          "host": "/opt/appdata/taiga/static",
          "container": "/taiga-back/static"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TAIGA_SECRET_KEY",
          "default": "",
          "description": "Application secret key",
          "secret": true
        },
        {
          "key": "DATABASE_URL",
          "default": "postgresql://taiga:taiga@db:5432/taiga",
          "description": "PostgreSQL connection string"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "talebook",
      "name": "Talebook",
      "description": "Self-hosted book library platform built on Calibre with a beautiful web UI, OPDS feed, and online reader.",
      "category": "Productivity",
      "image": "talebook/talebook:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/talebook/talebook",
      "docsUrl": "https://github.com/talebook/talebook/wiki",
      "ports": [
        {
          "host": 8580,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/talebook/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TALEBOOK_ADMIN",
          "default": "admin",
          "description": "Initial admin username"
        },
        {
          "key": "TALEBOOK_PASS",
          "default": "change-me",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tandoor-recipes",
      "name": "Tandoor Recipes",
      "description": "Recipe manager, meal planner, and shopping list app.",
      "category": "Productivity",
      "image": "vabene1111/recipes:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tandoor-recipes.png",
      "website": "https://tandoor.dev",
      "docsUrl": "https://docs.tandoor.dev",
      "ports": [
        {
          "host": 8088,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tandoor-recipes/staticfiles",
          "container": "/opt/recipes/staticfiles"
        },
        {
          "host": "/opt/appdata/tandoor-recipes/mediafiles",
          "container": "/opt/recipes/mediafiles"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SECRET_KEY",
          "default": "change-me",
          "description": "Django secret key",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tarantool",
      "name": "Tarantool",
      "description": "In-memory database and Lua application server for high-performance data processing.",
      "category": "Databases",
      "image": "tarantool/tarantool:latest",
      "logo": "https://icon.horse/icon/www.tarantool.io",
      "website": "https://www.tarantool.io",
      "docsUrl": "https://www.tarantool.io/en/doc/latest/",
      "ports": [
        {
          "host": 3301,
          "container": 3301,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tarantool/data",
          "container": "/var/lib/tarantool"
        }
      ],
      "envVars": [
        {
          "key": "TARANTOOL_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "TARANTOOL_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tasmoadmin",
      "name": "TasmoAdmin",
      "description": "Web admin interface to manage multiple Tasmota devices from one place.",
      "category": "Home Automation",
      "image": "ghcr.io/tasmoadmin/tasmoadmin:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tasmoadmin.png",
      "website": "https://github.com/tasmoadmin/TasmoAdmin",
      "docsUrl": "https://github.com/tasmoadmin/TasmoAdmin",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tasmoadmin/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tautulli",
      "name": "Tautulli",
      "description": "Monitoring, analytics, and notifications for Plex Media Server.",
      "category": "Media",
      "image": "lscr.io/linuxserver/tautulli:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tautulli.png",
      "website": "https://docs.linuxserver.io/images/docker-tautulli/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-tautulli/",
      "ports": [
        {
          "host": 8181,
          "container": 8181,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tautulli/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tdarr",
      "name": "Tdarr",
      "description": "Distributed media transcoding and library health automation.",
      "category": "Media",
      "image": "ghcr.io/haveagitgat/tdarr:latest",
      "logo": "https://tdarr.io/logo192.png",
      "website": "https://tdarr.io",
      "docsUrl": "https://docs.tdarr.io",
      "ports": [
        {
          "host": 8265,
          "container": 8265,
          "protocol": "tcp"
        },
        {
          "host": 8266,
          "container": 8266,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tdarr/server",
          "container": "/app/server"
        },
        {
          "host": "/opt/appdata/tdarr/configs",
          "container": "/app/configs"
        },
        {
          "host": "/opt/appdata/tdarr/logs",
          "container": "/app/logs"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/transcode",
          "container": "/temp"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "serverIP",
          "default": "0.0.0.0",
          "description": "Server bind address"
        },
        {
          "key": "serverPort",
          "default": "8266",
          "description": "Server API port"
        },
        {
          "key": "webUIPort",
          "default": "8265",
          "description": "Web UI port"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "tdengine",
      "name": "TDengine",
      "description": "High-performance time-series database optimized for IoT, industrial, and monitoring workloads.",
      "category": "Databases",
      "image": "tdengine/tdengine:latest",
      "logo": "https://icon.horse/icon/www.taosdata.com",
      "website": "https://www.taosdata.com",
      "docsUrl": "https://docs.tdengine.com",
      "ports": [
        {
          "host": 6041,
          "container": 6041,
          "protocol": "tcp"
        },
        {
          "host": 6030,
          "container": 6030,
          "protocol": "tcp"
        },
        {
          "host": 6060,
          "container": 6060,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tdengine/data",
          "container": "/var/lib/taos"
        },
        {
          "host": "/opt/appdata/tdengine/log",
          "container": "/var/log/taos"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "technitium",
      "name": "Technitium DNS Server",
      "description": "Authoritative and recursive DNS server with DNSSEC, DNS-over-HTTPS, and ad blocking.",
      "category": "Networking",
      "image": "technitium/dns-server:latest",
      "logo": "https://technitium.com/favicon.ico",
      "website": "https://technitium.com/dns/",
      "docsUrl": "https://blog.technitium.com/2017/11/running-dns-server-on-ubuntu-linux.html",
      "ports": [
        {
          "host": 5380,
          "container": 5380,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/technitium/config",
          "container": "/etc/dns/config"
        }
      ],
      "envVars": [
        {
          "key": "DNS_SERVER_DOMAIN",
          "default": "dns-server",
          "description": "DNS server domain name"
        },
        {
          "key": "DNS_SERVER_ADMIN_PASSWORD",
          "default": "",
          "description": "Admin panel password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "teddit",
      "name": "Teddit",
      "description": "Privacy-respecting, ad-free Reddit alternative front-end with infinite scroll and lightweight design.",
      "category": "Media",
      "image": "teddit/teddit:latest",
      "logo": "https://icon.horse/icon/codeberg.org",
      "website": "https://codeberg.org/teddit/teddit",
      "docsUrl": "https://codeberg.org/teddit/teddit#teddit",
      "ports": [
        {
          "host": 8088,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/teddit/config",
          "container": "/teddit/settings.js"
        },
        {
          "host": "/opt/appdata/teddit/public",
          "container": "/teddit/public"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "REDIRECT_SUBREDDITS",
          "default": "on",
          "description": "Redirect NSFW subreddits to the old Reddit interface"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tei-embeddings",
      "name": "Text Embeddings Inference",
      "description": "Hugging Face's blazing-fast embeddings inference server for sentence-transformers and dense models.",
      "category": "AI & Voice",
      "image": "ghcr.io/huggingface/text-embeddings-inference:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/huggingface/text-embeddings-inference",
      "docsUrl": "https://github.com/huggingface/text-embeddings-inference",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tei-embeddings/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MODEL_ID",
          "default": "BAAI/bge-base-en-v1.5",
          "description": "Hugging Face model identifier"
        },
        {
          "key": "HF_TOKEN",
          "default": "",
          "description": "Hugging Face token for gated models",
          "secret": true
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "tempo",
      "name": "Grafana Tempo",
      "description": "High-scale, low-cost distributed tracing backend from Grafana Labs with S3/GCS storage.",
      "category": "Monitoring",
      "image": "grafana/tempo:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tempo.png",
      "website": "https://grafana.com/oss/tempo",
      "docsUrl": "https://grafana.com/docs/tempo/latest/",
      "ports": [
        {
          "host": 3200,
          "container": 3200,
          "protocol": "tcp"
        },
        {
          "host": 4317,
          "container": 4317,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tempo/config",
          "container": "/etc/tempo"
        },
        {
          "host": "/opt/appdata/tempo/data",
          "container": "/var/tempo"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tempo-query",
      "name": "Grafana Tempo Query",
      "description": "Standalone Tempo query service exposing a Jaeger-compatible API for trace lookups.",
      "category": "Monitoring",
      "image": "grafana/tempo-query:latest",
      "logo": "https://icon.horse/icon/grafana.com",
      "website": "https://grafana.com/oss/tempo",
      "docsUrl": "https://grafana.com/docs/tempo/latest/operations/tempo_query/",
      "ports": [
        {
          "host": 16686,
          "container": 16686,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TEMPO_BACKEND",
          "default": "tempo:3100",
          "description": "Tempo backend address"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "temporal",
      "name": "Temporal",
      "description": "Durable execution platform for building reliable, long-running workflows at scale.",
      "category": "Databases",
      "image": "temporalio/temporal:latest",
      "logo": "https://temporal.io/icons/icon-512x512.png",
      "website": "https://temporal.io",
      "docsUrl": "https://docs.temporal.io/self-hosted-guide",
      "ports": [
        {
          "host": 7233,
          "container": 7233,
          "protocol": "tcp"
        },
        {
          "host": 8233,
          "container": 8233,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/temporal/data",
          "container": "/etc/temporal"
        }
      ],
      "envVars": [
        {
          "key": "DB",
          "default": "postgres12",
          "description": "Persistence driver plugin"
        },
        {
          "key": "POSTGRES_USER",
          "default": "temporal",
          "description": "PostgreSQL user"
        },
        {
          "key": "POSTGRES_PWD",
          "default": "",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "POSTGRES_SEEDS",
          "default": "postgres",
          "description": "PostgreSQL host"
        },
        {
          "key": "POSTGRES_DB",
          "default": "temporal",
          "description": "PostgreSQL database"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "terraria",
      "name": "Terraria",
      "description": "Dedicated Terraria server for the 2D sandbox adventure game with multiplayer support.",
      "category": "Gaming",
      "image": "ryshe/terraria:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/terraria.png",
      "website": "https://terraria.org",
      "docsUrl": "https://github.com/ryshe/terraria",
      "ports": [
        {
          "host": 7777,
          "container": 7777,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/terraria/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/terraria/worlds",
          "container": "/worlds"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "WORLD_FILENAME",
          "default": "world1.wld",
          "description": "World file name"
        },
        {
          "key": "MAX_PLAYERS",
          "default": "8",
          "description": "Maximum players"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "tidb",
      "name": "TiDB",
      "description": "Distributed MySQL-compatible database with horizontal scalability and strong consistency.",
      "category": "Databases",
      "image": "pingcap/tidb:latest",
      "logo": "https://icon.horse/icon/www.pingcap.com",
      "website": "https://www.pingcap.com",
      "docsUrl": "https://docs.pingcap.com/tidb/stable",
      "ports": [
        {
          "host": 4000,
          "container": 4000,
          "protocol": "tcp"
        },
        {
          "host": 10080,
          "container": 10080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tidb/data",
          "container": "/tmp/tidb"
        }
      ],
      "envVars": [
        {
          "key": "MYSQL_ROOT_PASSWORD",
          "default": "",
          "description": "Root password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tikiwiki",
      "name": "Tiki Wiki",
      "description": "All-in-one groupware with wiki, CMS, forums, blogs, and CRM features.",
      "category": "Documents",
      "image": "tikiwiki/tikiwiki:latest",
      "logo": "https://icon.horse/icon/tiki.org",
      "website": "https://tiki.org",
      "docsUrl": "https://hub.docker.com/r/tikiwiki/tikiwiki",
      "ports": [
        {
          "host": 8085,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tikiwiki/data",
          "container": "/var/www/html/db"
        },
        {
          "host": "/opt/appdata/tikiwiki/config",
          "container": "/etc/tikiwiki"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TIKI_DB_HOST",
          "default": "tikiwiki-db",
          "description": "Database host"
        },
        {
          "key": "TIKI_DB_USER",
          "default": "tikiwiki",
          "description": "Database user"
        },
        {
          "key": "TIKI_DB_PASS",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "TIKI_DB_NAME",
          "default": "tikiwiki",
          "description": "Database name"
        }
      ],
      "minMemory": "1GB",
      "version": "latest"
    },
    {
      "slug": "tile-server-gl",
      "name": "TileServer GL",
      "description": "Vector and raster tile server with GL-JS rendering for self-hosted interactive maps from MBTiles.",
      "category": "Databases",
      "image": "maptiler/tileserver-gl:latest",
      "logo": "https://tileserver.readthedocs.io/en/latest/_static/logo.svg",
      "website": "https://tileserver.readthedocs.io",
      "docsUrl": "https://tileserver.readthedocs.io/en/latest/installation.html",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tile-server-gl/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "HOST",
          "default": "0.0.0.0",
          "description": "Bind address"
        },
        {
          "key": "PORT",
          "default": "8080",
          "description": "Listen port"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "timescaledb",
      "name": "TimescaleDB",
      "description": "PostgreSQL scaled for time-series data with automatic partitioning and SQL compatibility.",
      "category": "Databases",
      "image": "timescale/timescaledb:latest-pg16",
      "logo": "https://icon.horse/icon/www.timescale.com",
      "website": "https://www.timescale.com",
      "docsUrl": "https://docs.timescale.com",
      "ports": [
        {
          "host": 5432,
          "container": 5432,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/timescaledb/data",
          "container": "/var/lib/postgresql/data"
        }
      ],
      "envVars": [
        {
          "key": "POSTGRES_USER",
          "default": "postgres",
          "description": "Database superuser name"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "Database superuser password",
          "secret": true
        },
        {
          "key": "POSTGRES_DB",
          "default": "timescale",
          "description": "Default database name"
        }
      ],
      "version": "latest-pg16"
    },
    {
      "slug": "tooljet",
      "name": "ToolJet",
      "description": "Open-source low-code framework to build and deploy custom internal tools with minimal engineering effort.",
      "category": "Developer Tools",
      "image": "tooljet/tooljet:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tooljet.png",
      "website": "https://www.tooljet.com",
      "docsUrl": "https://docs.tooljet.com/docs/setup/docker",
      "ports": [
        {
          "host": 3000,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tooljet",
          "container": "/var/lib/postgresql/13/main"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TOOLJET_HOST",
          "default": "http://localhost:3000",
          "description": "Public ToolJet URL"
        },
        {
          "key": "SECRET_KEY_BASE",
          "default": "",
          "description": "Rails secret key base",
          "secret": true
        },
        {
          "key": "PG_HOST",
          "default": "tooljet-db",
          "description": "PostgreSQL host"
        },
        {
          "key": "PG_DB",
          "default": "tooljet",
          "description": "PostgreSQL database name"
        },
        {
          "key": "PG_USER",
          "default": "tooljet",
          "description": "PostgreSQL user"
        },
        {
          "key": "PG_PASS",
          "default": "",
          "description": "PostgreSQL password",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest",
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n    environment:\n      TOOLJET_HOST: {{env.TOOLJET_HOST}}\n      SECRET_KEY_BASE: {{env.SECRET_KEY_BASE}}\n      PG_HOST: {{serviceName}}-db\n      PG_DB: {{env.PG_DB}}\n      PG_USER: {{env.PG_USER}}\n      PG_PASS: {{env.PG_PASS}}\n      TZ: {{env.TZ}}\n    depends_on:\n      - {{serviceName}}-db\n  {{serviceName}}-db:\n    image: postgres:13-alpine\n    container_name: {{serviceName}}-db\n    restart: unless-stopped\n    environment:\n      POSTGRES_DB: {{env.PG_DB}}\n      POSTGRES_USER: {{env.PG_USER}}\n      POSTGRES_PASSWORD: {{env.PG_PASS}}\n    volumes:\n      - {{appDataPath}}/db:/var/lib/postgresql/data\n"
    },
    {
      "slug": "traefik",
      "name": "Traefik",
      "description": "Modern reverse proxy and load balancer with automatic HTTPS.",
      "category": "Networking",
      "image": "traefik:v3.0",
      "logo": "https://doc.traefik.io/traefik/assets/img/traefik.logo.png",
      "website": "https://traefik.io",
      "docsUrl": "https://doc.traefik.io/traefik/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        },
        {
          "host": 8880,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        },
        {
          "host": "/opt/appdata/traefik/config",
          "container": "/etc/traefik"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "v3.0"
    },
    {
      "slug": "traefik-dev",
      "name": "Traefik Dev",
      "description": "Traefik reverse proxy and load balancer for local container development.",
      "category": "Developer Tools",
      "image": "traefik:v3.0",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/traefik.png",
      "website": "https://traefik.io",
      "docsUrl": "https://doc.traefik.io/traefik/getting-started/quick-start/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        },
        {
          "host": 443,
          "container": 443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/traefik-dev/data",
          "container": "/data"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "v3.0"
    },
    {
      "slug": "traefik-forward-auth",
      "name": "Traefik Forward Auth",
      "description": "Authentication provider for Traefik that supports OIDC, Google, and other providers.",
      "category": "Networking",
      "image": "thomseddon/traefik-forward-auth:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/thomseddon/traefik-forward-auth",
      "docsUrl": "https://github.com/thomseddon/traefik-forward-auth",
      "ports": [
        {
          "host": 4181,
          "container": 4181,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PROVIDERS_OIDC_ISSUER_URL",
          "default": "https://example.com",
          "description": "OIDC issuer URL"
        },
        {
          "key": "PROVIDERS_OIDC_CLIENT_ID",
          "default": "",
          "description": "OIDC client ID"
        },
        {
          "key": "PROVIDERS_OIDC_CLIENT_SECRET",
          "default": "",
          "description": "OIDC client secret",
          "secret": true
        },
        {
          "key": "SECRET",
          "default": "",
          "description": "Random string used to sign cookies",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "traggo",
      "name": "Traggo",
      "description": "Lightweight self-hosted time tagging and tracking tool with tag-based time entries.",
      "category": "Productivity",
      "image": "traggo/server:latest",
      "logo": "https://traggo.net/img/logo.svg",
      "website": "https://traggo.net",
      "docsUrl": "https://github.com/traggo/server",
      "ports": [
        {
          "host": 8600,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/traggo/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "transmission",
      "name": "Transmission",
      "description": "Lightweight BitTorrent client with a web interface.",
      "category": "Media",
      "image": "lscr.io/linuxserver/transmission:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/transmission.png",
      "website": "https://docs.linuxserver.io/images/docker-transmission/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-transmission/",
      "ports": [
        {
          "host": 9091,
          "container": 9091,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/transmission/config",
          "container": "/config"
        },
        {
          "host": "/srv/media",
          "container": "/media"
        },
        {
          "host": "/srv/downloads",
          "container": "/downloads"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "trilium",
      "name": "Trilium Notes",
      "description": "Hierarchical note-taking application with rich text, scripting, and synchronization.",
      "category": "Documents",
      "image": "zadam/trilium:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/trilium.png",
      "website": "https://github.com/zadam/trilium",
      "docsUrl": "https://github.com/zadam/trilium/wiki/Docker-installation",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/trilium/data",
          "container": "/home/node/trilium-data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TRILIUM_NETWORK_HOSTNAME",
          "default": "localhost",
          "description": "Hostname for the Trilium server"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "tuya-mqtt",
      "name": "tuya-mqtt",
      "description": "Bridge for Tuya smart devices to MQTT for local control without the Tuya cloud. Supports auto-discovery for Home Assistant.",
      "category": "Home Automation",
      "image": "gpajot/local-tuya:latest",
      "logo": "https://icon.horse/icon/local-tuya.github.io",
      "website": "https://github.com/gpajot/local-tuya",
      "docsUrl": "https://github.com/gpajot/local-tuya#readme",
      "ports": [
        {
          "host": 8883,
          "container": 8883,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tuya-mqtt/config",
          "container": "/app/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MQTT_HOST",
          "default": "mosquitto",
          "description": "MQTT broker host"
        },
        {
          "key": "MQTT_PORT",
          "default": "1883",
          "description": "MQTT broker port"
        },
        {
          "key": "MQTT_USERNAME",
          "default": "",
          "description": "MQTT broker username (leave empty for anonymous)"
        },
        {
          "key": "MQTT_PASSWORD",
          "default": "",
          "description": "MQTT broker password",
          "secret": true
        }
      ],
      "minMemory": "256MB",
      "version": "latest"
    },
    {
      "slug": "tvheadend",
      "name": "Tvheadend",
      "description": "TV streaming server and DVR for Linux with DVB, SAT>IP, and HDHomeRun support.",
      "category": "Media",
      "image": "linuxserver/tvheadend:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tvheadend.png",
      "website": "https://tvheadend.org",
      "docsUrl": "https://docs.linuxserver.io/images/docker-tvheadend",
      "ports": [
        {
          "host": 9981,
          "container": 9981,
          "protocol": "tcp"
        },
        {
          "host": 9982,
          "container": 9982,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tvheadend/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/tvheadend/recordings",
          "container": "/recordings"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "tyk",
      "name": "Tyk API Gateway",
      "description": "Open source API gateway with analytics, rate limiting, and authentication.",
      "category": "Networking",
      "image": "tykio/tyk-gateway:latest",
      "logo": "https://icon.horse/icon/tyk.io",
      "website": "https://tyk.io",
      "docsUrl": "https://tyk.io/docs/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/tyk/config",
          "container": "/etc/tyk"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "TYK_GW_SECRET",
          "default": "",
          "description": "Tyk gateway secret",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "unbound",
      "name": "Unbound",
      "description": "Validating, recursive, and caching DNS resolver focused on security and privacy.",
      "category": "Networking",
      "image": "mvance/unbound:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/unbound.png",
      "website": "https://nlnetlabs.nl/projects/unbound/about/",
      "docsUrl": "https://github.com/MatthewVance/unbound-docker",
      "ports": [
        {
          "host": 53,
          "container": 53,
          "protocol": "tcp"
        },
        {
          "host": 53,
          "container": 53,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/unbound/config",
          "container": "/opt/unbound/etc/unbound"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "unifi-network-application",
      "name": "UniFi Network Application",
      "description": "Controller for UniFi network devices.",
      "category": "Networking",
      "image": "lscr.io/linuxserver/unifi-network-application:latest",
      "logo": "https://icon.horse/icon/docs.linuxserver.io",
      "website": "https://docs.linuxserver.io/images/docker-unifi-network-application/",
      "docsUrl": "https://docs.linuxserver.io/images/docker-unifi-network-application/",
      "ports": [
        {
          "host": 8443,
          "container": 8443,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/unifi-network-application/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "MONGO_USER",
          "default": "unifi",
          "description": "MongoDB username"
        },
        {
          "key": "MONGO_PASS",
          "default": "change-me",
          "description": "MongoDB password",
          "secret": true
        },
        {
          "key": "MONGO_HOST",
          "default": "unifi-db",
          "description": "MongoDB host"
        },
        {
          "key": "MONGO_PORT",
          "default": "27017",
          "description": "MongoDB port"
        },
        {
          "key": "MONGO_DBNAME",
          "default": "unifi",
          "description": "MongoDB database"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "unstructured-api",
      "name": "Unstructured API",
      "description": "Preprocess and structure documents (PDFs, DOCX, images) for downstream LLM pipelines.",
      "category": "AI & Voice",
      "image": "quay.io/unstructured-io/unstructured-api:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/Unstructured-IO/unstructured",
      "docsUrl": "https://docs.unstructured.io/open-source/ingestion-api/overview",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/unstructured-api/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "UNSTRUCTURED_API_KEY",
          "default": "",
          "description": "API key to gate the ingestion endpoint",
          "secret": true
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "uptime-kuma",
      "name": "Uptime Kuma",
      "description": "Self-hosted monitoring tool with a fancy UI. Monitor HTTP, TCP, DNS, and more.",
      "category": "Monitoring",
      "image": "louislam/uptime-kuma:latest",
      "logo": "https://uptime.kuma.pet/img/icon.svg",
      "website": "https://uptime.kuma.pet",
      "docsUrl": "https://github.com/louislam/uptime-kuma/wiki",
      "ports": [
        {
          "host": 3001,
          "container": 3001,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/uptime-kuma/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "urbackup",
      "name": "UrBackup",
      "description": "Client/server backup system for image and file backups.",
      "category": "Backups",
      "image": "uroni/urbackup-server:latest",
      "logo": "https://www.urbackup.org/favicon.ico",
      "website": "https://www.urbackup.org",
      "docsUrl": "https://www.urbackup.org/administration_manual.html",
      "ports": [
        {
          "host": 55414,
          "container": 55414,
          "protocol": "tcp"
        },
        {
          "host": 55415,
          "container": 55415,
          "protocol": "tcp"
        },
        {
          "host": 35623,
          "container": 35623,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/urbackup/database",
          "container": "/var/urbackup"
        },
        {
          "host": "/srv/backups/urbackup",
          "container": "/backups"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "valheim",
      "name": "Valheim",
      "description": "Dedicated Valheim server for multiplayer Viking survival.",
      "category": "Gaming",
      "image": "lloesche/valheim-server:latest",
      "logo": "https://img.icons8.com/?size=512&id=zCYKMxlXCZhw&format=png",
      "website": "https://www.valheimgame.com",
      "docsUrl": "https://github.com/lloesche/valheim-server-docker",
      "ports": [
        {
          "host": 2456,
          "container": 2456,
          "protocol": "udp"
        },
        {
          "host": 2457,
          "container": 2457,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/valheim/config",
          "container": "/config"
        },
        {
          "host": "/opt/appdata/valheim/data",
          "container": "/opt/valheim"
        }
      ],
      "envVars": [
        {
          "key": "SERVER_NAME",
          "default": "My Valheim Server",
          "description": "Server name"
        },
        {
          "key": "WORLD_NAME",
          "default": "Dedicated",
          "description": "World name"
        },
        {
          "key": "SERVER_PASS",
          "default": "",
          "description": "Server password (min 5 chars)",
          "secret": true
        }
      ],
      "minMemory": "4GB",
      "version": "latest"
    },
    {
      "slug": "valkey",
      "name": "Valkey",
      "description": "Open-source fork of Redis maintained by the Linux Foundation, fully Redis-compatible.",
      "category": "Databases",
      "image": "valkey/valkey:7-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/valkey.png",
      "website": "https://valkey.io",
      "docsUrl": "https://valkey.io/topics/",
      "ports": [
        {
          "host": 6379,
          "container": 6379,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/valkey/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "VALKEY_PASSWORD",
          "default": "",
          "description": "Server password (leave empty for no auth)",
          "secret": true
        }
      ],
      "version": "7-alpine"
    },
    {
      "slug": "varnish",
      "name": "Varnish Cache",
      "description": "HTTP accelerator designed for content-heavy dynamic web sites and APIs.",
      "category": "Networking",
      "image": "varnish:latest",
      "logo": "https://varnish-cache.org/sites/default/files/varnish_50.png",
      "website": "https://varnish-cache.org",
      "docsUrl": "https://varnish-cache.org/docs/",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/varnish/config",
          "container": "/etc/varnish"
        },
        {
          "host": "/opt/appdata/varnish/lib",
          "container": "/var/lib/varnish"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "varnish-dev",
      "name": "Varnish Dev",
      "description": "Varnish HTTP accelerator for local caching and CDN behavior testing.",
      "category": "Developer Tools",
      "image": "varnish:latest",
      "logo": "https://icon.horse/icon/varnish-cache.org",
      "website": "https://varnish-cache.org",
      "docsUrl": "https://hub.docker.com/_/varnish",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/varnish-dev/config",
          "container": "/etc/varnish"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "VARNISH_SIZE",
          "default": "256M",
          "description": "Cache size"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "vault",
      "name": "HashiCorp Vault",
      "description": "Identity-based secrets management for tokens, passwords, certificates, and API keys.",
      "category": "Security",
      "image": "hashicorp/vault:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/vault.png",
      "website": "https://www.vaultproject.io",
      "docsUrl": "https://developer.hashicorp.com/vault/docs/platform/k8s",
      "ports": [
        {
          "host": 8200,
          "container": 8200,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vault/config",
          "container": "/vault/config"
        },
        {
          "host": "/opt/appdata/vault/data",
          "container": "/vault/data"
        },
        {
          "host": "/opt/appdata/vault/logs",
          "container": "/vault/logs"
        }
      ],
      "envVars": [
        {
          "key": "VAULT_DEV_ROOT_TOKEN_ID",
          "default": "",
          "description": "Dev mode root token (do not use in prod)",
          "secret": true
        },
        {
          "key": "VAULT_DEV_LISTEN_ADDRESS",
          "default": "0.0.0.0:8200",
          "description": "Dev mode listen address"
        },
        {
          "key": "VAULT_LOCAL_CONFIG",
          "default": "",
          "description": "Inline JSON HCL config"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "vaultwarden",
      "name": "Vaultwarden",
      "description": "Lightweight Bitwarden-compatible password manager server.",
      "category": "Security",
      "image": "vaultwarden/server:latest",
      "logo": "https://raw.githubusercontent.com/dani-garcia/vaultwarden/main/resources/vaultwarden-icon.svg",
      "website": "https://github.com/dani-garcia/vaultwarden",
      "docsUrl": "https://github.com/dani-garcia/vaultwarden/wiki",
      "ports": [
        {
          "host": 8880,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vaultwarden/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "ADMIN_TOKEN",
          "default": "",
          "description": "Admin panel token",
          "secret": true
        },
        {
          "key": "SIGNUPS_ALLOWED",
          "default": "true",
          "description": "Allow new user signups"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "vegeta-load-test",
      "name": "Vegeta Load Test",
      "description": "HTTP load testing CLI and library for measuring system endurance.",
      "category": "Developer Tools",
      "image": "peterevans/vegeta:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/tsenart/vegeta",
      "docsUrl": "https://github.com/tsenart/vegeta",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vegeta-load-test/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "verdaccio",
      "name": "Verdaccio",
      "description": "Lightweight private npm proxy registry with a web UI.",
      "category": "Developer Tools",
      "image": "verdaccio/verdaccio:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/verdaccio.png",
      "website": "https://verdaccio.org",
      "docsUrl": "https://verdaccio.org/docs/installation-docker",
      "ports": [
        {
          "host": 4873,
          "container": 4873,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/verdaccio/conf",
          "container": "/verdaccio/conf"
        },
        {
          "host": "/opt/appdata/verdaccio/storage",
          "container": "/verdaccio/storage"
        },
        {
          "host": "/opt/appdata/verdaccio/plugins",
          "container": "/verdaccio/plugins"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "VERDACCIO_USER_NAME",
          "default": "",
          "description": "Initial username"
        },
        {
          "key": "VERDACCIO_USER_PASSWORD",
          "default": "",
          "description": "Initial user password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "vernemq",
      "name": "VerneMQ",
      "description": "High-performance, distributed MQTT broker designed for IoT and real-time messaging.",
      "category": "Databases",
      "image": "vernemq/vernemq:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/vernemq.svg",
      "website": "https://vernemq.com",
      "docsUrl": "https://docs.vernemq.com",
      "ports": [
        {
          "host": 1883,
          "container": 1883,
          "protocol": "tcp"
        },
        {
          "host": 8883,
          "container": 8883,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vernemq/data",
          "container": "/vernemq/data"
        },
        {
          "host": "/opt/appdata/vernemq/etc",
          "container": "/etc/vernemq"
        }
      ],
      "envVars": [
        {
          "key": "DOCKER_VERNEMQ_USER",
          "default": "admin",
          "description": "Admin username"
        },
        {
          "key": "DOCKER_VERNEMQ_PASSWORD",
          "default": "",
          "description": "Admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "vespa",
      "name": "Vespa",
      "description": "Open-source platform for large-scale real-time vector and text search with ML models.",
      "category": "Databases",
      "image": "vespaengine/vespa:latest",
      "logo": "https://icon.horse/icon/vespa.ai",
      "website": "https://vespa.ai",
      "docsUrl": "https://docs.vespa.ai",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 19071,
          "container": 19071,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vespa/data",
          "container": "/opt/vespa/var"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone for container logs and scheduled tasks"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "victoriametrics",
      "name": "VictoriaMetrics",
      "description": "Fast time-series database and Prometheus-compatible metrics backend.",
      "category": "Monitoring",
      "image": "victoriametrics/victoria-metrics:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/victoriametrics.png",
      "website": "https://victoriametrics.com",
      "docsUrl": "https://docs.victoriametrics.com",
      "ports": [
        {
          "host": 8428,
          "container": 8428,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/victoriametrics/data",
          "container": "/victoria-metrics-data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "vikunja",
      "name": "Vikunja",
      "description": "Task and project management for personal and team workflows.",
      "category": "Productivity",
      "image": "vikunja/vikunja:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/vikunja.png",
      "website": "https://vikunja.io",
      "docsUrl": "https://vikunja.io/docs",
      "ports": [
        {
          "host": 3456,
          "container": 3456,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vikunja/files",
          "container": "/app/vikunja/files"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "VIKUNJA_SERVICE_PUBLICURL",
          "default": "http://localhost:3456",
          "description": "Public URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "vite-dev",
      "name": "Vite",
      "description": "Vite dev server on Node 22 Alpine, instant hot module replacement for modern frontend frameworks.",
      "category": "Developer Tools",
      "image": "node:22-alpine",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/vite.png",
      "website": "https://vitejs.dev",
      "docsUrl": "https://vitejs.dev/guide/",
      "ports": [
        {
          "host": 5173,
          "container": 5173,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vite-dev/app",
          "container": "/usr/src/app"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "NODE_ENV",
          "default": "development",
          "description": "Node environment"
        },
        {
          "key": "HOST",
          "default": "0.0.0.0",
          "description": "Bind address for dev server"
        }
      ],
      "version": "22-alpine"
    },
    {
      "slug": "vllm",
      "name": "vLLM",
      "description": "High-throughput, low-latency LLM serving engine with PagedAttention for production workloads.",
      "category": "AI & Voice",
      "image": "vllm/vllm-openai:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/vllm.png",
      "website": "https://docs.vllm.ai",
      "docsUrl": "https://docs.vllm.ai/en/latest/serving/deploying_with_docker.html",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vllm/models",
          "container": "/root/.cache/huggingface"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "HF_TOKEN",
          "default": "",
          "description": "Hugging Face token for gated models",
          "secret": true
        }
      ],
      "minMemory": "8GB",
      "version": "latest"
    },
    {
      "slug": "vulcand",
      "name": "Vulcand",
      "description": "Programmatic load balancer and reverse proxy powered by Etcd and built in Go.",
      "category": "Networking",
      "image": "jtblin/vulcand:latest",
      "logo": "https://www.vulcand.org/static/img/vulcand_logo.png",
      "website": "https://www.vulcand.org",
      "docsUrl": "https://www.vulcand.org/usage/",
      "ports": [
        {
          "host": 8181,
          "container": 8181,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/vulcand/config",
          "container": "/etc/vulcand"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "waha",
      "name": "WAHA",
      "description": "Self-hosted WhatsApp HTTP API gateway for WhatsApp Web sessions. Fits the whatsapp-web.js style gateway mentioned in the WhatsApp connector guide.",
      "category": "Communications",
      "image": "devlikeapro/waha:latest",
      "logo": "https://icon.horse/icon/waha.devlike.pro",
      "website": "https://waha.devlike.pro",
      "docsUrl": "https://waha.devlike.pro/docs/overview/quick-start/",
      "ports": [
        {
          "host": 3020,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/waha/sessions",
          "container": "/app/.sessions"
        }
      ],
      "envVars": [
        {
          "key": "WAHA_API_KEY",
          "default": "change-me",
          "description": "API key for WAHA API requests. WAHA also supports sha512:<hash> values.",
          "secret": true
        },
        {
          "key": "WAHA_DASHBOARD_USERNAME",
          "default": "admin",
          "description": "Dashboard and Swagger username"
        },
        {
          "key": "WAHA_DASHBOARD_PASSWORD",
          "default": "change-me",
          "description": "Dashboard and Swagger password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n{{ports}}\n{{volumes}}\n    environment:\n      WAHA_API_KEY: {{env.WAHA_API_KEY}}\n      WAHA_DASHBOARD_USERNAME: {{env.WAHA_DASHBOARD_USERNAME}}\n      WAHA_DASHBOARD_PASSWORD: {{env.WAHA_DASHBOARD_PASSWORD}}\n",
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "wallabag",
      "name": "Wallabag",
      "description": "Read-it-later web app for saving and annotating articles.",
      "category": "Productivity",
      "image": "wallabag/wallabag:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/wallabag.png",
      "website": "https://wallabag.org",
      "docsUrl": "https://doc.wallabag.org",
      "ports": [
        {
          "host": 8084,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/wallabag/data",
          "container": "/var/www/wallabag/data"
        },
        {
          "host": "/opt/appdata/wallabag/images",
          "container": "/var/www/wallabag/web/assets/images"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SYMFONY__ENV__DOMAIN_NAME",
          "default": "http://localhost:8084",
          "description": "External URL"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "watchtower",
      "name": "Watchtower",
      "description": "Automatically update running Docker containers with the latest image.",
      "category": "Utilities",
      "image": "containrrr/watchtower:latest",
      "logo": "https://containrrr.dev/watchtower/images/logo-450px.png",
      "website": "https://containrrr.dev/watchtower/",
      "docsUrl": "https://containrrr.dev/watchtower/",
      "ports": [],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "WATCHTOWER_CLEANUP",
          "default": "true",
          "description": "Remove old images after update"
        },
        {
          "key": "WATCHTOWER_POLL_INTERVAL",
          "default": "86400",
          "description": "Poll interval in seconds (default 24h)"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "weaviate",
      "name": "Weaviate",
      "description": "Open-source vector database combining vector and keyword search with modular ML models.",
      "category": "Databases",
      "image": "semitechnologies/weaviate:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/weaviate.svg",
      "website": "https://weaviate.io",
      "docsUrl": "https://weaviate.io/developers/weaviate",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        },
        {
          "host": 50051,
          "container": 50051,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/weaviate/data",
          "container": "/var/lib/weaviate"
        }
      ],
      "envVars": [
        {
          "key": "AUTHENTICATION_API_KEY",
          "default": "",
          "description": "API key for authentication",
          "secret": true
        },
        {
          "key": "PERSISTENCE_DATA_PATH",
          "default": "/var/lib/weaviate",
          "description": "Data persistence path"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "webdav",
      "name": "WebDAV Server",
      "description": "Lightweight WebDAV file server for sharing files over HTTP with simple authentication.",
      "category": "Photos & Files",
      "image": "bytemark/webdav:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/webdav.png",
      "website": "https://github.com/hacdias/webdav",
      "docsUrl": "https://github.com/hacdias/webdav/blob/master/README.md",
      "ports": [
        {
          "host": 8080,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/webdav/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/webdav/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "UTC",
          "description": "Timezone"
        },
        {
          "key": "WEBDAV_USERNAME",
          "default": "admin",
          "description": "WebDAV username"
        },
        {
          "key": "WEBDAV_PASSWORD",
          "default": "",
          "description": "WebDAV password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "wg-easy",
      "name": "WG Easy",
      "description": "Simple WireGuard VPN server with a web UI.",
      "category": "Networking",
      "image": "ghcr.io/wg-easy/wg-easy:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/wg-easy/wg-easy",
      "docsUrl": "https://github.com/wg-easy/wg-easy",
      "ports": [
        {
          "host": 51820,
          "container": 51820,
          "protocol": "udp"
        },
        {
          "host": 51821,
          "container": 51821,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/wg-easy/config",
          "container": "/etc/wireguard"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "WG_HOST",
          "default": "vpn.example.com",
          "description": "Public hostname or IP"
        },
        {
          "key": "PASSWORD_HASH",
          "default": "",
          "description": "Optional bcrypt password hash",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "whisper-cpp",
      "name": "Whisper.cpp",
      "description": "High-performance C++ port of OpenAI Whisper for CPU/GPU speech-to-text transcription.",
      "category": "AI & Voice",
      "image": "ghcr.io/ggml-org/whisper.cpp:main",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/ggerganov/whisper.cpp",
      "docsUrl": "https://github.com/ggerganov/whisper.cpp/tree/master/examples/server",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/whisper-cpp/models",
          "container": "/models"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "whoogle",
      "name": "Whoogle",
      "description": "Self-hosted, ad-free, privacy-respecting metasearch engine that proxies Google search results without tracking.",
      "category": "Utilities",
      "image": "benbusby/whoogle-search:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/whoogle.png",
      "website": "https://github.com/benbusby/whoogle-search",
      "docsUrl": "https://github.com/benbusby/whoogle-search#readme",
      "ports": [
        {
          "host": 5000,
          "container": 5000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/whoogle/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "WHOOGLE_CONFIG_LANG",
          "default": "en-US",
          "description": "Interface language code"
        },
        {
          "key": "WHOOGLE_CONFIG_COUNTRY",
          "default": "US",
          "description": "Search results country code"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "wikijs",
      "name": "Wiki.js",
      "description": "Modern and powerful wiki app built on Node.js with a beautiful interface.",
      "category": "Productivity",
      "image": "ghcr.io/requarks/wiki:2",
      "logo": "https://js.wiki/img/logo.svg",
      "website": "https://js.wiki",
      "docsUrl": "https://docs.requarks.io",
      "ports": [
        {
          "host": 3300,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/wikijs/config",
          "container": "/wiki/config"
        },
        {
          "host": "/opt/appdata/wikijs/data",
          "container": "/wiki/data"
        }
      ],
      "envVars": [
        {
          "key": "DB_TYPE",
          "default": "sqlite",
          "description": "Database type"
        },
        {
          "key": "DB_FILEPATH",
          "default": "/wiki/data/wiki.db",
          "description": "SQLite file path"
        }
      ],
      "version": "2"
    },
    {
      "slug": "wireguard",
      "name": "WireGuard",
      "description": "Fast, modern VPN tunnel. Simple and secure point-to-point connections.",
      "category": "Networking",
      "image": "lscr.io/linuxserver/wireguard:latest",
      "logo": "https://www.wireguard.com/img/wireguard.svg",
      "website": "https://www.wireguard.com",
      "docsUrl": "https://www.wireguard.com/quickstart/",
      "ports": [
        {
          "host": 51820,
          "container": 51820,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/wireguard/config",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "PUID",
          "default": "1000",
          "description": "User ID"
        },
        {
          "key": "PGID",
          "default": "1000",
          "description": "Group ID"
        },
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        },
        {
          "key": "SERVERURL",
          "default": "auto",
          "description": "Server URL or auto-detect"
        },
        {
          "key": "PEERS",
          "default": "1",
          "description": "Number of VPN peers to generate configs for"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "wiremock",
      "name": "WireMock",
      "description": "Programmable HTTP mock server for stubbing and verifying API responses.",
      "category": "Developer Tools",
      "image": "wiremock/wiremock:latest",
      "logo": "https://icon.horse/icon/wiremock.org",
      "website": "http://wiremock.org",
      "docsUrl": "https://wiremock.org/docs/docker/",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/wiremock/mappings",
          "container": "/home/wiremock/mappings"
        },
        {
          "host": "/opt/appdata/wiremock/__files",
          "container": "/home/wiremock/__files"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "wizarr",
      "name": "Wizarr",
      "description": "Invitation and onboarding portal for Jellyfin, Plex, and media services.",
      "category": "Media",
      "image": "ghcr.io/wizarrrr/wizarr:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/wizarr.png",
      "website": "https://wizarr.dev",
      "docsUrl": "https://docs.wizarr.dev",
      "ports": [
        {
          "host": 5690,
          "container": 5690,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/wizarr/data",
          "container": "/data/database"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "woodpecker-agent",
      "name": "Woodpecker CI Agent",
      "description": "Worker that executes pipeline steps for a Woodpecker CI server.",
      "category": "Developer Tools",
      "image": "woodpeckerci/woodpecker-agent:latest",
      "logo": "https://icon.horse/icon/woodpecker-ci.org",
      "website": "https://woodpecker-ci.org",
      "docsUrl": "https://woodpecker-ci.org/docs/intro",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/woodpecker-agent/data",
          "container": "/var/lib/woodpecker"
        },
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "WOODPECKER_SERVER",
          "default": "woodpecker-server:9000",
          "description": "Woodpecker server address"
        },
        {
          "key": "WOODPECKER_AGENT_SECRET",
          "default": "",
          "description": "Shared secret with the server",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "woodpecker-server",
      "name": "Woodpecker CI Server",
      "description": "Community-driven fork of Drone CI focused on simplicity and extensibility.",
      "category": "Developer Tools",
      "image": "woodpeckerci/woodpecker-server:latest",
      "logo": "https://icon.horse/icon/woodpecker-ci.org",
      "website": "https://woodpecker-ci.org",
      "docsUrl": "https://woodpecker-ci.org/docs/intro",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        },
        {
          "host": 9000,
          "container": 9000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/woodpecker-server/data",
          "container": "/var/lib/woodpecker"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "WOODPECKER_OPEN",
          "default": "true",
          "description": "Enable open registration"
        },
        {
          "key": "WOODPECKER_HOST",
          "default": "http://localhost:8000",
          "description": "Public URL of the server"
        },
        {
          "key": "WOODPECKER_AGENT_SECRET",
          "default": "",
          "description": "Shared secret with agents",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "wordpress",
      "name": "WordPress",
      "description": "Popular open-source CMS for blogs, business sites, landing pages, and content-driven websites.",
      "category": "Web Apps",
      "image": "wordpress:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/wordpress.png",
      "website": "https://wordpress.org",
      "docsUrl": "https://hub.docker.com/_/wordpress",
      "ports": [
        {
          "host": 8088,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "WORDPRESS_DATA_PATH",
          "default": "/opt/appdata/wordpress/html",
          "description": "Host path for WordPress files"
        },
        {
          "key": "WORDPRESS_DB_PATH",
          "default": "/opt/appdata/wordpress/db",
          "description": "Host path for MariaDB data"
        },
        {
          "key": "WORDPRESS_DB_NAME",
          "default": "wordpress",
          "description": "Database name"
        },
        {
          "key": "WORDPRESS_DB_USER",
          "default": "wordpress",
          "description": "Database user"
        },
        {
          "key": "WORDPRESS_DB_PASSWORD",
          "default": "change-me",
          "description": "Database password",
          "secret": true
        },
        {
          "key": "WORDPRESS_DB_ROOT_PASSWORD",
          "default": "change-root-password",
          "description": "MariaDB root password",
          "secret": true
        }
      ],
      "composeOverride": "# Generated by McHarbor App Store\nservices:\n  {{serviceName}}:\n    image: {{image}}\n    container_name: {{containerName}}\n    restart: unless-stopped\n    depends_on:\n      - {{serviceName}}-db\n{{ports}}\n    volumes:\n      - {{env.WORDPRESS_DATA_PATH}}:/var/www/html\n    environment:\n      WORDPRESS_DB_HOST: {{serviceName}}-db:3306\n      WORDPRESS_DB_NAME: {{env.WORDPRESS_DB_NAME}}\n      WORDPRESS_DB_USER: {{env.WORDPRESS_DB_USER}}\n      WORDPRESS_DB_PASSWORD: {{env.WORDPRESS_DB_PASSWORD}}\n  {{serviceName}}-db:\n    image: mariadb:11\n    container_name: {{containerName}}-db\n    restart: unless-stopped\n    volumes:\n      - {{env.WORDPRESS_DB_PATH}}:/var/lib/mysql\n    environment:\n      MARIADB_DATABASE: {{env.WORDPRESS_DB_NAME}}\n      MARIADB_USER: {{env.WORDPRESS_DB_USER}}\n      MARIADB_PASSWORD: {{env.WORDPRESS_DB_PASSWORD}}\n      MARIADB_ROOT_PASSWORD: {{env.WORDPRESS_DB_ROOT_PASSWORD}}\n",
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "wso2",
      "name": "WSO2 Identity Server",
      "description": "Enterprise identity and access management with OAuth2, OIDC, and SAML.",
      "category": "Security",
      "image": "wso2/wso2is:latest",
      "logo": "https://icon.horse/icon/wso2.com",
      "website": "https://wso2.com/identity-server",
      "docsUrl": "https://is.docs.wso2.com",
      "ports": [
        {
          "host": 9443,
          "container": 9443,
          "protocol": "tcp"
        },
        {
          "host": 9763,
          "container": 9763,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/wso2/repository",
          "container": "/home/wso2carbon/wso2is-7.0.0/repository"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "JAVA_OPTS",
          "default": "-Xms512m -Xmx1024m",
          "description": "JVM options"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "xteve",
      "name": "xTeVe",
      "description": "IPTV proxy and EPG guide for Plex, Kodi, and other media managers.",
      "category": "Media",
      "image": "alturismo/xteve:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/xteve.png",
      "website": "https://github.com/xteve-project/xTeVe",
      "docsUrl": "https://github.com/xteve-project/xTeVe-Documentation/blob/master/README.md",
      "ports": [
        {
          "host": 34400,
          "container": 34400,
          "protocol": "tcp"
        },
        {
          "host": 34400,
          "container": 34400,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/xteve/config",
          "container": "/home/xteve/conf"
        },
        {
          "host": "/opt/appdata/xteve/cache",
          "container": "/home/xteve/cache"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "xtts-server",
      "name": "XTTS Server",
      "description": "Real-time voice cloning TTS server supporting 17 languages from Coqui's XTTS v2 model.",
      "category": "AI & Voice",
      "image": "ghcr.io/coqui-ai/xtts-streaming-server:latest",
      "logo": "https://icon.horse/icon/github.com",
      "website": "https://github.com/coqui-ai/TTS",
      "docsUrl": "https://github.com/coqui-ai/TTS/tree/dev/docker",
      "ports": [
        {
          "host": 8020,
          "container": 8020,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/xtts-server/speakers",
          "container": "/app/speakers"
        },
        {
          "host": "/opt/appdata/xtts-server/output",
          "container": "/app/output"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "DEVICE",
          "default": "cuda",
          "description": "Compute device: cuda or cpu"
        }
      ],
      "minMemory": "6GB",
      "version": "latest"
    },
    {
      "slug": "yacht",
      "name": "Yacht",
      "description": "Yacht is a web UI for managing Docker containers with a clean modern interface.",
      "category": "Developer Tools",
      "image": "selfhostedpro/yacht:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/yacht.png",
      "website": "https://yacht.flynn.gg",
      "docsUrl": "https://github.com/SelfhostedPro/Yacht",
      "ports": [
        {
          "host": 8000,
          "container": 8000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/var/run/docker.sock",
          "container": "/var/run/docker.sock"
        },
        {
          "host": "/opt/appdata/yacht/data",
          "container": "/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "SECRET_KEY",
          "default": "changeme",
          "description": "Flask secret key",
          "secret": true
        },
        {
          "key": "ADMIN_USERNAME",
          "default": "admin@yacht.local",
          "description": "Initial admin email"
        },
        {
          "key": "ADMIN_PASSWORD",
          "default": "pass",
          "description": "Initial admin password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "yugabytedb",
      "name": "YugabyteDB",
      "description": "Distributed SQL database combining PostgreSQL compatibility with cloud-native scalability.",
      "category": "Databases",
      "image": "yugabytedb/yugabyte:latest",
      "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/yugabytedb.svg",
      "website": "https://www.yugabyte.com",
      "docsUrl": "https://docs.yugabyte.com",
      "ports": [
        {
          "host": 5433,
          "container": 5433,
          "protocol": "tcp"
        },
        {
          "host": 9042,
          "container": 9042,
          "protocol": "tcp"
        },
        {
          "host": 7000,
          "container": 7000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/yugabytedb/data",
          "container": "/home/yugabyte/yb_data"
        }
      ],
      "envVars": [
        {
          "key": "YSQL_USER",
          "default": "yugabyte",
          "description": "YSQL username"
        },
        {
          "key": "YSQL_PASSWORD",
          "default": "",
          "description": "YSQL password",
          "secret": true
        }
      ],
      "version": "latest"
    },
    {
      "slug": "zammad",
      "name": "Zammad",
      "description": "Open-source helpdesk and customer support ticket system with email, chat, and social channels.",
      "category": "Productivity",
      "image": "zammad/zammad:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/zammad.png",
      "website": "https://zammad.org",
      "docsUrl": "https://admin-docs.zammad.org",
      "ports": [
        {
          "host": 8591,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zammad/data",
          "container": "/opt/zammad/data"
        },
        {
          "host": "/opt/appdata/zammad/config",
          "container": "/opt/zammad/config"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "POSTGRES_HOST",
          "default": "postgres",
          "description": "PostgreSQL host"
        },
        {
          "key": "POSTGRES_DB",
          "default": "zammad",
          "description": "PostgreSQL database name"
        },
        {
          "key": "POSTGRES_USER",
          "default": "zammad",
          "description": "PostgreSQL user"
        },
        {
          "key": "POSTGRES_PASSWORD",
          "default": "",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "REDIS_HOST",
          "default": "redis",
          "description": "Redis host"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "zeek",
      "name": "Zeek",
      "description": "Powerful network analysis framework focused on security monitoring and traffic inspection.",
      "category": "Security",
      "image": "blacktop/zeek:latest",
      "logo": "https://icon.horse/icon/zeek.org",
      "website": "https://zeek.org",
      "docsUrl": "https://docs.zeek.org",
      "ports": [
        {
          "host": 47760,
          "container": 47760,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zeek/logs",
          "container": "/var/log/bro"
        },
        {
          "host": "/opt/appdata/zeek/spool",
          "container": "/var/spool/bro"
        }
      ],
      "envVars": [
        {
          "key": "ZEEK_INTERFACE",
          "default": "eth0",
          "description": "Capture interface"
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "512MB",
      "version": "latest"
    },
    {
      "slug": "zerotier",
      "name": "ZeroTier",
      "description": "Peer-to-peer mesh VPN with software-defined networking for any device.",
      "category": "Networking",
      "image": "zerotier/zerotier:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/zerotier.png",
      "website": "https://www.zerotier.com",
      "docsUrl": "https://docs.zerotier.com",
      "ports": [
        {
          "host": 9993,
          "container": 9993,
          "protocol": "udp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zerotier/identity",
          "container": "/var/lib/zerotier-one"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "64MB",
      "version": "latest"
    },
    {
      "slug": "zigbee2mqtt",
      "name": "Zigbee2MQTT",
      "description": "Bridge Zigbee devices to MQTT without a vendor bridge or gateway.",
      "category": "Home Automation",
      "image": "koenkk/zigbee2mqtt:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/zigbee2mqtt.png",
      "website": "https://www.zigbee2mqtt.io",
      "docsUrl": "https://www.zigbee2mqtt.io/guide/getting-started/",
      "ports": [
        {
          "host": 8485,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zigbee2mqtt/data",
          "container": "/app/data"
        },
        {
          "host": "/run/udev",
          "container": "/run/udev",
          "readOnly": true
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "zipkin",
      "name": "Zipkin",
      "description": "Distributed tracing system for collecting and visualizing timing data across services.",
      "category": "Monitoring",
      "image": "openzipkin/zipkin:latest",
      "logo": "https://icon.horse/icon/zipkin.io",
      "website": "https://zipkin.io",
      "docsUrl": "https://zipkin.io/pages/quickstart.html",
      "ports": [
        {
          "host": 9411,
          "container": 9411,
          "protocol": "tcp"
        }
      ],
      "volumes": [],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "STORAGE_TYPE",
          "default": "mem",
          "description": "Storage backend (mem, mysql, cassandra, elasticsearch)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "zitadel",
      "name": "Zitadel",
      "description": "Identity and access management platform with multi-tenancy and audit logs.",
      "category": "Security",
      "image": "ghcr.io/zitadel/zitadel:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/zitadel.png",
      "website": "https://zitadel.com",
      "docsUrl": "https://zitadel.com/docs",
      "ports": [
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zitadel/data",
          "container": "/app/data"
        }
      ],
      "envVars": [
        {
          "key": "ZITADEL_EXTERNALDOMAIN",
          "default": "zitadel.example.com",
          "description": "External domain for the instance"
        },
        {
          "key": "ZITADEL_EXTERNALSECURE",
          "default": "true",
          "description": "Use HTTPS for external traffic"
        },
        {
          "key": "ZITADEL_DATABASE_POSTGRES_HOST",
          "default": "zitadel-postgres",
          "description": "PostgreSQL host"
        },
        {
          "key": "ZITADEL_DATABASE_POSTGRES_PASSWORD",
          "default": "change-me",
          "description": "PostgreSQL password",
          "secret": true
        },
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        }
      ],
      "minMemory": "2GB",
      "version": "latest"
    },
    {
      "slug": "zookeeper",
      "name": "Apache ZooKeeper",
      "description": "Centralized service for maintaining configuration, naming, and providing distributed synchronization.",
      "category": "Networking",
      "image": "zookeeper:latest",
      "logo": "https://zookeeper.apache.org/images/zookeeper_small.gif",
      "website": "https://zookeeper.apache.org",
      "docsUrl": "https://zookeeper.apache.org/documentation/",
      "ports": [
        {
          "host": 2181,
          "container": 2181,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zookeeper/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/zookeeper/datalog",
          "container": "/datalog"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ZOO_MY_ID",
          "default": "1",
          "description": "Server ID (must be unique in ensemble)"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "zookeeper-dev",
      "name": "ZooKeeper Dev",
      "description": "Apache ZooKeeper coordination server for distributed system development.",
      "category": "Developer Tools",
      "image": "zookeeper:latest",
      "logo": "https://icon.horse/icon/zookeeper.apache.org",
      "website": "https://zookeeper.apache.org",
      "docsUrl": "https://hub.docker.com/_/zookeeper",
      "ports": [
        {
          "host": 2181,
          "container": 2181,
          "protocol": "tcp"
        },
        {
          "host": 8080,
          "container": 8080,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zookeeper-dev/data",
          "container": "/data"
        },
        {
          "host": "/opt/appdata/zookeeper-dev/datalog",
          "container": "/datalog"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ZOOKEEPER_CLIENT_PORT",
          "default": "2181",
          "description": "Client port"
        },
        {
          "key": "ZOOKEEPER_TICK_TIME",
          "default": "2000",
          "description": "Tick time in ms"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "zulip",
      "name": "Zulip",
      "description": "Threaded team chat that combines email and chat; organized by topics and streams.",
      "category": "Communications",
      "image": "zulip/docker-zulip:latest",
      "logo": "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/zulip.png",
      "website": "https://zulip.com",
      "docsUrl": "https://zulip.readthedocs.io/en/stable",
      "ports": [
        {
          "host": 80,
          "container": 80,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zulip/data",
          "container": "/data"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "Etc/UTC",
          "description": "Timezone"
        },
        {
          "key": "ZULIP_HOSTNAME",
          "default": "zulip.example.com",
          "description": "Public hostname"
        }
      ],
      "version": "latest"
    },
    {
      "slug": "zwavejs",
      "name": "Z-Wave JS UI",
      "description": "Full-featured Z-Wave control panel and MQTT gateway for your Z-Wave network.",
      "category": "Home Automation",
      "image": "zwavejs/zwave-js-ui:latest",
      "logo": "https://icon.horse/icon/zwave-js.github.io",
      "website": "https://zwave-js.github.io/zwave-js-ui/",
      "docsUrl": "https://zwave-js.github.io/zwave-js-ui/#/getting-started/quick-start",
      "ports": [
        {
          "host": 8091,
          "container": 8091,
          "protocol": "tcp"
        },
        {
          "host": 3500,
          "container": 3000,
          "protocol": "tcp"
        }
      ],
      "volumes": [
        {
          "host": "/opt/appdata/zwavejs/store",
          "container": "/usr/src/app/store"
        }
      ],
      "envVars": [
        {
          "key": "TZ",
          "default": "America/New_York",
          "description": "Timezone"
        }
      ],
      "version": "latest"
    }
  ]
}
