mirror of
https://github.com/bulwarkmail/native.git
synced 2026-11-02 00:06:23 +00:00
33e303e2488d3083d4a25bb81e9ff98fc85db663
Every open went to the network for the full message, even for a message the viewer had just shown, and the conversation fetch then downloaded every member's full body again, the opened one included. The pager's three panes each started their own detail and thread fetch, so one open from the Unified Inbox fetched the body twice and the thread twice. Messages and conversations now live in a shared cache (`lib/email-detail-cache`), keyed by server, login and JMAP account: - a held copy renders at once; bodies never change, so it is only checked, with a keywords/folders-only `Email/get`, when the account's Email state (from push or our own reads) moved on or the list row the message was opened from disagrees with it; - a copy in the offline cache is shown before anything goes out and is checked the same way; - a conversation is listed from its members' headers (`Thread/get` and list properties in one request) and bodies are downloaded only for the open cards, in one batched `Email/get`; - concurrent loads of the same message or thread share one request. The store's network-first `getEmailDetail` is gone; its offline-copy refresh moved into the cache.
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%