mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 16:06:32 +00:00
7187cab904bbbfc84058ffa77f87a303e2d88934
When another client moved a contact or an event out of every address book or calendar the device syncs while the device had an unsent edit of it, the download only noted it for dropping after the upload. Its shadow stayed at the old version while the stored state moved past the change, so the upload passed `ifInState` and resent whole maps built from the old shadow: a number or an occurrence added on the server meanwhile was lost. A full reconcile that found such an object did the same. The download now merges the new version into the dirty rows like any other change, so the upload builds on it, and the rows still go once it is accepted. A contact's collections are read from its shadow: SYNC1 lists only the selected books and is empty for a card that left them all, so such a contact was never dropped after its upload. The calendar planner cannot merge an event that is in no synced calendar yet; until it can, such an event waits on the device and is reported instead of overwriting the server. Checked with the real planners through `/changes` and through a full reconcile.
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.9%
Kotlin
2.1%
JavaScript
0.9%
Swift
0.4%
HTML
0.4%
Other
0.2%