Menu
Guides
Task-focused deep dives into each part of the framework, from queries to deployment.
Queries & invalidation
Declare what a component reads, and the framework figures out which writes refresh it — no invalidate() calls, no client cache.
Read →Mutations & forms
Write to the server through one real form that works with or without JavaScript, with typed inputs and typed errors.
Read →Optimistic updates
Make writes feel instant by declaring one transform per query, with a check that catches the one you forgot.
Read →Styling with Tailwind
Keep Tailwind classes statically discoverable so pages, mutation fragments, and streamed content all arrive styled.
Read →Deployment
Run a stateless server, keep old client modules published across deploys, and know what "live" means without sockets.
Read →Testing with @kovojs/test
Test handler logic, rendered HTML, and the honesty of your invalidation graph — without starting a browser.
Read →Reading kovo check & kovo explain
Query the graph your build emits, turn product rules into CI assertions, and debug mutations straight from the Network panel.
Read →Streaming & defer
Answer immediately with the cheap parts of a page and stream the expensive parts into the same response with kovo-defer.
Read →Compiler internals
See exactly what the compiler emits from your TSX, why the output is valid source, and how to eject a component.
Read →Accessibility
Kovo's styled primitives are axe-clean across their interactive state tiers — proven, not asserted, by the framework's own gallery browser axe suite.
Read →Components & copy-in UI
Build behavior on the public @kovojs/headless-ui primitives, and start from the @kovojs/ui starter by copying its source into your app — you own the code.
Read →