mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 08:06:36 +00:00
5ddc2df64b52db37ffba656f01cb3ba002f2c202
Every background push kept the app awake for the full 30 s timeout of the BulwarkPushTask headless task, however quickly the task was done. AppRegistry reports a finished task through the native HeadlessJsTaskSupport module, and React Native 0.81 registers that module only for the old bridge (CoreModulesPackage); the bridgeless runtime's CoreReactPackage leaves it out. JS could never say it was done, so the service, or the job, and its wake lock waited for the timeout. BulwarkHeadlessJsTaskSupportModule provides the module under the same name when the app runs bridgeless. The push path also leaked a wake lock now and then. startHeadlessTask called HeadlessJsTaskService.acquireWakeLockNow on the FCM worker thread while the service took the same static lock on the main thread. The method is not thread-safe, so both could create a lock, and the one that was overwritten stayed held. The FCM thread now takes its own wake lock, timed at 10 s, and the service drops it as soon as it holds React Native's. Measured on the API 35 emulator with the R8 release build: - push handled by the job: 30,000 ms before, 75-155 ms now - push handled by the service: the service ran 31 s before, it is gone within a second now - `com.facebook.react.i` wake lock still held 5 s after a push: 2 of 4 pushes before, 0 of 8 now
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%