Okapi
Changelog

What's new in Okapi.

Every release in plain language — ship notes for humans and the agents reading them.

v0.9.0

Performance monitoring

— Performance monitoring — Sentry SDK transactions and spans are now stored on the same DSN: trace views, slow-query and N+1 detection as triageable performance issues with their own alert triggers, and trace search over MCP; traces keep 14 days by default (OKAPI_TRACE_RETENTION_DAYS)
— Views and digests — group any projects into a view with unified issues, logs, releases and bulk triage, and alert or digest on the whole set; daily and weekly digests arrive by email, in-app, Slack or webhook and are skipped when nothing happened; date format, clock and timezone are now account preferences
— Alerts that don't get lost — alert evaluations are recorded with the event and survive a crash, Slack and webhook channels keep retrying for up to seven days and re-enable themselves when a retry succeeds, a capped destination gets one summary of what was withheld each hour, and alert history records what email really did
— Your agent manages alerts too — MCP grows from 12 to 36 tools: alert rules, notification channels, personal rules (over OAuth, after you sign in again), DSN keys and source-map upload tokens; verify_installation now says whether anyone will be told, and many agents connecting at once no longer get turned away
— Sharper grouping, wider compatibility — a new grouping epoch ignores numbers, ids, URLs and dates in messages and looks past framework wrappers; ingest accepts brotli, zstd and deflate bodies (sentry-python events sent with brotli were being lost); resent logs are stored once; current sentry-cli uploads source maps
— Operations and hardening — requeue dead-lettered payloads from Instance → System, see storage per project, login is rate limited, ingest answers 503 with Retry-After when the database is struggling, source-map uploads are memory-bounded with a per-organization quota, and the runtime moves to Go 1.27.3 (security release)
— Before you upgrade — read Upgrading to 0.9 first: the first maintenance pass permanently deletes dead-lettered payloads older than retention (check and export them as the database superuser); each recurring error opens one new issue and alert under the new grouping; issues snoozed without a deadline come back as unresolved; a database password with anything other than letters and digits must be changed or encoded first; large databases spend the first boot building indexes
v0.8.0

Connect AI tools with OAuth

— Connect AI tools with OAuth — Claude Desktop, Claude Code, Cursor and any MCP client now sign in to /mcp through a consent screen scoped to one organization and a chosen set of projects; grants show up under Account → Connected apps (and for owners, per organization) where they can be revoked, dynamically registered clients are presented as unverified, and every OAuth-authenticated action is attributed to the real user
— whats_new across every project — call it without a project and it summarizes what changed across all the projects your credential covers, with the next step spelled out
— One plan ladder everywhere: Solo / Team / Business — cloud's Pro and Portfolio rungs are retired so both editions share the same plan names
— Self-host setup and licensing polish — the first-run screen leads with the setup-link gate and explains a CSRF rejection, and license activation offers a plan choice with a checkout you can recover if it's interrupted
— Operations — OKAPI_LOG_LEVEL controls process logging (with an OAuth flow trace at info), pages carry descriptive document titles, alert emails read better on phones, and the runtime moves to Go 1.26.7 (security release)
v0.7.0

Announce releases from CI

— Announce releases from CI — sentry-cli releases new, finalize, and deploys new now work against Okapi using your project's existing token; releases exist before their first event, deploys show on release pages, and the new_release alert fires the moment your pipeline announces
— Alerts that set themselves up — new projects start with a sensible team alert rule set, "Notify me" is a one-click checklist of recommended personal rules, and owners can reset a project's defaults in place without touching hand-written rules
— One-click Slack — Add to Slack connects a notification channel through Slack's own consent screen, and Slack alerts now render as Block Kit with severity colors
— HTML email, rebuilt — alert and account emails ship as designed HTML templates with timestamps and environment, and issue alerts carry a copy-paste instruction for your coding agent
— Test-fire your alerts — send a realistic test through the real alert pipeline (real rendering, real destinations, fake data) from the rule editor
— Project setup and retention fixes — pick a project group at creation, a redesigned channel-creation dialog, retention grants now reach logs, and stale source-map upload chunks are swept correctly
v0.6.0

Alerts, rebuilt

