Dispatches from the KetoyVM engine room. Compiler internals, bytecode spec, runtime benchmarks, Compose semantics, and the occasional postmortem, written by the people building the runtime.
The compiler is the hardest thing we will ever ship, and the least thing our users will ever see.— Anya Voronova, Compiler lead · Field note #14
KetoyVM is a Kotlin runtime for Android. Write plain Compose, ViewModels, and Navigation. Hilt and Room stay in the host app; KetoyVM exposes their functions for new features because updating them requires a Play Store release. Ship it to a CDN. Every user has the new feature in 60 seconds.
Preserving the Compose compiler's invariants, slot tables, group keys and remember semantics inside a portable bytecode is harder than it looks.
Every millisecond we spent parsing, verifying, linking and JIT-warming the bundle, and how we cut the path from 910 ms to 142.
A coroutine started inside a .ktx bundle has to honor the host's lifecycle. Getting cancellation right cost us a quarter.
What shipping a live-updated checkout flow to 2% of production looks like from the other side of the table.
The file format your app will download at 3am. What's in it, why it's laid out the way it is, and what we'll promise is stable.
A shorter prologue, fewer memory roundtrips, and one very sad engineer who wanted to port Krakatau.
How we resolve an @Inject'ed repository when the repository lives in the host and the composable lives in the bundle.
An infinite LaunchedEffect, a staged rollout, and the two things we changed in the runtime that night.
Deep technical writing on compilers, runtimes and Compose. Often a code walkthrough. Sometimes a postmortem. Never a product email.