mirror of
https://github.com/bulwarkmail/native.git
synced 2026-10-31 16:06:32 +00:00
2a3febcc7991cd7f2235704f2051d8571fcc5b8b
Stalwart 1.0 refuses series properties such as the organizer on a single occurrence unless they repeat the series' value, and refuses them inside a recurrence override on the base event. The event editor wrote the user's first address as organizerCalendarAddress on every save of an event with attendees, so editing one occurrence failed with "This property cannot be modified on a single occurrence." whenever the series was organized by someone else, under another alias or in another letter case. Removing every attendee from one occurrence failed the same way. - leave series keys and per-event metadata out of changes to one occurrence, as Stalwart's validate.rs lists them, and pointers at a participant's calendarAddress - write overrides on the base event as before (0.16.19 needs the organizer there) and, when the server refuses series keys inside them, repeat the write once without them and remember that - answer one occurrence through its synthetic id without the organizer - let the editor keep the organizer of an event: an invitation the user received is no longer rewritten with the user as organizer, and organizerCalendarAddress is only written for an event that has none - keep the SetError type on a refused event update 0.16.20 to 0.16.23 dropped these keys on synthetic ids anyway; the base-event override payload for older servers is unchanged.
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%