gathio logo

gathio

Simple, federated, privacy-first event hosting platform

Alternative to: eventbrite, evite


gathio lets you create and share event pages without requiring guests to register for an account. It supports RSVPs, comments, and optional federation via ActivityPub, with self-destructing events for extra privacy. It is a lightweight, self-hostable alternative to commercial event pages like Eventbrite and Evite.

gathio Docker Compose example

Self-host gathio on your own server, homelab, or VPS starting from this Docker Compose example. It runs gathio in Docker containers using the official ghcr.io/lowercasename/gathio:latest, mongo:latest 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:
  gathio:
    image: ghcr.io/lowercasename/gathio:latest
    depends_on:
      - mongo
    volumes:
      - ./config.toml:/app/config/config.toml:ro
      - images:/app/public/events
    restart: unless-stopped
    environment:
      # The domain (and optional :port) where your Gathio instance is reachable. Used to generate event links.
      GATHIO_DOMAIN: "localhost:3000"
      # Contact email address shown on the instance.
      GATHIO_CONTACT_EMAIL: "contact@example.com"
      # Display name of your instance.
      GATHIO_SITE_NAME: "gathio"

  mongo:
    image: mongo:latest
    volumes:
      - mongodb_data:/data/db
    restart: unless-stopped

volumes:
  images:
  mongodb_data:

Extra files

The Docker Compose configuration above bind-mounts the following file. Save it next to your compose.yml, keeping the same relative path.

config.toml

[general]
# The domain (and optional :port) where your Gathio instance is reachable. Used to generate event links.
domain = "${GATHIO_DOMAIN}"
port = "3000"
# Contact email address shown on the instance.
email = "${GATHIO_CONTACT_EMAIL}"
# Display name of your instance.
site_name = "${GATHIO_SITE_NAME}"
is_federated = true
# Events are deleted this many days after they end. Set to 0 to keep events forever.
delete_after_days = 7
email_logo_url = ""
show_kofi = false
show_public_event_list = false
max_comment_length = 5000
# Mail service used to send host/attendee emails: "nodemailer", "sendgrid", "mailgun", or "none".
mail_service = "none"
creator_email_addresses = []

[database]
mongodb_url = "mongodb://mongo:27017/gathio"

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