npm.io
0.4.3 • Published 4h agoCLI

@billyvg/sentry-tui

Licence
MIT
Version
0.4.3
Deps
0
Size
28 kB
Vulns
0
Weekly
0

sentry-tui

sentry.io in your terminal — a TUI client built with OpenTUI, mirroring Sentry's real information architecture and screen layouts.

Status

Hackweek 2026. The Issues path is built end to end; other nav sections are honest stubs.

  • Phase 1 — app shell, focus ring, theme, command catalog
  • Phase 2 — API client, auth, domain types
  • Phase 2.5 — loading states
  • Phase 3 — issue stream
  • Phase 4 — issue detail + stack traces
  • Phase 5 — triage actions
  • Phase 6 — OAuth device-flow login

Next: command palette, org/project switcher, and the remaining nav sections.

Install

npm installs a self-contained binary — no Bun or Node needed at runtime.

# one-off, or installed globally
npx sentry-tui
npm install -g sentry-tui

sentry-tui and @billyvg/sentry-tui are the same package; the platform binary arrives as an optional dependency, so you download one binary rather than four. Binaries are also attached to every release.

The npm install keeps itself current. Launching starts the app immediately on the build you already have, and a background process fetches anything newer — so a release reaches you without npm i -g again, and without ever making you wait on a 24MB download. Nothing about starting the app touches the network.

When a new build has finished downloading, a bold pink Update appears in the bottom-left corner. Click it or press U and the app restarts into it on the spot; ignore it and you get the new version next launch either way. The app looks again every 15 minutes while it is open, and only ever offers a build it has already downloaded.

Set SENTRY_TUI_NO_UPDATE=1 to pin whatever you have; CI is treated the same way. A binary downloaded by hand from the releases page never updates itself, and says so by not offering — replace it the same way you got it.

Supported: macOS and Linux, on arm64 and x64. Windows and musl-based Linux (Alpine) aren't built — run from source there.

Crash reporting

sentry-tui reports its own crashes to Sentry, which is how bugs that only happen on someone else's terminal ever get fixed. What goes: the error and its stack, the screen you were on, the Sentry API calls leading up to it, how long they took, your OS and terminal details, and — so a report can be followed up — the account and organization you're signed in to. It also logs what the app did along the way: which screens were opened and how quickly, and which requests the server refused. What never goes: your auth token, anything you typed into a search box, and the contents of your issues.

Set SENTRY_TUI_NO_TELEMETRY=1 to turn it off. It is also off automatically when CI is set, and when running from source.

From source

Running from source needs Bun ≥ 1.3.0. OpenTUI reaches its native renderer through bun:ffi; the Node backend wants node:ffi, which is Node 26.1+ behind --experimental-ffi, so Bun is the supported path.

git clone https://github.com/billyvg/sentry-tui
cd sentry-tui
bun install
bun start

Authentication

sentry-tui login     # OAuth device flow — opens your browser
sentry-tui status    # who you're signed in as, and for how long
sentry-tui logout    # forget the stored credentials

login prints a short code, opens https://sentry.io/oauth/device/, and waits for you to approve it (RFC 8628). Starting the TUI with no credentials offers the same flow. Access tokens are renewed automatically; Sentry rotates the refresh token on each renewal, so the new pair is written back immediately.

Use --no-browser to print the URL instead of opening one, and SENTRY_URL + SENTRY_CLIENT_ID to log in to a self-hosted install (needs Sentry ≥ 26.1.0 and a public OAuth application from Settings → Account → API → Applications).

Personal token instead

Create one at https://sentry.io/settings/account/api/auth-tokens/ with these scopes — the same set login requests:

org:read  project:read  event:read  event:write  member:read  team:read
export SENTRY_AUTH_TOKEN=sntryu_…

Resolution order is SENTRY_AUTH_TOKENSENTRY_TOKEN → the credential file. Environment tokens are used exactly as given and never refreshed.

Files
Path Holds
~/.config/sentry-tui/config.json preferences (default org), rewritten by the app
~/.config/sentry-tui/credentials.json tokens, written 0600

Secrets live apart from the file the app has to keep writable. A token left in config.json by an older build is moved across on the next run.

Development

bun run dev        # watch mode
bun test           # test suite
bun run typecheck  # tsc --noEmit

Set SENTRY_TUI_LATENCY=3000 to inject artificial API latency and exercise loading states.

Keys

? for the full list. The basics: j/k move, tab switches pane, enter opens, r resolves, a archives, q quits.

Keywords