— Notification channels — Slack incoming webhooks and signed generic webhooks live at the organization level with a health status, a test send and secret rotation; the destination URL is the credential, so it is withheld from every read and revealed only behind a password prompt
— Team and personal rules — per-project routing with a typed filter vocabulary (level, environment, whether the release is the latest, affected users) combined with AND; a personal rule notifies only you and is bound to your membership
— A notification that fails is retried, not lost — every granted alert is recorded before its fan-out is attempted, with one ledger row per destination and a retry ladder, so a Slack outage no longer silently swallows the alert
— Caps you can reason about — throttles apply per issue, per rule and per destination, and a channel that is dropping everything gets paced back instead of retried into the ground
— The old alerts surface is gone — legacy alert rules and the per-project Slack integration are removed along with their API endpoints; existing rules and webhook URLs are not migrated and must be recreated in the new model
— Browse Okapi Cloud plans without an account — the pricing and plan pages are readable signed-out, with the trial length coming from the billing catalog itself
v0.5.1
— Phone and tablet — the top bar collapses, the section nav scrolls instead of wrapping, settings sidebars stack above their content, and the dense issue and user tables scroll inside their card rather than crushing their columns
— Release list search, sort and date range — the controls on the releases page were placeholders; they now filter by version, sort by last or first seen, and bound by a last-seen range
— Events over time, from real counts — a 24-hour bar chart on issue detail and a daily chart on release detail, plus the environments a release was seen in
v0.5.0
— Negative issue search — exclude terms and phrases with -redis or -"connection reset", and search culprit, short id and error type alongside the title
— Ingest repairs bad payloads instead of losing them — NUL bytes, invalid UTF-8, lone surrogates and out-of-range timestamps are fixed or clamped at accept time, and an envelope item that gets dropped is now reported back to the SDK instead of vanishing
— Log search matches what you typed — % and _ are literal characters again, not accidental wildcards
— Cloudflare email transport — send invites, verification and alert mail through Cloudflare's HTTPS API instead of SMTP
— Steadier under load — background panics are contained instead of crash-looping, dead-lettered queue rows are counted and requeued, abandoned sessions and notifications are pruned, and /readyz stays down until migrations finish so a deploy never takes traffic on an unmigrated instance
— Honest paging — every list endpoint publishes its offset bound and refuses a page past it, rather than quietly returning a different page
— Nothing accumulates forever — source maps now prune at each organization's retention, and abandoned sessions, unverified signups and stale notifications are cleared in maintenance alongside events and logs
v0.4.0

MCP server for agents

— MCP server, first-class — mounted at /mcp with scoped agent tokens (read / triage / admin), rate-limited and audited
— An error tracker agents can drive — whats_new, get_issue_context, check_resolution, bulk triage, resolve-in-commit, agent-executed onboarding; agent actions attributed in the UI
— Prompt-injection defense — every event-derived string returned to an agent is fenced as untrusted data
— Organizations — multi-tenant workspaces isolated by Postgres row-level security; owner/member roles; usage quotas that degrade gracefully instead of surprise-billing
— Okapi Cloud — hosted Okapi with a 14-day trial, flat plans, no overage bills
— Self-host licenses — flat yearly pricing, a year of updates; your instance never stops ingesting
— System monitoring, built in — live CPU/RAM/disk tiles, zoomable history, and threshold alerts for the instance itself
v0.3.2
— In-app notifications — a bell and a full notifications page
— Account settings — rename, verified email change, password change
— Email verification + password reset — single-use hashed tokens; a reset signs out every session
— Event stepping — walk an issue's events with prev/next
v0.3.1
— SDK backoff done right — 429s carry Retry-After and X-Sentry-Rate-Limits so SDKs pause instead of hammering
— Load shedding — a bounded ingest queue sheds bursts with 429s before they hurt the database
— Per-project retention — override the global event window per project
— Live-updating issues list — new and updated counts appear without a reload
— Hardened dashboard auth — CSRF gating and timing-safe checks
v0.3.0

Source maps

— Source map upload — sentry-cli compatible, per-project upload tokens
— Symbolication before grouping — minified JS frames resolve to real code, so fingerprints survive builds
— All-new UI — full redesign, light + dark, compact density
— Guided empty states — every zero-state teaches the next step
v0.2.3
— Deep-linkable everything — filters and page live in the URL; back/forward-safe, shareable
— Release detail pages — what each release introduced and resolved
— Real event trends — per-issue sparklines from actual event counts
— DSN key last-used — see which keys are alive before revoking one
v0.2.2
— Projects dashboard — cards with 30-day sparklines, environments, platforms, latest release; per-user stars
— Pagination + bulk actions — issues, logs, releases paginate; select-all-matching bulk resolve/snooze/delete
— ⌘K command palette — jump anywhere
— Update checker — self-host instances learn when a newer Okapi exists (telemetry is opt-out)
v0.2.1

Alerts

— Alert rules — get notified when issues fire, with per-rule throttling
— Slack + email notifiers — bring-your-own SMTP; evaluation runs off the ingest hot path
v0.2.0

Structured logs

— Structured logs — log records ingested from SDK envelopes, with searchable attributes and their own retention window
— Logs view — filter by level, search body and attributes
— Experimental MCP server — list projects, triage issues, search logs from an agent
v0.1.2
— Browser SDK support — CORS on ingest, so frontend SDKs report directly
— Per-key rate limiting — a runaway error loop can't flood the instance
— Sentry-style numeric project IDs — DSNs look and parse exactly like Sentry's
v0.1.1
— Release tracking — events carry their release; issues show where they first appeared
— Regression detection — a resolved issue that recurs reopens, flagged as a regression
— Snooze with expiry — silence an issue until a time; it wakes itself up
— Retention — events pruned past a configurable window
v0.1.0

First release

— Sentry-compatible ingest — store and envelope endpoints; existing SDKs work by swapping the DSN
— Issue grouping — stacktrace fingerprinting groups events into issues; resolve and snooze
— Projects & DSN keys — multiple projects per instance, revocable keys
— Team basics — session auth, first-run setup, member invites
— Single-binary deploy — one Go binary + Postgres; Docker Compose quickstart