Skip to content

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.

  1. 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 with transition: 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.

  2. 0.7.0

    61 packages published

    • Minor

      A kit's kitr block can carry a kit object: 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:check validates it and KitrKitInfo types 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-fullstack
      and 6 more
      @kitr/kit-mobile@kitr/kit-realtime@kitr/kit-saas@kitr/kit-server@kitr/kit-site@kitr/kit-tauri
    • Patch

      kitr types finds actions on TypeScript 7. TypeScript 7's typescript package 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's typescript has none.

    • Patch

      Theme change animations run at their own speed. @kitr/animation/page-transitions.css cut every root view transition to 180ms, theme changes included; its fallback now skips a theme change. The default theme transition duration is 600, and circle and diamond grow only as far as the viewport corner farthest from where they start (--kitr-theme-transition-radius and --kitr-theme-transition-reach), so the whole animation happens on screen.

      googleAnalytics() sends what gtag.js reads. It pushed arrays to dataLayer, which gtag.js ignores, so no hits reached Google; it now pushes the arguments object the way Google's snippet does. It also sets the Consent Mode v2 default first: analytics_storage granted, and the ad signals denied unless you pass ads: true.

    • Patch

      Hardening from a CodeQL pass. @kitr/mail parses recipients and builds the text body by scanning instead of backtracking regexes, so long or malformed input no longer stalls a send, and htmlToText now drops <SCRIPT> and </script > too. kitr add refuses a package name that is not a plain npm name before running the installer. Frontmatter, seo canonical URLs and the prerender link crawl no longer use regexes that slow down on long input. The generated capacitor.config.ts escapes backslashes in the app name.

  3. 0.6.0

    61 packages published

    • Minor

      The theme reveal from 0.5.0 (toggle({ from })) is withdrawn, and kitr ui add theme-toggle switches 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 transition in config/theme.ts to one of the built-in view transitions ('fade', 'circle', 'diamond', 'wipe', 'blur') with its own duration, easing and direction, name your own and style it in CSS, or run it in code with animate. setTheme and toggle take a per-call transition, and false makes one change instant. While a change runs, <html> carries data-kitr-theme-transition, data-kitr-theme-to and data-kitr-theme-direction plus --kitr-theme-transition-* variables. Visitors who ask for less motion get an instant change. kitr ui add theme-toggle passes its button as from, so circle and diamond start there.

  4. 0.5.0

    61 packages published

  5. 0.4.0

    61 packages published

    • Minor

      Add @kitr/content and the docs kit.

      kitr add content renders the markdown folders listed in config/content.ts at kitr generate time into .kitr/content/, read through #kitr/content: loadPage(collection, slug), nav, loadSearch() and typed Slug<C>. Pages get Shiki highlighting for light and dark, file captions, callouts, numbered steps, a table of contents, kitr command blocks and rewritten .md links. @kitr/content/react has DocBody, Toc and useActiveHeading, search() ranks the index, and with llms: true the Vite plugin serves and builds llms.txt, llms-full.txt and a .md copy of every page.

      kitr new --kit docs starts a static docs site from markdown with a sidebar, search, package-manager commands and dark mode, using the new doc-layout, search-dialog and command registry components.

      @kitr/cli@kitr/content@kitr/kit-docs@kitr/kitr
    • Patch

      kitr agents prints the project's AGENTS.md, so an agent can read the rules without opening the file. --list prints 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 catalog lists the official packages, platforms and kits; kitr catalog --json prints each with its whole kitr block, platforms with their platform text, so a site's build step can read them. @kitr/cli exports KitrCatalog, KitrCatalogEntry, KitrPlatformInfo, KitrCategory, categories, kitManifests, validateManifest and buildCatalog to type and build that output.

      @kitr/cli
    • Patch

      A platform package's kitr block can carry a platform object: 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/tauri and @kitr/mobile ship theirs, so kitr.dev's /platforms pages read the text from the packages. kitr package:check validates the object and names each broken field.

    • Patch

      The sitemap lists only indexable HTML pages. A crawled .md, .txt or .json file (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 in sitemap.xml.

  6. 0.3.2

    59 packages published

    • Patch

      kitr add no longer writes demo values into real files. kitr add storage writes app/storage.ts with only localeCookie and a commented defineStorage example. kitr add analytics writes an empty AppEvents in app/analytics.ts with two events as a comment, and config/analytics.ts now templates the cookieless Plausible adapter first (VITE_PLAUSIBLE_DOMAIN, optional VITE_PLAUSIBLE_HOST) and Google Analytics second (VITE_GA_MEASUREMENT_ID), all three declared in app/env.ts. With the consent package installed, the config says analytics is held until the visitor accepts. The saas kit declares the events its pages track.

    • Patch

      An app can hook its own step into kitr generate: list it under generate in kitrrc.ts, as { name: 'content', run: 'node scripts/content.mjs', watch: ['content/**'] } or with run: () => import('./scripts/content'). App steps run after the type generators and the package steps in kitr generate, kitr dev, kitr build and kitr typecheck; kitr generate --check skips them like the package steps, and the new kitr generate --quiet shows a step's output only when it fails. kitr doctor lists each step.

      @kitr/cli@kitr/core
    • Patch

      kitr doctor no longer warns "kitr packages are on different versions: 0.3.1, ^0.3.1" in a fresh pnpm project. kitr new writes 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 with Cannot find module '@kitr/cli' when kitr runs 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 doctor no longer asks to list @kitr/kitr itself in kitrrc.ts. New projects' biome.json follows .gitignore. Prerendering with crawlLinks renders one page per path: #anchor links no longer re-render the same page or fill the sitemap with anchors. kitr make:store says in the generated file and AGENTS.md that the store needs its Provider for server rendering. kitr --help mentions that packages add their own commands inside a project.

    • Patch

      New projects no longer write directories.routes in kitrrc.ts: the route table in app/routes.ts is code, and a missing routes directory already means code routes. The scaffolded .gitignore ignores *.log.

      @kitr/cli
    • Patch

      kitr add testing writes a real first test. With the starter home page, test/home.test.tsx renders it with renderWithKitr inside 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/health test. The saas and site kits, which replace the starter page, drop the starter's test with it.

      @kitr/kit-saas@kitr/kit-site@kitr/testing
    • Patch

      .root() takes { lazy: () => import('./pages/not-found') } for notFoundComponent, errorComponent and pendingComponent, the way .page() takes lazy, 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 to string. The router guide has a "Links from data" section on why a list of concrete paths such as /docs/agents does not type-check against to, and how kitr make:page 'docs/$slug' names its file.

    • Patch

      kitr make:page says 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 form kitr 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 in config/seo.ts prerender.routes still fails the build; a crawled link only warns, unless prerender.failOnError is true.

    • Patch

      seo(options, ctx) builds the canonical URL and og:url from site.url plus the matched path when url is left out, instead of pointing every page at the home page. It also takes title and description from the loader's data when the options leave them out, so head: (ctx) => seo({}, ctx) is enough for a page whose loader returns them.

    • Patch

      kitr make:store removes the app/stores/.gitkeep placeholder that kitr add state wrote, once the folder has its first store.

    • Patch

      A store read on the server outside its StoreProvider no 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 pass strict: true to keep the error.

    • Patch

      kitr ui add button --registry ./registry/dist no longer treats the registry path as a second component name and fails with Component "./registry/dist" not found.

    • Patch

      A static web build writes 404.html from the root route's notFoundComponent, which Netlify, Cloudflare Pages and GitHub Pages serve for unknown paths. kitr start serves it with status 404 in static mode; spa mode keeps answering unknown paths with the shell and status 200.

  7. 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 still kitr.

      @kitr/kitr
  8. 0.3.0

    59 packages published

    • Minor

      The CLI and the kitrrc.ts config are published as @kitr/kitr: npm refuses the unscoped name kitr. Install it with npm install -g @kitr/kitr (the command is still kitr) and import from @kitr/kitr/app and @kitr/kitr/env.

      @kitr/kitr
  9. 0.2.1

    59 packages published

    • Patch

      createI18n now defaults defaultNS to common when a bundle has it, else the first namespace in resources, instead of i18next's translation. Without a defaultNS, t('hello') printed the key in every language.

  10. 0.2.0

    59 packages published