youndie@kotlin.website:~$ ls -lt blog/

blog

Notes on Kotlin, Kotlin/Native, and whatever I'm currently building.

Kotlin/Native under load, and what I measured wrong

28 ms to first response and 20 MiB idle. Then the load arrived — and three of my own measurements turned out to be wrong.

The bugs that don't fail

294 tests, 71 specification scenarios, and four bugs that only a real mongod would show — because none of them threw anything.

Logs shaped for an agent to read

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.

A broker that fits in one head

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.

Percentiles don't average

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.

What is left in the system if you die halfway

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.

Writing SMTP from the RFC instead of around it

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.

The screenshot in the README is the test

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.

A Telegram bot is a state machine pretending not to be

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.

A crash tracker that fits on one box

katcher — Kotlin/Native, Ktor and HTMX, in one binary small enough that nobody has to justify running it.

Screenshot tests without an emulator

viddik renders Compose Multiplatform through a real Compose Desktop window instead of LayoutLib, so goldens stay the same on macOS, Linux and Windows.

Ask the desktop, don't guess it

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.