Skip to content

1.1.0-alpha.4

Pre-release
Pre-release

Choose a tag to compare

@Jaggob Jaggob released this 01 Sep 13:45
· 141 commits to main since this release
95ccc56

This release focuses on a simpler pad creation flow, shared templates, clearer administration, more reliable protected-pad handling, and broader automated compatibility testing.

New features

  • Instance-wide pad templates: Administrators can upload and manage shared .pad templates. They appear in Nextcloud's template picker for all users and always create a fresh Etherpad pad.
  • Unified pad creation: The separate entries for protected, public, and external pads in Nextcloud's New menu have been replaced by a single New pad entry. The pad type and shared templates are now selected through Nextcloud's native template picker.
  • Configurable pad types: Administrators can independently enable or disable protected and public pads. Existing pads remain usable even when their type is disabled. External pads continue to use their own setting.
  • Italian translations: Italian joins German, Spanish, and French as a maintained translation.

Admin settings and diagnostics

  • Reorganised the administration page into clearer sections and revised the descriptions to make configuration easier to understand.
  • Improved the Etherpad connection test with separate results for the API, API key, browser-facing Etherpad URL, and protected-pad session-cookie setup.
  • Unified the session-cookie-domain calculation used by the settings page, diagnostics, and runtime.
  • Added clearer, field-specific guidance when a setting needs attention.

Reliability and security

  • Session cookie changes. The Etherpad session cookie is now SameSite=Lax instead of None, so a foreign page that frames a pad URL no longer receives it. From Etherpad 3.0 the cookie is also HttpOnly; up to 2.7.3 the pad app reads it in the browser, where that would prevent protected pads from opening. The release is detected from Etherpad's /health endpoint. Two app settings exist for deployments that need to override either: etherpad_session_cookie_samesite and etherpad_http_only_session_cookie.
  • Multiple protected pads can now remain open in different browser tabs without replacing each other's Etherpad session.
  • Deleting a protected pad now removes its complete Etherpad group and associated sessions instead of leaving group resources behind.
  • Strengthened cleanup and rollback handling when pad creation, binding, restoration, or deletion only partially succeeds.
  • Pad opening by file ID is now more reliable for group folders, shares, external storage, and files whose path has changed.
  • Hardened legacy Ownpad migration against forged group-pad identifiers.
  • Improved concurrent file creation and filename handling, including names containing special characters.
  • Fixed restoring .pad files from the trash on Nextcloud 31.
  • Added numerous smaller error-handling and compatibility fixes across pad creation, opening, templates, snapshots, and lifecycle operations.

Testing and maintenance

  • Added a disposable Docker-based end-to-end test environment containing Nextcloud, Etherpad, PostgreSQL, and TLS.
  • The Playwright suite now runs automatically against Nextcloud 31, 32, and 33 as well as Etherpad 2 and 3.
  • Expanded browser and unit coverage for pad creation, templates, shares, protected sessions, trash and restore, lifecycle cleanup, and security-sensitive flows.
  • Improved test cleanup so automated runs do not leave files in the Nextcloud trash.
  • Updated DOMPurify and rebuilt the distributed frontend bundles with the patched version.
  • Cleaned the release archive and excluded development-only Playwright artifacts.

Upgrading

No manual steps. Existing pads, bindings and settings are carried over.

Administrators running a cross-site embed of the /embed/by-id routes should read the SameSite section in docs/etherpad-integration.md before upgrading: the cookie is same-site by default now, and a cross-site embed needs etherpad_session_cookie_samesite=none together with authentication that does not travel in a cookie.