Multiboxer complete configuration reference

This page documents every JSON option implemented by the current application. Runtime-only fields marked with JsonIgnore are not configuration options and are intentionally excluded.

Options marked Advanced/internal are implemented but are usually unnecessary for a basic setup. They are labeled so site maintainers can review or hide them later.

Top-level object

inject_virtual_mouse_dll

Location:        top level
Type:            boolean
Required:        no
Default:         true
Classification:  Advanced/internal

When true, Multiboxer attempts to inject MouseVirtualizer32.dll into every spawned process using Injector32.exe. Missing helpers cause injection to be skipped; an individual injection failure does not stop the remaining attempts. This technique may trigger security software and depends on compatible target processes.

remove_registry_settings_at_startup

Location:        top level
Type:            boolean
Required:        no
Default:         false
Classification:  Advanced/internal, World of Warcraft specific

When true, startup attempts to delete this current-user registry subtree:

Software\Blizzard Entertainment\World of Warcraft\Client

This avoids a World of Warcraft hardware-change prompt when switching client versions. Deletion failure is logged and startup continues. Leave false for unrelated games.

debug

Location:        top level
Type:            boolean
Required:        no
Default:         false

Enables detailed diagnostic logging across input, layout, swapping, capture, and injection code.

debug_log_path

Location:        top level
Type:            string or null
Required:        no
Default:         %TEMP%\MultiBoxerLogs\multiboxer.log
Dependency:      useful when debug is true

A relative path is resolved from the directory containing the active configuration file. An absolute path is used directly.

regions

Type:      array of region objects
Required:  yes for a usable configuration
Default:   empty array

Names the screen rectangles used by instances. See Region object.

main_region

Type:      string
Required:  yes
Default:   empty string, which fails validation

Must match an entry in regions. At least one instance must initially own this region.

instances

Type:      array of instance objects
Required:  yes for a usable configuration
Default:   empty array

Defines processes to launch. See Instance object.

keymaps

Type:      array of keymap objects
Required:  no
Default:   empty array

Defines trigger-to-action mappings. See Keymap object.

capture_compositor

Type:            capture compositor object
Required:        no
Default:         object with enabled false
Classification:  Advanced/internal

Configures preview capture for non-main regions.

ui

Type:      UI object
Required:  no
Default:   default window with no configured buttons

Configures the Multiboxer control window.

Region object

regions[].name

Type:      string
Required:  yes
Default:   empty string

Region identifier referenced by main_region, instances[].region, compositor streams, and swap actions. References are case-insensitive. Use unique non-empty names. The validator builds a name set but does not currently report duplicate region definitions directly; duplicates should still be avoided.

regions[].display

Type:      string or null
Required:  no
Default:   null
Example:   "0"

Zero-based physical display index, stored as text. Coordinates are relative to this display. Missing, blank, invalid, or unavailable display values fall back to the first monitor in layout and capture resolution paths.

regions[].region

Type:      rectangle object
Required:  no at deserialization, but needed for meaningful layout
Default:   x 0, y 0, width 800, height 600

regions[].region.x and y

Type:      integer
Required:  no
Default:   0

Pixel offset from the selected display's top-left corner. Negative coordinates are representable and are not rejected for regions.

regions[].region.width and height

Type:      integer
Required:  no
Default:   800 and 600

Pixel dimensions. The current configuration validator does not explicitly reject zero or negative region dimensions; use positive values.

Instance object

instances[].name

Type:      string
Required:  yes in practice
Default:   empty string

Identifier used in targets, swaps, logs, and the default window title. Names should be unique and non-empty. References are case-insensitive. The current validator uses a set but does not explicitly report duplicate instance names, so avoid duplicates.

instances[].executable

Type:      string
Required:  yes in practice
Default:   empty string

Program passed to process startup. Use a valid executable path. The config validator does not check that the file exists before launch.

instances[].working_directory

Type:      string or null
Required:  no
Default:   executable's directory

Working directory passed to the new process.

instances[].title

Type:      string or null
Required:  no
Default:   instance name

Window title assigned after Multiboxer finds and positions the process window.

instances[].region

Type:      string
Required:  yes
Default:   empty string, which fails validation

Initial region owned by this instance. It must name a configured region. No two instances may initially own the same region, and one instance must own main_region.

