Etherpad logo

Etherpad

Etherpad: A modern really-real-time collaborative document editor.

Alternative to: google docs, hackmd, quip


Etherpad is a real-time collaborative editor for documents that matter. Every keystroke is attributed to its author, every revision is preserved, and a timeslider lets you scrub through a document's entire history. It runs entirely on your own server, with no telemetry, and supports hundreds of plugins.

Etherpad Docker Compose example

Self-host Etherpad on your own server, homelab, or VPS starting from this Docker Compose example. It runs Etherpad in Docker containers using the official etherpad/etherpad:latest, postgres:15-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:
  app:
    image: etherpad/etherpad:latest
    user: "5001:0"
    tty: true
    stdin_open: true
    restart: unless-stopped
    depends_on:
      - postgres
    volumes:
      - plugins:/opt/etherpad-lite/src/plugin_packages
      - etherpad-var:/opt/etherpad-lite/var
    environment:
      NODE_ENV: "production"
      # Password for the built-in admin panel at /admin (username: admin).
      ADMIN_PASSWORD: "changeme"
      DB_TYPE: "postgres"
      DB_HOST: "postgres"
      DB_PORT: "5432"
      DB_NAME: "etherpad"
      DB_USER: "admin"
      # Password for the PostgreSQL database (must match POSTGRES_PASSWORD).
      DB_PASS: "changeme"
      DB_CHARSET: "utf8mb4"
      # Initial text of a newly created pad. Must be non-empty in current Etherpad.
      DEFAULT_PAD_TEXT: "Welcome to Etherpad!"
      # Set to true to stop recording client IP addresses in the logs.
      DISABLE_IP_LOGGING: "false"
      SOFFICE: "null"
      # Set to true when running behind a trusted reverse proxy that sets X-Forwarded-* headers.
      TRUST_PROXY: "true"

  postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: "etherpad"
      POSTGRES_USER: "admin"
      # Password for the PostgreSQL database (must match DB_PASS).
      POSTGRES_PASSWORD: "changeme"
      PGDATA: "/var/lib/postgresql/data/pgdata"

volumes:
  plugins:
  etherpad-var:
  postgres_data:

Values set to changeme are required — replace them with your own values before starting Etherpad.

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