mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 08:06:36 +00:00
e37621be5edfd2ec04f014ffe2498838655c152f
The whole email cache is one AsyncStorage row, and Android can't read a row over ~2 MB. The row held every window the user had paged through, in every folder of every account, stored the open folder twice (as `emails` and in `mailboxSnapshots`), kept a stale copy of the active account in `accountSnapshots`, and rows seeded from the offline body cache carried whole message bodies. Once it outgrew the limit the next cold start could not load it. - the active view is persisted the way an account switch tucks it away (`snapshotFromActive`), so the open folder is stored once, and `merge` rebuilds `emails` from it with `viewFromSnapshot` - `boundEmailCache` keeps at most 100 rows per folder (the largest page size, so the next refresh can still patch the window) and 500 overall, the open folder first; a window is cut to a prefix, which keeps its queryState valid, and a folder past the budget is dropped - body parts are stripped from persisted rows and the active account's stale entry is left out of `accountSnapshots` 500 typical rows serialise to about 0.3 MB.
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
95.5%
Kotlin
2.7%
JavaScript
0.9%
HTML
0.5%
Sieve
0.2%
Other
0.1%