All notable changes to NC Connector for Thunderbird will be documented in this file.
This project targets Thunderbird ESR 140.*.
Release package version is 3.1.1.
Functional delta documented here corresponds to 3.1.0 -> 3.1.1.
- Fix flaky iCal snapshot flow and keep X-NCTALK metadata in sync.
Release package version is 3.1.0.
Functional delta documented here corresponds to 3.0.4 -> 3.1.0.
- Backend-gated email signature settings were added for compose/reply/forward handling.
- Signature ownership on replies/forwards is now bound strictly to the matching Nextcloud identity.
- Local Thunderbird/signature-switch signatures are preserved when backend signature delivery is disabled.
- Backend policy domains are handled independently to avoid cross-domain policy coupling.
- Talk calendar contract handling was hardened and simplified around the active deterministic path.
- Calendar contract/runtime behavior was hardened to reduce fragility in Talk event processing.
- Thunderbird reviewer notes and sender parsing documentation were cleaned up and aligned with runtime behavior.
- Locale/doc alignment for the new contract and signature behavior was refreshed.
Release package version is 3.0.4.
Functional delta documented here corresponds to 3.0.3 -> 3.0.4.
- Optional Talk setting to delete linked Talk rooms when saved NC Connector calendar events are deleted:
- available as a local add-on setting
- controllable by backend policy via
talk_delete_room_on_event_delete - off by default
- Saved-event Talk room deletion now requires both explicit opt-in and trusted NC Connector
X-NCTALK-*metadata. - Legacy calendar token mappings without a trusted source are no longer accepted as room-deletion ownership proof.
- Release/version references were aligned to
3.0.4across manifest, reviewer notes, smoke plan, and readmes.
- Generic Talk links in calendar
LOCATIONorURLfields no longer grant NC Connector ownership over a Talk room. - Deleting a normal calendar event with a manually pasted Talk link no longer deletes the linked room.
- Unsaved event cleanup remains active for rooms created and then discarded during event creation.
Release package version is 3.0.3.
Functional delta documented here corresponds to 3.0.2 -> 3.0.3.
- Mode-aware plain-text insertion for share mails and separate password follow-up mails:
- share/password follow-up rendering now provides explicit pre-rendered HTML + plain-text variants
- compose insertion supports dedicated plain-text output instead of relying on HTML-only rendering
- share plain-text contract coverage was added and documented
- Release/version references were aligned to
3.0.3across manifest, reviewer notes, smoke plan, internal checklist, readmes, and the renamed worktree. - Share/plain-text rendering was hardened further:
- legacy share pre-rendering was removed from the upload/create path
- Sanitizer observability and debug behavior were improved:
- backend Talk/share template sanitization now emits compact structural summaries on the existing add-on debug channels
- Talk/Sharing teardown-time debug forwarding races were reduced during popup close
- add-on logging channels were unified and legacy debug-path drift was removed from active runtime/UI paths
- Supporting maintenance updates included:
- vendor calendar experiment refresh
- Talk/Sharing wording updates with full locale coverage
- Talk guest help URL now points to the current documentation page.
- Local share-base default is now set to
NC Connector.
Release package version is 3.0.2.
Functional delta documented here corresponds to 3.0.1 -> 3.0.2.
- Release/version references were aligned to
3.0.2across manifest, reviewer notes, smoke plan, and readmes. - Sanitizer-dependent backend HTML paths now fail closed instead of falling back to raw HTML:
- share template rendering throws if the expected share HTML sanitizer is unavailable
- Talk HTML template rendering throws if the expected Talk HTML sanitizer is unavailable
- the privileged
descriptionHtmlbridge rejects the update if the expected sanitizer is unavailable
Release package version is 3.0.1.
Functional delta documented here corresponds to 3.0.0 -> 3.0.1.
- Release/version references were aligned to
3.0.1across manifest, review notes, readmes, and docs. - Plain-text Talk invitation templates now persist correctly in Thunderbird rich event-description editors; the editor bridge synchronizes Thunderbird's HTML/text description state for both HTML and plain-text writes.
- Backend-provided Talk/Share HTML is sanitized client-side with bundled
DOMPurify 3.3.1before use. ncCalToolbarno longer parses inbound description HTML viainnerHTMLin privileged experiment code.- Active add-on/runtime hardening was extended:
- legacy
execCommand(...)usage was removed from the active editor/plain-text and clipboard fallback paths - sharing wizard upload-status rendering no longer writes HTML via
innerHTML; DOM nodes are created explicitly instead - attachment-mode DAV folder creation now skips known-existing base prefixes, avoiding benign repeated
MKCOL 405responses in the common upload flow - shared UI debug forwarding now tracks page teardown centrally so expected
context unloaded/Conduitsruntime disconnects do not surface as false-positive errors during popup close
- legacy
- Separate-password follow-up delivery was hardened after the 3.0.0 release:
- the final main-mail envelope is captured on
compose.onBeforeSend - live sender changes are tracked on
compose.onIdentityChanged - the Thunderbird sender identity is resolved via
accountsRead/ identity lookup - the password follow-up targets only the primary mail
Torecipients - the auto-send path now warms the freshly opened password compose tab before sending and uses a longer timeout guard for slower Thunderbird/SMTP handshakes
- a manual password-mail draft is opened whenever sender identity resolution is ambiguous/unavailable or auto-send fails
- committed shares are never deleted after the primary mail was sent
- the final main-mail envelope is captured on
Release package version is 3.0.0.
Functional delta documented here corresponds to 2.3.0 -> 3.0.0.
- Functional runtime baseline remains equivalent to the hardened 2.3.0 line, now including optional NC Connector backend policy mode:
- backend status endpoint is queried on Talk wizard open, Sharing wizard open, Settings open, and Settings save
- active valid seats enable backend policy values plus
policy_editablelocks - paused/invalid seat states show UI warnings and fall back to local add-on settings
- central templates can control share HTML/password blocks and Talk description text
- separate password follow-up delivery is explicitly gated behind backend endpoint + active assigned seat
- backend custom text templates are only activated when the language override is set to
Custom, otherwise local UI-default text remains active - backend attachment-threshold policy now treats
attachments_min_size_mb: nullas an explicit "disabled" state - locked backend attachment-automation policy is now also enforced in compose runtime, not only in Settings/Wizard UI
- backend policy runtime now targets
/apps/ncc_backend_4mc/api/v1/status - if the backend is unreachable or the license/seat state is no longer usable, Thunderbird falls back to local add-on settings
- Talk event descriptions now honor backend
event_description_type; HTML templates are written into Thunderbird's rich event-description editor while keeping the plain-text representation aligned via the editor snapshot - Talk room creation now uses one authoritative server-side create path without fallback from event conversation to standard room or pseudo URLs
- share creation now follows the documented Nextcloud OCS contract more closely:
labelis sent during create, while mutable metadata likenoteis updated later via form-encoded OCS update arguments - stale Talk create fallback contract fields were removed from runtime/UI cleanup payloads
- duplicate background error logs were reduced in active compose/Talk paths
- core runtime errors now use always-on error logging independent of the debug fla
Release package version is 2.2.9. Functional delta documented here corresponds to 2.2.8 -> 2.2.9 only.
- Calendar editor Talk button wiring was switched to the official
calendar_item_actionpath:manifest.jsonnow declarescalendar_item_action+calendarItemActionncCalToolbarno longer injects a custom toolbarbuttonncCalToolbarnow binds its click/context bridge to the official action button
- Lobby time synchronization was hardened to a single deterministic contract:
X-NCTALK-STARTis now the only authoritative source for lobby timer updates- no lobby-time fallback derivation from
DTSTART/TZIDis used in runtime updates - missing/invalid
X-NCTALK-STARTnow causes explicit error logging and skips lobby update - calendar upsert no longer parses
DTENDwith custom TZID conversion, avoiding noisy Windows-TZID (W. Europe Standard Time) offset-resolution errors in logs
- Wizard popup focus handling was hardened (Talk + Sharing):
- best-effort foreground focus request right after popup creation
- short retry sequence to reduce startup/window-manager race conditions
- deterministic debug logging for focus attempts and outcomes
- Talk user/guest/moderator controls are now guarded by live system-addressbook availability checks:
- options + wizard disable affected controls when the system address book is unavailable
- options include a dedicated red warning block with setup-guide link
- lock tooltips switch context-aware: normal help when available, lock hint when unavailable
- availability checks are forced on Talk button click, on options open, and on options save
- Talk-button addressbook preflight is now non-blocking (fire-and-forget), so wizard opening no longer waits on network status probes.
ncCalToolbarstartup retry handling was hardened with delayed backoff retries (instead of tight main-thread redispatch), reducing intermittent startup race failures whenExtensionSupportis not ready yet.- UI debug forwarding now suppresses expected teardown-time runtime disconnect rejections (context unload / Conduits), avoiding noisy false-error logs during popup close.
- Background runtime responsibilities were split further:
modules/bgCalendarLifecycle.jsfor calendar wizard context + room-cleanup lifecycle helpersmodules/talkAddressbook.jsfor system-addressbook fetch/cache/search/status logic
- Options Talk tab now forces one live addressbook refresh when opened; window-focus refresh uses cached status (no forced probe on every focus switch).
- About tab content was aligned with the Outlook variant:
- homepage row now links to
https://nc-connector.de - technical overview + "More information" block is shown in About
- localized About texts were synchronized across all shipped locales
- homepage row now links to
- Documentation and release references were updated to 2.2.9 across manifest/readmes/docs.
- Best-effort popup focus helper in background runtime (
focusPopupWindowBestEffort) reused by both wizard entrypoints. - System address book hardening for Talk user/guest/moderator flows:
- live availability checks in wizard/options
- lock state + guidance tooltip when unavailable
- admin docs include Nextcloud 31 (
occ) and Nextcloud >=32 (UI) enablement path
- Send password in separate email remains intentionally disabled in this release (visible but locked).
- Readme/docs now reflect the effective runtime behavior (no active separate-password dispatch path in normal UI flow).
ncCalToolbarwas hardened for deterministic editor targeting in dialog and tab event editors.- Event write-back and cleanup paths were stabilized for open editors (including unsaved item flows).
- Sharing wizard queue behavior was improved (active-row highlight, success colors, path-column handling).
- Attachment upload flow was simplified in newly created share folders by removing redundant per-file pre-checks.
- Remote cleanup behavior was tightened for wizard and compose flows when shares are not sent.
- Error handling and debug logging were normalized to explicit, deterministic runtime logs.
- Attachment automation modes:
- always share attachments via NC Connector
- threshold-based prompt with deterministic user actions
- direct attachment-mode wizard start in step 3
- Conflict lock for Thunderbird’s native “Upload for files larger than ...” setting with explicit user guidance.
- Centralized i18n/runtime parity checks and parser contract checks in local tooling.
- Send password in separate email is intentionally disabled in options and sharing wizard.
- The control stays visible but is grayed out with a “Coming soon (Pro feature)” tooltip.
- Runtime guard keeps separate-password dispatch inactive even if legacy settings exist.
- Removed the previous calendar event editor injection/bridge experiment used in 2.2.5.
- Added a minimal calendar toolbar experiment (
experiments/ncCalToolbar) to reliably provide the Talk button in both event editor variants:- dialog editor (
calendar-event-dialog.xhtml) - tab editor (inside
messenger.xhtml/ calendar event tab)
- dialog editor (
- Talk wizard is opened as a real popup window (
browser.windows.create) from the calendar toolbar button. - Event write-back now targets the currently edited item (title/location/description +
X-NCTALK-*metadata) and is persisted when the editor is saved. - “Add participants” was split into Add users (internal Nextcloud users) and Add guests (external e-mail invitees) with dedicated defaults and tooltips.
- Updated documentation for admins and developers:
docs/ADMIN.mddocs/DEVELOPMENT.mdTranslations.md
- Invitee sync (users/guests) is applied after saving the event, driven by calendar item updates (official calendar experiment API under
experiments/calendar, unchanged).