Etherpad
Etherpad: A modern really-real-time collaborative document editor.
Alternative to: google docs, hackmd, quip
About
Versions (79)
v1.9.0
2023-06-20Notable enhancements and fixes
- Windows build:
- The bundled
node.exewas upgraded from v12 to v16. - The bundled
node.exeis 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_sidcookies andsessionstorage:*database records are no longer created unlessrequireAuthenticationistrue(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.jsonare now applied as expected (they were unintentionally ignored before):padOptions.langpadOptions.showChatpadOptions.userColorpadOptions.userName
- HTTP API:
- Fixed the return value of
getTextwhen called with a specific revision. - Fixed a potential attribute pool corruption bug with
copyPadWithoutHistory. - Mappings created by
createGroupIfNotExistsForare now removed from the database when the group is deleted. - Fixed race conditions in the
setText,appendText, andrestoreRevisionfunctions. - Added an optional
authorIdparameter 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
/healthendpoint for getting information about Etherpad’s health (see draft-inadarei-api-health-check-06). - Docker now uses the new
/healthendpoint 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
.etherpadformat should be faster thanks to bulk database record fetches. - When importing an
.etherpadfile, records are now saved to the database in batches to avoid database timeouts with large pads.
For plugin authors
- New
expressPreSessionserver-side hook. - Pad server-side hook changes:
padCheck: New hook.padCopy: NewsrcPadanddstPadcontext properties.padDefaultContent: New hook.padRemove: Newpadcontext property.
- The
dbproperty on Pad objects is now public. - New
getAuthorIdserver-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
importserver-side hook has a newImportErrorcontext property. - New
exportEtherpadandimportEtherpadserver-side hooks. - The
handleMessageSecurityandhandleMessageserver-side hooks have a newsessionInfocontext property that includes the user’s author ID, the pad ID, and whether the user only has read-only access. - The
handleMessageSecurityserver-side hook can now be used to grant write access for the current message only. - The
init_<pluginName>server-side hooks have a newloggercontext 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
requireAuthenticationistrue) changed from never to 10 days after the user leaves.
For plugin authors
- The
clientcontext property for thehandleMessageSecurityandhandleMessageserver-side hooks is deprecated; use thesocketcontext property instead. - Pad server-side hook changes:
padCopy:- The
originalPadcontext property is deprecated; usesrcPadinstead. - The
destinationIDcontext property is deprecated; usedstPad.idinstead.
- The
padCreate: Theauthorcontext property is deprecated; use the newauthorIdcontext 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: ThepadIDcontext property is deprecated; usepad.idinstead.padUpdate: Theauthorcontext property is deprecated; use the newauthorIdcontext property instead. Also, the hook now runs asynchronously.
- Returning
truefrom ahandleMessageSecurityhook function is deprecated; return'permitOnce'instead. - Changes to the
src/static/js/Changeset.jslibrary:- 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 newOpclass.
- The following attribute processing functions are deprecated (use the new
attribute APIs instead):
- The
AuthorManager.getAuthor4Token()function is deprecated; use the newAuthorManager.getAuthorId()function instead. - The exported database records covered by the
exportEtherpadAdditionalContentserver-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