tools, usually
Misha Kaletsky
Tools, usually. Databases, often. Ceremony only under protest.
I work at iterate. Daylight hours go into product engineering, systems that have to survive contact with users, and the slow removal of unnecessary ceremony.
The rest is mostly tools: small ones, blunt ones, libraries with an exit wound, database things that refuse to become ORMs.
portfolio
Pieces and bits on GitHub.com.
194,142,284 npm downloads in the last month across the packages below. Apr 6-May 5, 2026
expect-type TypeScript tests that fail before the tests run. part of vitest, and I think openclaw started using it at some point so lots of downloads. my wife is pleased to know i make about one millionth of one dollar per download
185,289,787 npm downloads last month
expect-type lets TypeScript projects test public and internal types with an API that feels close to expect, except the failure happens in the compiler. The machine refuses the shape before runtime ever gets a vote.
It has no meaningful runtime behavior. That is the trick. Type regressions do not need a second testing universe.
trpc-cli A command line growing out of an RPC router. not just trpc. also this is the best way to build a CLI. genuinely it is. however you're doing it is worse.
642,233 npm downloads last month
trpc-cli turns an existing tRPC or oRPC router into a CLI with typed inputs, validation, help text, subcommands, prompts, completions, and a small dependency surface.
The useful trick is reusing the router contract. A procedure that already works as application code becomes a command without a second parser and a second little pile of lies.
sqlfu.dev SQL first. TypeScript follows behind with a clipboard. pretty new, go easy
3,658 npm downloads last month
sqlfu starts from the premise that the data layer should be reviewable as SQL. Schemas live in definitions.sql, migration history lives in SQL files, and queries live in .sql files. TypeScript is generated around the evidence.
The current shape includes schema diffs, migration drafting, typed query wrappers, SQLite-compatible adapters, formatting, linting, tracing, and project tooling. Pre-alpha, but stubborn in the right places.
fetchomatic Work in progress. Fetch, with consequences. work in progress
108 npm downloads last month
fetchomatic is a small work-in-progress wrapper around fetch: retries, timeout, logging, caching, error handling, and other suspiciously necessary conveniences.
It is not trying to become a religion. The ambition is lower and more useful: make the boring request path observable, survivable, and slightly less eager to ruin an afternoon.
mopub Publish packages in a pnpm monorepo. helps me publish the other things
386 npm downloads last month
mopub is a tiny publishing tool for pnpm monorepos. It handles the repetitive package-release machinery I do not want to think about every time another small tool needs to leave the house.
It is not glamorous. That is a feature. The publishing tool should be the boring part.
schematch Pattern matching using Standard Schema. pattern matching using standard-schema. I forgot I made this. I wanted/want it to be part of Bun some day
2,708 npm downloads last month
schematch is schema-first pattern matching for TypeScript. Give it zod, valibot, arktype, or anything else that speaks Standard Schema, and use those validators as match cases.
I forgot I made this. I still think the shape is right. It belongs somewhere lower down in the runtime, possibly Bun, if anyone is feeling unusually reasonable.
artifact.ci A door into the zip file GitHub makes you download. shouldn't exist. github sort your shit out
artifact.ci is a GitHub App that notices uploaded GitHub Actions artifacts and gives them a browsable web URL. It lives in the tedious middle ground where CI already produced something useful, like a Playwright report, coverage report, static site, PDF, or image, but GitHub still wants you to download a zip and rummage through it.
Install the app, keep using actions/upload-artifact, and the useful thing gets a door. Not a platform. A door.
eslint-plugin-codegen Code generation smuggled through the linting hatch. not sure you need this anymore. 1) you probably aren't using eslint and 2) AI is probably gen-ing your code
71,799 npm downloads last month
eslint-plugin-codegen uses ESLint as a place to keep generated code and generated documentation synchronized. A comment marks the generated block, a preset defines how to produce it, and normal lint or fix-on-save workflows keep it current.
Useful when the same facts must appear in multiple places and everyone pretends they will remember to update both. Barrels, markdown from JSDoc, tables of contents, labels, examples from tests. Little recurring debts.
pgkit PostgreSQL tools. Moving to sqlfu.
122 npm downloads last month
pgkit is a PostgreSQL and TypeScript toolkit rather than an ORM. Typed SQL client, query generation, schema inspection, migrations, diffs, admin UI. A lot of machinery from the period when the problem was still called Postgres.
The useful parts are moving to sqlfu. The rest can sit there, making a faint electrical noise.
umzug Migrations. I don't really use this anymore, but those Sequelize people do.
8,131,483 npm downloads last month
Umzug is a migration runner for Node projects. It gives you a programmatic API and CLI for running, rolling back, listing, and storing migrations without tying the idea of a migration to one specific database framework.
I do not really use it anymore, but those Sequelize people do. Fair enough. Old tools are allowed to keep working.
micro-cv
All these things that I've done.
- now iterate.com London
- before drb.ai NYC
- before havenhealthcare.rip NYC
- before zocdoc.com NYC
- before microsoft.com AI agents before they were cool / London
- before university, school, birth etc. London / mother's womb