Linus Rath
42ab246cb9
feat: port recipient parsing, reply-identity, sub-addressing, signature, quote-header and template helpers; drop the dead submission api
2026-08-29 18:12:15 +02:00
Linus Rath
490355c65e
feat: list logged-in accounts, storage quota and auth method in account settings
2026-08-29 18:11:13 +02:00
Linus Rath
58e3ef6827
fix: query events by date window, scan tasks separately and stop re-probing denied shared accounts ( #907 )
2026-08-29 18:05:56 +02:00
Linus Rath
4bebf70482
feat: sign in with OAuth (PKCE) directly against the mail server and revoke refresh tokens on sign-out
2026-08-29 18:05:16 +02:00
Linus Rath
431facef0b
feat: add update severity, quiet rate-limit backoff and lazy checksum fetch to the updater
2026-08-29 18:04:21 +02:00
Linus Rath
6f747db858
fix: resolve redirects in JS for client-certificate requests and pass blob deadlines to the native path ( #627 )
2026-08-29 18:03:24 +02:00
Linus Rath
69bedf0b26
feat: manage public keys and encryption at rest through the Stalwart API
2026-08-29 18:03:23 +02:00
Linus Rath
a0ce9258cd
feat: files API reads modified dates, decodes WebDAV names, copies/moves nodes and streams uploads ( #700 , #869 , #563 )
2026-08-29 17:59:44 +02:00
Linus Rath
3fd5f10afe
fix: gate event editing on calendar rights and keep read-only calendars out of the pickers ( #762 )
2026-08-29 17:57:54 +02:00
Linus Rath
edc26ce1ca
fix: reconnect live updates after network blips, token refresh, account switch and app resume
2026-08-29 17:57:33 +02:00
Linus Rath
032732cea1
fix: check the account-level Stalwart capability and keep the stored password in step after a change ( #47 )
2026-08-29 17:57:33 +02:00
Linus Rath
00faceb25f
fix: subscribe to EmailDelivery only, use the relay's email ids and route pushes per account ( #45 )
2026-08-29 17:53:53 +02:00
Linus Rath
5dc40706fa
fix: send invitations with a server-scheduled organizer and match RSVPs against identities and aliases ( #731 )
2026-08-29 17:52:26 +02:00
Linus Rath
26a34d5900
feat: list shared address books, gate first-touch contact loads and add recent-recipient autocomplete data ( #907 )
2026-08-29 17:50:44 +02:00
Linus Rath
580e010b33
fix: check ContactCard/set results, re-fetch created cards, assign UIDs and paginate contact queries ( #644 )
2026-08-29 17:50:44 +02:00
Linus Rath
ccbe67c1bc
fix: check JMAP method errors in every mail call, split requests to server limits and file sent mail through Drafts ( #188 , #234 , #850 )
2026-08-29 17:49:23 +02:00
Linus Rath
58a6f45c15
fix: save all-day events with the right length, a time zone and explicit nulls for cleared fields ( #805 )
2026-08-29 17:45:43 +02:00
Linus Rath
0b1c240802
fix: harden the JMAP client with request deadlines, retries, rate-limit state and method-error helpers ( #702 , #780 , #907 )
2026-08-29 17:42:32 +02:00
Linus Rath
be82bfe814
feat: show shared mailboxes (group accounts) in the sidebar #37
2026-08-02 20:17:29 +02:00
Linus Rath
802e1e1c71
fix: send-time editor readback, base-view restore after search, Stalwart recurrence #9 , #10 , #13
2026-07-22 22:17:40 +02:00
arnauda-gh
58c642f27b
fix(auth): coalesce concurrent token refresh requests
...
Coalesces concurrent OAuth token refreshes using a Promise-based lock map keyed by the refresh token. This prevents the app from firing duplicate refresh requests with the same expired refresh token, which causes replay revocations on OIDC providers (e.g. Authelia/Hydra) enforcing strict rotation.
Also optimizes persistRefreshedTokens and ensureFreshCredentials to prevent redundant SecureStore/disk writes when concurrent operations complete.
Fixes #14
2026-07-13 09:05:45 +02:00
Linus Rath
643d704b74
fix: namespace shared calendar ids to avoid collisions with own calendars
2026-06-14 14:46:15 +02:00
Linus Rath
e6d47b6a16
feat: shared calendars, custom recurrence editor, and file sharing
2026-06-12 17:15:50 +02:00
Linus Rath
5d47f47c8e
feat: add Sieve filters, account security (TOTP), outbox, and EML import
2026-05-30 15:33:41 +02:00
Linus Rath
d616943c25
feat: add unified inbox, scheduled send, iCal import/subscriptions, tasks, and contact tagging/import
2026-05-29 15:34:39 +02:00
Linus Rath
bf20c0af58
feat: implement OAuth token handling and webmail-mediated login flow
2026-05-19 00:45:42 +02:00
Linus Rath
086d398058
feat: implement webmail-mediated login flow and remove OAuth dependencies
2026-05-19 00:05:51 +02:00
Linus Rath
f71f219187
feat: implement OAuth login flow and enhance authentication handling
2026-05-18 23:32:50 +02:00
Linus Rath
ac234f288e
Refactor email store to support incremental sync
2026-05-18 20:05:03 +02:00
Linus Rath
1858d08dd0
feat: enhance notification handling with accountId support and improve file management functions
2026-05-14 12:57:03 +02:00
Linus Rath
7e34ba42ef
feat: implement in-memory upload with uploadBytes function and integrate into createFolder
2026-05-08 20:04:25 +02:00
Linus Rath
2a3b1f90dc
feat: add upload, preview, download, selection, folder creation
2026-05-08 10:24:36 +02:00
Linus Rath
71ff8930a2
fix: apply unread/starred filters in mailbox queries
2026-05-08 00:50:27 +02:00
Linus Rath
29b06a3a4f
security: fix push SSE breakage, harden APK updates and email rendering
2026-05-05 22:06:07 +02:00
Linus Rath
6d5195d9fa
feat: implement offline mail caching and sync functionality
2026-05-03 18:40:01 +02:00
Linus Rath
c7ea4d757c
feat: implement client certificate support with secure fetch and alias management
2026-05-03 17:33:54 +02:00
Linus Rath
abbbff2afa
feat: implement network recovery for authenticated users and enhance error handling in auth store
2026-05-03 17:15:17 +02:00
Linus Rath
2409a51952
refactor: streamline authorization header access and improve blob upload handling
2026-05-03 16:04:01 +02:00
Linus Rath
a656a6b56a
feat: enhance email composition and management features
2026-05-03 15:32:59 +02:00
Linus Rath
c37256c54e
feat: enhance attachment handling in ComposeScreen with file picker and updated UI options
2026-05-02 14:43:45 +02:00
Linus Rath
2090480bf4
feat: implement undo functionality for email actions with snackbar notification
2026-05-02 14:31:50 +02:00
Linus Rath
329c8a2f0b
feat: add swipe actions for pinning and moving emails; enhance archive functionality
2026-05-02 14:27:15 +02:00
Linus Rath
d5a336519a
feat: add rich text editor component and enhance email thread screen with attachment handling
...
- Implemented a new RichTextEditor component for composing and editing rich text emails.
- Enhanced EmailThreadScreen to support downloading attachments with loading indicators.
- Added functionality to expand/collapse attachment list in EmailThreadScreen.
- Created utility functions for building initial HTML for email composition and converting HTML to plain text.
- Added tests for HTML composition and conversion utilities.
2026-04-27 17:14:22 +02:00
Linus Rath
346a71de84
feat: enhance email composition with markdown support and attachment handling
...
- Implement markdown formatting in the email composer, allowing users to use bold, italic, lists, and blockquotes.
- Add functionality to upload and manage attachments, including inline images.
- Introduce a new compose-format utility for converting markdown to HTML.
- Update the ComposeScreen to handle attachments and formatting actions.
- Refactor ContactDetailScreen and EmailListScreen for improved code clarity and performance.
- Add tests for markdown formatting and selection wrapping functionalities.
2026-04-27 13:55:16 +02:00
Linus Rath
a8a0d475db
chore: update readme
2026-04-26 04:57:10 +02:00
Linus Rath
b274d4b76b
feat: implement update management system with update banner and settings
2026-04-26 04:50:03 +02:00
Linus Rath
365ffefd33
chore: add Android release CI and sync local work
...
CI:
- .github/workflows/release-android.yml builds APK on release publish
and via workflow_dispatch, attaches it to the release.
- android/app/build.gradle: optional release signingConfig driven by
Gradle properties (ANDROID_KEYSTORE_BASE64 secret etc.); falls back
to the debug keystore when no secrets are set.
- .gitignore: untrack /android so the runner can build directly;
ignore build outputs (build/, .cxx/), Metro/Expo dev logs, scratch.
Track android/ sources including BulwarkFcmPackage.kt and
google-services.json (Firebase Android keys are public per Google's
docs and intended to ship in the APK).
JS sync: push notifications + background task, vacation responder
(api + store), contact activity component, search utilities, settings
polish, calendar/contacts/email store and screen tweaks.
Tooling: scripts/poll-reload.mjs — Windows polling-watcher that hits
Metro /reload on file change (workaround for unreliable fs.watch
without Watchman).
2026-04-26 04:12:08 +02:00
Linus Rath and Claude Opus 4.7
5e99bb36b2
Sync local work: multi-account, calendar/contacts, compose, perf
...
Contents accumulated in the working tree since the initial commit:
- Multi-account: account-store, per-accountId credential scoping, account
switcher in sidebar, add-account flow on LoginScreen
- Calendar: recurring event expansion, EventModal/EventDetailSheet, week/
agenda views, calendar sidebar, participant input, per-day event index
for O(1) cell lookup (MonthView/WeekView/AgendaView)
- Contacts: contact detail/form/group screens, vCard import/export,
avatar utils, contact picker sheet, sidebar drawer
- Email: compose screen, thread screen, sender avatar, EmailBodyView with
CID image resolution and external-content policy
- Infrastructure: navigation types, mailbox tree helper, settings store
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-04-20 01:21:50 +02:00
Linus Rath
11b9b86acd
Initial commit: React Native JMAP webmail app
2026-03-30 00:49:22 +02:00