App configuration

Your app is configured by a single waid.config.json at the project root (created by waid new). It sets your app's name, icon, store identity, and the device capabilities it needs.

Conventions

  • Only name (and dist for a real build) is required: everything else is optional with a sensible default.
  • Keys accept camelCase or snake_case (packageName == package_name).
  • Unknown keys produce a warning and have no effect, so check spelling and CLI output.
  • Invalid values (bad icon color, orientation, package name, deeplink scheme) fail the build loudly.

For an older configuration, run waid migrate-config --src . and review the changes. Legacy build-profile keys still parse for compatibility; new projects use the current scaffolded configuration.

Minimal#

json
{
"name": "my-app",
"dist": "dist"
}

Basics#

KeyTypeDefaultWhat it does
namestringrequiredYour app's name, the home-screen label default and the base for derived ids.
diststringinferredPath to the built web bundle. Usually inferred from your Vite config.
versionstring1.0.0+1App version as <name>+<build> (see Version); mapped to the native version fields on every platform.
iconstringbundled defaultPath to an SVG app icon. A missing or non-.svg path fails the build.
iconBackground#RRGGBBwhiteBackground for the Android adaptive icon.
orientationstringunlockedLock the app orientation (portrait, landscape, …).
Development portCLI optionproject-derivedUse waid dev --port <port>; HMR uses Vite’s own connection.

Store identity#

Set your app's store identity per platform. These are optional, since WAID derives a default from name, but you'll want real reverse-DNS ids before shipping.

json
{
"name": "wildlife-journal",
"dist": "dist",
"androidBuildProfile": {
"packageName": "com.acme.wildlife",
"appName": "Wildlife Journal"
},
"iosBuildProfile": {
"bundleId": "com.acme.wildlife",
"appName": "Wildlife Journal"
}
}
KeyPlatformWhat it is
androidBuildProfile.packageNameAndroidThe Play Store / install id (applicationId). Reverse-DNS, no hyphens.
androidBuildProfile.appNameAndroidHome-screen label.
iosBuildProfile.bundleIdiOSThe App Store / install id. Reverse-DNS.
iosBuildProfile.appNameiOSHome-screen display name.

Signing keys also live in these profiles. See Android release and iOS builds.

Version#

Your app's version is a single Flutter-style string at the top level of waid.config.json, "<name>+<build>", that WAID maps to the native version fields on every platform. Set it once:

json
{
"name": "wildlife-journal",
"dist": "dist",
"version": "1.2.0+7"
}
PartAndroidiOS
name (1.2.0)versionNameCFBundleShortVersionString
build (7)versionCodeCFBundleVersion

Absent → "1.0.0+1". Bump the build number on every store upload: both stores reject a build whose number isn't higher than the last. A build profile can override either part for one platform only (androidBuildProfile.versionCode/versionName, iosBuildProfile.version + build number). See Android release and iOS builds.

Renaming is data-safe: except name#

WAID keeps your app's stored data and permissions tied to your name, not to the store id. So:

  • Changing packageName / bundleId is safe: an installed app keeps its data and granted permissions.
  • ⚠️ Do not change name on a shipped app: that orphans its stored data/permissions.
  • ⚠️ Keep name unique across your apps: two apps with the same name share the same storage/permission scope.

Next: Capabilities, the device features your app can request.