instances[].keymap_on_select

Type:            string or null
Required:        no
Default:         null
Classification:  Advanced

Names a keymap to run when this managed instance becomes foreground, including region selection and taskbar or other foreground activation. The keymap must have a non-empty name. An instance using this property must also have a non-empty name.

instances[].modifier

Type:      string or null
Required:  no
Default:   null

Modifier combo used by actions with add_instance_modifier. Every +-separated token must be a recognized modifier:

Ctrl  LCtrl  RCtrl  Alt  LAlt  RAlt  Shift  LShift  RShift

Runtime-only instance properties

The model also contains HomeRegion, RegionConfig, HomeRegionConfig, CurrentRect, OriginalRect, HomeOriginalRect, Process, and Hwnd. They are marked JsonIgnore and cannot be configured.

Keymap object

keymaps[].name

Type:      string or null
Required:  only for references and UI-owned buttons
Default:   null

Names the keymap for UI execution, instance selection, and keymap state actions. Named keymaps must have unique names, compared case-insensitively.

keymaps[].enabled

Type:      boolean
Required:  no
Default:   true

Initial state of a named keymap. Disabled keymaps do not react to triggers or named execution until enabled.

keymaps[].keys

Type:      array of strings
Required:  no for button/selection-only named execution; otherwise needed
Default:   empty array

Trigger keys. any is the wildcard and matches ordinary key input. A combo contains modifiers followed by exactly one final non-modifier key, for example Ctrl+Shift+1. A combo cannot end in a modifier. Empty or unknown values fail validation. See keys and actions.

keymaps[].send_on_release

Type:            boolean
Required:        no
Default:         false
Classification:  Advanced lifecycle control

For forwarding behavior, defers dispatch until the trigger is released and sends a synthetic key-down/key-up tap. It cannot be combined with execute_on: "press".

keymaps[].execute_on

Type:      string or null
Required:  no
Default:   legacy action-dependent lifecycle
Values:    press, release, press_and_release

Controls which trigger edge executes the keymap. Values are trimmed, lowercased, and stored normalized.

press               Execute on key down.
release             Execute on key up as a tap.
press_and_release   Execute a tap on both edges.

When omitted, legacy behavior applies: swap keymaps execute on release; other mappings follow the application's legacy press/release forwarding lifecycle. For predictable new configurations, set this explicitly when edge behavior matters.

keymaps[].actions

Type:      array of arrays of action objects
Required:  yes
Default:   empty array, which fails validation

The outer array contains rotating steps; each inner array contains actions for one step. At least one outer step is required. Empty inner steps are not explicitly rejected but do nothing.

"actions": [
  [
    { "action": "forward", "send_key": "1" },
    { "action": "forward", "send_key": "2", "targets": ["game2"] }
  ],
  [
    { "action": "do_nothing" }
  ]
]

keymaps[].reset_to_first_action

Type:            number or null
Required:        no
Default:         null
Unit:            seconds
Classification:  Advanced

After this idle interval, a multi-step keymap returns to its first action step. Decimal values are accepted. The model does not constrain the value during configuration validation; use a positive duration.

keymaps[].ui_button

Type:      keymap UI button object or null
Required:  no
Default:   null

Creates an action button bound implicitly to this keymap. The keymap must have a non-empty name. Fields are id, text, x, y, width, height, image, show_enabled_state, and show_round_robin_next_target. It has no role or keymap property because those are implied.

Keymap action object

action

Type:      string
Required:  yes
Default:   empty string, which fails validation

Supported values:

forward
forward_focused
round_robin
do_nothing
enable_keymaps
disable_keymaps
toggle_keymaps
enable_forwarding
disable_forwarding
toggle_forwarding
mouse_broadcast
swap_instance_to_region

Action matching is case-insensitive. Detailed behavior is in keys and actions.

mouse_broadcast_mode

Type:        string or null
Required:    only meaningful with mouse_broadcast
Default:     toggle
Values:      toggle, enable, disable, until_click, once

once and until_click both enable broadcasting until the next mouse button-down event. An unsupported value fails validation even if supplied on another action object.

send_key

Type:      string or null
Required:  no
Default:   original trigger key

Replaces the dispatched key. It must be a recognized single key or valid modifier combo. It is useful with forwarding actions; other action types may accept the property in validation without using it.

