Etherpad-Go
A fast, modern, real-time collaborative editor written in Go

Etherpad-Go is a performance-focused, 1:1 rewrite of Etherpad-Lite in Go.
The original implementation was written in Node.js (CommonJS).
Rewriting Etherpad in Go allows us to leverage Go’s concurrency model,
static typing, fast startup times, and lower memory usage.
Etherpad is a real-time collaborative editor
scalable to thousands of simultaneous users
and supports
full data export.
Quick Start (Binary)
The easiest way to run Etherpad-Go:
- Download the binary for your platform from the
Releases page
- Run it:
./etherpad-go
Etherpad-Go starts in under a second and uses an in-memory database
by default, which is sufficient for many use cases.
Open your browser at:
http://localhost:9001
Configuration
All configuration options are self-documented in the binary.
Show global options:
./etherpad-go --help
Show all configuration values:
./etherpad-go config show
Get a specific configuration value:
./etherpad-go config get <key>
For customization, copy:
settings.json.template → settings.json
and adjust it to your needs.
Docker
You can run Etherpad-Go using Docker.
Docker Compose (recommended)
Start Etherpad-Go with PostgreSQL:
docker compose up -d
Etherpad will be available at:
http://localhost:9001
The compose file can be found here:
docker-compose.yml
Build your own image
docker build -t etherpad-go .
Prebuilt images
Prebuilt images are available via GitHub Container Registry:
ghcr.io/ether/etherpad-go:<version>
Building from Source
Requirements
Installation
-
Clone the repository:
git clone https://github.com/ether/etherpad-go.git
cd etherpad-go
-
Build etherpad-go:
go run main.go prepare
-
Run the server. The server path is printed after a successful build:
./<your-built-binary>
Etherpad should start in less than a second.
Migration from Etherpad-Lite
You can migrate existing pads from Etherpad-Lite using the migration command:
migration 192.28.91.4:5432 \
--type postgres \
--username myOldEtherpadDBUser \
--database myoldEtherpadDB
This connects to the old Etherpad-Lite database and migrates all pads to
the Etherpad-Go database configured in settings.json or via environment
variables.
Plugins
Etherpad-Go ships with 15 built-in plugins ported from the original Etherpad ecosystem.
All plugins are disabled by default and can be enabled individually.
Available Plugins
| Plugin |
Description |
| ep_align |
Text alignment (left, center, right, justify) |
| ep_author_hover |
Show author name on text hover |
| ep_chat_log_join_leave |
Log user join/leave events in the chat |
| ep_clear_formatting |
Remove all formatting from selected text |
| ep_cursortrace |
Show other users' cursor positions in real time |
| ep_font_color |
Change text color (6 colors) |
| ep_font_family |
Change font family (10 fonts) |
| ep_font_size |
Change font size (15 sizes from 8px to 60px) |
| ep_heading |
Heading levels (h1-h4) |
| ep_markdown |
Markdown editing support |
| ep_print |
Print the pad |
| ep_rss |
RSS feed for pad content |
| ep_spellcheck |
Browser spell checking |
| ep_table_of_contents |
Sidebar table of contents from headings |
Enabling Plugins
Via settings.json:
{
"plugins": {
"ep_align": { "enabled": true },
"ep_cursortrace": { "enabled": true },
"ep_font_color": { "enabled": true }
}
}
Or via environment variables:
ETHERPAD_PLUGINS_EP_ALIGN_ENABLED=true
ETHERPAD_PLUGINS_EP_CURSORTRACE_ENABLED=true
Status
Etherpad-Go is under active development.
Feedback, issues, and contributions are welcome.