Changelog
What changed in each release of the @kitr/* packages, newest first. They are published at the same version; dependency updates are left out. The full notes are in each package's CHANGELOG.md.
0.8.0
61 packages published
- Minor
pageTransitions({ style: 'rise' }): the old page lifts away and is gone before the new one settles in from just below, and back mirrors it. The two pictures don't blend, so on text-heavy pages, phones especially, the change reads as a move instead of a brief double exposure.A theme change turns off CSS
transitions while it runs. The new picture is the live page, so controls withtransition: background-color(buttons, nav links) faded from the old theme's colours on their own after the rest of the page had changed, and a header full of them looked like it animated separately.
- Minor
0.7.0
61 packages published
- Minor
A kit's
kitrblock can carry akitobject: who the kit is for, three to five highlights, the preset's base kit, where its example output lives, the file to read first and the commands to run.kitr package:checkvalidates it andKitrKitInfotypes it. Every official kit now describes itself this way, and its homepage is its page on kitr.dev/kits.@kitr/cli@kitr/kit-app@kitr/kit-dashboard@kitr/kit-desktop@kitr/kit-docs@kitr/kit-fullstackand 6 more
@kitr/kit-mobile@kitr/kit-realtime@kitr/kit-saas@kitr/kit-server@kitr/kit-site@kitr/kit-tauri - Patch
kitr typesfinds actions on TypeScript 7. TypeScript 7'stypescriptpackage is the native compiler and no longer ships the compiler API, so the actions generator falls back to@typescript/typescript6(an optional peer dependency) when the project'stypescripthas none. - Patch
Theme change animations run at their own speed.
@kitr/animation/page-transitions.csscut every root view transition to 180ms, theme changes included; its fallback now skips a theme change. The default theme transitiondurationis600, andcircleanddiamondgrow only as far as the viewport corner farthest from where they start (--kitr-theme-transition-radiusand--kitr-theme-transition-reach), so the whole animation happens on screen.googleAnalytics()sends whatgtag.jsreads. It pushed arrays todataLayer, whichgtag.jsignores, so no hits reached Google; it now pushes theargumentsobject the way Google's snippet does. It also sets the Consent Mode v2 default first:analytics_storagegranted, and the ad signals denied unless you passads: true. - Patch
Hardening from a CodeQL pass.
@kitr/mailparses recipients and builds the text body by scanning instead of backtracking regexes, so long or malformed input no longer stalls a send, andhtmlToTextnow drops<SCRIPT>and</script >too.kitr addrefuses a package name that is not a plain npm name before running the installer. Frontmatter,seocanonical URLs and the prerender link crawl no longer use regexes that slow down on long input. The generatedcapacitor.config.tsescapes backslashes in the app name.
- Minor
0.6.0
61 packages published
- Minor
The theme reveal from 0.5.0 (
toggle({ from })) is withdrawn, andkitr ui add theme-toggleswitches theme without animating again. Theme change animations come back as an opt-in setting, off by default, in a later release. - Minor
Theme change animations, off by default. Set
transitioninconfig/theme.tsto one of the built-in view transitions ('fade','circle','diamond','wipe','blur') with its ownduration,easinganddirection, name your own and style it in CSS, or run it in code withanimate.setThemeandtoggletake a per-calltransition, andfalsemakes one change instant. While a change runs,<html>carriesdata-kitr-theme-transition,data-kitr-theme-toanddata-kitr-theme-directionplus--kitr-theme-transition-*variables. Visitors who ask for less motion get an instant change.kitr ui add theme-togglepasses its button asfrom, socircleanddiamondstart there.
- Minor
0.5.0
61 packages published
- Minor
Gaps found rebuilding kitr.dev with kitr:
- Minor
0.4.0
61 packages published
- Minor
Add
@kitr/contentand thedocskit.kitr add contentrenders the markdown folders listed inconfig/content.tsatkitr generatetime into.kitr/content/, read through#kitr/content:loadPage(collection, slug),nav,loadSearch()and typedSlug<C>. Pages get Shiki highlighting for light and dark, file captions, callouts, numbered steps, a table of contents,kitrcommand blocks and rewritten.mdlinks.@kitr/content/reacthasDocBody,TocanduseActiveHeading,search()ranks the index, and withllms: truethe Vite plugin serves and buildsllms.txt,llms-full.txtand a.mdcopy of every page.kitr new --kit docsstarts a static docs site from markdown with a sidebar, search, package-manager commands and dark mode, using the newdoc-layout,search-dialogandcommandregistry components. - Patch
kitr agentsprints the project'sAGENTS.md, so an agent can read the rules without opening the file.--listprints the## kitr: <name>section names and--section <name>prints one section. Outside a project it fails and names the file it looked for.@kitr/cli - Patch
kitr cataloglists the official packages, platforms and kits;kitr catalog --jsonprints each with its wholekitrblock, platforms with theirplatformtext, so a site's build step can read them.@kitr/cliexportsKitrCatalog,KitrCatalogEntry,KitrPlatformInfo,KitrCategory,categories,kitManifests,validateManifestandbuildCatalogto type and build that output.@kitr/cli - Patch
A platform package's
kitrblock can carry aplatformobject: its label, tagline, targets, shell, colour, highlights, a code snippet, the commands that run it and links to upstream docs.@kitr/web,@kitr/server,@kitr/desktop,@kitr/tauriand@kitr/mobileship theirs, so kitr.dev's /platforms pages read the text from the packages.kitr package:checkvalidates the object and names each broken field. - Patch
The sitemap lists only indexable HTML pages. A crawled
.md,.txtor.jsonfile (a "view as markdown" copy,llms.txt) and a page whose head says<meta name="robots" content="noindex">are still written, but no longer appear insitemap.xml.
- Minor
0.3.2
59 packages published
- Patch
kitr addno longer writes demo values into real files.kitr add storagewritesapp/storage.tswith onlylocaleCookieand a commenteddefineStorageexample.kitr add analyticswrites an emptyAppEventsinapp/analytics.tswith two events as a comment, andconfig/analytics.tsnow templates the cookieless Plausible adapter first (VITE_PLAUSIBLE_DOMAIN, optionalVITE_PLAUSIBLE_HOST) and Google Analytics second (VITE_GA_MEASUREMENT_ID), all three declared inapp/env.ts. With the consent package installed, the config says analytics is held until the visitor accepts. Thesaaskit declares the events its pages track. - Patch
An app can hook its own step into
kitr generate: list it undergenerateinkitrrc.ts, as{ name: 'content', run: 'node scripts/content.mjs', watch: ['content/**'] }or withrun: () => import('./scripts/content'). App steps run after the type generators and the package steps inkitr generate,kitr dev,kitr buildandkitr typecheck;kitr generate --checkskips them like the package steps, and the newkitr generate --quietshows a step's output only when it fails.kitr doctorlists each step.@kitr/cli@kitr/core - Patch
kitr doctorno longer warns "kitr packages are on different versions: 0.3.1, ^0.3.1" in a fresh pnpm project.kitr newwrites exact versions and pnpm saves a caret range for the packages it adds; both name the same release, so the check now compares versions rather than ranges.@kitr/cli - Patch
Fix the first run from a global install.
kitr new --kit site(and every kit with a server platform) no longer skips the client packages as "server-only" when npm hoists@kitr/react.kitr ui add, and every kit that copies components, no longer fail withCannot find module '@kitr/cli'whenkitrruns through the global bin symlink.@kitr/cli@kitr/theme - Patch
Newcomer fixes.
kitr --version(and-v) prints the version instead of "No version specified".kitr doctorno longer asks to list@kitr/kitritself in kitrrc.ts. New projects'biome.jsonfollows.gitignore. Prerendering withcrawlLinksrenders one page per path:#anchorlinks no longer re-render the same page or fill the sitemap with anchors.kitr make:storesays in the generated file and AGENTS.md that the store needs its Provider for server rendering.kitr --helpmentions that packages add their own commands inside a project. - Patch
New projects no longer write
directories.routesinkitrrc.ts: the route table inapp/routes.tsis code, and a missingroutesdirectory already means code routes. The scaffolded.gitignoreignores*.log.@kitr/cli - Patch
kitr add testingwrites a real first test. With the starter home page,test/home.test.tsxrenders it withrenderWithKitrinside the app's providers and checks its heading. A React project without that page gets a test that boots the app, and a server-only project keeps the/api/healthtest. Thesaasandsitekits, which replace the starter page, drop the starter's test with it. - Patch
.root()takes{ lazy: () => import('./pages/not-found') }fornotFoundComponent,errorComponentandpendingComponent, the way.page()takeslazy, so the fallback screens stay out of the first bundle. A plain component still works. - Patch
RoutePath<typeof routes>is the union of a route table's page paths, as<Link to>takes them, so a nav list from data can be typed instead of widened tostring. The router guide has a "Links from data" section on why a list of concrete paths such as/docs/agentsdoes not type-check againstto, and howkitr make:page 'docs/$slug'names its file. - Patch
kitr make:pagesays what it wrote and what it added (wrote app/pages/docs/slug.tsx, added .page('/docs/$slug') to app/routes.ts), and its help shows the quoted formkitr make:page 'docs/$slug'so the shell keeps the$. The starter home and about pages use the theme token classes (bg-background,text-muted-foreground,border-border) instead of inline styles. - Patch
A page that fails to prerender no longer kills the build with a dump of the
Response. The build prints one line,[prerender] 404 at /llms-full.txt, linked from /docs/agents, and leaves the page out of the sitemap. A route listed inconfig/seo.tsprerender.routesstill fails the build; a crawled link only warns, unlessprerender.failOnErroristrue. - Patch
seo(options, ctx)builds the canonical URL andog:urlfromsite.urlplus the matched path whenurlis left out, instead of pointing every page at the home page. It also takestitleanddescriptionfrom the loader's data when the options leave them out, sohead: (ctx) => seo({}, ctx)is enough for a page whose loader returns them. - Patch
kitr make:storeremoves theapp/stores/.gitkeepplaceholder thatkitr add statewrote, once the folder has its first store. - Patch
A store read on the server outside its
StoreProviderno longer throws "Store has no instance on the server". Each component that reads it gets a fresh store built from the initial state, dropped with the render, so a static build or an SSR page works without the provider and nothing leaks between requests. Wrap the tree in the provider to share one store per render, or passstrict: trueto keep the error. - Patch
kitr ui add button --registry ./registry/distno longer treats the registry path as a second component name and fails withComponent "./registry/dist" not found. - Patch
A
staticweb build writes404.htmlfrom the root route'snotFoundComponent, which Netlify, Cloudflare Pages and GitHub Pages serve for unknown paths.kitr startserves it with status 404 instaticmode;spamode keeps answering unknown paths with the shell and status 200.
- Patch
0.3.1
59 packages published
- Patch
The package READMEs now show
pnpm dlx @kitr/kitr new my-app, since the CLI is published as@kitr/kitr. The command you run is stillkitr.@kitr/kitr
- Patch
0.3.0
59 packages published
- Minor
The CLI and the
kitrrc.tsconfig are published as@kitr/kitr: npm refuses the unscoped namekitr. Install it withnpm install -g @kitr/kitr(the command is stillkitr) and import from@kitr/kitr/appand@kitr/kitr/env.@kitr/kitr
- Minor
0.2.1
59 packages published
- Patch
createI18nnow defaultsdefaultNStocommonwhen a bundle has it, else the first namespace inresources, instead of i18next'stranslation. Without adefaultNS,t('hello')printed the key in every language.
- Patch
0.2.0
59 packages published
- Minor
Initial release: the kitr framework, CLI, component registry and example kits.
@kitr/3d@kitr/actions@kitr/analytics@kitr/animation@kitr/api@kitr/authand 49 more
@kitr/cache@kitr/cli@kitr/consent@kitr/core@kitr/db@kitr/desktop@kitr/devtools@kitr/files@kitr/flags@kitr/forms@kitr/http@kitr/i18n@kitr/jobs@kitr/kit-desktop@kitr/kit-mobile@kitr/kit-realtime@kitr/kit-saas@kitr/kit-site@kitr/kit-tauri@kitr/kitr@kitr/logger@kitr/mail@kitr/mobile@kitr/mocks@kitr/monitoring@kitr/native@kitr/notifications@kitr/offline@kitr/platform@kitr/query@kitr/react@kitr/realtime@kitr/router@kitr/secure-storage@kitr/seo@kitr/server@kitr/shield@kitr/state@kitr/storage@kitr/table@kitr/tailwind@kitr/tauri@kitr/testing@kitr/theme@kitr/toast@kitr/updater@kitr/uploads@kitr/vite@kitr/web - Minor
Devtools rebuilt: a bottom sheet on phones and a dock on desktops, light and dark themes, a draggable trigger with a long-press menu, a command palette, a three-finger gesture and a URL flag. The hub gains channels, counts, marks and burst collapse;
@kitr/devtools/uiis a shared kit for contributed panels;@kitr/httplogs every request and adds a Network panel; the other panels are rewritten on the kit. - Minor
Smaller browser bundles. A package can mark its provider
provider: { client: false }and@kitr/viteleaves it out of the browser's provider list (cache, jobs, shield and uploads do); the devtools panels of every provider are dropped from production builds that do not ship@kitr/devtools.kitr devnames the generated type files it wrote with paths relative to the project.@kitr/analytics@kitr/auth@kitr/cache@kitr/cli@kitr/core@kitr/httpand 13 more
@kitr/jobs@kitr/kit-app@kitr/kit-dashboard@kitr/kit-saas@kitr/kitr@kitr/mail@kitr/monitoring@kitr/platform@kitr/query@kitr/shield@kitr/storage@kitr/uploads@kitr/vite - Minor
kitr dev,kitr buildandkitr starttake--filter=a,bas another way to name the platforms (or workspace apps) to run.@kitr/cli
- Minor