Linus Rath
65eef4b2b8
fix: persist htmlBody in drafts to preserve rich formatting #236
2026-04-30 15:24:09 +02:00
Linus Rath
25de7d996c
feat: add tables to composer #236
2026-04-30 15:16:51 +02:00
Linus Rath
7188abc9bc
fix: set In-Reply-To and References on replies #234
2026-04-30 01:25:04 +02:00
Linus Rath
4a91cd0c44
style: drop iframe border-radius
2026-04-29 20:26:40 +02:00
Linus Rath
6abf8a5dd8
fix: detect <style> tag for padding
2026-04-29 20:25:24 +02:00
Linus Rath
3667c842c6
fix: light-mode override to body content only
2026-04-29 20:17:59 +02:00
Linus Rath
b64721b43c
fix: pad bare HTML emails like plain-text mails
2026-04-29 20:09:00 +02:00
Linus Rath
6b5ca2cb89
fix: smooth out body load, prevent flicker
2026-04-29 20:03:58 +02:00
Linus Rath
0f6e4f995f
fix: prevent iframe flash on Load images or Trust sender
2026-04-29 18:29:48 +02:00
Linus Rath
0b6fdcabfb
fix: update connect-src to include http protocol in development mode
2026-04-29 13:55:38 +02:00
Linus Rath
fc49fe0687
chore: update version to 1.5.3
2026-04-28 18:43:09 +02:00
Linus Rath
419382d25d
feat: add contacts feature gate and update telemetry payload
2026-04-28 17:54:11 +02:00
Linus Rath
8935b81f12
chore: update version to 1.5.3
2026-04-28 17:34:06 +02:00
Linus Rath
ec581ce53e
feat: update Docker configuration
2026-04-28 17:27:47 +02:00
Linus Rath
81d8465a79
fix: block telemetry endpoint from pointing at internal hosts
2026-04-28 17:16:30 +02:00
Linus Rath
0f3b506604
feat: add extension preview page and API for detailed extension information
2026-04-28 15:55:23 +02:00
Linus Rath
1b84547211
feat: add Theme API v2 with token compiler, skin slot
2026-04-28 15:39:13 +02:00
Linus Rath
dafc8ace3c
feat: track unique logins
2026-04-28 08:19:46 +02:00
Linus Rath
2c419cc4fe
feat: add right-click context menu on empty calendar space
2026-04-28 01:56:15 +02:00
Linus Rath
90acf181f3
fix: harden plugin config, TOTP token exchange, and branding file serving
2026-04-28 01:44:37 +02:00
Linus Rath
54af07f2af
feat: add anonymous instance telemetry
...
Adds a once-per-day heartbeat that lets the project see how many
instances run Bulwark, on what platforms, with what features enabled,
and roughly how many accounts they have. No email addresses, hostnames,
IPs, or any end-user data are ever sent.
- lib/telemetry: state file, payload builder, jittered scheduler,
instance_id persistence at <data-dir>/.telemetry-id (delete to reset)
- app/api/admin/telemetry: admin API for status / set-consent /
set-endpoint / send-now (all audit-logged)
- app/admin/telemetry: settings page with status, JSON payload preview,
endpoint editor, send-now button, link to the privacy page
- instrumentation.node.ts: starts the scheduler on boot
Default state is enabled. The first heartbeat fires 1 hour after boot
so an admin who installs and immediately disables produces zero pings.
Disable via the settings UI, BULWARK_TELEMETRY=off (or
BULWARK_TELEMETRY_DISABLED=1), or by clearing the endpoint.
Account counts are bucketed (1, 2-5, 6-10, 11-50, 51-200, 201+) so a
small instance can't be re-identified by exact size. The /.telemetry-id
file can be deleted to mint a fresh instance_id.
Receiving collector is open source at bulwarkmail/dashboard. Self-host
your own and point at it via BULWARK_TELEMETRY_URL. Full schema,
retention (90d raw → aggregates), and lawful basis are documented at
bulwarkmail.org/docs/legal/privacy/telemetry.
2026-04-28 01:28:41 +02:00
Linus Rath
68f1fabc4b
fix: batch shortcuts act on multi-selection when present #228
2026-04-28 00:04:29 +02:00
Linus Rath
27451807db
chore: update version to 1.5.2
2026-04-27 22:45:23 +02:00
Linus Rath
55099bdcbb
fix: disable Stalwart admin check when custom JMAP endpoints allowed
2026-04-27 22:41:51 +02:00
Linus Rath
71eb720065
chore: update version to 1.5.2
2026-04-27 22:30:32 +02:00
Linus Rath
8abb0c8717
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-04-27 22:24:59 +02:00
Linus Rath
3043639d2d
fix: validate URLs before outbound fetch
2026-04-27 22:23:39 +02:00
Linus Rath
e9b3eacbb7
fix: prevent drag creation on touch events in useTimeGridInteractions
2026-04-27 13:37:34 +02:00
Linus Rath
3e1de10213
feat: add JMAP sharing for calendars and address books
2026-04-26 20:10:04 +02:00
Linus Rath
aadf56c27b
fix: emit RFC 9553 name kinds and decode QUOTED-PRINTABLE in vCard import #224 #187
2026-04-26 02:47:19 +02:00
Linus Rath
9f8588eadc
fix: hide preview line in compact density to match settings preview ( #223 )
2026-04-26 02:12:28 +02:00
Linus Rath
d657aec391
feat: add support for right-side composer sidebar and update related types
2026-04-25 19:45:45 +02:00
Linus Rath and Copilot
e683c90404
fix: implement inline matcher for Next.js proxy and remove unnecessary config
...
Co-authored-by: Copilot <copilot@github.com >
2026-04-25 19:25:15 +02:00
Linus Rath
cfb4a23c9d
fix: remove unnecessary runtime config for Node.js in proxy settings
2026-04-25 18:54:15 +02:00
Linus Rath
fe1d4861bb
feat: composer-sidebar slot + plugin-declared frame-src origins
2026-04-25 18:40:54 +02:00
Linus Rath
5aa9b1d5f9
fix: honor SESSION_SECRET_FILE in dashboard warning check #222
2026-04-25 17:21:17 +02:00
Linus Rath
0913dbd3e4
chore: update version to 1.5.1
2026-04-25 16:34:45 +02:00
Linus Rath
29197ea355
feat: replace folder prompt() calls with proper modal dialog
2026-04-25 16:30:18 +02:00
Linus Rath
4788e8a91a
feat: add right-click context menu to mail folders sidebar
2026-04-25 16:26:05 +02:00
Linus Rath
b80678b00f
feat: add 'Today' button to desktop calendar toolbar
2026-04-25 03:11:16 +02:00
Linus Rath
4f7c9c332b
feat: enhance OAuth auto-setup with dialog and validation for origin and issuer URLs
2026-04-25 02:53:12 +02:00
Linus Rath
da103ff06f
feat: implement OAuth auto-setup functionality for Stalwart integration
2026-04-25 01:37:18 +02:00
Linus Rath
2111c77870
fix: restore admin panel after Stalwart v0.16 REST API removal
2026-04-25 01:13:17 +02:00
Linus Rath
e5083ec1df
fix: restore admin panel after Stalwart v0.16 REST API removal
2026-04-25 01:12:33 +02:00
Linus Rath
df8d04e233
fix: restore broken viewer toolbar actions and improve mobile menu #220
2026-04-24 19:31:38 +02:00
Linus Rath
081e8a0310
feat: add setting to show avatars in junk folder, disabled by default
2026-04-23 18:23:48 +02:00
Linus Rath
6c3529b368
fix: stop flicker on background folder refresh
2026-04-23 18:06:40 +02:00
Linus Rath
077a4f03a7
fix: preserve search/filter on batch move and archive
2026-04-23 18:01:21 +02:00
Linus Rath
b04dfaf252
fix: preserve search/filter when moving emails via drag-drop
2026-04-23 16:37:17 +02:00
Linus Rath
ec5593f567
Merge branch 'dev' into main
2026-04-23 00:10:22 +02:00
Linus Rath
c30c38a7af
chore: update version to 1.5.0
2026-04-23 00:07:34 +02:00
Linus Rath
7494fc1776
chore: update version to 1.5.0
2026-04-22 23:49:44 +02:00
Linus Rath
16fe92d2e9
chore: update version to 1.5.0
2026-04-22 23:31:32 +02:00
Linus Rath
3544e6a9e7
chore: bump dependencies to latest compatible versions
2026-04-22 23:03:05 +02:00
Linus Rath
dd1f3e11e6
fix: retry mailbox fetch on first login to handle lazy provisioning #217
2026-04-22 22:45:49 +02:00
Linus Rath
6503482b55
feat: support resizing events from the top edge
2026-04-22 21:14:28 +02:00
Linus Rath
cab57f6cd7
feat: add timezone-aware formatting for event start times and update utcEnd on duration change
2026-04-22 21:05:41 +02:00
Linus Rath
27f4fbdce4
feat: optimize layout of overlapping events in calendar
2026-04-22 20:53:04 +02:00
Linus Rath
39a228b20e
feat: streamline mobile email viewer header layout
2026-04-22 20:50:12 +02:00
Linus Rath
4b069808d6
feat: add isMobile prop to calendar views and time grid interactions
2026-04-22 20:37:00 +02:00
Linus Rath
468851ff25
feat: show full folder path in move/drop toast
2026-04-22 00:14:49 +02:00
Linus Rath
b7374570c8
feat: implement bulk email moving functionality in email store
2026-04-22 00:10:40 +02:00
Linus Rath
3c9fa5dc25
feat: implement batch archiving of emails
2026-04-22 00:05:38 +02:00
Linus Rath
3ade1c6473
fix: update mailbox retrieval logic in archive handling to use fresh state
2026-04-22 00:00:43 +02:00
Linus Rath
1810a474a2
fix: enhance error message for mailbox creation failure
2026-04-22 00:00:01 +02:00
Linus Rath
40982bc37b
fix: align hover styles and selection-toggle target with focused item
2026-04-21 23:50:55 +02:00
Linus Rath
76f6149841
feat: add setting to toggle alphabetical grouping in contacts list
2026-04-21 23:22:18 +02:00
Linus Rath
7d6a3c8c76
feat: group contacts by first letter with sticky section headers
2026-04-21 23:15:13 +02:00
Linus Rath
361ad49f5f
fix: read matchMedia synchronously on client to prevent layout flicker
2026-04-21 23:02:21 +02:00
Linus Rath
f9aa5cbaee
fix: skip checkAuth on route change when already authenticated
2026-04-21 22:54:02 +02:00
Linus Rath
3f36045990
feat: reorganize settings into 6 groups with clearer tabs
2026-04-21 22:22:02 +02:00
Linus Rath
9a44babcf1
feat: add collapsible details to calendar invitation banner and update sanitization config for iframe rendering
2026-04-21 21:21:42 +02:00
Linus Rath
f032758303
feat: revamp contact detail, filters, and add photo/print/duplicate
2026-04-21 21:16:54 +02:00
Linus Rath
92c7f74420
feat: add right-click context menu to contacts
2026-04-21 19:33:00 +02:00
Linus Rath
c2e4518cfa
feat: add account addition button to navigation rail
2026-04-21 19:20:50 +02:00
Linus Rath
00f33afdf9
feat: add contact activity component with recent emails and upcoming events
2026-04-21 19:18:36 +02:00
Linus Rath
e566cfe687
feat: add API Keys management and IP allowlist for App Passwords
2026-04-21 18:59:47 +02:00
Linus Rath
6b7c849332
refactor: remove Stalwart API URL configuration
2026-04-21 17:50:18 +02:00
Linus Rath
30c4afb977
i18n: add missing translation keys
2026-04-21 17:42:52 +02:00
Linus Rath
1f60671886
fix: clean up unused imports and improve TOTP QR code rendering
2026-04-21 17:30:00 +02:00
Linus Rath
794001fdbd
feat: migrate Stalwart management API to JMAP x: methods (0.16)
...
Drops the 0.15 REST management API and routes all account/auth/crypto/
principal operations through Stalwart 0.16's schema-driven JMAP
endpoint via a single passthrough (/api/account/stalwart/jmap).
- New client helper `stalwartJmap` + typed `requireResult`
- account-security-store rewritten against x:AccountPassword, x:AppPassword,
x:AccountSettings, x:Account (with currentSecret for TOTP ops)
- Client-side TOTP setup via `otpauth`; server-generated app password
secrets shown once on create
- Admin check switched to /api/account permissions
(sysAccountQuery/sysTenantQuery/sysSystemSettingsGet)
- Removed sieve vacation-overwrite workaround (fixed upstream #1251 )
- Deleted old REST routes, StalwartClient, stale tests; added new
tests for passthrough + store
2026-04-21 17:29:23 +02:00
Linus Rath
9ad2facad3
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-04-21 14:12:03 +02:00
Linus Rath
89d8282846
fix: include original attachments when forwarding an email #214
2026-04-21 13:58:02 +02:00
Linus Rath
24c53e5ce7
fix: apply archive context-menu action to all selected emails # 212
2026-04-20 14:35:56 +02:00
Linus Rath
aa7f886795
refactor: remove deprecated push notification API routes and related logic
2026-04-20 12:41:38 +02:00
Linus Rath
00dec8c5a0
fix: correct regex escape for hyphen in FCM token validation
2026-04-20 12:08:41 +02:00
Linus Rath
578e60c0bc
feat: nevermind, migrate push notification handling from UnifiedPush to FCM
2026-04-20 12:06:30 +02:00
Linus Rath
8b21851353
feat: migrate to UnifiedPush
2026-04-20 10:54:26 +02:00
Linus Rath
15006086d2
feat: implement JMAP push notification handling and subscription management
2026-04-20 08:26:09 +02:00
Linus Rath
bc3b923945
fix: apply mobile toolbar spacing fix to email viewer action bar
2026-04-19 17:59:58 +02:00
Linus Rath
76ba9e5f85
fix: retry session fetch with Authorization after redirect strips it #210
2026-04-19 16:40:55 +02:00
Linus Rath
44eb5fced2
fix: stop birthday calendar from re-showing after manual hide #204
2026-04-19 15:04:27 +02:00
Linus Rath
172d8267ef
fix: persist typed calendar participant on save without requiring Enter #206
2026-04-19 13:47:17 +02:00
Linus Rath
f162f1e3d4
feat: refresh JMAP on reload gestures, fix mobile bottom nav spacing
2026-04-19 13:43:44 +02:00
Linus Rath
6fa0029d0b
feat: add right-click context menu on calendar events
2026-04-18 13:46:49 +02:00
Linus Rath
440a4e919a
Revert "perf: make root HTML cacheable by dropping per-request CSP nonce"
...
This reverts commit 522bf6a019 .
2026-04-18 13:10:42 +02:00
Linus Rath
b8f39198e1
fix: allow blob: in frame-src CSP for attachment previews #209
2026-04-18 13:04:25 +02:00
Linus Rath
966bbe3957
fix: add public JavaScript files to ESLint ignore list
2026-04-18 13:01:52 +02:00
Linus Rath
522bf6a019
perf: make root HTML cacheable by dropping per-request CSP nonce
2026-04-18 13:01:12 +02:00
Linus Rath
1689315c3a
feat: add setting to hide inline images from attachment list
2026-04-18 01:07:34 +02:00