Skip to content

Launch Profiles

Define multiple launch variants for an application. Launch profiles show as additional context menu items in the Launcher UI and apply modifications on top of the base policy.

What You'll Learn

  • Add named launch variants with custom arguments and flags
  • Apply launch profile changes on top of merged base modifications
  • Control post-launch actions (for example, open logs folder)

Terminology

  • Launch profiles (apps[].profiles[]): App-level variants that adjust arguments, runtime, mounts, or post-launch actions (for example, chrome-incognito).
  • User configurations (user-profiles.jsonprofiles[]): Per-user environment variables and mounts derived from configuration templates; they do not change arguments or flags.
  • Configuration templates (configurationTemplates[]): Enterprise-defined constraints that user configurations must satisfy; apps link these templates via apps[].configurationTemplates.

Use “launch profile” for context menu variants and “user configuration” for per-user environment/mount definitions to avoid conflating the two.

Launch Profile Structure

json
{
  "id": "profile-id",
  "displayName": "Display Name",
  "actionText": "Action Text",
  "arguments": {
    "append": "additional args",
    "prepend": "prefix args",
    "replace": "replacement args"
  },
  "runtime": {},
  "postLaunchAction": {
    "type": "OpenFolder",
    "path": "%LOCALAPPDATA%\\Turbo\\Containers\\sandboxes\\{ContainerId}\\logs"
  }
}

Fields

FieldRequiredDescription
idYesStable identifier for the launch profile (merge/tie-break key)
displayNameYesHuman-readable name for the profile entity (used for sessions, logs, etc.)
actionTextYesAction-oriented text for UI elements (buttons, menu items)
argumentsNoArgument modifications (append, prepend, replace) applied after base
runtimeNoStructured runtime settings applied after base
postLaunchActionNoAction executed after launch (see below)

Post-Launch Actions

Supported action types:

  • OpenFolder — Opens the specified folder in Windows Explorer after the app launches.

Variables:

  • {ContainerId} — Resolved Turbo container ID
  • Windows environment variables (for example, %LOCALAPPDATA%, %TEMP%, %USERPROFILE%)

Example:

json
{
  "postLaunchAction": {
    "type": "OpenFolder",
    "path": "%LOCALAPPDATA%\\Turbo\\Containers\\sandboxes\\{ContainerId}\\logs"
  }
}

Context Menu Behavior

When an app has launch profiles, the Launcher context menu includes:

  • Run (base)
  • One item per launch profile (by displayName)
  • Run in diagnostic mode
  • Reset session

Example (Chrome with Incognito profile):

json
{
  "id": "google-chrome-with-launch-profiles",
  "displayName": "Allow Google Chrome with Launch Profiles",
  "enabled": true,
  "priority": 100,
  "matchAll": [
    { "type": "targetPath", "pattern": ".*\\\\chrome\\.exe$", "patternType": "regex" }
  ],
  "action": "allow",
  "modifications": {
    "arguments": { "append": "--hide-crash-restore-bubble" },
    "runtime": { "isolation": { "remoteSandbox": true } }
  },
  "profiles": [
    {
      "id": "chrome-incognito",
      "displayName": "Chrome (Incognito)",
      "actionText": "Run Chrome (Incognito)",
      "arguments": { "append": "--incognito" }
    }
  ]
}

Resulting menu:

  • Run (base: --hide-crash-restore-bubble)
  • Run Chrome (Incognito) (base + --incognito)
  • Run in diagnostic mode
  • Reset session

Merging Rules (Launch Profiles vs Base)

  • Launch profile modifications are applied after all base modifications have been merged.
  • Scope precedence remains: Launch Profile > Policy > Global.
  • Multiple matching policies can each contribute launch profiles; when two launch profiles share the same id, the launch profile from the highest priority policy wins (ties break by policy id alphabetical).

Arguments merging reminder:

  • replace overrides both prepend and append within the launch profile scope.
  • Without replace, the final arguments are built by concatenating prepend/base/append according to scope precedence.

Runtime settings reminder:

  • Scalars (boolean, number, string) are last-wins by scope (Launch Profile → Policies → Global).
  • Arrays use last-wins replacement by scope for determinism.

Troubleshooting Tips

  • Launch profile not showing: Ensure the base app policy is enabled, matches, and defines a non-empty profiles array.
  • Launch profile arguments not applied: Check for arguments.replace in the launch profile or a more specific scope overriding lower scopes.
  • Duplicate launch profile IDs: Ensure each launch profile id is unique within the app, or adjust priority to control which launch profile wins in conflicts.

Next Steps