GitHub - ether/etherpad: Etherpad: A modern really-real-time collaborative document editor. · GitHub
Skip to content
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
ether
etherpad
Public
Uh oh!
There was an error while loading.
Please reload this page
Notifications
You must be signed in to change notification settings
Fork
3k
Star
18.3k
Branches
Tags
Open more actions menu
Folders and files
Name
Name
Last commit message
Last commit date
Latest commit
History
9,612 Commits
9,612 Commits
.github
.github
admin
admin
bin
bin
doc
doc
docs/
superpowers
docs/
superpowers
local_plugins
local_plugins
src
src
ui
ui
var
var
.dockerignore
.dockerignore
.editorconfig
.editorconfig
.env.default
.env.default
.env.dev.default
.env.dev.default
.gitattributes
.gitattributes
.gitignore
.gitignore
.npmrc
.npmrc
.pr_agent.toml
.pr_agent.toml
AGENTS.MD
AGENTS.MD
CHANGELOG.md
CHANGELOG.md
CONTRIBUTING.md
CONTRIBUTING.md
Dockerfile
Dockerfile
LICENSE
LICENSE
README.md
README.md
SECURITY.md
SECURITY.md
best_practices.md
best_practices.md
docker-compose.dev.yml
docker-compose.dev.yml
docker-compose.yml
docker-compose.yml
package.json
package.json
pnpm-lock.yaml
pnpm-lock.yaml
pnpm-workspace.yaml
pnpm-workspace.yaml
settings.json.docker
settings.json.docker
settings.json.template
settings.json.template
tests
tests
Repository files navigation
Etherpad — the editor for documents that matter
Real-time collaborative editing where authorship is the default, your server is the only server, and you decide what AI (if any) ever touches your text.
About
Etherpad is a real-time collaborative editor for documents that matter.
Every keystroke is attributed to its author. Every revision is preserved. The timeslider lets you scrub through a document's entire history, character by character. Author colours make collaboration visible at a glance — not buried in a menu.
Etherpad runs on your server, under your governance. No telemetry. No upsells. AI is a plugin you install, pointed at the model you choose, running on infrastructure you control — not a feature decided for you in a boardroom you weren't in.
The code is Apache 2.0. The data format is open. It
scales to thousands of simultaneous editors per pad
. Translated into 105 languages. Extended through hundreds of plugins. Used by Wikimedia, governments, public-sector institutions, and self-hosters worldwide since 2009.
Full data export
is built in. The history is yours.
Try it out
Try out a public Etherpad instance
Project Status
Etherpad has been doing the same thing — well — since 2009. No pivots, no acquisitions, no enshittification. Maintained by a small volunteer team.
We are actively looking for maintainers.
If you have experience with Node.js, real-time systems, or institutional collaboration tooling and you want to work on infrastructure that thousands of organisations quietly depend on, please
open an issue
or contact
John McLear
Code Quality
Testing
Engagement
Who uses Etherpad
For more than a decade, Etherpad has quietly underpinned the documents that matter to:
Wikimedia Foundation
— collaborative drafting across editor communities.
Public-sector institutions across the EU
— including organisations that legally cannot use US-cloud SaaS for sovereignty and GDPR reasons.
Universities and schools worldwide
— including jurisdictions where Google Workspace is no longer permitted in education.
Civic-tech and democratic-deliberation projects
— citizen assemblies, participatory budgeting, public consultations.
Newsrooms and investigative journalism teams
— where authorship and editing history matter for legal and editorial integrity.
Tens of thousands of self-hosted instances
worldwide, run by IT teams who chose Etherpad because it is theirs.
If your organisation runs Etherpad and would be willing to be listed publicly, please
add it to the wiki
Installation
Quick install (one-liner)
The fastest way to get Etherpad running. Requires
git
and Node.js >= 20.
macOS / Linux / WSL:
curl -fsSL https://raw.githubusercontent.com/ether/etherpad/master/bin/installer.sh
sh
Windows (PowerShell):
irm https:
//
raw.githubusercontent.com
ether
etherpad
master
bin
installer.ps1
iex
Both installers clone Etherpad into
./etherpad-lite
, install dependencies, and
build the frontend. When the installer finishes, run:
cd
etherpad-lite
&&
pnpm run prod
Then open
To install and start in one go:
macOS / Linux / WSL
ETHERPAD_RUN=1 sh -c
$(
curl -fsSL https://raw.githubusercontent.com/ether/etherpad/master/bin/installer.sh
Windows
env:
ETHERPAD_RUN
; irm https:
//
raw.githubusercontent.com
ether
etherpad
master
bin
installer.ps1
iex
Docker-Compose
The official image is published to both Docker Hub (
etherpad/etherpad
) and GitHub Container Registry (
ghcr.io/ether/etherpad
) with identical tags. Use whichever suits your environment; GHCR avoids Docker Hub's anonymous pull rate limits.
services
app
user
0:0
image
etherpad/etherpad:latest
or: ghcr.io/ether/etherpad:latest
tty
true
stdin_open
true
volumes
plugins:/opt/etherpad-lite/src/plugin_packages
etherpad-var:/opt/etherpad-lite/var
depends_on
postgres
environment
NODE_ENV
production
ADMIN_PASSWORD
${DOCKER_COMPOSE_APP_ADMIN_PASSWORD:-admin}
DB_CHARSET
${DOCKER_COMPOSE_APP_DB_CHARSET:-utf8mb4}
DB_HOST
postgres
DB_NAME
${DOCKER_COMPOSE_POSTGRES_DATABASE:-etherpad}
DB_PASS
${DOCKER_COMPOSE_POSTGRES_PASSWORD:-admin}
DB_PORT
${DOCKER_COMPOSE_POSTGRES_PORT:-5432}
DB_TYPE
postgres
DB_USER
${DOCKER_COMPOSE_POSTGRES_USER:-admin}
For now, the env var DEFAULT_PAD_TEXT cannot be unset or empty; it seems to be mandatory in the latest version of etherpad
DEFAULT_PAD_TEXT
${DOCKER_COMPOSE_APP_DEFAULT_PAD_TEXT:- }
DISABLE_IP_LOGGING
${DOCKER_COMPOSE_APP_DISABLE_IP_LOGGING:-false}
SOFFICE
${DOCKER_COMPOSE_APP_SOFFICE:-null}
TRUST_PROXY
${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}
restart
always
ports
${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9001}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9001}
postgres
image
postgres:15-alpine
environment
POSTGRES_DB
${DOCKER_COMPOSE_POSTGRES_DATABASE:-etherpad}
POSTGRES_PASSWORD
${DOCKER_COMPOSE_POSTGRES_PASSWORD:-admin}
POSTGRES_PORT
${DOCKER_COMPOSE_POSTGRES_PORT:-5432}
POSTGRES_USER
${DOCKER_COMPOSE_POSTGRES_USER:-admin}
PGDATA
/var/lib/postgresql/data/pgdata
restart
always
Exposing the port is not needed unless you want to access this database instance from the host.
Be careful when other postgres docker container are running on the same port
ports:
- "5432:5432"
volumes
postgres_data:/var/lib/postgresql/data
volumes
postgres_data
plugins
etherpad-var
Requirements
Node.js
>= 20.
Windows, macOS, Linux
Download the latest Node.js runtime from
nodejs.org
Install pnpm:
npm install -g pnpm
(Administrator privileges may be required).
Clone the repository:
git clone -b master
Run
pnpm i
Run
pnpm run build:etherpad
Run
pnpm run prod
Visit
in your browser.
Docker container
Find
here
information on running Etherpad in a container.
Plugins
Etherpad is very customizable through plugins.
Available Plugins
For a list of available plugins, see the
plugins
site
Plugin Installation
You can install plugins from the admin web interface (e.g.,
).
Alternatively, you can install plugins from the command line:
cd
/path/to/etherpad-lite
pnpm run plugins i ep_
${plugin_name}
Also see
the plugin wiki
article
Suggested Plugins
Run the following command in your Etherpad folder to get all of the features
visible in the above demo gif:
pnpm run plugins i \
ep_align \
ep_comments_page \
ep_embedded_hyperlinks2 \
ep_font_color \
ep_headings2 \
ep_markdown \
ep_webrtc
For user authentication, you are encouraged to run an
OpenID
Connect
identity provider (OP) and install the
following plugins:
ep_openid_connect
to
authenticate against your OP.
ep_guest
to create a
"guest" account that has limited access (e.g., read-only access).
ep_user_displayname
to automatically populate each user's displayed name from your OP.
ep_stable_authorid
so
that each user's chosen color, display name, comment ownership, etc. is
strongly linked to their account.
Upgrade Etherpad
Run the following command in your Etherpad folder to upgrade
Stop any running Etherpad (manual, systemd ...)
Get present version
git -P tag --contains
List versions available
git -P tag --list
v*
--merged
Select the version
git checkout v2.2.5
git switch -c v2.2.5
Upgrade Etherpad
./bin/run.sh
Stop with [CTRL-C]
Restart your Etherpad service
Next Steps
Tweak the settings
You can modify the settings in
settings.json
. If you need to handle multiple
settings files, you can pass the path to a settings file to
bin/run.sh
using the
-s|--settings
option: this allows you to run multiple Etherpad
instances from the same installation. Similarly,
--credentials
can be used to
give a settings override file,
--apikey
to give a different APIKEY.txt file
and
--sessionkey
to give a non-default
SESSIONKEY.txt
Each configuration
parameter can also be set via an environment variable
, using the syntax
"${ENV_VAR}"
or
"${ENV_VAR:default_value}"
. For details, refer to
settings.json.template
. Once you have access to your
/admin
section,
settings can be modified through the web browser.
If you are planning to use Etherpad in a production environment, you should use
a dedicated database such as
mysql
, since the
dirtyDB
database driver is
only for testing and/or development purposes.
Secure your installation
If you have enabled authentication in
users
section in
settings.json
, it is
a good security practice to
store hashes instead of plain text passwords
in
that file. This is
especially
advised if you are running a production
installation.
Please install
ep_hash_auth plugin
and configure it. If you prefer,
ep_hash_auth
also gives you the option of
storing the users in a custom directory in the file system, without having to
edit
settings.json
and restart Etherpad each time.
Customize the style with skin variants
Open
in your browser and start
playing!
Helpful resources
The
wiki
is your one-stop
resource for Tutorials and How-to's.
Documentation can be found in
doc/
Development
Things you should know
You can debug Etherpad using
bin/debugRun.sh
You can run Etherpad quickly launching
bin/fastRun.sh
. It's convenient for
developers and advanced users. Be aware that it will skip the dependencies
update, so remember to run
bin/installDeps.sh
after installing a new
dependency or upgrading version.
If you want to find out how Etherpad's
Easysync
works (the library that makes
it really realtime), start with this
PDF
(complex, but worth reading).
Contributing
Read our
Developer
Guidelines
HTTP API
Etherpad is designed to be easily embeddable and provides a
HTTP
API
that allows your web
application to manage pads, users and groups. It is recommended to use the
available client
implementations
in order to interact with this API.
OpenAPI (previously swagger) definitions for the API are exposed under
/api/openapi.json
jQuery plugin
There is a
jQuery plugin
that helps you to embed Pads into your website.
Plugin Framework
Etherpad offers a plugin framework, allowing you to easily add your own
features. By default your Etherpad is extremely light-weight and it's up to you
to customize your experience. Once you have Etherpad installed you should
visit
the plugin page
and take control.
Translations / Localizations (i18n / l10n)
Etherpad comes with translations into all languages thanks to the team at
TranslateWiki
If you require translations in
plugins
please
send pull request to each plugin individually.
FAQ
Visit the
FAQ
Get in touch
The official channel for contacting the development team is via the
GitHub
issues
For
responsible disclosure of vulnerabilities
, please write a mail to the
maintainers (
a.mux@inwind.it
and
contact@etherpad.org
).
Join the official
Etherpad Discord
Channel
License
Apache License v2
About
Etherpad: A modern really-real-time collaborative document editor.
docs.etherpad.org/
Topics
microsoft
pdf
word
libreoffice
collaboration
docx
document
rich-text-editor
web-editor
documents
collaborative
pdf-generation
video-conferencing
etherpad
video-conference
collaborative-editing
collaborative-research
collaborative-writing
collaborative-framework
Resources
Readme
License
Apache-2.0 license
Contributing
Contributing
Security policy
Security policy
Uh oh!
There was an error while loading.
Please reload this page
Activity
Custom properties
Stars
18.3k
stars
Watchers
339
watching
Forks
3k
forks
Report repository
Releases
71
v2.7.1
Latest
Apr 23, 2026
+ 70 releases
Sponsor this project
Uh oh!
There was an error while loading.
Please reload this page
Learn more about GitHub Sponsors
Packages
Uh oh!
There was an error while loading.
Please reload this page
Uh oh!
There was an error while loading.
Please reload this page
Contributors
Uh oh!
There was an error while loading.
Please reload this page
Languages
TypeScript
81.0%
JavaScript
6.8%
CSS
4.9%
HTML
4.8%
Shell
1.8%
PowerShell
0.3%
Other
0.4%
You can’t perform that action at this time.