One line in. Three jobs done.
Drop in @catch.dev once and get in-app feedback, surveys, and crash reports — wired together by default, separable when you need them. No five-vendor stitch-up.
Catch is the tiny, fast, unobtrusive SDK for in-app feedback, surveys, and crash reports. We started with one stubborn question — why does catching errors need heavyweight tooling that slows the very app it's meant to protect? So we built the opposite: @catch.dev, 4kb gzipped, with zero runtime deps. Boring on purpose. Battle-tested by default.
1// what we optimize for2export const beliefs = [3 'simplicity',4 'speed',5 'reliability',6]78// everything else is negotiable
The three things we refuse to trade away — restated as constraints we hold on every layer.
Drop in @catch.dev once and get in-app feedback, surveys, and crash reports — wired together by default, separable when you need them. No five-vendor stitch-up.
The feedback reporter renders inside a Shadow DOM, so it never touches your styles, and nothing heavy is forced into your bundle. The tool that protects your app shouldn't be the thing that slows it.
We pick mature, proven technology over the new and shiny on every layer, so the code you ship on top of us just keeps working. Self-host ready when you want full control.
We started Catch in 2024 with one annoyed question: why does catching errors cost you a megabyte, a config file, and a week?
Error and feedback tooling had drifted. The libraries meant to make your app more reliable were slowing it down, bloating the bundle, and burying real signal under dashboards nobody opened. So we set a hard constraint and refused to break it — stay small, stay quiet, stay out of the way.
Catch is the result. @catch.dev drops in once and does three jobs well — collect in-app feedback, run surveys, and report crashes — at 4kb gzipped, with zero runtime dependencies. The reporter renders inside a Shadow DOM, so it never touches your styles, and you can point it at your own deployment.
We exist to help developers build better software, faster — by being the dependable, boring layer you forget is even there, until the moment you need it.
A deliberate, load-bearing preference: the simplest thing that works, built on mature, proven technology over the new and shiny — and we call out the trade-off when we deviate.
We reach for the platform and standard library before a third party. Networking is the platform's own fetch / URLSession / HttpURLConnection; the web SDK ships zero runtime deps. Every dependency we skip is a version conflict and a supply-chain liability we never force on you.
We pin to stable, widely-used, current-but-not-bleeding-edge releases and skip the brand-new major the week it ships. Predictable beats exciting when your error tracker is the thing that has to stay up.
Our SDKs make zero assumptions about your app — its router, its styles, its build. The web reporter renders inside a Shadow DOM so it never collides with your CSS. It embeds anywhere and asks for nothing.
We favor a hundred lines you can read over a framework you can't. Obvious names, clear control flow, optimized for the next person to open the file — usually future us, at 2am, during an incident.
Live status at status.catch.dev.
The same tiny wire contract serves every platform — so a new SDK needs no backend changes at all.
We're early, and we'd rather leave this blank than fake it. These slots are reserved for real teams shipping on Catch.
[ A sentence about how Catch dropped into your stack in minutes and what it caught first. ]
[ The thing your old, heavier tool made painful — and how boring-and-tiny changed that. ]
[ Why your team trusts a 4kb SDK with production. ]
Shipping on Catch? Tell us your story →
One tiny SDK for feedback, surveys, and crashes — wired up in under ten minutes, on every platform you ship to. Or come help us keep it that small.