Kite docs

Platforms

One codebase, six build targets. What differs on each.

CI builds all six on every push, so a break shows up before a user finds it.

flutter build web --wasm --release
flutter build web --release          # JS fallback
flutter build apk --release
flutter build ios --release
flutter build macos --release
flutter build windows --release

Web

Two renderers. --wasm compiles to WebAssembly and uses skwasm; browsers without WasmGC fall back to the JS build automatically. WasmGC covers roughly 92% of traffic — Chrome 119+, Firefox 120+, Edge 119+, Safari 18.2+.

Around 1.6 MB gzipped of app payload, plus skwasm.wasm served from Google's CDN and cached across every Flutter site a visitor has used. See Deploying for the font tools that get it there.

Kite uses path URLs, so the host must serve index.html for unknown paths — otherwise refreshing /orders/10004 is a 404.

Core Web Vitals cannot score a Flutter app. It renders to a canvas, so there is no LCP-eligible element and PerformanceObserver reports zero. Use FCP and time-to-interactive. Irrelevant behind a login, but do not let anyone quote you a CWV number.

Mobile

The layouts are genuinely different, not reflowed: the shell swaps its sidebar for a bottom bar and drawer, the inbox pushes a full-screen detail rather than squeezing a second column, and the board scrolls horizontally.

Flutter 3.38+ requires the Apple UIScene lifecycle; the generated iOS project already has it. If you regenerate platform folders from an older template, follow Flutter's UIScene migration guide.

TaskWhere
App iconios/Runner/Assets.xcassets, android/app/src/main/res/mipmap-*
Display nameios/Runner/Info.plist, android/app/src/main/AndroidManifest.xml
Bundle idXcode target settings, android/app/build.gradle
SigningXcode; android/key.properties

Kite ships no network permissions of its own — the mock provider makes no requests. Add INTERNET to the Android manifest and any ATS exceptions to Info.plist when you point it at a real backend.

Desktop

macOS and Windows build unchanged. On macOS, network access needs the entitlement — again, only once you have a real backend:

<!-- macos/Runner/DebugProfile.entitlements and Release.entitlements -->
<key>com.apple.security.network.client</key>
<true/>

Window title and minimum size are in macos/Runner/MainFlutterWindow.swift and windows/runner/main.cpp. The desktop layout is the desktop web layout; nothing branches on platform.

Keyboard

⌘K on macOS and Ctrl+K elsewhere opens the command palette; both are bound, so no platform check is needed. Bindings live on the shell in app_shell.dart, which means they work from any screen behind the guard.