{"id":13402636,"url":"https://github.com/ether/etherpad-lite","last_synced_at":"2025-12-28T19:32:19.526Z","repository":{"id":37425758,"uuid":"1529160","full_name":"ether/etherpad-lite","owner":"ether","description":"Etherpad: A modern really-real-time collaborative document editor.","archived":false,"fork":false,"pushed_at":"2025-05-02T15:36:14.000Z","size":42327,"stargazers_count":17384,"open_issues_count":152,"forks_count":2926,"subscribers_count":354,"default_branch":"develop","last_synced_at":"2025-05-05T14:13:22.335Z","etag":null,"topics":["collaboration","collaborative","collaborative-editing","collaborative-framework","collaborative-research","collaborative-writing","document","documents","docx","etherpad","libreoffice","microsoft","pdf","pdf-generation","rich-text-editor","video-conference","video-conferencing","web-editor","word"],"latest_commit_sha":null,"homepage":"http://docs.etherpad.org/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ether.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"ether"}},"created_at":"2011-03-26T13:09:02.000Z","updated_at":"2025-05-05T06:08:36.000Z","dependencies_parsed_at":"2023-09-28T01:02:25.990Z","dependency_job_id":"4d3e8333-6708-410a-8634-b7c15f85c57c","html_url":"https://github.com/ether/etherpad-lite","commit_stats":{"total_commits":6892,"total_committers":338,"mean_commits":"20.390532544378697","dds":0.7706035983749274,"last_synced_commit":"bcf0b676771430f05b7f226b8d395fa88a0ee291"},"previous_names":[],"tags_count":108,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ether%2Fetherpad-lite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ether%2Fetherpad-lite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ether%2Fetherpad-lite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ether%2Fetherpad-lite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ether","download_url":"https://codeload.github.com/ether/etherpad-lite/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253774590,"owners_count":21962199,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaboration","collaborative","collaborative-editing","collaborative-framework","collaborative-research","collaborative-writing","document","documents","docx","etherpad","libreoffice","microsoft","pdf","pdf-generation","rich-text-editor","video-conference","video-conferencing","web-editor","word"],"created_at":"2024-07-30T19:01:18.660Z","updated_at":"2025-12-28T19:32:19.483Z","avatar_url":"https://github.com/ether.png","language":"TypeScript","readme":"# Etherpad: A real-time collaborative editor for the web\n\n![Demo Etherpad Animated Jif](doc/public/etherpad_demo.gif \"Etherpad in action\")\n\n## About\n\nEtherpad is a real-time collaborative editor [scalable to thousands of\nsimultaneous real time users](http://scale.etherpad.org/). It provides [full\ndata\nexport](https://github.com/ether/etherpad-lite/wiki/Understanding-Etherpad's-Full-Data-Export-capabilities)\ncapabilities, and runs on _your_ server, under _your_ control.\n\n## Try it out\n\nWikimedia provide a [public Etherpad instance for you to Try Etherpad out.](https://etherpad.wikimedia.org) or [use another public Etherpad instance to see other features](https://github.com/ether/etherpad-lite/wiki/Sites-That-Run-Etherpad#sites-that-run-etherpad)\n\n## Project Status\n\nWe're looking for maintainers and have some funding available.  Please contact John McLear if you can help.\n\n### Code Quality\n\n[![Code Quality](https://github.com/ether/etherpad-lite/actions/workflows/codeql-analysis.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/codeql-analysis.yml)\n\n### Testing\n\n[![Backend tests](https://github.com/ether/etherpad-lite/actions/workflows/backend-tests.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/backend-tests.yml)\n[![Simulated Load](https://github.com/ether/etherpad-lite/actions/workflows/load-test.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/load-test.yml)\n[![Rate Limit](https://github.com/ether/etherpad-lite/actions/workflows/rate-limit.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/rate-limit.yml)\n[![Docker file](https://github.com/ether/etherpad-lite/actions/workflows/dockerfile.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/dockerfile.yml)\n[![Frontend admin tests powered by Sauce Labs](https://github.com/ether/etherpad-lite/actions/workflows/frontend-admin-tests.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/frontend-admin-tests.yml)\n[![Frontend tests powered by Sauce Labs](https://github.com/ether/etherpad-lite/actions/workflows/frontend-tests.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/frontend-tests.yml)\n[![Sauce Test Status](https://saucelabs.com/buildstatus/etherpad.svg)](https://saucelabs.com/u/etherpad)\n[![Windows Build](https://github.com/ether/etherpad-lite/actions/workflows/windows.yml/badge.svg?color=%2344b492)](https://github.com/ether/etherpad-lite/actions/workflows/windows.yml)\n\n### Engagement\n\n[![Docker Pulls](https://img.shields.io/docker/pulls/etherpad/etherpad?color=%2344b492)](https://hub.docker.com/r/etherpad/etherpad)\n[![Discord](https://img.shields.io/discord/741309013593030667?color=%2344b492)](https://discord.com/invite/daEjfhw)\n[![Etherpad plugins](https://img.shields.io/endpoint?url=https%3A%2F%2Fstatic.etherpad.org%2Fshields.json\u0026color=%2344b492 \"Etherpad plugins\")](https://static.etherpad.org/index.html)\n![Languages](https://img.shields.io/static/v1?label=Languages\u0026message=105\u0026color=%2344b492)\n![Translation Coverage](https://img.shields.io/static/v1?label=Languages\u0026message=98%\u0026color=%2344b492)\n\n## Installation\n\n### Docker-Compose\n\n```yaml\nservices:\n  app:\n    user: \"0:0\"\n    image: etherpad/etherpad:latest\n    tty: true\n    stdin_open: true\n    volumes:\n      - plugins:/opt/etherpad-lite/src/plugin_packages\n      - etherpad-var:/opt/etherpad-lite/var\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: /var/lib/postgresql/data/pgdata\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:/var/lib/postgresql/data\n\nvolumes:\n  postgres_data:\n  plugins:\n  etherpad-var:\n```\n\n### Requirements\n\n[Node.js](https://nodejs.org/) \u003e= **18.18.2**.\n\n### Windows, macOS, Linux\n\n1. Download the latest Node.js runtime from [nodejs.org](https://nodejs.org/).\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://localhost:9001` in your browser.\n\n### Docker container\n\nFind [here](doc/docker.adoc) information on running Etherpad in a container.\n\n## Plugins\n\nEtherpad is very customizable through plugins.\n\n![Basic install](doc/public/etherpad_basic.png \"Basic Installation\")\n\n![Full Features](doc/public/etherpad_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://static.etherpad.org).\n\n### Plugin Installation\n\nYou can install plugins from the admin web interface (e.g.,\nhttp://127.0.0.1:9001/admin/plugins).\n\nAlternatively, you can install plugins from the command line:\n\n```sh\ncd /path/to/etherpad-lite\npnpm run plugins i ep_${plugin_name}\n```\n\nAlso see [the plugin wiki\narticle](https://github.com/ether/etherpad-lite/wiki/Available-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://openid.net/connect/) identity provider (OP) and install the\nfollowing plugins:\n\n  * [ep_openid_connect](https://github.com/ether/ep_openid_connect#readme) to\n    authenticate against your OP.\n  * [ep_guest](https://github.com/ether/ep_guest#readme) to create a\n    \"guest\" account that has limited access (e.g., read-only access).\n  * [ep_user_displayname](https://github.com/ether/ep_user_displayname#readme)\n    to automatically populate each user's displayed name from your OP.\n  * [ep_stable_authorid](https://github.com/ether/ep_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./bin/run.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/run.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 `/admin` 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/or 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://www.npmjs.com/package/ep_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://127.0.0.1:9001/p/test#skinvariantsbuilder in your browser and start\nplaying!\n\n![Skin Variant](doc/public/etherpad_skin_variants.gif \"Skin variants\")\n\n## Helpful resources\n\nThe [wiki](https://github.com/ether/etherpad-lite/wiki) is your one-stop\nresource for Tutorials and How-to's.\n\nDocumentation can be found in `doc/`.\n\n## Development\n\n### Things you should know\n\nYou can debug Etherpad using `bin/debugRun.sh`.\n\nYou can run Etherpad quickly launching `bin/fastRun.sh`. It's convenient for\ndevelopers and advanced users. Be aware that it will skip the dependencies\nupdate, so remember to run `bin/installDeps.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://github.com/ether/etherpad-lite/raw/master/doc/easysync/easysync-full-description.pdf)\n(complex, but worth reading).\n\n### Contributing\n\nRead our [**Developer\nGuidelines**](https://github.com/ether/etherpad-lite/blob/master/CONTRIBUTING.md)\n\n### HTTP API\n\nEtherpad is designed to be easily embeddable and provides a [HTTP\nAPI](https://github.com/ether/etherpad-lite/wiki/HTTP-API) that allows your web\napplication to manage pads, users and groups. It is recommended to use the\n[available client\nimplementations](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries)\nin order to interact with this API.\n\nOpenAPI (previously swagger) definitions for the API are exposed under\n`/api/openapi.json`.\n\n### jQuery plugin\n\nThere is a [jQuery plugin](https://github.com/ether/etherpad-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://static.etherpad.org/) and take control.\n\n### Translations / Localizations  (i18n / l10n)\n\nEtherpad comes with translations into all languages thanks to the team at\n[TranslateWiki](https://translatewiki.net/).\n\nIf you require translations in [plugins](https://static.etherpad.org/) please\nsend pull request to each plugin individually.\n\n## FAQ\n\nVisit the **[FAQ](https://github.com/ether/etherpad-lite/wiki/FAQ)**.\n\n## Get in touch\n\nThe official channel for contacting the development team is via the [GitHub\nissues](https://github.com/ether/etherpad-lite/issues).\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://discord.com/invite/daEjfhw).\n\n## License\n\n[Apache License v2](http://www.apache.org/licenses/LICENSE-2.0.html)\n","funding_links":["https://github.com/sponsors/ether"],"categories":["JavaScript","TypeScript","Applications","JavaScript (71)","Overview","独立的","others","Apps","Productivity Tools","置顶","pdf","Productivity","Application Recommendation","Languages","Table of Contents","Server","Standalone"],"sub_categories":["Collaborative Editor (e.g. Google Docs)","Other services","Writing","Note Taking Apps","06、企业协作平台","📝 Document Collaboration","JavaScript","Document Editor","Other"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fether%2Fetherpad-lite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fether%2Fetherpad-lite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fether%2Fetherpad-lite/lists"}