mirror of
https://github.com/bulwarkmail/native.git
synced 2026-11-06 00:07:28 +00:00
018accd8651326479457145b7bf61b977ab778ad
Every change the app made (read, star, move, send, a draft save) came back as a push, and the push re-read the open folder and the whole folder list: `Mailbox/changes`, `Mailbox/get`, the shared accounts' `Mailbox/get`, `Email/queryChanges`, `Email/changes`, `Email/get` and `Thread/get`, often twice. One send cost about 10 requests. - `jmapClient.request` now logs the Email states each of our own `Email/set` (also the implicit one of `onSuccessUpdateEmail`), `Email/import` and `Email/copy` responses moved between, with what they created, patched and destroyed. - When a push reports an Email state that only our own writes led to from the state the open folder was read at, the store applies those writes to the rows (the optimistic updates mostly did already), moves the list's state on and skips the refresh. It still re-reads when anything else changed, when new mail was delivered, when a write adds a message to the folder or changes a keyword the list is sorted on, and when the folder's count shows a message it does not hold left. A push that overtakes its write's response waits for it briefly. - A folder push re-reads only the part of the folder list that changed: the own folders or the shared accounts', and nothing for a Mailbox state it already holds.
Bulwark Mobile
Beta - work in progress. Many features are unfinished or rough. Expect bugs, missing functionality, and breaking changes between releases. Do not rely on this for primary email yet.
React Native (Expo SDK 54) client for Bulwark Webmail - a JMAP-based mail, calendar, and contacts app.
What works today
- Sign in to any JMAP server (e.g. Stalwart)
- Multiple accounts
- Email list, threads, compose
- Calendar (basic)
- Contacts (basic)
- Push notifications via the Bulwark relay - FCM by default, or UnifiedPush (e.g. ntfy) for devices without Google Play services
- In-app sideload updates from GitHub Releases
What's missing or rough
- iOS builds, but push notifications and client certificates are Android-only so far
- S/MIME, plugins, themes - UI stubs only (filters & rules, the vacation responder and file storage are real implementations)
- Calendar editing is partial; contacts editing is basic
- No Play Store distribution yet (sideload APK from Releases); iOS ships via TestFlight
Run locally
npm install
npx expo start
Then press a for Android, i for iOS, or scan the QR with Expo Go.
For release APK builds and signing see docs/android-release.md. For iOS builds and TestFlight distribution see docs/ios-release.md.
License
AGPL-3.0-only. See LICENSE.
Languages
TypeScript
96%
Kotlin
2.1%
JavaScript
0.9%
Swift
0.4%
HTML
0.3%
Other
0.2%