a box of parts that fit together
kitr is an opinionated TypeScript and React framework for apps on every platform, with the tools already chosen and wired. Every app remakes the same thirty decisions, and every coding agent remakes them again.
Why kitr exists
The problem
A new app means choosing and wiring twenty libraries. Every project ends up with a different layout.
The answer
kitr chooses them once and one CLI wires them. The choices are written down in one file.
Who it is for
Teams, solo developers and coding agents. Anyone who wants one set of conventions across every app.
@kitr/router is TanStack Router. @kitr/forms is React Hook Form. Their docs still apply, and leaving is a find-and-replace.
REST, your own API, server actions and live channels all load and save data the same way.
One file lists everything your app loads. Every command runs without prompts, for people, CI and agents alike.
Built on libraries you know
| kitr piece | Built on | What kitr adds |
|---|---|---|
@kitr/router | TanStack Router | Every page listed in one file, sign-in checks on pages |
@kitr/query | TanStack Query | One way to load and save data from any source |
@kitr/forms | React Hook Form | Validation, and server errors next to the right field |
@kitr/state | Zustand | Stores that are safe with server rendering |
@kitr/web | Vite and TanStack Start | Static, single-page, server-rendered or installable |
@kitr/server | h3 and srvx | An API your app calls with full types |
Their docs still apply. Leaving kitr is a find-and-replace.
What's in the box
Platon
kitr is built and maintained by Platon Podkopov, a senior UI/UX developer in Guildford, UK. It is the decisions he remade for every new React app, written down once.
Brand
The mark is a tile cut by the letter K. Its three pieces are the brand colours.