Skip to content
Titanium SDK

CLI configuration

Written for Titanium SDK 13.4.0 and later

The CLI stores its own settings, separately from any project. They live in ~/.titanium/config.json, and ti config is how to read and write them.

ti config                                  # everything
ti config cli.logLevel                     # one key
ti config cli.logLevel info                # set it
ti config cli.logLevel --remove            # back to the default

The path is printed by ti config --help, so a machine that keeps it elsewhere will say so.

Keys

Paths

Key What
paths.sdks Extra directories to find SDKs in
paths.modules Extra directories to find modules in
paths.plugins Extra directories to find CLI plugins in
paths.commands Extra CLI commands
paths.hooks Extra build hooks

These take lists, so they have --append and --remove:

ti config paths.modules --append ~/shared/modules

A path added here applies to every project on the machine, which makes a build depend on the machine. It is useful for a shared module cache and a liability for anything a colleague needs too.

Android

Key What
android.sdkPath Where the Android SDK is
android.ndkPath Where the NDK is, if you build native code
android.buildTools.selectedVersion Pin build tools when the newest is too new

android.sdkPath is what ti setup android writes, and it is the answer to "the build cannot find the Android SDK" - not an environment variable. ANDROID_HOME is not read by the app build; the detection order is this config key, then ANDROID_SDK_ROOT, then ANDROID_SDK, then adb on PATH.

iOS

Key What
ios.developerName Default development certificate
ios.distributionName Default distribution certificate

Setting these saves passing --developer-name on every device build.

CLI behaviour

Key Default What
cli.logLevel trace Default verbosity
cli.colors true ANSI colour
cli.progressBars true Progress bars
cli.prompt true Ask for missing values
cli.width 80 Wrap width
cli.completion false Shell completion
cli.httpProxyServer empty Proxy for CLI requests
cli.rejectUnauthorized true Verify TLS on CLI requests
cli.ignoreDirs a regex Directories never copied into a build
cli.ignoreFiles a regex Files never copied into a build

Warning

cli.rejectUnauthorized false disables certificate verification for everything the CLI fetches, including SDK downloads. If a corporate proxy is the reason, set cli.httpProxyServer instead and leave verification on.

cli.ignoreDirs and cli.ignoreFiles are why .git and .DS_Store do not end up inside your app. Widen them to keep something else out; replacing them wholesale is how a .git directory ships to the store.

App

Key What
app.workspace Default directory for new projects
user.name Name used in generated files

Per-run overrides

--config takes JSON and applies for that run only, which is the way to script something without changing the machine:

ti build --platform android --config '{"cli":{"logLevel":"warn"}}'

--config-file points at a different file entirely, which is how CI can carry its own settings without touching a developer's.

What is not here

Anything about the app itself - id, name, version, permissions, modules - is in tiapp.xml, not here. See tiapp.xml. The rule is that this file describes the machine and tiapp.xml describes the app, which is also why this one is not in version control and that one is.

Edit this page on GitHubLast updated Nov 9, 2026