Linus Rath
1f11cc7249
fix: stop talking to a plugin frame once it has navigated to another document
2026-10-19 01:32:27 +02:00
Linus Rath
685ce7f469
fix: keep plugin POSTs off the plugin proxy, secrets, agenda, ical and translate routes
2026-10-19 01:04:45 +02:00
Linus Rath
1e992e6c7f
fix: check plugin dropdown messages before the host draws them
2026-10-18 14:39:59 +02:00
Linus Rath
7573471544
fix: keep plugins from reading mail of other connected logins #1273
2026-10-18 14:39:58 +02:00
Linus Rath
5aba2a92c5
Merge pull request #1251 from tobiasge/feat/plugin-ui-kit-combobox
...
feat(plugins): add Combobox component to UI kit with host floating dropdown portal
2026-10-18 14:34:26 +02:00
Linus Rath
24e7e738bd
Merge pull request #1274 from alyyousuf7/fix/plugin-email-get-shared-accounts
...
fix: let api.email.get read a listed message of a shared account
2026-10-18 14:34:18 +02:00
Linus Rath
86d6c78ce7
fix: keep a plugin slot's callbacks working when its props change while it loads #1266
2026-10-18 13:46:47 +02:00
Ali Yousuf
6fe9f8f7f1
fix: let api.email.get read a listed message of a shared account
...
doEmailGet asked the signed-in account for every id, so a message in a
folder shared from another account came back as null even though it was
in the list. A message in the loaded list is now read from the account
that owns it, through resolveEmailBlobContext like attachment downloads.
getAttachment and getRaw keep reading from the signed-in account only.
Fixes #1273
2026-10-17 18:41:31 -04:00
Tobias Genannt
d6d3683b65
feat(plugins): add Combobox component to UI kit with host floating dropdown portal
...
- Add Combobox component supporting single and multiselect modes, search filtering, and clear button
- Implement floating dropdown bridge and host slot portal so dropdown renders cleanly outside plugin iframe
- Fix clear button and chip removals to not unexpectedly open the dropdown
- Add comprehensive unit tests covering Combobox options, clear behavior, multiselect, and bridge communication
2026-10-16 10:08:27 +02:00
Linus Rath
3d5c46bbcf
fix: make plugin sidebar rows as tall as folder rows on phones
2026-10-14 18:49:56 +02:00
Linus Rath
9affb1c9b9
fix: show plugins the message that was already open when they start
2026-10-14 18:49:22 +02:00
Linus Rath
c6ec58e5cc
fix: keep a compact info bar's text on one line next to its icon
2026-10-14 14:22:13 +02:00
Linus Rath
60fe6f159a
fix: keep plugin frames on the page's theme when it changes outside the theme store
2026-10-14 14:16:32 +02:00
Linus Rath
7464e4db93
fix: reset the browser's button look on kit components that are a button themselves
2026-10-14 14:08:41 +02:00
Linus Rath
d808f2d671
feat: add side panels, detail rows, colour dots and labelled check boxes to the plugin UI kit
2026-10-14 14:04:46 +02:00
Linus Rath
9d7dc4fc4e
fix: stop plugin frames from painting a white backdrop in dark themes
2026-10-14 14:02:40 +02:00
Linus Rath
19967fa3fb
feat: let plugins add options to the composer's Options menu as check items
2026-10-14 11:50:52 +02:00
Linus Rath
9d8f762b1d
feat: let a plugin title its sidebar section
2026-10-14 11:47:25 +02:00
Linus Rath
6098c1f928
feat: add a change preview to the plugin UI kit
2026-10-14 11:42:12 +02:00
Linus Rath
5d83d76436
feat: let plugins open a reply to the open message with text to start from
2026-10-14 11:37:51 +02:00
Linus Rath
cbeeca3ea5
feat: let plugins edit the message being written from composer buttons and menus
2026-10-14 11:35:00 +02:00
Linus Rath
1bd4f743a1
feat: give plugins the app's own controls and draw their dialogs like the app's dialogs
2026-10-14 11:10:14 +02:00
Linus Rath
607f1b2496
feat: let plugin notifications carry a link to the plugin's own server
2026-10-14 10:58:19 +02:00
Linus Rath
7f7f6bf949
fix: check the name, type and size of blobs plugins upload, and the email id of email.setKeyword and email.removeKeyword
2026-10-14 10:00:03 +02:00
Linus Rath
78f72e0c03
fix: give plugins settings that change after they started, let their frames copy to the clipboard and tell them the user's time zone
2026-10-14 09:01:03 +02:00
Linus Rath
c3cf0ddcff
feat: tell plugins whether the admin has set up their accounts and keys
2026-10-14 08:24:28 +02:00
Linus Rath
1e62fbbee1
fix: start each plugin once, so its hooks don't fire twice
2026-10-14 08:22:55 +02:00
Linus Rath
289e975d38
fix: give large attachment offloads time to finish and let cloud pickers write links into the text
2026-10-14 07:40:32 +02:00
Linus Rath
ae2130f5c8
feat: let a plugin ask a question on top of its own dialog
2026-10-14 06:47:53 +02:00
Linus Rath
929ccb8bee
fix: stream answers to proxied requests that send a body, and allow keyless services the admin sets up
2026-10-14 06:42:40 +02:00
Linus Rath
85c6cbcac8
feat: let plugins move messages between folders and archive them
2026-10-14 06:31:07 +02:00
Linus Rath
72be961383
feat: let plugins create repeating events under a stable id of their own
2026-10-14 06:29:15 +02:00
Linus Rath
1f89e89ce5
feat: let plugins refresh their message-list badges, which now need only the read permission
2026-10-14 06:26:10 +02:00
Linus Rath
49511dff38
feat: let plugins read their own non-secret admin settings without the admin permission
2026-10-14 06:23:10 +02:00
Linus Rath
e9b2ef3258
fix: let plugin frames use forms without letting them post anywhere
2026-10-14 06:19:12 +02:00
Linus Rath
8bf4df4513
feat: add a notifications panel for plugin notifications and app errors
2026-10-14 05:25:16 +02:00
Linus Rath
1ba53655e5
fix: let identity hooks stop a plugin's change, send notification clicks to plugins that show notifications, and mark reading mail as high risk
2026-10-14 04:37:24 +02:00
Linus Rath
8ad8f44e78
Merge branch 'feat/plugin-host-apis' into feat/plugin-system-audit
...
# Conflicts:
# lib/plugin-sandbox/permission-text.ts
# lib/plugin-sandbox/permissions.ts
# lib/protocol-handlers/mailto.ts
# locales/en/common.json
2026-10-14 04:34:14 +02:00
Linus Rath
5d9268c923
feat: let plugins add buttons, calendar day labels and pages, and use connected accounts from the sandbox
2026-10-14 04:31:43 +02:00
Linus Rath
3a83c00e00
feat: describe every place a plugin can show UI in one catalogue, with a permission for each area
2026-10-14 04:31:43 +02:00
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
60257bb732
feat: let users connect accounts for plugins in a dialog the plugin can't read, and disconnect them in settings
2026-10-14 04:14:13 +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
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
8ef7ec022f
fix: deliver a plugin OAuth callback only to the plugin that started the flow
2026-10-14 03:04:17 +02:00