Drop logo

Drop

Self-hosted, DRM-free game distribution platform

Alternative to: steam, gog.com, itch.io


Drop is an open-source game distribution platform for hosting and sharing your own library of DRM-free games, similar to Steam or GOG but fully self-hosted. It provides a fast, flexible web storefront for browsing and downloading games from your own server, with authentication via username/password or SSO. Built for game collectors and small communities who want to run their own store without relying on a third-party platform.

Drop Docker Compose example

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

services:
  drop:
    image: ghcr.io/drop-oss/drop:latest
    depends_on:
      db:
        condition: service_healthy
    volumes:
      # Game library — the DRM-free game files Drop distributes
      - library:/library
      # Application data (client certificates, uploads, metadata cache)
      - data:/data
    environment:
      # Postgres connection string (points at the bundled db service)
      DATABASE_URL: "postgres://drop:drop@db:5432/drop"
      # Public URL the browser and game clients use to reach this instance —
      # set this to your real external address (e.g. https://drop.example.com)
      EXTERNAL_URL: "http://localhost:3000"
      # Optional Giant Bomb API key for richer game metadata (leave empty to disable)
      GIANT_BOMB_API_KEY: ""
      # Optional IGDB (Twitch) client id for game metadata (leave empty to disable)
      IGDB_CLIENT_ID: ""
      # Optional IGDB (Twitch) client secret for game metadata (leave empty to disable)
      IGDB_CLIENT_SECRET: ""
    restart: unless-stopped

  db:
    image: postgres:16-alpine
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: drop
      POSTGRES_PASSWORD: drop
      POSTGRES_DB: drop
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "drop", "-d", "drop"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

volumes:
  library:
  data:
  db_data:

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