targets

Type:      array of strings
Required:  no
Default:   empty, meaning all active instances
Values:    all, all_other, self, or configured instance names

Blank targets are removed and duplicate targets are removed case-insensitively. Unknown values fail validation. all_other and self are relative to the routing context.

source_instance

Type:        string or null
Required:    for swap_instance_to_region
Default:     null
Dependency:  must name a configured instance

target_region

Type:        string or null
Required:    for swap_instance_to_region
Default:     null
Dependency:  must name a configured region

keymaps

Type:        array of strings
Required:    for useful keymap-state actions
Default:     empty array
Dependency:  each entry must name a configured named keymap

Used by enable_keymaps, disable_keymaps, and toggle_keymaps. Unknown names fail validation. An empty list is accepted but changes nothing.

sync_mouse

Type:      boolean
Required:  no
Default:   false

Synchronizes the current pointer position once before dispatching the action. It is accepted on any action.

add_instance_modifier

Type:      boolean
Required:  no
Default:   false

Adds the routing-context instance's configured modifier to dispatched forwarding keys. It has no useful effect when that modifier is absent or on actions that do not dispatch a key.

Capture compositor object

All compositor options are Advanced/internal.

capture_compositor.enabled

Type:      boolean
Required:  no
Default:   false

Starts capture previews for configured non-main stream regions. Startup fails if enabled configuration is invalid or compositor initialization fails. Enabling it also changes non-main window parking and enables main-region z-order management.

capture_compositor.backend

Type:      string
Required:  when enabled
Default:   desktop_duplication_d3d11
Values:    desktop_duplication_d3d11

The value is trimmed and normalized to lowercase.

capture_compositor.fps

Type:      integer
Required:  no
Default:   60
Range:     1 through 240 when enabled

Target compositor update rate.

capture_compositor.stream_regions

Type:      array of strings
Required:  non-empty when enabled
Default:   empty array

Every non-blank entry must name an existing region and cannot equal main_region. Blank entries and case-insensitive duplicates are removed. At least one non-main entry must remain.

UI object

ui.window

Type:      UI window object
Required:  no
Default:   x 100, y 100, width 640, height 400

ui.window.x and ui.window.y

Type:      integer
Required:  no
Default:   100

Initial desktop coordinates of the Multiboxer control window. Negative values are permitted.

ui.window.width and ui.window.height

Type:      integer
Required:  no
Default:   640 and 400
Rule:      both must be greater than zero

ui.buttons

Type:      array of UI button objects
Required:  no
Default:   empty array

Buttons use absolute coordinates inside the control window. If none has role config, a default Config button is added at x 8, y 8 with size 40 x 40.

UI button object

id

Type:      string
Required:  yes
Rule:      non-empty and unique across all UI and keymap-owned buttons

IDs are compared case-insensitively.

role

Type:      string or null
Required:  no
Values:    config, action

Values are trimmed and normalized to lowercase. A config button opens the active JSON file in Notepad. Other buttons execute keymap when one is set. The role does not itself require a keymap.

text

Type:      string or null
Required:  no
Default:   keymap name when bound, otherwise id

Caption shown on the button.

x and y

Type:      integer
Required:  no
Default:   0
Rule:      zero or greater

Absolute position within the window content canvas.

width and height

Type:      integer
Required:  no
Default:   40
Rule:      greater than zero

keymap

Type:      string or null
Required:  no
Dependency: if non-empty, must name a configured keymap

Invokes the named keymap when clicked, even if that keymap has no trigger keys.

image

Type:      string or null
Required:  no

Image file path. Relative paths are resolved from the active configuration directory. Missing files are silently omitted from the rendered button. The current validator effectively accepts any non-empty string.

show_enabled_state

Type:      boolean
Required:  no
Default:   false

When the button has a named keymap, colors the button green when enabled and red when disabled. Despite its name, current runtime behavior does not append Enabled or Disabled text.

show_round_robin_next_target

Type:      boolean
Required:  no
Default:   false

For a bound keymap containing round_robin, appends text such as Next:game3 to the button label.

Keymap-owned UI button differences

keymaps[].ui_button has the same defaults and validation for id, text, coordinates, dimensions, image, and the two state-display booleans. Its role is always treated as action, and its keymap binding is the containing keymap's name.