Linus Rath
d60eb59575
fix: pad attachment preview overlays for the iOS PWA safe area #936
2026-08-31 21:03:08 +02:00
Linus Rath
47dac6421e
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-08-31 20:43:24 +02:00
Linus Rath
a69b3651fd
fix: render plain-text-only mail as text in the mobile thread view #489
2026-08-31 20:41:45 +02:00
Michael Richter
84617d6186
feat: OAuth handler for plugins; extended contacts and addressbook API
2026-08-31 09:55:06 +02:00
Linus Rath
b11cf4b1a5
feat: offer deleting a non-empty folder with its messages
2026-08-29 18:23:09 +02:00
Linus Rath
03b588096d
feat: filter advanced search by message size
2026-08-29 18:20:21 +02:00
Linus Rath
cc90903f05
feat: request delivery notifications and REQUIRETLS when sending
2026-08-29 18:16:52 +02:00
Linus Rath
e54d179f32
feat: surface CalendarEventNotification invitations and updates
2026-08-29 18:11:50 +02:00
Linus Rath
14cdb2f6ff
feat: organize invitations as the default ParticipantIdentity
2026-08-29 18:07:47 +02:00
Linus Rath
e8c594001d
feat: show attendee free/busy via Principal/getAvailability
2026-08-29 18:03:26 +02:00
Linus Rath
0b39e43a4d
feat: surface ShareNotification changes as toasts
2026-08-29 17:59:04 +02:00
Linus Rath
6e5aca60a9
feat: share mail folders with other users via mail:share
2026-08-29 17:53:54 +02:00
Linus Rath
b408b2597a
feat: highlight search hits with SearchSnippet/get
2026-08-29 17:47:23 +02:00
Linus Rath
5805a28e8c
feat: resolve pushes with Email/changes and Mailbox/changes deltas
2026-08-29 17:42:21 +02:00
Linus Rath
1807b2df6b
feat: allow setting an address book as default ( #924 )
2026-08-29 17:15:50 +02:00
Linus Rath
39dcc6b219
fix: invalidate persisted update status after an upgrade
2026-08-29 12:46:39 +02:00
Linus Rath
1e2409f8b9
fix: keep basePath when normalizing Chinese Accept-Language
2026-08-29 12:35:38 +02:00
Linus Rath
42f736b96d
Merge pull request #932 from kchuang1015/feat/zh-tw-locale
...
feat(i18n): add Traditional Chinese (Taiwan) locale
2026-08-29 12:32:02 +02:00
Linus Rath
4fe5701b3b
feat: default sidebar apps for all users #931
2026-08-29 12:31:17 +02:00
Linus Rath
d800689924
feat: use Stalwart synthetic ids for recurring occurrences #140
2026-08-29 11:03:48 +02:00
Kuan-Chieh Huang
f1736b63c9
fix(i18n): preserve locale cookie precedence
2026-08-29 13:04:25 +08:00
Kuan-Chieh Huang
9fab1d1f4a
fix(i18n): normalize Chinese proxy locale detection
2026-08-29 11:44:40 +08:00
Linus Rath
19756e4337
fix: pin resolved IP for stored custom JMAP endpoints and branding URLs
2026-08-26 23:02:19 +02:00
Linus Rath
3288589e52
fix: pin resolved IP at connect time to block DNS-rebinding SSRF (GHSA-24w9-8r42-8jwm)
2026-08-26 22:11:06 +02:00
Linus Rath
4bf3a3f8bb
feat: re-sync existing push registrations on app start
2026-08-26 21:56:58 +02:00
Linus Rath
a1ed482a6e
test: type expected emailPush fixture so urgency matches EmailPushConfig
2026-08-26 21:47:39 +02:00
Linus Rath
63fa2d2d93
fix: stop notifying for spam by using the JMAP emailPush delivery filter
2026-08-26 21:45:12 +02:00
Linus Rath
ccf199f7ed
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-08-26 19:29:48 +02:00
Linus Rath
67be0446e3
fix: forward every request header from the proxy so Next 16.3's RSC hash check stops 307-looping navigations #919
2026-08-26 19:28:31 +02:00
Stefan Hildebrandt
ced81835ef
fix(calendar): drop default SKIP=OMIT from recurrence rules (DAVx5 sync)
...
Recurring events defaulted skip:"omit"+rscale:"gregorian" on every rule,
which Stalwart serialises into the CalDAV RRULE as RSCALE=GREGORIAN;SKIP=OMIT.
DAVx5 rejects that ("Invalid recurrence rule"), breaking Android sync. Those
RFC 7529 fields only matter for non-Gregorian scales / invalid-date handling,
so stop emitting them for plain Gregorian rules.
- lib/recurrence-rule.ts: createRecurrenceRule() helper with no skip/rscale.
- CalendarRecurrenceRule.rscale/skip are now optional.
- event-modal + recurrence-editor build rules via the helper.
- demo fixture cleaned; unit test asserts no skip/rscale.
Closes #805 .
2026-08-25 21:13:34 +02:00
Linus Rath
67f1790299
fix: close IPv6 transition-address and redirect bypasses in endpoint guard
2026-08-25 20:50:35 +02:00
Linus Rath
a15af72296
fix: resolve shared-account identity and email on reschedule; isolate per-account scheduled-list failures
2026-08-25 20:26:48 +02:00
Linus Rath
1305d13a77
Merge pull request #874 from rotterp/fix/scheduled-send-shared-accounts
...
fix: route scheduled sends to the account that owns the submission
2026-08-25 20:23:58 +02:00
Linus Rath
99daa53c8c
feat: search suggestions with recent searches and contact autocomplete #845
2026-08-25 20:09:18 +02:00
Linus Rath
55ef780342
fix: cap live SSE streams per tab so many logins can't starve JMAP requests #702
2026-08-25 20:03:29 +02:00
Linus Rath
0b20f60579
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-08-25 19:52:02 +02:00
Linus Rath
af5fac6baa
fix: flip $junk/$notjunk keywords on spam and not-spam #850
2026-08-25 19:36:52 +02:00
Linus Rath
3472bc0419
fix: parse calendar invitations in directly viewed shared folders against the folder owner #867
2026-08-25 19:36:04 +02:00
Linus Rath
987ed75aaf
Merge pull request #861 from dealerweb/fix/fresh-compose-tab-title
...
fix: keep the fresh-compose tab title clear of the selected email subject
2026-08-25 19:26:54 +02:00
Linus Rath
1faa6f6900
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-08-25 19:22:50 +02:00
Linus Rath
3ef2b45fb4
feat: configurable message-list ordering #718
2026-08-25 19:20:48 +02:00
Linus Rath
9f32fc879b
feat: add custom time zone setting overriding browser detection #755
2026-08-25 19:18:16 +02:00
Linus Rath
46ccd2267d
fix: pin supported-calendar-component-set on created calendars #760
2026-08-25 19:16:20 +02:00
Linus Rath
8cd5c00b06
fix: keep the folder tree when a refresh burst hits maxConcurrentRequests #780
2026-08-25 19:09:21 +02:00
Linus Rath
8a7f8b0493
fix: gate first-touch calendar/contacts requests to stop duplicate default calendars #907
...
Stalwart lazily creates an account's default calendar on the first request
that touches it. Bulwark's login fires Calendar/get and CalendarEvent/query
concurrently, and on multi-node servers each node can create its own default,
leaving users with two identical "Personal" calendars. Hold later calendar and
address-book requests per account until the first one settles.
2026-08-25 19:07:01 +02:00
Linus Rath
e838794133
Merge pull request #895 from romanvru/feat/upload-progress
...
Real byte progress for attachment uploads, stock and plugin-offloaded
2026-08-25 18:55:07 +02:00
Linus Rath
a29cf27ff8
fix: route multi-account email lookups and invitation parsing by source account #847
2026-08-25 18:50:50 +02:00
Linus Rath
5109aa059a
fix: decode percent-encoded FileNode names from WebDAV-created nodes #869
2026-08-25 18:47:22 +02:00
Linus Rath
f189e0bab6
fix: refresh account display name from the Stalwart principal on login/restore/switch #900
...
Stalwart seeds the default identity name from the principal "Full name" only
once, and addAccount never rewrote displayName after first login, so an admin
rename never showed up in Bulwark. Read the live name via x:Account/get
through the passthrough (falling back to the identity name elsewhere) and
prefer the synced registry name in account settings.
2026-08-25 18:45:44 +02:00
Linus Rath
c65da9d76a
Merge branch 'main' of https://github.com/bulwarkmail/webmail
2026-08-25 18:40:00 +02:00