Pick the platform, not the framework.
A platform is where your app runs. Start with one and add the rest later with a single command: they all share your code, your packages and the CLI. This page helps you choose.
What are you building?
- A website or a web appWebStatic, single-page or server-rendered, and installable as a PWA.
kitr add web site - An API, with or without ReactServerRoutes, controllers and live channels on Node, Bun, Deno or Workers.
kitr add server api - iPhone and Android appsMobileYour React app in a native shell, with deep links and the back button handled.
kitr add mobile phone - A desktop app that looks the same everywhereDesktopElectron ships its own Chromium, so every machine renders it identically.
kitr add desktop app - A desktop app with a small downloadTauriA Rust binary on the system webview. Megabytes, not hundreds of them.
kitr add tauri app
Side by side
What each platform runs on, what it needs on your machine and what a build gives you.
| Platform | Runs on | You also install | Saved items live in | kitr build gives you |
|---|---|---|---|---|
| WebVite + TanStack Start | Static, SPA, SSR, PWA | Nothing else | localStorage | dist/site/client, plus dist/site/server/server.js in ssr mode |
| Serverh3 | Node, Bun, Deno, Workers | Nothing else. Bun, Deno or Wrangler if you pick that runtime | Nowhere: items read their defaults. Use a database or cache | a bundled server in dist/api |
| DesktopElectron | Windows, macOS, Linux | Nothing else | kitr-storage.json in the app data folder | electron-vite builds main, preload and the app |
| TauriRust + system webview | Windows, macOS, Linux | The Rust toolchain | kitr.json, through the Tauri store plugin | tauri build: a native bundle per OS |
| MobileCapacitor | iOS, Android | Xcode for iOS, Android Studio for Android | Capacitor Preferences, kept when the OS clears the webview | the web build synced into ios/ and android/ |
Mix them in one project
Platforms are named entries in kitrrc.ts, so one project can hold several. These are the usual mixes.
A site with its own API
Pages and the API in one project and one set of types. The API mounts inside the site or runs as its own process.
kitr new my-app --kit fullstackBuild a full-stack app →One app on every screen
The same routes and components build a web app, an iPhone and Android app and a desktop app.
kitr add mobile phonekitr add desktop appShip one app everywhere →An API and nothing else
No React in the dependency graph: an h3 server with routes, a database, logs and tests.
kitr new my-api --kit serverBuild an API server without React →Which packages run where
9 of 38 packages run on every platform. On desktop and phones, the marked ones switch to native APIs underneath with no change to your code.
Built for this platform Built for or native on this platformWorks here Works hereNot here Not available
| Package | Web | Server | Desktop | Tauri | Mobile |
|---|---|---|---|---|---|
| Data fetching | |||||
| http | Works here | Not here | Works here | Works here | Works here |
| offline | Works here | Not here | Works here | Works here | Works here |
| query | Works here | Not here | Works here | Works here | Works here |
| App state | |||||
| flags | Works here | Works here | Works here | Works here | Works here |
| state | Works here | Not here | Works here | Works here | Works here |
| Backend | |||||
| actions | Works here | Not here | Not here | Not here | Not here |
| api | Works here | Built for this platform | Works here | Works here | Works here |
| cache | Not here | Built for this platform | Not here | Not here | Not here |
| db | Not here | Built for this platform | Not here | Not here | Not here |
| jobs | Not here | Built for this platform | Not here | Not here | Not here |
| Not here | Built for this platform | Not here | Not here | Not here | |
| shield | Not here | Built for this platform | Not here | Not here | Not here |
| uploads | Works here | Built for this platform | Works here | Works here | Works here |
| Real-time | |||||
| realtime | Works here | Works here | Works here | Works here | Works here |
| Interface | |||||
| 3d | Works here | Not here | Works here | Works here | Works here |
| animation | Works here | Not here | Works here | Works here | Works here |
| i18n | Works here | Not here | Works here | Works here | Works here |
| table | Works here | Not here | Works here | Works here | Works here |
| tailwind | Works here | Not here | Works here | Works here | Works here |
| theme | Works here | Not here | Works here | Works here | Works here |
| toast | Works here | Not here | Works here | Works here | Works here |
| Forms | |||||
| forms | Works here | Not here | Works here | Works here | Works here |
| Auth | |||||
| auth | Works here | Works here | Works here | Works here | Works here |
| Pages & routing | |||||
| router | Works here | Not here | Works here | Works here | Works here |
| seo | Built for this platform | Not here | Not here | Not here | Not here |
| Device features | |||||
| files | Works here | Not here | Works here | Works here | Works here |
| native | Works here | Not here | Works here | Works here | Works here |
| notifications | Works here | Not here | Works here | Works here | Works here |
| platform | Works here | Not here | Built for this platform | Built for this platform | Built for this platform |
| secure-storage | Works here | Not here | Works here | Works here | Works here |
| storage | Works here | Works here | Built for this platform | Built for this platform | Built for this platform |
| Analytics & errors | |||||
| analytics | Works here | Not here | Works here | Works here | Works here |
| consent | Works here | Not here | Works here | Works here | Works here |
| monitoring | Works here | Works here | Works here | Works here | Works here |
| Developer tools | |||||
| devtools | Works here | Not here | Works here | Works here | Works here |
| logger | Works here | Works here | Works here | Works here | Works here |
| mocks | Works here | Not here | Works here | Works here | Works here |
| testing | Works here | Works here | Works here | Works here | Works here |
Need something else, like a kiosk or a browser extension? A platform is a package with a definePlatform() factory, so you can write your own. Write a platform →