youndie@kotlin.website:~/src$ cat katcher/README.md

katcher

kotlin/native · htmx · sqlite
Self-hosted crash tracker for Kotlin: native binary, HTMX UI, embedded SQLite, and login delegated to whatever proxy already sits in front. Small enough that nobody has to justify running it.

Why it exists

Every crash reporting service wanted one of three things: my data, a JVM with a gigabyte of heap, or a Kubernetes cluster. For a side project — or an internal tool at a company that would rather not ship stack traces to a third party — none of those is a good trade.

What you get

  • One native binary, 30–50 MB resident, starting in milliseconds. scp it to a box and run it.
  • Automatic grouping by fingerprint (message + stack trace), with a dashboard rendered server-side through HTMX — no bundler, no Node in production.
  • Embedded SQLite through sqlx4k. No database to operate.
  • No login screen on purpose. It trusts X-Auth-Request-User and X-Auth-Request-Email from oauth2-proxy, Traefik ForwardAuth or NGINX auth_request, and answers 401 without them. That buys Keycloak, Google or GitHub SSO without a line of OAuth code.

Install

docker run -p 8080:8080 -v ./data:/data ghcr.io/youndie/katcher:latest

Client, in the app you want to hear about:

Katcher.start {
    remoteHost = "https://katcher.example.com"
    appKey = "<YOUR_APP_KEY>"
    release = "1.0.0"
    environment = "Production"
}

One detail worth stealing whatever you use: an atomic guard around the handler, so a crash inside the reporter cannot re-enter it. Without one, a bad day becomes an infinite one.