youndie@kotlin.website:~$ whoami

pavel votyakov

kotlin developer · 14 years of mobile and backend

Most of what's here is infrastructure I needed and couldn't find in the right size — a crash tracker that fits on one box, logs a coding agent queries over MCP instead of being handed a dashboard link, a saga engine that survives the process dying halfway through.

Kotlin as far as it will go: Ktor services on the JVM, native Linux binaries with nothing to install underneath them, Compose Multiplatform on the desktop, KMP libraries published for all three. Several of them run on my own cluster, and where something claims a number the methodology is in the repository next to it.

Day job is leading Android on a Kotlin Multiplatform banking app.

libraries

21 repos

Most of them publish to my own Reposilite at reposilite.kotlin.website; tracy, katcher and metrik also ship container images on ghcr. Everything is MIT.

kompot
Backend-driven UI for Kotlin Multiplatform: the server describes a screen as a tree, the client renders it, and a new screen ships without a client release. Open hierarchies that degrade instead of crashing, held by a spec and two conformance kits.
kmpjvmandroidioswasmserver-driven ui
shildik
An OpenID Connect provider in one native binary against one Postgres, where a sign-in method is a module rather than a jar loaded into somebody else's process. It replaced Keycloak in production and holds 45–48 MiB doing it.
kotlin/native + jvmktoroidcpostgres
tracy
Logs for Ktor services, shaped for a coding agent to read. One native binary and one SQLite file — no JVM, no Elasticsearch, no shipper. MCP is the primary read path, so the agent asks for the trace instead of being handed a dashboard link.
kotlin/native + jvmktorsqlitemcp
zavarnik
A Gradle plugin for Project Leyden's AOT cache in plain application-plugin apps: trains through the real start script, fails the build when production would reject the cache — including on the JDK builds that never check the jars — and ships it in the tar and the image.
jvmgradle pluginleydenktor
booblik
A message broker on an append-only log: topics into partitions, partitions into segments, and an offset the consumer keeps itself. No quorum and no coordinator — everything that makes a log fast is reproduced and measured on two rented machines.
jvmlog storagezero-copyffm
petich
Distributed saga engine built around one question: what is left in the system if you die halfway. Steps as interceptors, compensation in reverse order, sagas that pause for a human and resume on a later request, and an outbox written in the same transaction as the state change.
jvmktorexposedpostgres
chronik
A durable timer and nothing else: schedule(id, at, payload), and at that instant the fact it is time leaves — never earlier, never lost. The row is written in the same transaction as your state change, which is the only reason to have one rather than a cron job.
jvmexposedpostgres
metrik
Monitoring for Ktor services in one native binary. The agent costs 106 nanoseconds per request and a UDP packet a minute; percentiles are merged across instances rather than averaged, and every chart carries the deploy markers that explain it.
kotlin/nativektorcomposemcp
katcher
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.
kotlin/nativehtmxsqlite
mongkn
MongoDB for Kotlin/Native, where no official driver exists. A cinterop binding over libmongoc behind the shape of the coroutine driver's API — transactions, change streams, and read overhead indistinguishable from bare C.
kotlin/nativecinteropmongodb
smtpkn
SMTP written from RFC 5321 rather than around it, so a service can send mail with no JVM in sight. TLS with the certificate chain actually verified, seven SASL mechanisms, and a partial refusal returned as a result instead of an exception.
kotlin/nativeopensslrfc 5321
bochka
An S3-compatible object store for one machine, and the same server starts inside a test where the JVM otherwise offers a mock. All four body framings, versioning, object lock, lifecycle rules that run; 518 of 744 ceph/s3-tests, every failure classified.
jvms3zero-copytesting
s3kn
S3 where the AWS SDK does not go — Linux, macOS and iOS as well as the JVM. SigV4 checked against all 34 official vectors plus twenty more generated from the reference implementation, presigned URLs that work even on targets with no HTTP engine, and every operation run against a real server on two platforms.
kmp: linux + apple + jvmktorsigv4s3
kvadrant-ui
Metro components for Compose Multiplatform, transcribed from Microsoft's own theme resources rather than from screenshots. The eight metrics with no public source ship as parameters saying so, and anything nicer than the phone is behind a flag that is off.
compose multiplatformjvmandroidioswasmdesign system
viddik
Screenshot testing for Compose Multiplatform that renders through a real Compose Desktop window, not LayoutLib. Fixtures are declared with @Preview and buy a golden-file test and a live component browser; goldens hold across macOS, Linux and Windows.
compose multiplatformksptesting
sborka
Gradle conventions as a plugin, and a ktlint rule set beside them where every rule names the defect it was written for. No configuration and no taste rules: a rule is in the set or it is not, and switching one off takes a reason in the annotation.
gradlektlintconventionsstatic analysis
telek
Telegram bots as a finite state machine rather than a pile of callbacks. Pure transitions, effects on the side, two transports to pick from, published for the JVM and for native Linux so a bot can ship as one binary.
kmp: jvm + linuxtelegramfsm
appframe
A window frame for Compose Desktop that behaves like the platform it runs on: traffic lights on macOS, Windows 11 button metrics, and on Linux the GTK button-layout setting asked directly rather than guessed.
compose desktopui
shashki
A ride-hailing service written to put the whole stack under load-bearing conditions: two Compose Wasm bundles, a Ktor server with two sagas, a vector map drawn in Compose because nothing published draws one there, and eleven of these libraries doing real work.
kmpcompose wasmktorsagasreference
kore
The process lifecycle of a Kotlin server binary, owned once: shutdown in a defined order, three health questions instead of one, a typed configuration that refuses an unknown variable, and /version with the commit. The order is the product — Ktor runs its stop steps the opposite way round on the JVM and on Native, from identical source.
kmp: jvm + nativektorordered shutdownhealth probes
mani
A budget planner written end to end in Kotlin: Compose clients for Android, iOS, desktop and the browser, and a Ktor server that compiles both to the JVM and to a native Linux binary. A demo on purpose — it exists to show the whole stack working at once.
kmpcomposektordemo