Error tracking for the apps you actually ship.
Sentori captures JavaScript errors, iOS NSException, and Android uncaught exceptions from your React Native apps. Modern protocol, dense Linear-style dashboard, single-binary deploy. Self-host on a VM today; SaaS at sentori.golia.jp when it opens.
JS + Native error capture
ErrorUtils + Hermes promise tracker on the JS side; NSException on iOS, Java/Kotlin uncaught on Android. One SDK, three runtimes, one dashboard.
Schema without legacy
Single JSON event per request, camelCase wire format, nested cause chains, uuid v7 ids. No envelope, no exceptions[] arrays. Designed in 2026 — not retrofitted from 2012.
One binary, one compose
axum + Postgres + Valkey, in one Rust binary. docker compose up. No Kafka, no ClickHouse, no Snuba. Self-hostable on a single VM.
Dense, keyboard-first dashboard
Issues are a 32px-row table with j / k / Enter / s / / / [ / ]. Tabular nums, mono release strings. Designed against Linear and Modal, not Sentry.
Open source. Self-hostable forever.
v0.1.0 ships as a single
docker compose up:
postgres, valkey, one Rust server binary, one nginx-served SPA.
The hosted SaaS uses the same binary on the same compose, just
with multi-tenant migrations turned on.
Source on GitHub. License TBD before v1.0.
Why we built this
Sentry's wire format is from 2012 and shows it: envelope
multipart, exceptions[]
arrays where a recursive cause object would do, deeply nested
contexts. The
deploy is Kafka + ClickHouse + Snuba + a Django monolith. Modern
teams shouldn't need to learn that architecture to read a stack
trace.
Sentori is a clean-room rebuild: single-JSON events, camelCase wire, sourcemaps stored as content-hashed blobs, dense keyboard-first dashboard. Built ground-up for React Native, in 2026, intentionally without legacy.