Linus Rath
437bb1d11a
test: require every plugin permission to gate a method, hook or slot
2026-10-14 04:28:24 +02:00
Linus Rath
3a65964d26
feat: let plugins show notifications that name the plugin
2026-10-14 04:26:16 +02:00
Linus Rath
ead925c1b8
feat: let plugins open a filled-in composer and save drafts
2026-10-14 04:23:17 +02:00
Linus Rath
08e2d65944
feat: let untrusted plugins save attachments and message sources of a given message
2026-10-14 04:16:31 +02:00
Linus Rath
8fd6bc42c3
feat: let plugins read any message, list a folder and see the folders
2026-10-14 04:13:33 +02:00
Linus Rath
121d8ba30c
feat: let plugins manage templates, sender signatures and the out-of-office reply
2026-10-14 04:06:06 +02:00
Linus Rath
3df031edd1
feat: let plugins read and change calendar events and tasks
2026-10-14 04:02:47 +02:00
Linus Rath
adf5ad6c16
test: require every calendar and task hook to have a call site
2026-10-14 03:46:11 +02:00
Linus Rath
be26f96bea
Merge branch 'hooks/calendar' into feat/plugin-system-audit
2026-10-14 03:44:13 +02:00
Linus Rath
348ec1d399
feat: let plugins stop app shortcuts and hear when one ran
2026-10-14 03:44:09 +02:00
Linus Rath
0cf80c1689
feat: tell plugins when tasks are loaded, created, changed, checked off, deleted or filtered, and let them stop changes
2026-10-14 03:43:33 +02:00
Linus Rath
e16e8946a8
test: require every contact and file hook to have a call site
2026-10-14 03:42:34 +02:00
Linus Rath
89452871fb
feat: tell plugins when an event reminder fires and when it is dismissed
2026-10-14 03:40:19 +02:00
Linus Rath
77c7589e04
Merge branch 'hooks/contacts' into feat/plugin-system-audit
2026-10-14 03:40:05 +02:00
Linus Rath
051e82b487
feat: tell plugins about layout changes, drag and drop, and sidebar apps
2026-10-14 03:40:04 +02:00
Linus Rath
6b98fccead
feat: tell plugins when a folder is opened, files are selected or starred, and an action is undone
2026-10-14 03:39:30 +02:00
Linus Rath
8e2f9d7c94
feat: tell plugins when the calendar view, its calendars or subscriptions change
2026-10-14 03:36:35 +02:00
Linus Rath
96f0681ab5
feat: tell plugins when files are uploaded, downloaded, deleted, renamed, moved or copied, and let them stop it
2026-10-14 03:36:13 +02:00
Linus Rath
e62553642f
feat: tell plugins about sign-in, token renewal and account changes
2026-10-14 03:32:58 +02:00
Linus Rath
8ec7dc54ab
feat: tell plugins when contacts are opened, selected, moved or imported and when groups change
2026-10-14 03:27:50 +02:00
Linus Rath
c5dc263259
fix: stop plugins from blocking or stalling sign-out
2026-10-14 03:27:34 +02:00
Linus Rath
1ae73ceac1
feat: tell plugins when events are opened, created, changed, deleted, answered or imported, and let them stop changes
2026-10-14 03:26:39 +02:00
Linus Rath
77088a6008
feat: tell plugins when toasts are shown and dismissed
2026-10-14 03:25:53 +02:00
Linus Rath
96f8aa6a63
feat: tell plugins when contacts are created, changed or deleted, and let them stop it
2026-10-14 03:24:19 +02:00
Linus Rath
02a7dfab16
feat: tell plugins when the colour scheme or theme changes
2026-10-14 03:24:00 +02:00
Linus Rath
606861eb71
feat: tell plugins about the app's lifecycle and navigation on every page, not only in mail
2026-10-14 03:19:54 +02:00
Linus Rath
af53675191
feat: add plain-data views of messages, events, contacts, tasks and files for plugin hooks
2026-10-14 03:16:25 +02:00
Linus Rath
a3cb9e630e
refactor: describe every plugin hook in one catalogue
...
The hook buses, the permission each hook needs and the docs were three
separate lists that had drifted: 145 of 198 hooks were never fired and
nothing noticed. `lib/plugin-hook-catalog.ts` now names each hook with
its kind, permission, payload and when it fires; the permission check
reads it, and a test fails for any catalogued hook without a call site.
Groups still being wired in this branch are listed in that test.
Also:
- new before-hooks for archive, spam, read state, star, keywords, folder
changes, RSVP, event import, tasks, file moves, settings, identities,
filters and out-of-office, plus onComposerClose and onSyncStateChange
- removed hooks that can never fire: the S/MIME group (S/MIME is a
plugin now), onMobileViewSwitch, onSidebarAppChange and the
registerShortcut pseudo-hook
- smime:read no longer grants anything; manifests that name it still
install, with a warning
2026-10-14 03:14:29 +02:00
Linus Rath
480a1bb226
fix: clear a plugin's stored data when the admin removes it, not only on uninstall
2026-10-14 03:05:05 +02:00
Linus Rath
8ef7ec022f
fix: deliver a plugin OAuth callback only to the plugin that started the flow
2026-10-14 03:04:17 +02:00
Linus Rath
bf1d8fd2c3
fix: stop keeping unanswered plugin hook calls and old slot callbacks around
2026-10-14 03:02:12 +02:00
Linus Rath
ada81d5f8f
fix: hide the Next.js dev badge inside plugin slots and warn that dev sandboxes are not isolated
2026-10-14 03:01:13 +02:00
Linus Rath
fe4f809092
fix: keep a plugin side panel from squeezing the message too narrow to read
2026-10-14 03:00:46 +02:00
Linus Rath
3bfc0e69d0
fix: check attachments a plugin adds to the composer and keep callbacks out of shouldShow
2026-10-14 02:58:47 +02:00
Linus Rath
03e9846758
fix: stop remounting message-details plugin slots on every render
2026-10-14 02:56:15 +02:00
Linus Rath
2adb1e2b12
fix: size toolbar plugin slots to their content and give composer plugin buttons their own row
2026-10-14 02:53:46 +02:00
Linus Rath
cef2438c33
fix: let untrusted plugins upload attachments for the composer again
2026-10-14 02:34:31 +02:00
Linus Rath
f048db7b52
fix: count each plugin hook failure once and keep a plugin that kept failing turned off
2026-10-14 02:33:45 +02:00
Linus Rath
a491eab317
fix: hash WKD names with WebCrypto instead of shipping a Node crypto polyfill to the browser
2026-10-14 02:31:39 +02:00
Linus Rath
23c4c654d7
fix: limit what a plugin can store, download, toast and send to a WKD lookup, and report refused admin config writes
2026-10-14 02:30:54 +02:00
Linus Rath
22846b4a9b
fix: keep blob uploads privileged-only and derive the WebAuthn salt from the calling plugin
2026-10-14 02:28:11 +02:00
Linus Rath
15cec58a46
fix: serve plugin bundles only to signed-in users
2026-10-14 02:27:35 +02:00
Linus Rath
c4853a4bba
fix: check dev-directory plugins like uploads and keep their files inside the plugin folder
2026-10-14 02:26:56 +02:00
Linus Rath
9408daaf5e
fix: keep an extension's admin state on re-upload and remove its config when it is deleted
2026-10-14 02:25:45 +02:00
Linus Rath
bb562362b8
fix: lay out plugin slots right-to-left in Arabic, Hebrew and Persian and use the app font size
2026-10-14 02:24:45 +02:00
Linus Rath
a21dbc92ec
fix: switch running plugins to a new language right away and fall back from de-CH to de
2026-10-14 02:23:40 +02:00
Linus Rath
8f70951555
fix: give plugins their default settings and apply setting changes without a reload
2026-10-14 02:21:45 +02:00
Linus Rath
eadff464a3
fix: keep plugin shortcuts behind ui:keyboard and off the keys the app and browser use
2026-10-14 02:19:10 +02:00
Linus Rath
ff1d1f399d
fix: limit plugin dialogs to one at a time, name the plugin in each and offer to turn it off
2026-10-14 02:15:45 +02:00
Linus Rath
be3debdcb4
fix: never send a message when a plugin that checks it before sending fails or does not answer
2026-10-14 02:11:59 +02:00