Notable 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, andrestoreRevision
functions. - 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 new
sessionInfocontext 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
requireAuthenticationis
true) changed from never to 10 days after the user leaves.
For plugin authors
- The
clientcontext property for thehandleMessageSecurityand
handleMessageserver-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.id
instead.
- The
padCreate: Theauthorcontext property is deprecated; use the new
authorIdcontext 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.id
instead.padUpdate: Theauthorcontext property is deprecated; use the new
authorIdcontext 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
- 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