Coffey Labs
f2aaa9cea4
Merge pull request #324 from Coffey-Labs/node-26
...
Move CI, the image and the Node types to 26 together
2026-09-10 08:50:27 -07:00
Coffey Labs
7d9d5b005c
Merge pull request #323 from Coffey-Labs/hono-node-server-2
...
Take @hono/node-server to 2.1.1
2026-09-10 08:40:20 -07:00
Coffey Labs
91dda348bc
Merge pull request #318 from Coffey-Labs/dependabot/npm_and_yarn/typescript-7.0.2
...
Bump typescript from 5.9.3 to 7.0.2
2026-09-10 08:19:18 -07:00
Coffey Labs
136c754bcd
Merge pull request #322 from Coffey-Labs/vite-8
...
Move the build to vite 8, and chunk the way rolldown wants
2026-09-10 08:14:33 -07:00
Coffey Labs
aa0d594666
Merge pull request #321 from Coffey-Labs/tsconfig-relative-paths
...
Point the @ alias at a relative path, and drop baseUrl
2026-09-10 08:14:25 -07:00
Coffey Labs
d90a1cef93
Merge pull request #314 from Coffey-Labs/dependabot/npm_and_yarn/minor-and-patch-897b8e30fb
...
Bump the minor-and-patch group across 1 directory with 4 updates
2026-09-10 07:02:31 -07:00
Coffey Labs
829c5ab14d
Merge pull request #316 from Coffey-Labs/dependabot/github_actions/actions-819308dff6
...
Bump the actions group with 7 updates
2026-09-10 07:02:23 -07:00
Coffey Labs
a2ae868f28
Merge pull request #320 from Coffey-Labs/deps-vitest-4
...
Take vitest to 4.1.11, and stop two suites leaking their spies
2026-09-10 06:51:36 -07:00
Coffey Labs
9418d3f935
Merge pull request #312 from Coffey-Labs/deps-hono-4.13.7-dependabot-config
...
Take hono to 4.13.7 and let Dependabot open the next one
2026-09-10 06:25:00 -07:00
Coffey Labs
38fb78a095
Merge pull request #311 from Coffey-Labs/theme-nested-light-panels
...
Neutralise light panels nested inside dark painted cards
2026-09-08 21:28:52 -07:00
Coffey Labs
a389b9e8c5
Merge pull request #309 from Coffey-Labs/sw-must-not-be-cached
...
Never serve the service worker from a cache
2026-09-07 23:04:59 -07:00
Coffey Labs
1592f38515
Merge pull request #308 from Coffey-Labs/notification-actions
...
Archive and mark read from the notification itself
2026-09-07 22:59:14 -07:00
Coffey Labs
f42fb014c8
Merge pull request #307 from Coffey-Labs/share-target
...
Be somewhere a phone can share to
2026-09-07 22:46:24 -07:00
Coffey Labs
f39d6ac30c
Merge pull request #306 from Coffey-Labs/mobile-share-and-app-badge
...
Badge the installed icon, and share to the phone rather than to Downloads
2026-09-07 22:32:39 -07:00
Coffey Labs
b65732ea04
Merge pull request #304 from Coffey-Labs/settings-ownership-wording
...
Say who owns settings.json, not just where it lives
2026-09-07 18:07:30 -07:00
Coffey Labs
79d891c623
Merge pull request #303 from Coffey-Labs/contributor-notes-in-contributing
...
Move the translation and UI-verification notes into CONTRIBUTING
2026-09-07 16:49:29 -07:00
Coffey Labs
b56ffdf268
Merge pull request #302 from Coffey-Labs/claude-md-scope
...
Limit CLAUDE.md to translations and verifying UI work
2026-09-07 16:43:35 -07:00
Coffey Labs
35935f2d3c
Merge pull request #301 from Coffey-Labs/calendar-reimport-updates
...
Update a re-imported event rather than skipping it
2026-09-07 13:07:29 -07:00
Coffey Labs
7825097333
Merge pull request #300 from Coffey-Labs/fix-mobile-dialog-behind-drawer
...
Raise dialogs and the composer over the mobile drawer
2026-09-06 21:42:30 -07:00
Coffey Labs
0e05bee69a
Merge pull request #299 from Coffey-Labs/stalwart-version-catchup
...
Say 0.16.21 where the docs still said 0.16.20
2026-09-06 17:13:09 -07:00
Coffey Labs
1a955d64df
Merge pull request #298 from Coffey-Labs/docs-catchup
...
Catch the README and FEATURES up with the themes and 0.16.21
2026-09-06 17:04:58 -07:00
Coffey Labs
fdfb83b254
Merge pull request #297 from Coffey-Labs/i18n-fill-gaps
...
Translate the eight strings that were still falling back
2026-09-06 16:56:45 -07:00
Coffey Labs
17a24fe880
Merge pull request #296 from Coffey-Labs/palettes-twelve
...
Six more palettes, taking the picker to twelve
2026-09-06 16:56:29 -07:00
Coffey Labs
a875274a8e
Merge pull request #295 from Coffey-Labs/palette-credit-generic
...
Stop naming every palette in the credit line
2026-09-06 16:20:39 -07:00
Coffey Labs
a35f360952
Merge pull request #294 from Coffey-Labs/theme-styled-mail
...
Force the theme onto mail that styles itself
2026-09-06 16:04:55 -07:00
Coffey Labs
c66308e4bb
Merge pull request #293 from Coffey-Labs/mock-0-16-21
...
Follow Stalwart 0.16.21 in the mock
2026-09-06 15:48:06 -07:00
Coffey Labs
db7b103a08
Merge pull request #292 from Coffey-Labs/push-subscribe
...
Push by subscription, and a latency fix for the compressor
2026-09-06 14:56:48 -07:00
Coffey Labs
3fd0d0cfa6
Merge pull request #289 from Coffey-Labs/footprint
...
Smaller footprint: three times the tabs, a third of the image, a budget per session
2026-09-06 00:46:25 -07:00
Coffey Labs
5356e603fe
Compress our own responses ( #288 )
...
* Compress our own responses
The bundle went out uncompressed unless a proxy in front did the work: 933 KB
on the wire where 311 KB does, on every first load. Both example proxy configs
compress, but that only helps deployments that copied them, and the default
should not depend on reading the examples.
Hono's middleware, with the proxy routes held back. `/api/blob`, `/api/image`,
`/api/ics` and `/api/upload` forward somebody else's bytes under a
content-length copied from upstream, and issue #76 was a silent truncation
caused by exactly that header disagreeing with its body. Re-encoding them
would be safe in principle -- the length is dropped and the response goes out
chunked -- but they carry attachments and images that are already compressed,
so there is nothing to win and a scar to respect.
`/api/events` is listed with them even though Hono already skips
text/event-stream by content type, so that changing the push route's type
cannot quietly start buffering the stream.
`/api/health` is excluded for the opposite reason: at 47 bytes gzip made it 73.
Hono's size threshold cannot catch that on its own, because it only applies
when a response carries a content-length and `c.json()` does not set one. The
other JSON routes stay compressed -- a JMAP response has just as unknown a
length and can run to hundreds of kilobytes.
Verified against the built image: assets come back gzipped with Vary set,
662 KB to 209 KB; /api/events still returns text/event-stream with no
content-encoding and delivered a StateChange while mail was being written;
health is 47 bytes either way. No user-visible strings, so no catalogue work.
* Word the comment for either side compressing
The app compresses its own responses as of the follow-on change, so a note
saying the bundle ships uncompressed would be wrong as soon as that lands.
nginx passes through what the upstream already encoded rather than re-encoding
it -- verified single-encoded with both layers active -- so the directives are
correct either way and the comment now says so without asserting which side
does the work.
* Test compression against a fixture, not the web build
The compression tests asked for `/` and asserted a gzipped 200. That passes
locally, where `web/dist` is lying around from an earlier build, and fails in
CI, which runs `npm test` before `npm run build`: with no bundle the shell
route serves the "web build not found" fallback, which is short, plain text and
correctly uncompressed. The failure read as compression being broken when the
tests were simply depending on a build step that had not run.
They now build their own static root in a temp directory and point STATIC_DIR
at it, in a separate file so the environment is set before the app module is
imported. Checked by moving web/dist aside and running the suite the way CI
does.
2026-09-05 23:41:29 -07:00
Coffey Labs
fafeee481e
Merge pull request #287 from Coffey-Labs/nginx-example-compression
...
Compress the bundle in the nginx example
2026-09-05 23:24:26 -07:00
Coffey Labs
7d6dfe4581
Merge pull request #286 from Coffey-Labs/smime-signature-verification
...
Check S/MIME signatures, and remember who signed
2026-09-05 01:46:31 -07:00
Coffey Labs
7aa2e374d4
Merge pull request #285 from Coffey-Labs/revive-public-key-management
...
Write down what Stalwart's x:PublicKey registry does, and withdraw the key manager
2026-09-05 01:16:06 -07:00
Coffey Labs
e9349863e8
Merge pull request #284 from Coffey-Labs/add-funding-config
...
Add GitHub Sponsors funding config
2026-09-05 00:23:24 -07:00
Coffey Labs
1f9c17ad18
Merge pull request #283 from Coffey-Labs/roadmap-smime-reasoning
...
Say why S/MIME rather than OpenPGP, and why neither is urgent
2026-09-04 13:31:13 -07:00
Coffey Labs
eca8468d84
Merge pull request #282 from Coffey-Labs/docs-release-cadence
...
Say near the top that latest lags main, and by how long
2026-09-04 13:14:27 -07:00
Coffey Labs
53a44d7d18
Merge pull request #281 from Coffey-Labs/docs-contributing-branch-rules
...
Say in CONTRIBUTING that main is protected, and that strings need nine catalogues
2026-09-04 12:54:59 -07:00
Coffey Labs
fcbd8f6449
Merge pull request #280 from Coffey-Labs/claude-md-i18n-gotcha
...
Write down the plural-key gotcha, and how to tell it happened
2026-09-04 12:31:09 -07:00
Coffey Labs
0c9a15a691
Merge pull request #278 from Coffey-Labs/contacts-bulk-delete
...
Select contacts, and empty an address book
2026-09-04 12:19:18 -07:00
Coffey Labs
f201b09e90
Merge pull request #276 from Coffey-Labs/reply-to-my-own-message
...
Ask the folder, not just the identity list, whether a message was mine
2026-09-04 08:13:37 -07:00
Coffey Labs
4d23cef511
Merge pull request #274 from Coffey-Labs/ldif-dedupe-on-dn
...
Match an LDIF re-import on the entry's dn
2026-09-04 07:54:42 -07:00
Coffey Labs
1f8c12e29e
Write the S/MIME position down ( #273 )
...
It was backlogged in conversation on 2026-08-27 and recorded nowhere in
the repository -- not in ROADMAP, FEATURES, KNOWN-ISSUES, the README or
the docs. That is the state a plan is in just before it is forgotten,
and it is also the state that lets the same probing get done twice.
The entry carries what the earlier work established against a live
0.16.19, including the two findings that contradict the documentation:
encryptionAtRest is a field on x:AccountSettings rather than an object of
its own, and ordinary users can write their own x:PublicKey entries
despite the permissions table listing every sysPublicKey permission as
admin-only. Dated, and marked not re-run since the 0.16.20 upgrade, the
way KNOWN-ISSUES dates its entries.
PR #67 is named as the starting point: a working public-key manager,
closed unmerged, none of which is in the tree today.
The caveat that matters most is last, because it is the one a user
cannot undo: turning encryption-at-rest off does not decrypt what is
already encrypted.
2026-09-03 23:25:44 -07:00
Coffey Labs
17d98748c4
Merge pull request #272 from Coffey-Labs/i18n-missing-plurals
...
Add seven plural forms no catalogue ever had
2026-09-03 14:47:00 -07:00
Coffey Labs
71827a2d04
Merge pull request #270 from Coffey-Labs/i18n-ukrainian-rule-sentences
...
Translate the rule sentences into Ukrainian
2026-09-03 14:41:45 -07:00
Coffey Labs
5dd0a56732
Merge pull request #269 from Coffey-Labs/i18n-russian-rule-sentences
...
Translate the rule sentences into Russian
2026-09-03 14:41:39 -07:00
Coffey Labs
b55c8b13bc
Merge pull request #268 from Coffey-Labs/i18n-chinese-rule-sentences
...
Translate the rule sentences into Simplified Chinese
2026-09-03 14:41:35 -07:00
Coffey Labs
0cf9b81444
Merge pull request #267 from Coffey-Labs/i18n-japanese-rule-sentences
...
Translate the rule sentences into Japanese
2026-09-03 14:41:31 -07:00
Coffey Labs
8386444ac7
Merge pull request #266 from Coffey-Labs/i18n-portuguese-rule-sentences
...
Translate the rule sentences into Brazilian Portuguese
2026-09-03 14:41:26 -07:00
Coffey Labs
e1ae97139c
Merge pull request #265 from Coffey-Labs/i18n-dutch-rule-sentences
...
Translate the rule sentences into Dutch
2026-09-03 14:41:21 -07:00
Coffey Labs
503eaf17ec
Merge pull request #264 from Coffey-Labs/i18n-french-rule-sentences
...
Translate the rule sentences into French
2026-09-03 14:41:16 -07:00
Coffey Labs
1e02d9ebba
Merge pull request #263 from Coffey-Labs/i18n-spanish-rule-sentences
...
Translate the rule sentences into Spanish
2026-09-03 14:41:11 -07:00
Coffey Labs
d40dbf04b8
Merge pull request #262 from Coffey-Labs/i18n-german-rule-sentences
...
Translate the rule sentences into German
2026-09-03 14:41:06 -07:00
Coffey Labs
2a9e18f04c
Merge pull request #271 from Coffey-Labs/fix/shortcuts-after-checkbox
...
Keep shortcuts working after a checkbox is clicked
2026-09-03 14:41:00 -07:00
Coffey Labs
4d89f5e672
Merge pull request #261 from Coffey-Labs/i18n-describe-rules
...
Build the two rule descriptions as sentences, not fragments
2026-09-03 14:40:55 -07:00
Coffey Labs
22f39a4507
Merge pull request #259 from Coffey-Labs/i18n-third-pass
...
Third pass: the strings libraries build and views render raw
2026-09-03 14:01:53 -07:00
Coffey Labs
bf60fe6157
Merge pull request #258 from Coffey-Labs/i18n-second-pass
...
Second pass: four dialogs that were never wrapped
2026-09-03 14:01:49 -07:00
Coffey Labs
8d4063e921
Merge pull request #257 from Coffey-Labs/i18n-chinese-catch-up
...
Catch the Simplified Chinese catalogue up with what shipped after it
2026-09-03 14:01:44 -07:00
Coffey Labs
ea6c098057
Merge pull request #256 from Coffey-Labs/i18n-ukrainian-catch-up
...
Catch the Ukrainian catalogue up with what shipped after it
2026-09-03 14:01:38 -07:00
Coffey Labs
f7cbdb2e7a
Merge pull request #255 from Coffey-Labs/i18n-russian-catch-up
...
Catch the Russian catalogue up with what shipped after it
2026-09-03 14:01:33 -07:00
Coffey Labs
379623614a
Merge pull request #254 from Coffey-Labs/i18n-japanese-catch-up
...
Catch the Japanese catalogue up with what shipped after it
2026-09-03 14:01:27 -07:00
Coffey Labs
662385c6da
Merge pull request #253 from Coffey-Labs/i18n-portuguese-catch-up
...
Catch the Brazilian Portuguese catalogue up with what shipped after it
2026-09-03 14:01:21 -07:00
Coffey Labs
0fb4d1e964
Merge pull request #252 from Coffey-Labs/i18n-dutch-catch-up
...
Catch the Dutch catalogue up with what shipped after it
2026-09-03 14:01:16 -07:00
Coffey Labs
898815eaca
Merge pull request #251 from Coffey-Labs/i18n-french-catch-up
...
Catch the French catalogue up with what shipped after it
2026-09-03 14:01:09 -07:00
Coffey Labs
6ac5ee45dd
Merge pull request #250 from Coffey-Labs/i18n-spanish-catch-up
...
Catch the Spanish catalogue up with what shipped after it
2026-09-03 14:01:04 -07:00
Coffey Labs
f500261697
Merge pull request #249 from Coffey-Labs/i18n-german-catch-up
...
Catch the German catalogue up with what shipped after it
2026-09-03 14:00:59 -07:00
Coffey Labs
7a67a2c1c3
Merge pull request #248 from Coffey-Labs/i18n-render-untranslated-lists
...
Translate three lists the code was rendering raw
2026-09-03 14:00:54 -07:00
Coffey Labs
3ffee1224f
Merge pull request #246 from Coffey-Labs/ci/prune-old-images
...
Prune old images, and keep every release
2026-09-02 23:50:13 -07:00
Coffey Labs
60a4647a43
Merge pull request #245 from Coffey-Labs/ci/scheduled-releases
...
Cut a release once a week, and only when there is something in it
2026-09-02 23:45:41 -07:00
Coffey Labs
e1c85cf82e
Merge pull request #244 from Coffey-Labs/ci/publish-container-image
...
Publish the image the docs have been telling people to pull
2026-09-02 23:30:07 -07:00
Coffey Labs
93856de143
Merge pull request #243 from Coffey-Labs/fix/login-app-name
...
Call the instance what it calls itself, on the page that matters most
2026-09-02 15:27:20 -07:00
Coffey Labs
3582ad116e
Merge pull request #242 from Coffey-Labs/feat/contacts-update-on-reimport
...
Update a contact on re-import rather than skipping it
2026-09-02 15:17:27 -07:00
Coffey Labs
af0e8b2be2
Merge pull request #241 from Coffey-Labs/feat/domain-server-mapping
...
Choose the Stalwart by the domain somebody signs in with
2026-09-02 14:33:14 -07:00
Coffey Labs
2a41a31bb9
Merge pull request #240 from Coffey-Labs/fix/upstream-outage-lockout
...
Do not spend login attempts on an outage nobody caused
2026-09-02 14:14:24 -07:00
Coffey Labs
f6f6ce0b5e
Merge pull request #237 from Coffey-Labs/feat/headers-show-original
...
Make "Show original" in the headers dialog the action, not a description
2026-09-02 13:23:01 -07:00
Coffey Labs
45f1309d06
Merge pull request #235 from Coffey-Labs/feat/go-to-folder
...
Go to a folder by name, with g then o
2026-09-02 13:07:52 -07:00
Coffey Labs
a8cf8ce3d7
Merge pull request #234 from Coffey-Labs/feat/ldif-duplicate-report
...
Say how much an LDIF re-import duplicated, without acting on it
2026-09-02 12:51:10 -07:00
Coffey Labs
0d5975d427
Merge pull request #232 from Coffey-Labs/docs/policy-example
...
Ship an example settings policy, and name the variables in .env.example
2026-09-02 11:23:15 -07:00
Coffey Labs
cff7f6c11b
Merge pull request #231 from Coffey-Labs/feat/policy-change-once
...
Apply installation policy changes once each, per account
2026-09-02 11:03:50 -07:00
Coffey Labs
6821d6a93f
Merge pull request #230 from Coffey-Labs/feat/installation-defaults
...
Let an installation seed and lock user settings
2026-09-02 10:52:58 -07:00
Coffey Labs
a01e1874d8
Merge pull request #229 from Coffey-Labs/fix/export-vtimezone
...
Define the zones an export names, instead of only naming them
2026-09-02 10:29:45 -07:00
Coffey Labs
5f35428ddb
Merge pull request #228 from Coffey-Labs/feat/vcard-uid-dedupe
...
Skip vCards on re-import that the address book already has
2026-09-02 09:36:35 -07:00
Coffey Labs
85289b0c34
Merge pull request #227 from Coffey-Labs/feat/calendar-ics-export
...
Export a calendar as an iCAL file
2026-09-02 09:24:00 -07:00
Coffey Labs
cb69115be1
Merge pull request #226 from Coffey-Labs/feat/contacts-menu-parity
...
Give the address books the menus the calendars have
2026-09-02 09:08:40 -07:00
Coffey Labs
a61fe28523
Merge pull request #225 from Coffey-Labs/feat/skip-duplicate-uids-on-import
...
Skip events on re-import that the calendar already has
2026-09-02 08:57:36 -07:00
Coffey Labs
f1a8f162cf
Merge pull request #221 from Coffey-Labs/feat/set-folder-role
...
Set the Archive role from ihasmail, rather than describing it
2026-09-02 08:41:09 -07:00
Coffey Labs
8e9259638d
Merge pull request #220 from Coffey-Labs/fix/archive-role-message
...
Say the Archive folder needs the role, not the name
2026-09-02 08:10:10 -07:00
Coffey Labs
3f33b61369
Merge pull request #219 from Coffey-Labs/fix/unsaved-dialog-emphasis
...
Highlight saving, not discarding, on the unsaved-changes guard
2026-09-02 07:50:05 -07:00
Coffey Labs
6e1ac42d5a
Merge pull request #218 from Coffey-Labs/fix/contact-import-batching
...
Set contact cards in batches the server will take
2026-09-02 07:50:00 -07:00
Coffey Labs
6b8ac393c9
Merge pull request #215 from Coffey-Labs/fix/ical-import-batching
...
Import an iCal file in batches the server will take
2026-09-02 06:43:20 -07:00
Coffey Labs
b0edce1d9b
Merge pull request #214 from Coffey-Labs/fix/drag-day-across-timezones
...
Move an event by the days the hand moved it, not to the date dropped on
2026-09-02 01:11:53 -07:00
Coffey Labs
4570df6eab
Merge pull request #213 from Coffey-Labs/fix/push-verification-cache-key
...
Name the push verification entry absolutely, from both sides
2026-09-02 01:11:32 -07:00
Coffey Labs
8962065782
Merge pull request #212 from Coffey-Labs/fix/attach-size-limits
...
Apply the upload limit only where something is uploaded
2026-09-02 01:11:11 -07:00
Coffey Labs
13a6bcd66b
Merge pull request #211 from Coffey-Labs/feat/ical-subscriptions
...
Subscribe to a calendar published at a URL
2026-09-02 00:54:55 -07:00
Coffey Labs
b4ee545856
Merge pull request #210 from Coffey-Labs/feat/drag-reschedule
...
Drag an event to move it, and its edge to resize it
2026-09-02 00:42:47 -07:00
Coffey Labs
0ac5f78789
Merge pull request #209 from Coffey-Labs/feat/palettes
...
Six palettes, each with a light half and a dark one
2026-09-02 00:23:34 -07:00
Coffey Labs
72742ef30a
Merge pull request #208 from Coffey-Labs/feat/list-sort-order
...
Let the message list be sorted by something other than the date
2026-09-02 00:18:27 -07:00
Coffey Labs
6c7c6d19b3
Merge pull request #206 from Coffey-Labs/feat/birthday-calendar
...
Show birthdays from the address book as a calendar
2026-09-01 23:35:46 -07:00
Coffey Labs
c5be74fe57
Merge pull request #205 from Coffey-Labs/feat/tnef
...
Open winmail.dat
2026-09-01 23:35:26 -07:00
Coffey Labs
60d275f38b
Merge pull request #204 from Coffey-Labs/feat/nested-labels
...
Nest labels, and let each one say how prominent it is
2026-09-01 23:35:04 -07:00
Coffey Labs
9cace7c90c
Merge pull request #203 from Coffey-Labs/feat/select-all-in-folder
...
Select a whole folder, not just the rows that are loaded
2026-09-01 23:24:14 -07:00
Coffey Labs
d300107be0
Merge pull request #202 from Coffey-Labs/feat/sender-link-warnings
...
Warn about outside senders, large sends and links that mislead
2026-09-01 22:48:12 -07:00