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