Configuration
maestro-parallel reads an optional maestroparallel.config.{ts,mts,js,mjs,cjs,json} from the project root.
Minimal
export default {
bundleId: 'com.example.app',
};
Full example
export default {
bundleId: 'com.shoptet.admin',
flowsDir: '.maestro/flows',
appleTeamId: 'MTHKX3U9QF',
buildStrategy: 'expo', // override auto-detect
buildEnv: { SENTRY_DISABLE_AUTO_UPLOAD: 'true' }, // env for build child
maestroEnv: { APP_BASE_URL: 'https://779779.myshoptet.com' },
iosSequential: true, // default true — XCTestService races on per-sim ports
iosShardAll: false, // mutually exclusive with iosSequential
processStartStaggerMs: 2000, // workaround for Maestro 2.5.x log-dir race
keepRuns: 3,
};
Fields
bundleId?: string
App bundle identifier (com.example.app). Required for clearAppState (skipped silently when absent).
flowsDir?: string
Maestro flows directory or single flow file, relative to cwd. Default .maestro.
outputDir?: string
Where to write per-run output. Default .maestro/output.
keepRuns?: number
Past parallel-* runs kept in outputDir. Default 3.
maestroConfigPath?: string
Path to project's existing Maestro config. Used when iosShardAll is true — executionOrder.flowsOrder is stripped from a temp copy so --shard-all works. Default .maestro/config.yaml.
maestroEnv?: Record<string, string>
Extra env vars forwarded to Maestro via -e KEY=VALUE. Host env wins.
build?: { android?: PlatformBuildHooks; ios?: PlatformBuildHooks }
Per-platform build hooks. Omit a platform to disable it. When you set these, auto-detect is skipped for that platform. See Build strategies → Custom hooks.
hooks?: { preTest?: (devices: Device[]) => Promise<void> }
Run between build/install and Maestro. Useful for permission grants, keychain reset, etc.
iosSequential?: boolean
Default true. Maestro 2.5.x races on per-sim XCTestService ports when more than one iOS device is driven concurrently.
iosShardAll?: boolean
Default false. Run one Maestro process with --shard-all=N instead of one process per device. Mutually exclusive with iosSequential.
appleTeamId?: string
10-char Apple Developer Team ID. Required for physical iOS — Maestro builds its iOS WebDriver against the device and needs a team to code-sign it. CLI --apple-team-id and env MAESTRO_APPLE_TEAM_ID both override this.
processStartStaggerMs?: number
Delay (ms) between starting consecutive Maestro processes. Workaround for the Maestro 2.5.x per-second session-log-dir race. Default 2000. Set to 0 to disable.
buildMode?: 'release' | 'skip'
Pre-selected build mode. CLI --release / --skip-build override.
buildStrategy?: 'auto' | 'rock' | 'eas' | 'expo'
Pin the auto-detect choice. Default 'auto' (priority: rock > eas > expo). Use when your project has artifacts of more than one strategy.
buildEnv?: Record<string, string>
Env merged into the auto-detected build child (Rock / EAS / expo run:*). Has no effect on user-defined build.* hooks — those control their own env. Common use: SENTRY_DISABLE_AUTO_UPLOAD: 'true'.