Usage

Fail builds on a fallback

tsx
import type { KuitoConfig } from 'kuito/config';

export default {
  name: 'MyApp',
  ios: { bundleIdentifier: 'com.example.myapp' },
  android: { applicationId: 'com.example.myapp' },
  strict: true,
} satisfies KuitoConfig;

Type declaration

ts
export interface KuitoConfig extends Settings {
  environments?: Record<string, Environment>;
  /**
   * The database's migrations, oldest first. Each applies once, in order, when
   * the app first opens the database; append new ones and never edit one that
   * shipped. Every environment shares them.
   */
  migrations?: Migration[];
}

Members 20

NameTypeRequiredDescription
environmentsRecord<string, Environment>No—
migrationsMigration[]NoThe database's migrations, oldest first. Each applies once, in order, when the app first opens the database; append new ones and never edit one that shipped. Every environment shares them.
namestringYesShown under the app icon.
versionstringNoWhat users see: up to three numbers, like 1.2.0. Defaults to 1.0.0.
buildNumbernumberNoWhat the stores order builds by; raise it for every upload. Defaults to 1.
iconstringNoA square PNG of at least 1024×1024, relative to kuito.config.ts.
orientationOrientationNoThe orientations the app runs in. default follows the device.
colorSchemeColorSchemeNolight or dark ignores the system setting, as CSS's color-scheme.
backgroundColorstringNoThe root window's color, behind the app, like #1E88E5.
statusBar{ style?: StatusBarStyle; hidden?: boolean;}NoThe status bar at launch; SystemBars changes it at run time.
urlSchemesstring[]NoSchemes that open the app, like myapp for myapp://show/42 (docs/linking.md).
linkDomainsstring[]NoWeb domains whose https links open the app, like example.com: universal links on iOS, verified app links on Android (docs/linking.md).
ios{ bundleIdentifier: string; icon?: { light?: string; dark?: string; tinted?: string; }; supportsTablet?: boolean; requiresFullScreen?: boolean; deploymentTarget?: string; teamId?: string; associatedDomains?: string[]; pushEnvironment?: PushEnvironment; backgroundModes?: IOSBackgroundMode[]; infoPlist?: PlistDictionary; entitlements?: PlistDictionary;}Yes—
android{ applicationId: string; adaptiveIcon?: { foreground?: string; background?: string; monochrome?: string; }; softInputMode?: SoftInputMode; minSdk?: number; signing?: { keystore?: string; keyAlias?: string; }; manifest?: AndroidManifestSettings; theme?: Record<string, string>;}Yes—
permissionsKuitoPermissionsNoThe permissions the app asks for (docs/permissions.md); none when absent.
backgroundTasksstring[]NoNames of the tasks the OS may run in the background (docs/background-tasks.md). An environment's list replaces this one.
fonts(string | KuitoFont)[]No.ttf and .otf files fontFamily takes (docs/fonts.md), relative to kuito.config.ts. Each file's family, weight and style are read from it; an object sets them instead.
splashKuitoSplashNoThe launch screen, and the view the app hands off from (docs/splash.md).
updates{ url: string; publicKey: string;}NoOver-the-air updates of a release build (docs/updates.md): where its shell looks for them, and the key their signatures are checked with. Absent, a release build takes none.
strictbooleanNoCode that reads or moves what lives on the UI thread but has to run on the JS thread fails the build, instead of showing in the placement report (docs/placement.md). Defaults to false.
statusBar — nested fields

statusBar fields

NameTypeRequiredDescription
styleStatusBarStyleNoThe color of its content: light for dark backgrounds. auto follows the color scheme.
hiddenbooleanNo—
ios — nested fields

ios fields

NameTypeRequiredDescription
bundleIdentifierstringYes—
icon{ light?: string; dark?: string; tinted?: string;}Nolight replaces icon on iOS; dark and tinted are its iOS 18 appearances.
supportsTabletbooleanNoRuns on iPad too. Defaults to true.
requiresFullScreenbooleanNoOpts out of iPad multitasking (UIRequiresFullScreen).
deploymentTargetstringNoThe oldest iOS the app runs on, 16.0 or later.
teamIdstringNoThe Apple Developer Team ID an iPhone build signs with, like A1B2C3D4E5 (docs/cli.md#release-builds). Simulator builds need none.
associatedDomainsstring[]NoLike applinks:example.com, for universal links.
pushEnvironment"development" | "production"NoThe APNs environment remote push uses: the aps-environment entitlement (docs/notifications.md#remote-push). Absent, the app receives no push.
backgroundModes("location" | "audio" | "voip" | "fetch" | "remote-notification" | "processing" | "external-accessory" | "bluetooth-central" | "bluetooth-peripheral" | "nearby-interaction" | "push-to-talk")[]No—
infoPlistPlistDictionaryNoMerged into the generated Info.plist.
entitlementsPlistDictionaryNoMerged into the generated entitlements.
icon — nested fields

icon fields

NameTypeRequiredDescription
lightstringNo—
darkstringNo—
tintedstringNo—
android — nested fields

android fields

NameTypeRequiredDescription
applicationIdstringYes—
adaptiveIcon{ foreground?: string; background?: string; monochrome?: string;}NoLayers of the 108dp adaptive icon; without one, icon fills its visible 72dp.
softInputModeSoftInputModeNoWhat the window does for the keyboard. Defaults to resize (docs/apps.md).
minSdknumberNoThe oldest Android API level the app runs on, 26 or later.
signing{ keystore?: string; keyAlias?: string;}NoThe upload key a release build signs with (docs/cli.md#signing): a keystore relative to kuito.config.ts and its alias. Its passwords come from the environment only.
manifestAndroidManifestSettingsNoAdditions to the generated AndroidManifest.xml, as data.
themeRecord<string, string>NoItems of the app's theme, AppTheme, by name.
adaptiveIcon — nested fields

adaptiveIcon fields

NameTypeRequiredDescription
foregroundstringNo—
backgroundstringNoA color like #1E88E5, or an image.
monochromestringNoThe single-color layer of Android 13's themed icons.
signing — nested fields

signing fields

NameTypeRequiredDescription
keystorestringNo—
keyAliasstringNo—
updates — nested fields

updates fields

NameTypeRequiredDescription
urlstringYesAn https URL the output of kuito update build is uploaded to.
publicKeystringYesThe public key kuito update key printed; its private half never goes here.
Generated from the public TypeScript declarations: signatures, props and defaults come from the checked source, descriptions from its JSDoc. No defaults are invented.