Skip to content

[Feature]: Add UnifiedPush support for Android notifications #48

Description

@PatBlankdeCas

Problem / Motivation

It would be great if Bulwark Mobile supported UnifiedPush as an alternative to Firebase Cloud Messaging (FCM) on Android.

Currently, push notifications depend on FCM. This means notifications do not work on devices without Google Play Services, such as GrapheneOS installations where sandboxed Google Play is not installed.

Motivation

Bulwark is an excellent fit for self-hosted mail setups such as Stalwart, but requiring FCM for Android push introduces a Google dependency into an otherwise self-hostable stack.

Supporting UnifiedPush would enable setups like:

Stalwart → Bulwark Relay → UnifiedPush → Bulwark Mobile

This would allow users to use distributors such as ntfy (including self-hosted instances) and receive reliable background notifications without Google Play Services.

Possible implementation

Since Bulwark already uses the relay between JMAP push subscriptions and FCM, UnifiedPush could potentially be implemented as an additional delivery backend rather than replacing FCM.

For example:

  • FCM → existing/default Android push
  • UnifiedPush → Google-free Android push
  • WebPush → existing web/PWA push

The actual mail synchronization could continue to happen through JMAP after receiving the wake-up notification, so the UnifiedPush message would only need to trigger the existing sync mechanism.

A provider abstraction on Android could also allow FCM and UnifiedPush to coexist, with the user selecting the preferred push provider.

Why this would be useful

  • Notifications on GrapheneOS without sandboxed Google Play
  • Support for other de-Googled Android distributions
  • Fully self-hostable notification path
  • No mandatory Firebase/Google dependency
  • Fits particularly well with Bulwark's self-hosted/Stalwart use case

Thanks for considering it!

Proposed Solution

Add UnifiedPush as an alternative push notification provider on Android while keeping FCM as the default/available option.

Ideally, Bulwark could detect an available UnifiedPush distributor and allow the user to select UnifiedPush instead of FCM. The existing JMAP push/relay architecture could remain unchanged, with UnifiedPush providing the final delivery step to the Android client.

This would allow setups such as:

Stalwart → Bulwark Relay → UnifiedPush (e.g. ntfy) → Bulwark Mobile

After receiving the push notification, Bulwark could use its existing JMAP synchronization logic to fetch the actual changes, just as it does with FCM today.

This would provide reliable background notifications on GrapheneOS and other Google-free Android systems without requiring Google Play Services.

Alternatives Considered

No response

Feature Area

None

Mockups / Examples

No response

Additional Context

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions