Releases: ether/etherpad-lite
Releases · ether/etherpad-lite
v2.0.0
First of all I am very happy to announce the second major version of Etherpad. During the course of the last months we have updated all dependencies, cleaned up some of the old Etherpad code and converted most of the things to Typescript.
Compatibility changes
- Socket io has been updated to 4.7.5. This means that the json.send function won't work anymore and needs to be changed to .emit('message', myObj)
- Deprecating npm version 6 in favor of pnpm: We have made the decision to switch to the well established pnpm (https://pnpm.io/). It works by symlinking dependencies into a global directory allowing you to have a cleaner and more reliable environment.
- Introducing Typescript to the Etherpad core: Etherpad core logic has been rewritten in Typescript allowing for compiler checking of errors.
- Rewritten Admin Panel: The Admin panel has been rewritten in React and now features a more pleasant user experience. It now also features an integrated pad searching with sorting functionality.
Notable enhancements and fixes
-
Bugfixes
- Live Plugin Manager: The live plugin manager caused problems when a plugin had depdendencies defined. This issue is now resolved.
-
Enhancements
- pnpm Workspaces: In addition to pnpm we introduced workspaces. A clean way to manage multiple bounded contexts like the admin panel or the bin folder.
- Bin folder: The bin folder has been moved from the src folder to the root folder. This change was necessary as the contained scripts do not represent core functionality of the user.
- Starting Etherpad: Etherpad can now be started with a single command:
pnpm run prod
in the root directory. - Installing Etherpad: Etherpad no longer symlinks itself in the root directory. This is now also taken care by pnpm, and it just creates a node_modules folder with the src directory`s ep_etherpad-lite folder
- Plugins can now be installed simply via the command:
pnpm run install-plugins first-plugin second-plugin
or if you want to install from path you can do:
pnpm run install-plugins --path ../path-to-plugin
This wouldn't be possible as a single developer. Special thanks to:
- @HMarzban for jumping in to update socket io
- @Gared for implementing and fixing the Live Plugin Manager
- @JannikStreek for adapting the Etherpad Docker build process, introducing PNPM workspaces and separating the bin and src folder
- @AugustinMauroy for the roadmap and inspiration of modernizing the Etherpad structure
v1.9.7
Notable enhancements and fixes
- Added Live Plugin Manager: Plugins are now installed into a separate folder on the host system. This folder is called
plugin_packages
.
That way the plugins are separated from the normal etherpad installation. - Make repairPad.js more verbose
- Fixed favicon not being loaded correctly
v1.9.6
Notable enhancements and fixes
- Prevent etherpad crash when update server is not reachable
- Use npm@6 in Docker build
- Fix setting the log level in settings.json
Merry Christmas and an awesome start in 2024 from the Etherpad team 🌲🎁
v1.9.5
Compability changes
- This version deprecates NodeJS16 as it reached its end of life and won't receive any updates. So to get started with Etherpad v1.9.5 you need NodeJS 18 and above.
- The bundled windows NodeJS version has been bumped to the current LTS version 20.
Notable enhancements and fixes
- The support for the tidy program to tidy up HTML files has been removed. This decision was made because it hasn't been updated for years and also caused an incompability when exporting a pad with Abiword.
v1.9.4
Compability changes
- Log4js has been updated to the latest version. As it involved a bump of 6 major version a lot has changed since then. Most notably the console appender has been deprecated. You can find out more about it here
Notable enhancements and fixes
- Fix for MySQL: The logger calls were incorrectly configured leading to a crash when e.g. somebody uses a different encoding than standard MySQL encoding.
1.9.3
Compability changes
- express-rate-limit has been bumped to 7.0.0: This involves the breaking change that "max: 0"
in the importExportRateLimiting is set to always trigger. So set it to your desired value.
If you haven't changed that value in the settings.json you are all set.
Notable enhancements and fixes
-
Bugfixes
- Fix etherpad crashing with mongodb database
-
Enhancements
- Add surrealdb database support. You can find out more about this database here.
- Make sqlite faster: The sqlite library has been switched to better-sqlite3. This should lead to better performance.
1.9.2
Notable enhancements and fixes
-
Security
- Enable session key rotation: This setting can be enabled in the settings.json. It changes the signing key for the cookie authentication in a fixed interval.
-
Bugfixes
- Fix appendRevision when creating a new pad via the API without a text.
-
Enhancements
- Bump JQuery to version 3.7
- Update elasticsearch connector to version 8
Compatibility changes
- No compability changes as JQuery maintains excellent backwards compatibility.
For plugin authors
- Please update to JQuery 3.7. There is an excellent deprecation guide over here. Version 3.1 to 3.7 are relevant for the upgrade.
1.9.1
Notable enhancements and fixes
-
Security
- Limit requested revisions in timeslider and export to head revision. (affects v1.9.0)
-
Bugfixes
- revisions in
CHANGESET_REQ
(timeslider) and export (txt, html, custom)
are now checked to be numbers. - bump sql for audit fix
- revisions in
-
Enhancements
- Add keybinding meta-backspace to delete to beginning of line
- Fix automatic Windows build via GitHub Actions
- Enable docs to be build cross platform thanks to asciidoctor
Compatibility changes
- tests: drop windows 7 test coverage & use chrome latest for admin tests
- Require Node 16 for Etherpad and target Node 20 for testing
1.9.0
Notable enhancements and fixes
- Windows build:
- The bundled
node.exe
was upgraded from v12 to v16. - The bundled
node.exe
is now a 64-bit executable. If you need the 32-bit
version you must download and install Node.js yourself.
- The bundled
- Improvements to login session management:
express_sid
cookies andsessionstorage:*
database records are no longer
created unlessrequireAuthentication
istrue
(or a plugin causes them to
be created).- Login sessions now have a finite lifetime by default (10 days after
leaving). sessionstorage:*
database records are automatically deleted when the login
session expires (with some exceptions that will be fixed in the future).- Requests for static content (e.g.,
/robots.txt
) and special pages (e.g.,
the HTTP API,/stats
) no longer create login session state.
- The following settings from
settings.json
are now applied as expected (they
were unintentionally ignored before):padOptions.lang
padOptions.showChat
padOptions.userColor
padOptions.userName
- HTTP API:
- Fixed the return value of
getText
when called with a specific revision. - Fixed a potential attribute pool corruption bug with
copyPadWithoutHistory
. - Mappings created by
createGroupIfNotExistsFor
are now removed from the
database when the group is deleted. - Fixed race conditions in the
setText
,appendText
, andrestoreRevision
functions. - Added an optional
authorId
parameter toappendText
,
copyPadWithoutHistory
,createGroupPad
,createPad
,restoreRevision
,
setHTML
, andsetText
, and bumped the latest API version to 1.3.0.
- Fixed the return value of
- Fixed a crash if the database is busy enough to cause a query timeout.
- New
/health
endpoint for getting information about Etherpad's health (see
draft-inadarei-api-health-check-06). - Docker now uses the new
/health
endpoint for health checks, which avoids
issues when authentication is enabled. It also avoids the unnecessary creation
of database records for managing browser sessions. - When copying a pad, the pad's records are copied in batches to avoid database
timeouts with large pads. - Exporting a large pad to
.etherpad
format should be faster thanks to bulk
database record fetches. - When importing an
.etherpad
file, records are now saved to the database in
batches to avoid database timeouts with large pads.
For plugin authors
- New
expressPreSession
server-side hook. - Pad server-side hook changes:
padCheck
: New hook.padCopy
: NewsrcPad
anddstPad
context properties.padDefaultContent
: New hook.padRemove
: Newpad
context property.
- The
db
property on Pad objects is now public. - New
getAuthorId
server-side hook. - New APIs for processing attributes:
ep_etherpad-lite/static/js/attributes
(low-level API) andep_etherpad-lite/static/js/AttributeMap
(high-level
API). - The
import
server-side hook has a newImportError
context property. - New
exportEtherpad
andimportEtherpad
server-side hooks. - The
handleMessageSecurity
andhandleMessage
server-side hooks have a new
sessionInfo
context property that includes the user's author ID, the pad ID,
and whether the user only has read-only access. - The
handleMessageSecurity
server-side hook can now be used to grant write
access for the current message only. - The
init_<pluginName>
server-side hooks have a newlogger
context
property that plugins can use to log messages. - Prevent infinite loop when exiting the server
- Bump dependencies
Compatibility changes
- Node.js v14.15.0 or later is now required.
- The default login session expiration (applicable if
requireAuthentication
is
true
) changed from never to 10 days after the user leaves.
For plugin authors
- The
client
context property for thehandleMessageSecurity
and
handleMessage
server-side hooks is deprecated; use thesocket
context
property instead. - Pad server-side hook changes:
padCopy
:- The
originalPad
context property is deprecated; usesrcPad
instead. - The
destinationID
context property is deprecated; usedstPad.id
instead.
- The
padCreate
: Theauthor
context property is deprecated; use the new
authorId
context property instead. Also, the hook now runs asynchronously.padLoad
: Now runs when a temporary Pad object is created during import.
Also, it now runs asynchronously.padRemove
: ThepadID
context property is deprecated; usepad.id
instead.padUpdate
: Theauthor
context property is deprecated; use the new
authorId
context property instead. Also, the hook now runs asynchronously.
- Returning
true
from ahandleMessageSecurity
hook function is deprecated;
return'permitOnce'
instead. - Changes to the
src/static/js/Changeset.js
library:- The following attribute processing functions are deprecated (use the new
attribute APIs instead):attribsAttributeValue()
eachAttribNumber()
makeAttribsString()
opAttributeValue()
opIterator()
: Deprecated in favor of the newdeserializeOps()
generator
function.appendATextToAssembler()
: Deprecated in favor of the newopsFromAText()
generator function.newOp()
: Deprecated in favor of the newOp
class.
- The following attribute processing functions are deprecated (use the new
- The
AuthorManager.getAuthor4Token()
function is deprecated; use the new
AuthorManager.getAuthorId()
function instead. - The exported database records covered by the
exportEtherpadAdditionalContent
server-side hook now include keys like${customPrefix}:${padId}:*
, not just
${customPrefix}:${padId}
. - Plugin locales should overwrite core's locales Stale
- Plugin locales overwrite core locales