# Documentation - [i99dash for developers](/docs): Build mini-apps that run on i99dash car head-units. From zero to published in five minutes. - Getting started - [Quickstart](/docs/getting-started): From zero to a running mini-app in five minutes. Copy-paste the commands; nothing else to configure. - [What is a mini-app?](/docs/getting-started/what-is-a-mini-app): The mental model — host, bridge, manifest, bundle. Read once before you start; everything else clicks faster. - [Installation](/docs/getting-started/installation): Prerequisites + the three install patterns (one-shot, project, global). - Frameworks - [Pick a framework](/docs/getting-started/frameworks): Mini-apps are static bundles, so any framework that emits a static export works. Here's the one-line summary for the common ones. - [Next.js](/docs/getting-started/frameworks/nextjs): App router + static export. The two pitfalls to know up front, plus a working pattern. - [Nuxt](/docs/getting-started/frameworks/nuxt): Same shape as Next.js — fully static build plus a `` wrapper around anything that touches the host bridge. - [Vanilla HTML / JS](/docs/getting-started/frameworks/vanilla): The simplest integration — plain HTML served as static files, no bundler. - [Upload your app](/docs/getting-started/upload-your-app): End-to-end publish flow for an app you already wrote — from CLI install to the catalog row going live. - [Publishing](/docs/getting-started/publishing): Reference for what `publish` does, how versioning works, and what changes will break users. - Concepts - [Concepts](/docs/concepts): The mental models you need to read SDK code without surprises. One page per non-obvious thing. - [The bridge](/docs/concepts/the-bridge): What `MiniAppClient` actually wraps, why your code never touches it directly, and how to fake it in tests. - [Calling your backend](/docs/concepts/calling-your-backend): The `callApi()` mental model. Why it isn't `fetch()`. How the host's allow-list works. The two failure shapes. - [Error model](/docs/concepts/error-model): Two failure shapes, seven error classes, one decision flow. Understand the SDK's error contract once and stop second-guessing. - Develop - [Develop](/docs/develop): Working-on-your-app reference — local dev, auth, beta + flight test, privileged ops, MCP integration for AI agents. - [Local development](/docs/develop/local-dev): Fixture grammar, control panel, and how to run the dev-server alongside your framework's own. - [Authentication](/docs/develop/authentication): Device-code OAuth login, where the API key lives, and how to provision CI / headless machines. - [Beta testing](/docs/develop/beta-testing): Publish a build to a small group of Telegram-verified testers before the public catalog. TestFlight-style workflow for i99dash mini-apps. - [Flight test](/docs/develop/flight-test): The pre-flight checklist before promoting a beta build to production. Verifies the build holds up on real cars, not just your dev-server. - [Privileged mini-apps](/docs/develop/privileged-apps): When to reach for `@i99dash/admin-sdk`, how the security model works, and how to write your first privileged call. - [MCP server](/docs/develop/mcp-server): Use AI coding agents (Claude, Cursor, Continue) against the i99dash docs over Model Context Protocol. Install in 30 seconds, structured search + per-page fetch. - Guides - [Guides](/docs/guides): Workflow patterns and rules. Read these before shipping. - [Best practices](/docs/guides/best-practices): The non-obvious rules that prevent production incidents. Read before shipping. - [Subscriptions](/docs/guides/subscriptions): Lifecycle, cleanup, framework patterns. The single most common bug class with the SDK. - [Testing](/docs/guides/testing): How to test mini-app code with `MiniAppClient.withBridge()` — the one seam you need. - [Type-only imports](/docs/guides/type-only-imports): When to use `@i99dash/sdk/types` vs the main entry, and why both exist. - Recipes - [Recipes](/docs/recipes): Copy-paste end-to-end builds and patterns. Each recipe is a full, runnable example. - [Fetch and render a list](/docs/recipes/fuel-prices): The simplest real recipe — call your backend once, render a list, handle the failure path. ~10 minutes. - [Polling with cancellation](/docs/recipes/polling): Refresh data on a timer, cancel cleanly when the user navigates away. ~5 minutes. - [Locale-aware rendering](/docs/recipes/locale-aware): Read the host's locale, flip RTL, render translations, react to mid-session locale changes. ~5 minutes. - [Real-time car status widget](/docs/recipes/car-status-widget): End-to-end recipe — scaffold, wire the streaming car-status bridge, render door / battery / lock state, ship it. ~30 minutes. - API reference - [API reference](/docs/api): Auto-generated TypeScript reference for every public symbol across the i99dash SDK monorepo. - @i99dash/sdk - [@i99dash/sdk](/docs/api/sdk): Runtime client for mini-apps — host bridge, callApi, getContext, car status. - [Bridge](/docs/api/sdk/bridge): `Bridge` — public type from `@i99dash/sdk`. - [BridgeTimeoutError](/docs/api/sdk/bridge-timeout-error): `BridgeTimeoutError` — public export from `@i99dash/sdk`. - [BridgeTransportError](/docs/api/sdk/bridge-transport-error): `BridgeTransportError` — public export from `@i99dash/sdk`. - [CallOptions](/docs/api/sdk/call-options): `CallOptions` — public type from `@i99dash/sdk`. - [CarConnectionListener](/docs/api/sdk/car-connection-listener): `CarConnectionListener` — public type from `@i99dash/sdk`. - [CarStatusBridge](/docs/api/sdk/car-status-bridge): `CarStatusBridge` — public type from `@i99dash/sdk`. - [CarStatusController](/docs/api/sdk/car-status-controller): `CarStatusController` — public export from `@i99dash/sdk`. - [CarStatusListener](/docs/api/sdk/car-status-listener): `CarStatusListener` — public type from `@i99dash/sdk`. - [CarStatusQuotaExceededError](/docs/api/sdk/car-status-quota-exceeded-error): `CarStatusQuotaExceededError` — public export from `@i99dash/sdk`. - [CarStatusUnavailableError](/docs/api/sdk/car-status-unavailable-error): `CarStatusUnavailableError` — public export from `@i99dash/sdk`. - [HostBridge](/docs/api/sdk/host-bridge): `HostBridge` — public export from `@i99dash/sdk`. - [HostBridgeApi](/docs/api/sdk/host-bridge-api): `HostBridgeApi` — public type from `@i99dash/sdk`. - [HOST_EVENTS_GLOBAL](/docs/api/sdk/host-events-global): `HOST_EVENTS_GLOBAL` — public export from `@i99dash/sdk`. - [HOST_GLOBAL](/docs/api/sdk/host-global): `HOST_GLOBAL` — public export from `@i99dash/sdk`. - [InvalidResponseError](/docs/api/sdk/invalid-response-error): `InvalidResponseError` — public export from `@i99dash/sdk`. - [isCarStatusBridge](/docs/api/sdk/is-car-status-bridge): `isCarStatusBridge` — public export from `@i99dash/sdk`. - [LEGACY_HOST_GLOBAL](/docs/api/sdk/legacy-host-global): `LEGACY_HOST_GLOBAL` — public export from `@i99dash/sdk`. - [MiniAppClient](/docs/api/sdk/mini-app-client): `MiniAppClient` — public export from `@i99dash/sdk`. - [NotInsideHostError](/docs/api/sdk/not-inside-host-error): `NotInsideHostError` — public export from `@i99dash/sdk`. - [resolveHostApi](/docs/api/sdk/resolve-host-api): `resolveHostApi` — public export from `@i99dash/sdk`. - [SDKError](/docs/api/sdk/sdk-error): `SDKError` — public export from `@i99dash/sdk`. - [SDKErrorCode](/docs/api/sdk/sdk-error-code): `SDKErrorCode` — public type from `@i99dash/sdk`. - [WindowWithHost](/docs/api/sdk/window-with-host): `WindowWithHost` — public type from `@i99dash/sdk`. - [withTimeout](/docs/api/sdk/with-timeout): `withTimeout` — public export from `@i99dash/sdk`. - @i99dash/admin-sdk - [@i99dash/admin-sdk](/docs/api/admin-sdk): API reference for the @i99dash/admin-sdk package. - [AdminBridge](/docs/api/admin-sdk/admin-bridge): `AdminBridge` — public type from `@i99dash/admin-sdk`. - [AdminClient](/docs/api/admin-sdk/admin-client): `AdminClient` — public export from `@i99dash/admin-sdk`. - [AdminClientContext](/docs/api/admin-sdk/admin-client-context): `AdminClientContext` — public type from `@i99dash/admin-sdk`. - [AdminClientOptions](/docs/api/admin-sdk/admin-client-options): `AdminClientOptions` — public type from `@i99dash/admin-sdk`. - [AdminExecRequest](/docs/api/admin-sdk/admin-exec-request): `AdminExecRequest` — public type from `@i99dash/admin-sdk`. - [AdminOpResponse](/docs/api/admin-sdk/admin-op-response): `AdminOpResponse` — public type from `@i99dash/admin-sdk`. - [CapabilityResponse](/docs/api/admin-sdk/capability-response): `CapabilityResponse` — public type from `@i99dash/admin-sdk`. - [CatalogSnapshot](/docs/api/admin-sdk/catalog-snapshot): `CatalogSnapshot` — public type from `@i99dash/admin-sdk`. - [CommandTemplate](/docs/api/admin-sdk/command-template): `CommandTemplate` — public type from `@i99dash/admin-sdk`. - [FakeAdminBridge](/docs/api/admin-sdk/fake-admin-bridge): `FakeAdminBridge` — public export from `@i99dash/admin-sdk`. - [HostAdminBridge](/docs/api/admin-sdk/host-admin-bridge): `HostAdminBridge` — public export from `@i99dash/admin-sdk`. - [InvokeOptions](/docs/api/admin-sdk/invoke-options): `InvokeOptions` — public type from `@i99dash/admin-sdk`. - [ParamRule](/docs/api/admin-sdk/param-rule): `ParamRule` — public type from `@i99dash/admin-sdk`. - [snapshotFromList](/docs/api/admin-sdk/snapshot-from-list): `snapshotFromList` — public export from `@i99dash/admin-sdk`. - [UnknownTemplateError](/docs/api/admin-sdk/unknown-template-error): `UnknownTemplateError` — public export from `@i99dash/admin-sdk`. - @i99dash/sdk-cli - [@i99dash/sdk-cli](/docs/api/sdk-cli): API reference for the @i99dash/sdk-cli package. - [makeBetaCommand](/docs/api/sdk-cli/make-beta-command): `makeBetaCommand` — public export from `@i99dash/sdk-cli`. - [runBuild](/docs/api/sdk-cli/run-build): `runBuild` — public export from `@i99dash/sdk-cli`. - [runDev](/docs/api/sdk-cli/run-dev): `runDev` — public export from `@i99dash/sdk-cli`. - [runInit](/docs/api/sdk-cli/run-init): `runInit` — public export from `@i99dash/sdk-cli`. - [runLogin](/docs/api/sdk-cli/run-login): `runLogin` — public export from `@i99dash/sdk-cli`. - [runLogout](/docs/api/sdk-cli/run-logout): `runLogout` — public export from `@i99dash/sdk-cli`. - [runPublish](/docs/api/sdk-cli/run-publish): `runPublish` — public export from `@i99dash/sdk-cli`. - [runValidate](/docs/api/sdk-cli/run-validate): `runValidate` — public export from `@i99dash/sdk-cli`. - [runWhoami](/docs/api/sdk-cli/run-whoami): `runWhoami` — public export from `@i99dash/sdk-cli`. - @i99dash/sdk-dev-server - [@i99dash/sdk-dev-server](/docs/api/sdk-dev-server): API reference for the @i99dash/sdk-dev-server package. - [buildServer](/docs/api/sdk-dev-server/build-server): `buildServer` — public export from `@i99dash/sdk-dev-server`. - [DevServerState](/docs/api/sdk-dev-server/dev-server-state): `DevServerState` — public type from `@i99dash/sdk-dev-server`. - [DevServerStatePatch](/docs/api/sdk-dev-server/dev-server-state-patch): `DevServerStatePatch` — public type from `@i99dash/sdk-dev-server`. - [Fixture](/docs/api/sdk-dev-server/fixture): `Fixture` — public type from `@i99dash/sdk-dev-server`. - [FixtureStore](/docs/api/sdk-dev-server/fixture-store): `FixtureStore` — public export from `@i99dash/sdk-dev-server`. - [StateStore](/docs/api/sdk-dev-server/state-store): `StateStore` — public export from `@i99dash/sdk-dev-server`. - @i99dash/types - [@i99dash/types](/docs/api/types): API reference for the @i99dash/types package. - [ApiMethod](/docs/api/types/api-method): `ApiMethod` — public type from `@i99dash/types`. - [ApiMethodSchema](/docs/api/types/api-method-schema): `ApiMethodSchema` — public export from `@i99dash/types`. - [CallApiRequest](/docs/api/types/call-api-request): `CallApiRequest` — public type from `@i99dash/types`. - [CallApiRequestSchema](/docs/api/types/call-api-request-schema): `CallApiRequestSchema` — public export from `@i99dash/types`. - [CallApiResponse](/docs/api/types/call-api-response): `CallApiResponse` — public type from `@i99dash/types`. - [CallApiResponseSchema](/docs/api/types/call-api-response-schema): `CallApiResponseSchema` — public export from `@i99dash/types`. - [CarConnectionState](/docs/api/types/car-connection-state): `CarConnectionState` — public type from `@i99dash/types`. - [CarConnectionStateSchema](/docs/api/types/car-connection-state-schema): `CarConnectionStateSchema` — public export from `@i99dash/types`. - [CarDoorState](/docs/api/types/car-door-state): `CarDoorState` — public type from `@i99dash/types`. - [CarDoorStateSchema](/docs/api/types/car-door-state-schema): `CarDoorStateSchema` — public export from `@i99dash/types`. - [CarDoors](/docs/api/types/car-doors): `CarDoors` — public type from `@i99dash/types`. - [CarDoorsSchema](/docs/api/types/car-doors-schema): `CarDoorsSchema` — public export from `@i99dash/types`. - [CarStatus](/docs/api/types/car-status): `CarStatus` — public type from `@i99dash/types`. - [CarStatusSchema](/docs/api/types/car-status-schema): `CarStatusSchema` — public export from `@i99dash/types`. - [CarStatusStaleness](/docs/api/types/car-status-staleness): `CarStatusStaleness` — public type from `@i99dash/types`. - [CarStatusStalenessSchema](/docs/api/types/car-status-staleness-schema): `CarStatusStalenessSchema` — public export from `@i99dash/types`. - [LocaleMap](/docs/api/types/locale-map): `LocaleMap` — public type from `@i99dash/types`. - [LocaleMapSchema](/docs/api/types/locale-map-schema): `LocaleMapSchema` — public export from `@i99dash/types`. - [MiniAppContext](/docs/api/types/mini-app-context): `MiniAppContext` — public type from `@i99dash/types`. - [MiniAppContextSchema](/docs/api/types/mini-app-context-schema): `MiniAppContextSchema` — public export from `@i99dash/types`. - [MiniAppManifest](/docs/api/types/mini-app-manifest): `MiniAppManifest` — public type from `@i99dash/types`. - [MiniAppManifestSchema](/docs/api/types/mini-app-manifest-schema): `MiniAppManifestSchema` — public export from `@i99dash/types`. - Troubleshooting - [Troubleshooting](/docs/troubleshooting): Issues we've actually hit, with root causes and fixes. Symptom → cause → fix. - [Glossary](/docs/glossary): One canonical definition for every i99dash term that appears across the docs.