- Inherited: Using the project’s default setting.
- Overridden: Explicitly set by the recipient.
Preferences are per medium
Each preference applies to a single medium. Thein_app and email preferences for the same target are toggled independently, so a recipient can keep the in-app bell on while turning email off.
- Project-level preferences form the catalog: they set the default for a
(target, medium). Onlyin_appandemailcan be cataloged today. - Recipient-level preferences are the per-recipient opt-in/opt-out for a
(target, medium).
medium (in_app or email). It defaults to in_app when omitted, so existing integrations keep working unchanged.
How a preference resolves
Whether a send delivers is resolved, not read from a single row. The first rule that matches wins:- The recipient’s rule for the exact target.
- The recipient’s
topic: anyrule for that channel/event. - The project’s rule for the exact target (the catalog).
- The project’s
topic: anyrule. - The medium’s default.
topic: none target never takes an any rule — none means “this rule has no topic”.
The default is per medium. In-app is permissive: a direct notification reaches the inbox unless the recipient muted it, with no catalog entry required. Email is the opposite — it stays off unless something turns it on.
The catalog is a default, not a gate. An explicit recipient rule wins the cascade before the catalog is consulted, so a recipient rule enabling email on a target you never cataloged will send. Cataloging a
(target, email) pair is how you turn email on by default for everyone; it is not what makes email possible.state.cataloged separately from state.enabled. Use cataloged to decide what to render on a settings screen; use enabled to know what will actually happen.
If you want to build something like Reddit where an author is subscribed to their own post and any other user can explictly follow someone else’s post as well.
-
For the author, you can send a direct notification and it will always deliver unless the recipient explicity unsubscribe to that target. You should still use
targetso that you get analytics based on targets. - For the user who wants to follow someone else’s post, you should subscribe the recipient to that target and if they unfollow the post, unsubscribe them from that target.
- You could subscribe the author to their post’s target so that whenever some event is triggered on that post, you can just send a broadcast notification and the author and the other user both will recieve the notification.