Skip to main content

Local Configuration

airborne-devkit keeps two kinds of local configuration in your React Native project:

  • airborne-config.json — a project-level file describing your organisations, namespaces, JavaScript entry file, and per-platform bundle output paths. Created once with create-local-airborne-config.
  • release_config.json — a per-platform file that lists the bundled index file and the rest of the generated assets, along with the boot and release-config timeouts. Created with create-local-release-config and modified with update-local-release-config.

All three commands accept an optional [directoryPath] as the first argument and default to the current working directory. When required values are omitted, the commands prompt for them interactively.

create-local-airborne-config

Initializes Airborne in your React Native project by writing airborne-config.json at the project root.

# Interactive mode (recommended)
npx airborne-devkit create-local-airborne-config

# With all options
npx airborne-devkit create-local-airborne-config [directoryPath] \
--android-organisation <android-organisation> \
--ios-organisation <ios-organisation> \
--android-namespace <android-namespace> \
--ios-namespace <ios-namespace> \
-j <js-entry-file> \
-a <android-index-file> \
-i <ios-index-file> \
-e

Parameters:

ParameterTypeRequiredDescription
[directoryPath]stringNoDirectory where the config is created (defaults to the current directory).
--android-organisationstringNoOrganisation name for Android.
--ios-organisationstringNoOrganisation name for iOS.
--android-namespacestringNoNamespace or application name for Android.
--ios-namespacestringNoNamespace or application name for iOS.
-j, --js-entry-filestringNoPath to the JavaScript entry file.
-a, --android-index-filestringNoPath to the Android bundle output file.
-i, --ios-index-filestringNoPath to the iOS bundle output file.
-e, --expoflagNoIndicates the project uses Expo.
--hermes-enabledflagNoEnables the Hermes engine for the bundle.

In interactive mode you are asked whether the project uses Expo (and whether Hermes is enabled) first, then for each organisation, namespace, and file path. Sensible defaults are offered: the JS entry file defaults to index.js (node_modules/expo-router/entry.js for Expo), the Android index file to index.android.bundle, and the iOS index file to main.jsbundle.

The resulting airborne-config.json looks like this:

{
"hermes_enabled": false,
"expo": false,
"js_entry_file": "index.js",
"android": {
"organisation": "MyCompany",
"namespace": "MyApp",
"index_file_path": "index.android.bundle"
},
"ios": {
"organisation": "MyCompany",
"namespace": "MyApp",
"index_file_path": "main.jsbundle"
}
}
note

The command fails if an airborne-config.json already exists in the target directory. Edit the existing file directly, or remove it and re-run.

create-local-release-config

Bundles your JavaScript for a platform and writes a release_config.json describing the package. The command runs the React Native bundler (react-native bundle) — or the Expo bundler (expo export:embed) when the project is marked as Expo — and, when Hermes is enabled, compiles the Hermes bytecode bundle. It then records the generated index file and every other generated asset.

# Interactive mode (recommended)
npx airborne-devkit create-local-release-config

# With platform specified
npx airborne-devkit create-local-release-config -p android

# With all options
npx airborne-devkit create-local-release-config [directoryPath] \
-p <platform> \
-b <boot-timeout> \
-r <release-config-timeout>

Parameters:

ParameterTypeRequiredDescription
[directoryPath]stringNoDirectory where the config is created (defaults to the current directory).
-p, --platformandroid or iosNoTarget platform. Prompted for if omitted.
-b, --boot-timeoutnumberNoBoot timeout in milliseconds (must be a positive number). Defaults to 4000.
-r, --release-config-timeoutnumberNoRelease config timeout in milliseconds (must be a positive number). Defaults to 4000.

Where the file lands depends on the platform:

  • Androidandroid/app/src/main/assets/<namespace>/release_config.json
  • iOSios/release_config.json (a Ruby helper also wires the config into the iOS project)

A freshly generated release_config.json has this shape, with url and checksum fields left empty until you run create-remote-files:

{
"version": "",
"config": {
"version": "",
"boot_timeout": 4000,
"release_config_timeout": 4000,
"properties": {}
},
"package": {
"name": "MyApp",
"version": "",
"index": {
"file_path": "index.android.bundle",
"url": "",
"checksum": ""
},
"important": [
{ "file_path": "assets/...", "url": "" }
],
"lazy": []
},
"resources": []
}
note

create-local-release-config requires an existing airborne-config.json in the directory. It fails if a release config for the chosen platform already exists — use update-local-release-config to modify it instead.

update-local-release-config

Re-bundles the JavaScript and updates an existing release_config.json for a platform, preserving fields such as properties and resources while refreshing the generated file list and any timeouts you pass.

# Interactive mode
npx airborne-devkit update-local-release-config

# Update a specific platform
npx airborne-devkit update-local-release-config -p android

# Update timeouts
npx airborne-devkit update-local-release-config -p ios -b 45000 -r 90000

Parameters:

ParameterTypeRequiredDescription
[directoryPath]stringNoDirectory containing the config (defaults to the current directory).
-p, --platformandroid or iosNoTarget platform. Prompted for if omitted.
-b, --boot-timeoutnumberNoNew boot timeout in milliseconds (must be a positive number).
-r, --release-timeoutnumberNoNew release config timeout in milliseconds (must be a positive number).

Only the timeout values you supply are changed; any others remain as they were. The command requires both an existing airborne-config.json and an existing release_config.json for the platform, and fails if the release config is missing — use create-local-release-config for that.

Next