docs: Add guide for push notifications #2244

Merged
Jade merged 27 commits from stratself/continuwuity:stratself/docs-push-notifications into main 2026-10-12 09:23:45 +00:00
Member

This PR adds a page for push notifications under /guides. The main thing it covers are how push works in Matrix, UnifiedPush usage and selfhosting, and some troubleshooting of common push issues.

I took the liberty to include various aspects of push not pertaining to the server itself, because it was commonly asked in our chatrooms and are quite important for all matrix users. Kind of like livekit.

Previews are at https://muc.muoi.me/guides/push.html

Closes #2136

Pull request checklist:

  • This pull request targets the main branch, and the branch is named something other than
    main.
  • I have written an appropriate pull request title and my description is clear.
  • I understand I am responsible for the contents of this pull request.
  • I have followed the contributing guidelines:
This PR adds a page for push notifications under /guides. The main thing it covers are how push works in Matrix, UnifiedPush usage and selfhosting, and some troubleshooting of common push issues. I took the liberty to include various aspects of push not pertaining to the server itself, because it was commonly asked in our chatrooms and are quite important for all matrix users. Kind of like livekit. Previews are at https://muc.muoi.me/guides/push.html Closes #2136 **Pull request checklist:** <!-- You need to complete these before your PR can be considered. If you aren't sure about some, feel free to ask for clarification in #dev:continuwuity.org. --> - [x] This pull request targets the `main` branch, and the branch is named something other than `main`. - [x] I have written an appropriate pull request title and my description is clear. - [x] I understand I am responsible for the contents of this pull request. - I have followed the [contributing guidelines][c1]: - [x] My contribution follows the [code style][c2], if applicable. - [x] I ran [pre-commit checks][c1pc] before opening/drafting this pull request. - [x] I have [tested my contribution][c1t] (or proof-read it for documentation-only changes) myself, if applicable. This includes ensuring code compiles. - [x] My commit messages follow the [commit message format][c1cm] and are descriptive. <!-- Notes on these requirements: - While not required, we encourage you to sign your commits with GPG or SSH to attest the authenticity of your changes. - While we allow LLM-assisted contributions, we do not appreciate contributions that are low quality, which is typical of machine-generated contributions that have not had a lot of love and care from a human. Please do not open a PR if all you have done is asked ChatGPT to tidy up the codebase with a +-100,000 diff. - In the case of code style violations, reviewers may leave review comments/change requests indicating what the ideal change would look like. For example, a reviewer may suggest you lower a log level, or use `match` instead of `if/else` etc. - In the case of code style violations, pre-commit check failures, minor things like typos/spelling errors, and in some cases commit format violations, reviewers may modify your branch directly, typically by making changes and adding a commit. Particularly in the latter case, a reviewer may rebase your commits to squash "spammy" ones (like "fix", "fix", "actually fix"), and reword commit messages that don't satisfy the format. - Pull requests MUST pass the `Checks` CI workflows to be capable of being merged. This can only be bypassed in exceptional circumstances. If your CI flakes, let us know in matrix:r/dev:continuwuity.org. - Pull requests have to be based on the latest `main` commit before being merged. If the main branch changes while you're making your changes, you should make sure you rebase on main before opening a PR. Your branch will be rebased on main before it is merged if it has fallen behind. - We typically only do fast-forward merges, so your entire commit log will be included. Once in main, it's difficult to get out cleanly, so put on your best dress, smile for the cameras! --> [c1]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md [c2]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/docs/development/code_style.mdx [c1pc]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#pre-commit-checks [c1t]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#running-tests-locally [c1cm]: https://forgejo.ellis.link/continuwuation/continuwuity/src/branch/main/CONTRIBUTING.md#commit-messages
stratself force-pushed stratself/docs-push-notifications from 50418896c8
Some checks failed
Auto Labeler / Apply labels based on changed files (pull_request_target) Successful in 4s
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m28s
to fba109127a
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 7s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m42s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m41s
2026-09-13 18:23:45 +00:00
Compare
stratself force-pushed stratself/docs-push-notifications from fba109127a
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 7s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m42s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m41s
to 6a59c75c1d
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Check changed files (pull_request) Successful in 5s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m24s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m18s
2026-09-14 05:39:25 +00:00
Compare
thetayloredman left a comment

