desktop
Built on dashboardStart the app kit in an Electron shell with a typed IPC contract and native dialogs.
site: webspaapp: desktopkitr new my-app --kit desktopStart a logged-in app on an external API: forms, tables, state, theme, auth, mocks and tests.
For: Teams building an admin or internal tool on an API they already run.
kitr new my-app --kit dashboardFirst time? Run npm i -g @kitr/kitr once. Inside a project, the global kitr runs your project's own version.
dist/sitehttp is pointed at VITE_API_URL, with typed requests and errors.
auth keeps the session and guards pages; app/abilities.ts holds the permissions.
Set VITE_MOCKS=true and the handlers in app/mocks/ answer every request.
Button, form, data table, app shell and more, copied into app/components/ui.
Read from the kit's output in the kitr repository, so it matches what kitr new writes today. 14 packages · 11 components · 44 files.
Start with app/routes.ts. Pick any file to read it.
import { defineRoutes } from '@kitr/kitr/app'
import router from '@kitr/router/routes'
import { head, RootDocument } from './document'
/**
* Every page of the app, in one place. `kitr make:page <path>` appends to this chain; `.group`
* nests paths, `.layout` wraps pages in a component without a path segment.
*/
export const routes = defineRoutes([router], (r) =>
r
.root({ head, component: RootDocument })
.page('/', { lazy: () => import('./pages/home') })
.page('/about', { lazy: () => import('./pages/about') }),
)
export type AppRoutes = typeof routes.$typesThe same base with a small working app on top, to read or to keep.
Start the app kit in an Electron shell with a typed IPC contract and native dialogs.
site: webspaapp: desktopkitr new my-app --kit desktopStart the app kit in a Tauri shell with typed Rust commands and events from the same React app.
site: webspaapp: taurikitr new my-app --kit tauriStart the app kit as an installable PWA and a Capacitor shell with native lifecycle hooks.
site: webspaphone: mobilekitr new my-app --kit mobile