blog
Notes on Kotlin, Kotlin/Native, and whatever I'm currently building.
28 ms to first response and 20 MiB idle. Then the load arrived — and three of my own measurements turned out to be wrong.
294 tests, 71 specification scenarios, and four bugs that only a real mongod would show — because none of them threw anything.
Handing a coding agent a dashboard link is handing it nothing. tracy makes MCP the primary read path — and that single decision changes what the storage has to store.
booblik reproduces what makes an append-only log fast and leaves out everything that makes Kafka a cluster — including three features that are incompatible with zero-copy by construction.
metrik costs the monitored service 106 nanoseconds per request and a UDP packet a minute — and the reason it merges percentiles instead of averaging them is that averaging them is simply wrong.
A saga engine built around one question. Steps as interceptors, compensation in reverse, and an outbox that makes "the work happened but the notification never went out" structurally impossible.
A Kotlin/Native service has two ways to send mail — shell out to sendmail, or wrap libcurl. Both hide the protocol exactly where it has to be visible.
mani is a Kotlin Multiplatform demo where the same server compiles to the JVM and to a native binary — and where the picture advertising the interface cannot drift from it.
telek models a conversation as pure transitions with effects on the side — which is what makes a wizard resumable, testable and portable between two transports.
katcher — Kotlin/Native, Ktor and HTMX, in one binary small enough that nobody has to justify running it.
viddik renders Compose Multiplatform through a real Compose Desktop window instead of LayoutLib, so goldens stay the same on macOS, Linux and Windows.
A custom title bar for Compose Desktop has to know which side the buttons go on. On Linux there is no answer — so appframe asks GNOME directly.