Entry points
How kitr/* imports map to packages, and the rules behind them.
Every kitr/* import maps to one @kitr/* package. The umbrella kitr package is a set of one-line re-exports plus the CLI binary; it has no code of its own.
The rules
- Re-export, never re-implement.
kitr/routerdoesexport * from '@tanstack/react-router'. Nothing upstream is renamed, wrapped or hidden. If a TanStack doc page saysimport { Link } from '@tanstack/react-router',import { Link } from 'kitr/router'is the same thing. - Add beside, never change. kitr's additions are new names (
createKitrRouter,defineQuery,useUrlTableState). The one exception is documented in departures.md:kitr/formsexports its ownFormand re-exports React Hook Form's asRhfForm. - Providers are subpaths.
kitr/query/provider,kitr/http/provider,kitr/theme/provider,kitr/auth/providerexport a provider asdefault, sokitrrc.tscan lazy-import them without pulling the rest of the package into the boot path. - Server entries never import React.
kitr/server,kitr/api,kitr/logger,kitr/realtime/server,kitr/realtime/socket.io/server,kitr/realtime/sse/server,kitr/auth/server,kitr/dbandkitr/testingare safe in a Node-only project.kitr/testing/reactis whererenderWithKitrlives. - Platforms are packages.
kitr/web,kitr/server,kitr/desktopandkitr/mobileeach export a factory built withdefinePlatformfrom@kitr/core. The core knows the contract, never a platform. - Optional peers.
kitrlists every@kitr/*package as an optional peer.kitr add <name>installs the ones you use; importing an entry whose package is missing fails at build time with a clear module-not-found, not at runtime.
One exception you will hit
In route files, import createFileRoute, createLazyFileRoute and the root-route creators from @tanstack/react-router directly:
import { createFileRoute } from '@tanstack/react-router'
import { Link, Outlet } from 'kitr/router'
TanStack's route generator rewrites that specific import in every route file and only recognises @tanstack/react-router as its source. Everything else in the file comes from kitr/router. kitr doctor knows about this exception and does not flag it.
Reading the map
| Entry | Package | React |
|---|---|---|
kitr, kitr/app |
@kitr/core |
no |
kitr/env |
@kitr/core |
no |
kitr/react |
@kitr/react |
yes |
kitr/router |
@kitr/router |
yes |
kitr/query, kitr/query/provider |
@kitr/query |
yes |
kitr/http, kitr/http/provider |
@kitr/http |
no (provider is framework-neutral) |
kitr/forms |
@kitr/forms |
yes |
kitr/table |
@kitr/table |
yes |
kitr/state |
@kitr/state |
yes |
kitr/tailwind, kitr/tailwind/vite, kitr/tailwind/preset.css |
@kitr/tailwind |
no |
kitr/theme, kitr/theme/provider, kitr/theme/styles.css |
@kitr/theme |
yes |
kitr/theme/server |
@kitr/theme |
no |
kitr/logger |
@kitr/logger |
no |
kitr/server, kitr/server/platform |
@kitr/server |
no |
kitr/api, kitr/api/client |
@kitr/api |
no |
kitr/actions |
@kitr/actions |
yes (TanStack Start) |
kitr/seo |
@kitr/seo |
no |
kitr/realtime, kitr/realtime/client, kitr/realtime/socket.io, kitr/realtime/sse |
@kitr/realtime |
no |
kitr/realtime/server, kitr/realtime/socket.io/server, kitr/realtime/sse/server |
@kitr/realtime |
no |
kitr/realtime/react |
@kitr/realtime |
yes |
kitr/auth, kitr/auth/provider |
@kitr/auth |
hooks need React; createAuth does not |
kitr/auth/server |
@kitr/auth |
no |
kitr/db |
@kitr/db |
no |
kitr/testing |
@kitr/testing |
no |
kitr/testing/react |
@kitr/testing |
yes |
kitr/mocks |
@kitr/mocks |
no |
kitr/i18n, kitr/i18n/provider |
@kitr/i18n |
yes |
kitr/analytics, kitr/analytics/provider |
@kitr/analytics |
no |
kitr/analytics/react |
@kitr/analytics |
yes |
kitr/monitoring, kitr/monitoring/provider, kitr/monitoring/server |
@kitr/monitoring |
no |
kitr/platform, kitr/platform/provider |
@kitr/platform |
no |
kitr/platform/react, kitr/platform/devtools |
@kitr/platform |
yes |
kitr/offline, kitr/offline/provider |
@kitr/offline |
no |
kitr/offline/react |
@kitr/offline |
yes |
kitr/flags, kitr/flags/provider, kitr/flags/server |
@kitr/flags |
no |
kitr/flags/react |
@kitr/flags |
yes |
kitr/consent, kitr/consent/provider |
@kitr/consent |
no |
kitr/consent/react |
@kitr/consent |
yes |
kitr/secure-storage, kitr/secure-storage/provider |
@kitr/secure-storage |
no |
kitr/secure-storage/react |
@kitr/secure-storage |
yes |
kitr/files, kitr/files/provider |
@kitr/files |
no |
kitr/files/react |
@kitr/files |
yes |
kitr/notifications, kitr/notifications/provider |
@kitr/notifications |
no |
kitr/notifications/react |
@kitr/notifications |
yes |
kitr/native, kitr/native/provider |
@kitr/native |
no |
kitr/native/react |
@kitr/native |
yes |
kitr/updater, kitr/updater/provider |
@kitr/updater |
no |
kitr/updater/react |
@kitr/updater |
yes |
kitr/cache, kitr/cache/provider |
@kitr/cache |
no |
kitr/shield, kitr/shield/provider |
@kitr/shield |
no |
kitr/mail, kitr/mail/provider |
@kitr/mail |
templates are React elements; sending needs react-dom/server |
kitr/jobs, kitr/jobs/provider |
@kitr/jobs |
no |
kitr/uploads, kitr/uploads/server, kitr/uploads/provider |
@kitr/uploads |
no |
kitr/uploads/react |
@kitr/uploads |
yes |
kitr/storage, kitr/storage/provider, kitr/storage/server |
@kitr/storage |
no |
kitr/storage/react |
@kitr/storage |
yes |
kitr/devtools, kitr/devtools/provider |
@kitr/devtools |
no (kitr/devtools/ui is React) |
kitr/web, kitr/web/vite |
@kitr/web |
no (CLI and build time) |
kitr/web/client, kitr/web/provider |
@kitr/web |
hooks need React |
kitr/desktop, kitr/desktop/electron-main, kitr/desktop/electron-preload |
@kitr/desktop |
no |
kitr/desktop/client, kitr/desktop/tauri, kitr/desktop/electron, kitr/desktop/provider |
@kitr/desktop |
useTauriEvent needs React |
kitr/mobile |
@kitr/mobile |
no (CLI) |
kitr/mobile/client, kitr/mobile/provider |
@kitr/mobile |
no |
kitr/vite |
@kitr/vite |
no (build time) |