About this project
Etherpad is a real-time collaborative document editor designed for documents where authorship and history matter. It has been maintained since 2009 by a small volunteer team and is released under the Apache License v2.
Core capabilities described in the README:
- Real-time collaborative editing with every keystroke attributed to its author and author colours shown inline.
- Full revision history preserved, with a timeslider for scrubbing through a document's history character by character.
- Built-in full data export, so the document history remains accessible to the operator.
- Self-hosted operation: the project states there is no telemetry and no upsells, and that AI functionality is opt-in via plugins pointed at a model of the operator's choosing. A PRIVACY.md document describes the two opt-out network calls made by Etherpad's own code.
- Scalability claim: the project links to a scale test page indicating support for thousands of simultaneous editors per pad.
- Internationalisation: translated into 105 languages, largely via TranslateWiki.
- Extensibility: a plugin framework with hundreds of plugins available through a plugin site, installable from the admin web interface or the command line.
- Embeddability: an HTTP API for managing pads, users and groups, with OpenAPI definitions exposed at /api/openapi.json, plus a jQuery plugin for embedding pads into websites.
Installation options covered in the README:
- One-line installers for macOS/Linux/WSL (shell) and Windows (PowerShell), which clone the repository, install dependencies and build the frontend. Node.js >= 24 and git are required. An environment variable can be set to install and start in one step.
- Docker Compose example using the official image published to Docker Hub and GitHub Container Registry, with a PostgreSQL service, persistent volumes for plugins and var data, and environment variables for admin password, database connection and other settings.
- Manual steps: install pnpm, clone the repository, run pnpm i, pnpm run build:etherpad, then pnpm run prod, and visit localhost:9001.
Configuration and administration:
- Settings live in settings.json, with support for alternate settings files, credentials overrides, API key and session key files, and environment-variable substitution using ${ENV_VAR} or ${ENV_VAR:default_value} syntax.
- Settings can also be changed through the /admin web interface.
- The README advises using a dedicated database such as MySQL or PostgreSQL in production, noting that the dirtyDB driver is intended only for testing or development.
- For authentication, it recommends storing hashes rather than plain-text passwords, and points to the ep_hash_auth plugin.
- Suggested plugins for OpenID Connect authentication include ep_openid_connect, ep_guest, ep_user_displayname and ep_stable_authorid.
- A suggested plugin set for richer editing features includes ep_align, ep_comments_page, ep_embedded_hyperlinks2, ep_font_color, ep_headings2, ep_markdown and ep_webrtc.
- Skin variants can be explored through a skinvariantsbuilder URL.
Development and project status:
- Debugging via bin/debugRun.sh and a fast start script bin/fastRun.sh that skips dependency updates.
- The Easysync library underpinning real-time behaviour is documented in a PDF in the repository.
- Contributor guidelines are provided in CONTRIBUTING.md.
- The README states the project is actively looking for maintainers with experience in Node.js, real-time systems or institutional collaboration tooling.
- CI badges cover code quality (CodeQL), backend tests, simulated load, rate limiting, Docker, and frontend/admin tests.
Stated users include the Wikimedia Foundation, public-sector institutions in the EU, universities and schools, civic-tech and deliberative-democracy projects, newsrooms, and many self-hosted instances. A public instance is available for trying the software.
Support channels are GitHub issues, a Discord server, and email contacts for responsible vulnerability disclosure.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.