i was @room-pinged for this, so, bad 👎

i was @room-pinged for this, so, bad :-1:
@ -18,5 +18,10 @@
"type": "file",
"name": "oidc",
"label": "Delegated authentication"
},
Author
Member

May introduce conflicts against removal of oidc page in #2234. Note to resolve manually before merge.

May introduce conflicts against removal of oidc page in #2234. Note to resolve manually before merge.
Member

Nice guide! Reading https://muc.muoi.me/guides/push.html#other-unifiedpush-distributors I would like to add a section with sth like:

Nextcloud as UnifiedPush provider


Edit from @stratself: Included uppush + NextPush stack

Nice guide! Reading https://muc.muoi.me/guides/push.html#other-unifiedpush-distributors I would like to add a section with sth like: ### Nextcloud as UnifiedPush provider - [Nextcloud app as push provider](https://apps.nextcloud.com/apps/notify_push) - [Nextpush Android distributor](https://unifiedpush.org/users/distributors/nextpush/) - Setup Guide https://arnowelzel.de/en/client-push-for- --- Edit from @stratself: Included uppush + NextPush stack
stratself force-pushed stratself/docs-push-notifications from c8bb9b40d5
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m9s
to 2f092273ce
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m29s
2026-09-14 10:14:11 +00:00
Compare
stratself force-pushed stratself/docs-push-notifications from c9594dd115
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m14s
to 63799dcdb6
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m28s
2026-09-14 12:28:55 +00:00
Compare
stratself force-pushed stratself/docs-push-notifications from 63799dcdb6
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m28s
to 5bb286061d
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m14s
2026-09-14 12:34:05 +00:00
Compare
Henry-Hiles requested changes 2026-09-14 18:55:12 +00:00
Dismissed
@ -0,0 +55,4 @@
## Correct output: {"unifiedpush":{"gateway":"matrix"}}
```
Continuwuity is working on a Web Push implementation following the works of [MSC4174]. This push method allows sending end-to-end-encrypted payloads directly towards the push provider, bypassing the need for a push gateway. Developments of this feature can be tracked in [#2122][pr-2122].
Member

s/Developments/Development

`s/Developments/Development`
stratself marked this conversation as resolved
@ -0,0 +62,4 @@
## UnifiedPush
[UnifiedPush][unifiedpush] is a common, open notifications system supported by many Matrix clients on Android. Using the same push gateway mechanism as other push services, it requires no additional support from the homeserver side. Below are notes for some known UnifiedPush distributors.
Member

I don't think this makes it very clear that UnifiedPush also works on Linux.

I don't think this makes it very clear that UnifiedPush also works on Linux.
Author
Member

Added Linux to supported platforms and fixed wordings

Added Linux to supported platforms and fixed wordings
Henry-Hiles marked this conversation as resolved
@ -0,0 +65,4 @@
[UnifiedPush][unifiedpush] is a common, open notifications system supported by many Matrix clients on Android. Using the same push gateway mechanism as other push services, it requires no additional support from the homeserver side. Below are notes for some known UnifiedPush distributors.
:::info UP-Example
The [UP-Example] app can be used to test and debug your UnifiedPush installation.
Member

Is it worth mentioning that there's also a troubleshooting app for Linux? https://flathub.org/en/apps/org.unifiedpush.Troubleshooter

Is it worth mentioning that there's also a troubleshooting app for Linux? https://flathub.org/en/apps/org.unifiedpush.Troubleshooter
Author
Member

Thank you, I didn't know this one exists

Thank you, I didn't know this one exists
stratself marked this conversation as resolved
@ -0,0 +130,4 @@
This is likely an issue with one's _push rules_, which can be configured within the Matrix clients. Continuwuity also provides an [`!admin users reset-push-rules`](../reference/admin/users#admin-users-reset-push-rules) command, which restores the rules to the default of notifying for every message.
Otherwise, if you find Continuwuity not sending push notifications according to the spec, feel free to discuss in the development room and open an issue.
Member

I'd prefer to replace in the development room and open an issue. with in our [support room](https://matrix.to/#/#continuwuity:continuwuity.org?via=continuwuity.org&via=ellis.link&via=explodie.org&via=matrix.org), or open an issue.

I'd prefer to replace `in the development room and open an issue.` with `in our [support room](https://matrix.to/#/#continuwuity:continuwuity.org?via=continuwuity.org&via=ellis.link&via=explodie.org&via=matrix.org), or open an issue.`
stratself marked this conversation as resolved
stratself force-pushed stratself/docs-push-notifications from 5bb286061d
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m14s
to f186e24f56
All checks were successful
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 9s
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m14s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m41s
2026-09-15 07:11:07 +00:00
Compare
stratself force-pushed stratself/docs-push-notifications from f186e24f56
All checks were successful
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 9s
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m14s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m41s
to 2c9b97197e
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 9s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m15s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m23s
2026-09-16 17:39:48 +00:00
Compare
Henry-Hiles approved these changes 2026-09-17 18:15:04 +00:00
Dismissed
stratself force-pushed stratself/docs-push-notifications from 1cb292018f
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Check changed files (pull_request) Successful in 7s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m33s
to 9746d9c0b4
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 10s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m20s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m47s
2026-09-19 06:27:41 +00:00
Compare
stratself changed title from docs: Add guide for push notifications to WIP: docs: Add guide for push notifications 2026-09-21 18:45:22 +00:00
stratself left a comment

Requesting changes on self

Requesting changes on self
@ -0,0 +126,4 @@
[NextPush Android]: https://codeberg.org/NextPush/nextpush-android
## Troubleshooting
Author
Member

Add note that issues may exist between any two component of the push system

Add note that issues may exist between any two component of the push system
stratself marked this conversation as resolved
@ -0,0 +130,4 @@
### Push notifications not making sounds/not being sent
This is likely an issue with one's _push rules_, which can be configured within the Matrix clients. Continuwuity also provides an [`!admin users reset-push-rules`](../reference/admin/users#admin-users-reset-push-rules) command, which restores the rules to the default of notifying for every message.
Author
Member

Also caused by https://dontkillmyapp.com. Tell people to enable background permissions

Also caused by https://dontkillmyapp.com. Tell people to enable background permissions
stratself marked this conversation as resolved
@ -0,0 +143,4 @@
WARN push{user_id="@user:example.com" pushkey="very-long-string-of-letters" events=1}:send_push_notice:send_notice:send_request: conduwuit_service::pusher: Could not send request to pusher https//push.example.com: error sending request for url (https://push.example.com/_matrix/push/v1/notify)
```
Then, your server is most likely sending push requests to too many invalid targets.
Author
Member

Caused by both expired pushers and/or connectivity issues between server and gateway

Caused by both expired pushers and/or connectivity issues between server and gateway
stratself marked this conversation as resolved
stratself force-pushed stratself/docs-push-notifications from 4657229517
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 6s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m31s
to 570597f1a5
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 5s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 14s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m10s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m24s
2026-09-23 09:24:04 +00:00
Compare
@ -0,0 +1,191 @@
import { Tab, Tabs } from '@rspress/core/theme';
# Push notifications
Author
Member

TODO: now #2122 is merged, write docs for Web Push itself

Done.

TODO: now #2122 is merged, write docs for Web Push itself Done.
stratself marked this conversation as resolved
* Explains both push mechanisms
* Add graphics and update excalidraw
* Smaller changes and fixes
docs(push): Add caveat on locally-hosted gateways/providers
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m37s
a0a2829297
stratself changed title from WIP: docs: Add guide for push notifications to docs: Add guide for push notifications 2026-09-24 07:27:24 +00:00
fix(docs): Fix excalidraw file so prek doesn't complain
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Check changed files (pull_request) Successful in 9s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m37s
300931303e
Author
Member

@eleboucher review

@eleboucher review
Henry-Hiles requested changes 2026-09-24 14:19:47 +00:00
Dismissed
Henry-Hiles left a comment

Otherwise looks good :)

Otherwise looks good :)
@ -0,0 +162,4 @@
This is likely an issue with one's _push rules_, which determines what events are shown to users as notifications. Check your push rules in the clients' notifications settings and tweak accordingly. Continuwuity also provides an [`!admin users reset-push-rules`](../reference/admin/users#admin-users-reset-push-rules) command, which restores the rules to the default of notifying for every message.
Another potential reason may be that background services for push are being frequently terminated by your operating system, a [well-known problem][dontkillmyapp] with many Android-based devices. To fix this, follow your operating system's instructions to allow your Push App (and sometimes, your Client App as well) to be exempt from background restrictions.
Member

and sometimes, your Client App as well

Should never be needed. I don't know of any Android clients that poll for notifs instead of using push notifs.

> and sometimes, your Client App as well Should never be needed. I don't know of any Android clients that poll for notifs instead of using push notifs.
stratself marked this conversation as resolved
Member

Could this also be rebased so CI succeeds?

Could this also be rebased so CI succeeds?
stratself force-pushed stratself/docs-push-notifications from 37b13f5452
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 6s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Has been cancelled
to 8ce6a3747a
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 12s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m11s
2026-09-24 16:50:57 +00:00
Compare
stratself force-pushed stratself/docs-push-notifications from 8ce6a3747a
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 12s
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m11s
to f37f1e74c3
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 14s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m22s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 2m48s
2026-09-25 07:54:27 +00:00
Compare
stratself force-pushed stratself/docs-push-notifications from 1b2e54123f
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Pre-commit & Formatting (pull_request) Has been cancelled
to 37607aee2e
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 7s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m16s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m54s
2026-09-26 15:41:03 +00:00
Compare
Author
Member

@lveneris tagging again for review

@lveneris tagging again for review
Henry-Hiles approved these changes 2026-09-26 19:54:11 +00:00
Dismissed
lveneris requested changes 2026-09-26 22:13:17 +00:00
Dismissed
lveneris left a comment

i'm halfway in and the reviews are no longer working so i am dropping this for now

i'm halfway in and the reviews are no longer working so i am dropping this for now
@ -0,0 +5,4 @@
Matrix clients receive notifications in the following ways:
- **In-band notifications**, which are shown when the client actively syncs with the server.
- **Push notifications**, which are posted by the server via an external push service to the client. This is commonly used for mobile devices to receive out-of-band notifications, and is the focal topic of this page.
Member

"which are posted to the client by the server through an external push service. This is typically used to send out-of-band notifications to mobile devices, and it is the focus of this page."

"which are posted to the client by the server through an external push service. This is typically used to send out-of-band notifications to mobile devices, and it is the focus of this page."
stratself marked this conversation as resolved
@ -0,0 +7,4 @@
- **In-band notifications**, which are shown when the client actively syncs with the server.
- **Push notifications**, which are posted by the server via an external push service to the client. This is commonly used for mobile devices to receive out-of-band notifications, and is the focal topic of this page.
Generally, push notifications work out-of-the-box with your mobile device's preconfigured setup. The details below are useful for advanced use cases, such as when using an alternative push backend (e.g. UnifiedPush) or selfhosting your own.
Member

"Generally, your mobile device is preconfigured for push notifications out of the box. The details below are for advanced use cases, such as using an alternative push backend (like UnifiedPush) or hosting your own."

"Generally, your mobile device is preconfigured for push notifications out of the box. The details below are for advanced use cases, such as using an alternative push backend (like UnifiedPush) or hosting your own."
stratself marked this conversation as resolved
@ -0,0 +11,4 @@
## Overview
Continuwuity supports two push methods: using the legacy **Matrix Push Gateway** and the new **Web Push protocol**. The former method is currently supported by more clients, but the latter enables push notifications to be end-to-end-encrypted. They work as follows:
Member

"Continuwuity supports two push methods: the legacy Matrix Push Gateway and the new Web Push protocol. The former is currently supported by more clients, but the latter enables end-to-end-encrypted push notifications."

"Continuwuity supports two push methods: the legacy Matrix Push Gateway and the new Web Push protocol. The former is currently supported by more clients, but the latter enables end-to-end-encrypted push notifications."
stratself marked this conversation as resolved
@ -0,0 +16,4 @@
<Tabs groupId="push-ops">
<Tab label="Registration">
<img src="./push-registration.webp"
alt="Diagram showing the push registration flow"
Member

alt text typically describes the subject of an image. people with reduced vision should also understand what is going on.

alt text typically describes the subject of an image. people with reduced vision should also understand what is going on.
Author
Member

Will request re-review once I figure out the alt text

Will request re-review once I figure out the alt text
stratself marked this conversation as resolved
@ -0,0 +22,4 @@
A client registers a pusher with Continuwuity with the the following details supplied:
- The _pushkey_, which is a unique target URL provided by the push backend that the client hooks up to.
Member

should this not be "push key"?

should this not be "push key"?
Author
Member
[I don't think so](https://spec.matrix.org/latest/client-server-api/#push-notifications:~:text=This%20is%20a%20unique%20identifier%20for%20this%20pusher,-%2E%20The)
Member

you aren't writing the other fields as they are in the spec, and you haven't put it in an inline code block, so i would expect this to be written normally. you are writing this guide for mortals, not machines

you aren't writing the other fields as they are in the spec, and you haven't put it in an inline code block, so i would expect this to be written normally. you are writing this guide for mortals, not machines
stratself marked this conversation as resolved
@ -0,0 +23,4 @@
A client registers a pusher with Continuwuity with the the following details supplied:
- The _pushkey_, which is a unique target URL provided by the push backend that the client hooks up to.
- (For Push Gateway method only) The _push gateway_ URL, which is [provided by the client](#push-gateways).
Member

these should be more prominent, like "For Push Gateways: The [...]"

these should be more prominent, like "For Push Gateways: The [...]"
stratself marked this conversation as resolved
@ -0,0 +34,4 @@
style={{"max-height":300,display:"flex",margin:"1rem auto","border-radius":"5px"}}
/>
Continuwuity pushes messages to the push gateway, which then converts it into a suitable format and forwards it to the push provider server and then the push app. This push app then wakes up the client to fetch new message(s) from Continuwuity.
Member

"new messages"

also consider reworking the first sentence. perhaps this should be split up? like

  1. Continuwuity pushes messages to the push gateway
  2. The push gateway converts the messages to a suitable format and forwards them to the push provider server
  3. The push provider server passes them along to the push app
  4. The push app wakes the client, prompting it to fetch new messages from Continuwuity
"new messages" also consider reworking the first sentence. perhaps this should be split up? like 1. Continuwuity pushes messages to the push gateway 2. The push gateway converts the messages to a suitable format and forwards them to the push provider server 3. The push provider server passes them along to the push app 4. The push app wakes the client, prompting it to fetch new messages from Continuwuity
stratself marked this conversation as resolved
@ -0,0 +36,4 @@
Continuwuity pushes messages to the push gateway, which then converts it into a suitable format and forwards it to the push provider server and then the push app. This push app then wakes up the client to fetch new message(s) from Continuwuity.
Finally, the client calculates, against a set of _push rules_, to determine whether the fetched message(s) should be notified to users or not.
Member

"Finally, the client applies a set of push rules to the fetched messages to determine whether the user should be notified of them."

"Finally, the client applies a set of push rules to the fetched messages to determine whether the user should be notified of them."
stratself marked this conversation as resolved
@ -0,0 +46,4 @@
style={{"max-height":300,display:"flex",margin:"1rem auto","border-radius":"5px"}}
/>
Continuwuity pushes encrypted messages to the push provider, which then forwards it to the push app and then the client. The client then wakes up to decrypt this push content, and if needed, fetches the full message from the server.
Member

same advice as before applies to this section too

same advice as before applies to this section too
stratself marked this conversation as resolved
@ -0,0 +54,4 @@
</Tabs>
_([excalidraw file of the diagrams](/guides/push-notifications.excalidraw))_
Member

should this be in the text, or even the repo?

should this be in the text, or even the repo?
Author
Member

It should so people can possibly edit it later

It should so people can possibly edit it later
Member

i'm still not sure it should just be hanging out in the text, then. having it in the repo is fine

i'm still not sure it should just be hanging out in the text, then. having it in the repo is fine
stratself marked this conversation as resolved
@ -0,0 +60,4 @@
### Push Gateways
The push gateway URL is usually pre-configured by the app. However, some clients (such as Element X) implements [Gateway Discovery], and attempts to detect a push gateway _on the same domain as the push provider_, before falling back to a hardcoded one.
Member

"implement Gateway Discovery, and attempt to"

"implement Gateway Discovery, and attempt to"
stratself marked this conversation as resolved
lveneris requested changes 2026-09-26 22:32:44 +00:00
Dismissed
@ -0,0 +66,4 @@
```txt
curl https://push.example.com/_matrix/push/v1/notify
{"unifiedpush":{"gateway":"matrix"}}
Member

there should be some clarification here that this is a response, rather than part of the command, in my opinion. the separated line might be enough, though

there should be some clarification here that this is a response, rather than part of the command, in my opinion. the separated line might be enough, though
stratself marked this conversation as resolved
@ -0,0 +93,4 @@
### ntfy
[ntfy][ntfy] is an easy-to-install push application, and has plenty of publicly available instances. Its server can also be selfhosted and includes an embedded Matrix push gateway.
Member

also "Its server includes a Matrix push gateway and can be self-hosted."

also "Its server includes a Matrix push gateway and can be self-hosted."
stratself marked this conversation as resolved
@ -0,0 +95,4 @@
[ntfy][ntfy] is an easy-to-install push application, and has plenty of publicly available instances. Its server can also be selfhosted and includes an embedded Matrix push gateway.
Some tutorials on selfhosting ntfy can be found below:
Member

self-hosting should be hyphenated

self-hosting should be hyphenated
stratself marked this conversation as resolved
@ -0,0 +62,4 @@
The push gateway URL is usually pre-configured by the app. However, some clients (such as Element X) implements [Gateway Discovery], and attempts to detect a push gateway _on the same domain as the push provider_, before falling back to a hardcoded one.
As per the [spec][spec-push-gateway-api], these push gateways must be available on the `/_matrix/push/v1/notify` path of said domain. To test that a push gateway is accessible by the homeserver, make a request for it from the homeserver's IP:
Member

this should begin "Per" rather than "As per"

also "accessible to" rather than "accessible by"

this should begin "Per" rather than "As per" also "accessible to" rather than "accessible by"
stratself marked this conversation as resolved
@ -0,0 +73,4 @@
### Web Push
Continuwuity implements Web Push according to [MSC4174], which generally works out of the box with most push providers. Note that this mechanism does not require a push gateway component.
Member

drop "generally"

drop "generally"
Member

inconsistent stylisation of UnifiedPush

inconsistent stylisation of UnifiedPush
stratself marked this conversation as resolved
@ -0,0 +120,4 @@
- Push gateway: [common-proxies]
- Push server: [autopush-rs]
- Push app: [Sunup][sunup]
- [Matrix notifications on Android, powered by XMPP][stratself-xmpp], by stratself.
Member

is it reasonable to wield an entire separate chat protocol for this purpose? this sounds more like an endeavour for fun

is it reasonable to wield an entire separate chat protocol for this purpose? this sounds more like an endeavour for fun
Author
Member

Same with wielding that autopush-rs + valkey + common-proxies stack. This mainly helps people who are already using XMPP

Same with wielding that autopush-rs + valkey + common-proxies stack. This mainly helps people who are already using XMPP
stratself marked this conversation as resolved
@ -0,0 +114,4 @@
[unifiedpush-distributors]: https://unifiedpush.org/users/distributors/
Community tutorials for selfhosting some of these stacks can be found below. Unless stated otherwise, they are all tested against Element X Android and the push gateway mechanism (but should be fine with Web Push as well).
Member

make the parenthesised clause part of the sentence, like ", but they should work with Web Push as well."

make the parenthesised clause part of the sentence, like ", but they should work with Web Push as well."
stratself marked this conversation as resolved
@ -0,0 +187,4 @@
Active Matrix clients periodically renew their pushkeys as the old ones expire, and consequently register them against Continuwuity. As these pushers build up over time, the homeserver will keep sending more requests to an increasing number of "dead" push endpoints. This results in the errors seen above, and can heavily impact performance if not mitigated.
To work around this issue, the following actions can be made:
Member

"made" -> "taken"

"made" -> "taken"
stratself marked this conversation as resolved
@ -0,0 +158,4 @@
To fix this, configure `ip_range_denylist` to exclude your push gateway or push server's address from the array, and restart Continuwuity to apply the changes.
### Push notifications not making sounds/not being seen
Member

"not audible or not displaying"

"not audible or not displaying"
stratself marked this conversation as resolved
@ -0,0 +146,4 @@
## Troubleshooting
Issues with push can arise due to other components of the system that is not your homeserver (for example, the connection fails between the push gateway and the push server). Make sure you check the logs of these components for debugging as well.
Member

"Issues with push notifications can arise from the components of the system beyond your homeserver (for example, if the connection fails between the gateway and the push server)."

"Issues with push notifications can arise from the components of the system beyond your homeserver (for example, if the connection fails between the gateway and the push server)."
Member

remove "Then, "

remove "Then, "
stratself marked this conversation as resolved
@ -0,0 +189,4 @@
To work around this issue, the following actions can be made:
- Delete all pushers of a user with the [`!admin query pusher delete-all-user`](../reference/admin/query##admin-query-pusher-delete-all-user) command. This command is generally not very disruptive, as active clients will re-register new pushers the next time they log on.
Member

"all a user's pushers"

"This command is not typically disruptive"

"all a user's pushers" "This command is not typically disruptive"
stratself marked this conversation as resolved
@ -0,0 +160,4 @@
### Push notifications not making sounds/not being seen
This is likely an issue with one's _push rules_, which determines what events are shown to users as notifications. Check your push rules in the clients' notifications settings and tweak accordingly. Continuwuity also provides an [`!admin users reset-push-rules`](../reference/admin/users#admin-users-reset-push-rules) command, which restores the rules to the default of notifying for every message.
Member

"which determine which events"

"in the client's notification settings"

"which determine which events" "in the client's notification settings"
stratself marked this conversation as resolved
@ -0,0 +156,4 @@
WARN conduwuit_service::pusher: Pusher URL is a forbidden remote address url=https://push.example.com/_matrix/push/v1/notify
```
To fix this, configure `ip_range_denylist` to exclude your push gateway or push server's address from the array, and restart Continuwuity to apply the changes.
Member

To fix this, remove your push gateway or push server's address from ip_range_denylist"

To fix this, remove your push gateway or push server's address from `ip_range_denylist`"
stratself marked this conversation as resolved
@ -0,0 +162,4 @@
This is likely an issue with one's _push rules_, which determines what events are shown to users as notifications. Check your push rules in the clients' notifications settings and tweak accordingly. Continuwuity also provides an [`!admin users reset-push-rules`](../reference/admin/users#admin-users-reset-push-rules) command, which restores the rules to the default of notifying for every message.
Another potential reason may be that background services for push are being frequently terminated by your operating system, a [well-known problem][dontkillmyapp] with many Android-based devices. To fix this, follow your operating system's instructions to allow your Push App to be exempt from background restrictions.
Member

"Another reason may be that push background services are frequently being terminated by your operating system, which is a well-known problem with many Android-based systems. To fix this, follow your operating system's instructions to exempt your Push App from background restrictions."

also you alternate back and forth a lot between capitalising various push components and not doing so. pick a style and stick to it

"Another reason may be that push background services are frequently being terminated by your operating system, which is a well-known problem with many Android-based systems. To fix this, follow your operating system's instructions to exempt your Push App from background restrictions." also you alternate back and forth a lot between capitalising various push components and not doing so. pick a style and stick to it
Author
Member

uncapitalizing all.

uncapitalizing all.
stratself marked this conversation as resolved
@ -0,0 +181,4 @@
#### Connection issues between the server and the push gateway
Verify that connection to the push gateway is working correctly, which may include checking firewall rules, DNS, and that the push gateway is online. The section on [locally-hosted gateways/push providers](#locally-hosted-push-gateways--push-providers) may also apply to you.
Member

"that the connection to the push gateway is working correctly. This includes checking firewall rules, DNS, and that the push gateway is online."

"that the connection to the push gateway is working correctly. This includes checking firewall rules, DNS, and that the push gateway is online."
stratself marked this conversation as resolved
stratself force-pushed stratself/docs-push-notifications from f77ddf8759
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m10s
to 92f2a0be3d
All checks were successful
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m19s
Checks / Prek / Check changed files (pull_request) Successful in 7s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m23s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
2026-10-01 18:48:07 +00:00
Compare
docs(push): Alt text improvements again
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 5s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m41s
4e003d3b7e
fix: the
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m10s
d1aabb7ec8
lveneris approved these changes 2026-10-01 19:16:17 +00:00
Dismissed
stratself removed review request for Owners 2026-10-02 16:53:29 +00:00
stratself force-pushed stratself/docs-push-notifications from d1aabb7ec8
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Check changed files (pull_request) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m10s
to 97a12b83c9
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m10s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m43s
2026-10-04 16:49:50 +00:00
Compare
lveneris approved these changes 2026-10-04 18:04:32 +00:00
Jade force-pushed stratself/docs-push-notifications from 97a12b83c9
Some checks failed
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Checks / Prek / Pre-commit & Formatting (pull_request) Failing after 1m10s
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m43s
to b326f14f3a
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m55s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
2026-10-04 23:28:44 +00:00
Compare
Jade approved these changes 2026-10-12 09:17:35 +00:00
Jade force-pushed stratself/docs-push-notifications from b326f14f3a
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 7s
Checks / Prek / Check changed files (pull_request) Successful in 6s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m55s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
to 659ed082b1
All checks were successful
Checks / Changelog / Check changelog is added (pull_request_target) Successful in 8s
Documentation / Build and Deploy Documentation (pull_request) Has been skipped
Checks / Prek / Check changed files (pull_request) Successful in 7s
Checks / Prek / Clippy and Cargo Tests (pull_request) Has been skipped
Update flake hashes / update-flake-hashes (pull_request) Successful in 1m29s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 20m52s
2026-10-12 09:20:10 +00:00
Compare
Jade merged commit c66fb684f0 into main 2026-10-12 09:23:45 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No assignees
6 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
continuwuation/continuwuity!2244
No description provided.