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.

Privacy Terms Self-host

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.