Skip to main content
PRFlow decides where every notification goes with notification rules, managed from the dashboard at app.prflow.dev. A rule has a name, a destination Slack channel, one or more match conditions, and an on/off switch. When an event arrives, PRFlow walks your rules top to bottom and the first enabled rule with a matching condition wins: the repository’s notifications post to that rule’s channel. A repository that matches no rule posts nowhere.
The Notification Rules list: four ordered rules with match conditions, destination channels, and on/off switches

Creating a rule

Connect your source provider (GitLab or GitHub) and Slack first, then click + New rule on the dashboard.
The rule editor: destination channel picked, rule name prefilled, one Specific repository condition open
  • Destination channel — where matched repositories post. Picking a channel fills in the rule name for you; a name you type yourself is never overwritten. Each channel belongs to at most one rule, so channels already claimed show which rule routes them. PRFlow lists public channels plus private channels it has been invited to — if a private channel is missing, run /invite @PRFlow in that channel on Slack, then reopen the editor.
  • Match conditions — a Specific repository condition is already open when the editor appears, and if PRFlow only knows about one repository it is pre-selected too, so picking a channel is the only decision left. Add more conditions with + Add condition; a repository routes to the rule if it matches any of its conditions.
  • Notifications — the Draft PRs switch, off by default, makes the rule post drafts too: the card appears when a draft opens instead of when it is marked ready for review. Rules with it on show a Drafts chip in the rules list.
The same editor holds the channel’s scheduled digest settings, and this is also where you delete a rule.

The three match types

  • Specific repository — pick one or more repositories from the list. Matching is by the repository’s exact full name.
  • Repository pattern — a wildcard expression. * is the only wildcard and matches any run of characters, including /. The pattern must match the whole name; there is no substring matching (web-app alone matches nothing — write */web-app).
  • All repositories — matches every repository. This is the catch-all you use for a fallback rule.

Patterns match different things on GitHub and GitLab

On GitHub, a pattern matches the bare repository name, without the owner: write payments-* or *-service. A GitHub connection covers a single owner, so the owner prefix carries no routing information — an owner-prefixed pattern like your-org/* matches nothing on GitHub. To route every repository, use an All repositories condition instead. On GitLab, a pattern matches the full path including group and subgroups: acme/frontend/* routes every project under the frontend subgroup, and acme/*/web-app matches a project named web-app in any subgroup.

Rule order: first match wins

Rules are checked top to bottom and the first match wins, so order is part of the configuration. Reorder by dragging a rule up or down by the grip handle on the left of its row (keyboard: focus the grip, Space to lift, arrow keys to move, Space to drop, Escape to cancel).
  • A Specific repository condition has no built-in priority: a pattern rule higher in the list takes a repository even if a rule below names it explicitly. To make a specific-repository rule win, drag it above the pattern.
  • Keep the catch-all rule last — anything above it can never lose to it. Nothing enforces this, so the list warns with “Shadows every rule below” when an enabled catch-all sits above other enabled rules.
  • A rule switched off is skipped entirely; the rules below it take over.

New projects register themselves

With a GitLab group webhook, GitLab sends events for every project in your group — including projects created after you set PRFlow up. PRFlow registers a project from your configured group the first time it sends an event and applies your rules to it immediately, so a pattern or catch-all rule picks up new projects with no extra clicks. Projects outside your group are ignored, and no rules are created or changed automatically. On GitHub, PRFlow mirrors the repositories you granted to the PRFlow App and keeps the list in sync when you add or remove repositories on the installation.

Removed, renamed, and re-added repositories

Rules identify a repository by its full name, not by an internal record, so a specific-repository rule survives the repository leaving and coming back — for example when a repo is removed from your GitHub installation, or when you disconnect and reconnect a provider. The rule simply starts matching again the moment the repository reappears. One caveat: a repository that comes back under a new name is a different name, so the rule keeps looking correct but no longer matches. Edit the rule and pick the repository again. (Names are matched exactly, so a capitalization change counts as a rename too.)