Surface Sentry issue insights on your Stream Deck, powered by the Sentry REST API.
From the StreamController store (once accepted): open StreamController → Store → search for Sentry Insights → Install.
Manual / development install: clone this repo and symlink it into
StreamController's plugin directory, naming the link after the plugin id
(com_benwyrosdick_Sentry):
git clone https://github.com/benwyrosdick/streamdeck-sentry
ln -s "$(pwd)/streamdeck-sentry" \
~/.var/app/com.core447.StreamController/data/plugins/com_benwyrosdick_SentryThen (re)start StreamController. See Setup to add your Sentry credentials.
| Action | What it does |
|---|---|
| Issue Count | Shows a live count of Sentry issues matching a filter (project, environment, status, first/last seen, time range). Press the key to open the equivalent Sentry issue stream in your browser. |
The count comes from Sentry's issues-count endpoint, which returns just the
total without fetching any issue rows. That total is capped at 100, so anything
at or above that shows as 100+.
The plugin needs to know your Sentry URL, organization slug, and an auth token. There are two ways to provide them:
-
In the plugin UI — open any Issue Count button's settings and fill in the Sentry URL, Organization slug, and Auth token fields at the top. These are shared across every Sentry button, so you only enter them once.
-
From your environment — leave those fields blank and the plugin falls back to the same configuration
sentry-cliuses:- the
SENTRY_AUTH_TOKEN,SENTRY_ORG, andSENTRY_URLenvironment variables, then ~/.sentryclirc([auth] token,[defaults] org/url).
This keeps your token out of StreamController's settings file entirely.
- the
Create a token at Settings → Auth Tokens (an Organization Auth Token or a
User Auth Token) with at least org:read, project:read, and event:read
scopes. Self-hosted Sentry works too — set the Sentry URL to your instance.
Configure each button in its settings:
| Setting | Notes |
|---|---|
| Button label | Short name shown on the key (e.g. "Prod Errors"). |
| Project slug | e.g. javascript-frontend. Blank = all projects in the org. |
| Environment | Comma-separated (e.g. production,staging). Blank = all. |
| Status | Unresolved (default) / Resolved / Archived (Ignored) / All. |
| First seen | Filter by when the issue was first seen — within last hour/24h/7d/14d/30d, or older than 24h/7d/30d. |
| Last seen | Same options, for when the issue was last seen. |
| Time range | The date window the count is evaluated over (Sentry's statsPeriod). Default is 90 days. |
| Advanced query | Raw Sentry search appended verbatim (e.g. level:error, assigned:me). |
Examples
- New in prod — Project:
backend, Environment:production, Status: Unresolved, First seen: Within last 24h. - Going stale — Status: Unresolved, Last seen: Older than 30 days.
- My errors — Status: Unresolved, Advanced query:
assigned:me level:error.
Press a key to open the matching issue stream on Sentry in your browser.
- StreamController 1.5.0-beta.14 or newer.
- A Sentry auth token (see Setup). No extra software is required — the plugin talks to the Sentry API directly using only the Python standard library.
- Counts refresh in the background (every ~45s) and never block the UI.
- If Sentry rate-limits the plugin (HTTP 429), polling pauses and the key shows a countdown until it resumes.
- This is an unofficial community plugin and is not affiliated with or endorsed by Sentry. "Sentry" is a trademark of Functional Software, Inc.
MIT — see LICENSE.