[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3779":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":45,"readmeContent":46,"aiSummary":47,"trendingCount":16,"starSnapshotCount":16,"syncStatus":48,"lastSyncTime":49,"discoverSource":50},3779,"etherpad","ether\u002Fetherpad","ether","Etherpad: A modern really-real-time collaborative document editor.","https:\u002F\u002Fdocs.etherpad.org\u002F",null,"TypeScript",18399,3024,337,4,0,1,11,96,3,45,"Apache License 2.0",false,"develop",true,[27,28,29,30,31,32,33,34,35,5,36,37,38,39,40,41,42,43,44],"collaboration","collaborative","collaborative-editing","collaborative-framework","collaborative-research","collaborative-writing","document","documents","docx","libreoffice","microsoft","pdf","pdf-generation","rich-text-editor","video-conference","video-conferencing","web-editor","word","2026-06-12 02:00:54","# Etherpad — the editor for documents that matter\n\n> 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.\n\n![Demo Etherpad Animated Jif](doc\u002Fpublic\u002Fetherpad_demo.gif \"Etherpad in action\")\n\n## About\n\n**Etherpad is a real-time collaborative editor for documents that matter.**\n\nEvery 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.\n\nEtherpad 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.\n\nThe code is Apache 2.0. The data format is open. It [scales to thousands of simultaneous editors per pad](http:\u002F\u002Fscale.etherpad.org\u002F). Translated into 105 languages. Extended through hundreds of plugins. Used by Wikimedia, governments, public-sector institutions, and self-hosters worldwide since 2009.\n\n[Full data export](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki\u002FUnderstanding-Etherpad's-Full-Data-Export-capabilities) is built in. The history is yours.\n\n## Try it out\n\n[Try out a public Etherpad instance](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki\u002FSites-That-Run-Etherpad#sites-that-run-etherpad)\n\n## Project Status\n\nEtherpad has been doing the same thing — well — since 2009. No pivots, no acquisitions, no enshittification. Maintained by a small volunteer team.\n\n**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](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fissues) or contact [John McLear](https:\u002F\u002Fgithub.com\u002FJohnMcLear).\n\n### Code Quality\n\n[![Code Quality](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fcodeql-analysis.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fcodeql-analysis.yml)\n\n### Testing\n\n[![Backend tests](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fbackend-tests.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fbackend-tests.yml)\n[![Simulated Load](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fload-test.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fload-test.yml)\n[![Rate Limit](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Frate-limit.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Frate-limit.yml)\n[![Docker file](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fdocker.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fdocker.yml)\n[![Frontend admin tests powered by Sauce Labs](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Ffrontend-admin-tests.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Ffrontend-admin-tests.yml)\n[![Frontend tests powered by Sauce Labs](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Ffrontend-tests.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Ffrontend-tests.yml)\n[![Sauce Test Status](https:\u002F\u002Fsaucelabs.com\u002Fbuildstatus\u002Fetherpad.svg)](https:\u002F\u002Fsaucelabs.com\u002Fu\u002Fetherpad)\n[![Windows Build](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fwindows.yml\u002Fbadge.svg?color=%2344b492)](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Factions\u002Fworkflows\u002Fwindows.yml)\n\n### Engagement\n\n[![Docker Pulls](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fpulls\u002Fetherpad\u002Fetherpad?color=%2344b492)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fetherpad\u002Fetherpad)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F741309013593030667?color=%2344b492)](https:\u002F\u002Fdiscord.com\u002Finvite\u002FdaEjfhw)\n[![Etherpad plugins](https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https%3A%2F%2Fstatic.etherpad.org%2Fshields.json&color=%2344b492 \"Etherpad plugins\")](https:\u002F\u002Fstatic.etherpad.org\u002Findex.html)\n![Languages](https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=Languages&message=105&color=%2344b492)\n![Translation Coverage](https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=Languages&message=98%&color=%2344b492)\n\n## Who uses Etherpad\n\nFor more than a decade, Etherpad has quietly underpinned the documents that matter to:\n\n- **Wikimedia Foundation** — collaborative drafting across editor communities.\n- **Public-sector institutions across the EU** — including organisations that legally cannot use US-cloud SaaS for sovereignty and GDPR reasons.\n- **Universities and schools worldwide** — including jurisdictions where Google Workspace is no longer permitted in education.\n- **Civic-tech and democratic-deliberation projects** — citizen assemblies, participatory budgeting, public consultations.\n- **Newsrooms and investigative journalism teams** — where authorship and editing history matter for legal and editorial integrity.\n- **Tens of thousands of self-hosted instances** worldwide, run by IT teams who chose Etherpad because it is theirs.\n\nIf your organisation runs Etherpad and would be willing to be listed publicly, please [add it to the wiki](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki\u002FSites-That-Run-Etherpad).\n\n## Installation\n\n### Quick install (one-liner)\n\nThe fastest way to get Etherpad running. Requires `git` and Node.js >= 22.\n\n**macOS \u002F Linux \u002F WSL:**\n\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fether\u002Fetherpad\u002Fmaster\u002Fbin\u002Finstaller.sh | sh\n```\n\n**Windows (PowerShell):**\n\n```powershell\nirm https:\u002F\u002Fraw.githubusercontent.com\u002Fether\u002Fetherpad\u002Fmaster\u002Fbin\u002Finstaller.ps1 | iex\n```\n\nBoth installers clone Etherpad into `.\u002Fetherpad-lite`, install dependencies, and\nbuild the frontend. When the installer finishes, run:\n\n```sh\ncd etherpad-lite && pnpm run prod\n```\n\nThen open \u003Chttp:\u002F\u002Flocalhost:9001>.\n\nTo install and start in one go:\n\n```sh\n# macOS \u002F Linux \u002F WSL\nETHERPAD_RUN=1 sh -c \"$(curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fether\u002Fetherpad\u002Fmaster\u002Fbin\u002Finstaller.sh)\"\n```\n\n```powershell\n# Windows\n$env:ETHERPAD_RUN=1; irm https:\u002F\u002Fraw.githubusercontent.com\u002Fether\u002Fetherpad\u002Fmaster\u002Fbin\u002Finstaller.ps1 | iex\n```\n\n### Docker-Compose\n\nThe official image is published to both Docker Hub (`etherpad\u002Fetherpad`) and GitHub Container Registry (`ghcr.io\u002Fether\u002Fetherpad`) with identical tags. Use whichever suits your environment; GHCR avoids Docker Hub's anonymous pull rate limits.\n\n```yaml\nservices:\n  app:\n    user: \"0:0\"\n    image: etherpad\u002Fetherpad:latest  # or: ghcr.io\u002Fether\u002Fetherpad:latest\n    tty: true\n    stdin_open: true\n    volumes:\n      - plugins:\u002Fopt\u002Fetherpad-lite\u002Fsrc\u002Fplugin_packages\n      - etherpad-var:\u002Fopt\u002Fetherpad-lite\u002Fvar\n    depends_on:\n      - postgres\n    environment:\n      NODE_ENV: production\n      ADMIN_PASSWORD: ${DOCKER_COMPOSE_APP_ADMIN_PASSWORD:-admin}\n      DB_CHARSET: ${DOCKER_COMPOSE_APP_DB_CHARSET:-utf8mb4}\n      DB_HOST: postgres\n      DB_NAME: ${DOCKER_COMPOSE_POSTGRES_DATABASE:-etherpad}\n      DB_PASS: ${DOCKER_COMPOSE_POSTGRES_PASSWORD:-admin}\n      DB_PORT: ${DOCKER_COMPOSE_POSTGRES_PORT:-5432}\n      DB_TYPE: \"postgres\"\n      DB_USER: ${DOCKER_COMPOSE_POSTGRES_USER:-admin}\n      # For now, the env var DEFAULT_PAD_TEXT cannot be unset or empty; it seems to be mandatory in the latest version of etherpad\n      DEFAULT_PAD_TEXT: ${DOCKER_COMPOSE_APP_DEFAULT_PAD_TEXT:- }\n      DISABLE_IP_LOGGING: ${DOCKER_COMPOSE_APP_DISABLE_IP_LOGGING:-false}\n      SOFFICE: ${DOCKER_COMPOSE_APP_SOFFICE:-null}\n      TRUST_PROXY: ${DOCKER_COMPOSE_APP_TRUST_PROXY:-true}\n    restart: always\n    ports:\n      - \"${DOCKER_COMPOSE_APP_PORT_PUBLISHED:-9001}:${DOCKER_COMPOSE_APP_PORT_TARGET:-9001}\"\n\n  postgres:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_DB: ${DOCKER_COMPOSE_POSTGRES_DATABASE:-etherpad}\n      POSTGRES_PASSWORD: ${DOCKER_COMPOSE_POSTGRES_PASSWORD:-admin}\n      POSTGRES_PORT: ${DOCKER_COMPOSE_POSTGRES_PORT:-5432}\n      POSTGRES_USER: ${DOCKER_COMPOSE_POSTGRES_USER:-admin}\n      PGDATA: \u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\u002Fpgdata\n    restart: always\n    # Exposing the port is not needed unless you want to access this database instance from the host.\n    # Be careful when other postgres docker container are running on the same port\n    # ports:\n    #   - \"5432:5432\"\n    volumes:\n      - postgres_data:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n\nvolumes:\n  postgres_data:\n  plugins:\n  etherpad-var:\n```\n\n### Requirements\n\n[Node.js](https:\u002F\u002Fnodejs.org\u002F) >= 22.12.\n\n### Windows, macOS, Linux\n\n1. Download the latest Node.js runtime from [nodejs.org](https:\u002F\u002Fnodejs.org\u002F).\n2. Install pnpm: `npm install -g pnpm` (Administrator privileges may be required).\n3. Clone the repository: `git clone -b master`\n4. Run `pnpm i`\n5. Run `pnpm run build:etherpad`\n6. Run `pnpm run prod`\n7. Visit `http:\u002F\u002Flocalhost:9001` in your browser.\n\n### Docker container\n\nFind [here](doc\u002Fdocker.adoc) information on running Etherpad in a container.\n\n## Plugins\n\nEtherpad is very customizable through plugins.\n\n![Basic install](doc\u002Fpublic\u002Fetherpad_basic.png \"Basic Installation\")\n\n![Full Features](doc\u002Fpublic\u002Fetherpad_full_features.png \"You can add a lot of plugins !\")\n\n### Available Plugins\n\nFor a list of available plugins, see the [plugins\nsite](https:\u002F\u002Fstatic.etherpad.org).\n\n### Plugin Installation\n\nYou can install plugins from the admin web interface (e.g.,\nhttp:\u002F\u002F127.0.0.1:9001\u002Fadmin\u002Fplugins).\n\nAlternatively, you can install plugins from the command line:\n\n```sh\ncd \u002Fpath\u002Fto\u002Fetherpad-lite\npnpm run plugins i ep_${plugin_name}\n```\n\nAlso see [the plugin wiki\narticle](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki\u002FAvailable-Plugins).\n\n### Suggested Plugins\n\nRun the following command in your Etherpad folder to get all of the features\nvisible in the above demo gif:\n\n```sh\npnpm run plugins i \\\n  ep_align \\\n  ep_comments_page \\\n  ep_embedded_hyperlinks2 \\\n  ep_font_color \\\n  ep_headings2 \\\n  ep_markdown \\\n  ep_webrtc\n```\n\nFor user authentication, you are encouraged to run an [OpenID\nConnect](https:\u002F\u002Fopenid.net\u002Fconnect\u002F) identity provider (OP) and install the\nfollowing plugins:\n\n  * [ep_openid_connect](https:\u002F\u002Fgithub.com\u002Fether\u002Fep_openid_connect#readme) to\n    authenticate against your OP.\n  * [ep_guest](https:\u002F\u002Fgithub.com\u002Fether\u002Fep_guest#readme) to create a\n    \"guest\" account that has limited access (e.g., read-only access).\n  * [ep_user_displayname](https:\u002F\u002Fgithub.com\u002Fether\u002Fep_user_displayname#readme)\n    to automatically populate each user's displayed name from your OP.\n  * [ep_stable_authorid](https:\u002F\u002Fgithub.com\u002Fether\u002Fep_stable_authorid#readme) so\n    that each user's chosen color, display name, comment ownership, etc. is\n    strongly linked to their account.\n\n### Upgrade Etherpad\n\nRun the following command in your Etherpad folder to upgrade\n\n1. Stop any running Etherpad (manual, systemd ...)\n2. Get present version\n```sh\ngit -P tag --contains\n```\n3. List versions available\n```sh\ngit -P tag --list \"v*\" --merged\n```\n4. Select the version\n```sh\ngit checkout v2.2.5\ngit switch -c v2.2.5\n```\n5. Upgrade Etherpad\n```sh\n.\u002Fbin\u002Frun.sh\n```\n6. Stop with [CTRL-C]\n7. Restart your Etherpad service\n\n## Next Steps\n\n### Tweak the settings\n\nYou can modify the settings in `settings.json`. If you need to handle multiple\nsettings files, you can pass the path to a settings file to `bin\u002Frun.sh`\nusing the `-s|--settings` option: this allows you to run multiple Etherpad\ninstances from the same installation. Similarly, `--credentials` can be used to\ngive a settings override file, `--apikey` to give a different APIKEY.txt file\nand `--sessionkey` to give a non-default `SESSIONKEY.txt`. **Each configuration\nparameter can also be set via an environment variable**, using the syntax\n`\"${ENV_VAR}\"` or `\"${ENV_VAR:default_value}\"`. For details, refer to\n`settings.json.template`. Once you have access to your `\u002Fadmin` section,\nsettings can be modified through the web browser.\n\nIf you are planning to use Etherpad in a production environment, you should use\na dedicated database such as `mysql`, since the `dirtyDB` database driver is\nonly for testing and\u002For development purposes.\n\n### Secure your installation\n\nIf you have enabled authentication in `users` section in `settings.json`, it is\na good security practice to **store hashes instead of plain text passwords** in\nthat file. This is _especially_ advised if you are running a production\ninstallation.\n\nPlease install [ep_hash_auth plugin](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fep_hash_auth)\nand configure it. If you prefer, `ep_hash_auth` also gives you the option of\nstoring the users in a custom directory in the file system, without having to\nedit `settings.json` and restart Etherpad each time.\n\n### Customize the style with skin variants\n\nOpen http:\u002F\u002F127.0.0.1:9001\u002Fp\u002Ftest#skinvariantsbuilder in your browser and start\nplaying!\n\n![Skin Variant](doc\u002Fpublic\u002Fetherpad_skin_variants.gif \"Skin variants\")\n\n## Helpful resources\n\nThe [wiki](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki) is your one-stop\nresource for Tutorials and How-to's.\n\nDocumentation can be found in `doc\u002F`.\n\n## Development\n\n### Things you should know\n\nYou can debug Etherpad using `bin\u002FdebugRun.sh`.\n\nYou can run Etherpad quickly launching `bin\u002FfastRun.sh`. It's convenient for\ndevelopers and advanced users. Be aware that it will skip the dependencies\nupdate, so remember to run `bin\u002FinstallDeps.sh` after installing a new\ndependency or upgrading version.\n\nIf you want to find out how Etherpad's `Easysync` works (the library that makes\nit really realtime), start with this\n[PDF](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fraw\u002Fmaster\u002Fdoc\u002Feasysync\u002Feasysync-full-description.pdf)\n(complex, but worth reading).\n\n### Contributing\n\nRead our [**Developer\nGuidelines**](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md)\n\n### HTTP API\n\nEtherpad is designed to be easily embeddable and provides a [HTTP\nAPI](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki\u002FHTTP-API) that allows your web\napplication to manage pads, users and groups. It is recommended to use the\n[available client\nimplementations](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki\u002FHTTP-API-client-libraries)\nin order to interact with this API.\n\nOpenAPI (previously swagger) definitions for the API are exposed under\n`\u002Fapi\u002Fopenapi.json`.\n\n### jQuery plugin\n\nThere is a [jQuery plugin](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad-lite-jquery-plugin)\nthat helps you to embed Pads into your website.\n\n### Plugin Framework\n\nEtherpad offers a plugin framework, allowing you to easily add your own\nfeatures. By default your Etherpad is extremely light-weight and it's up to you\nto customize your experience. Once you have Etherpad installed you should [visit\nthe plugin page](https:\u002F\u002Fstatic.etherpad.org\u002F) and take control.\n\n### Translations \u002F Localizations  (i18n \u002F l10n)\n\nEtherpad comes with translations into all languages thanks to the team at\n[TranslateWiki](https:\u002F\u002Ftranslatewiki.net\u002F).\n\nIf you require translations in [plugins](https:\u002F\u002Fstatic.etherpad.org\u002F) please\nsend pull request to each plugin individually.\n\n## FAQ\n\nVisit the **[FAQ](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fwiki\u002FFAQ)**.\n\n## Get in touch\n\nThe official channel for contacting the development team is via the [GitHub\nissues](https:\u002F\u002Fgithub.com\u002Fether\u002Fetherpad\u002Fissues).\n\nFor **responsible disclosure of vulnerabilities**, please write a mail to the\nmaintainers (a.mux@inwind.it and contact@etherpad.org).\n\nJoin the official [Etherpad Discord\nChannel](https:\u002F\u002Fdiscord.com\u002Finvite\u002FdaEjfhw).\n\n## License\n\n[Apache License v2](http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0.html)\n","Etherpad 是一个实时协作文档编辑器。它支持多人同时编辑同一文档，每个键入的字符都会被归因到具体的作者，并且所有修订版本都得以保存，用户可以通过时间滑块查看文档的历史修改记录。此外，Etherpad 提供了丰富的文本编辑功能以及文档导出选项（如 PDF、DOCX 等），并且允许用户自定义AI插件来增强功能。由于其高度可定制性和安全性（运行在用户自己的服务器上，无第三方监控），该工具非常适合需要保密性高、协作性强的工作环境，例如政府机构、教育部门及企业内部使用。",2,"2026-06-11 02:56:12","top_language"]