UI patches ​

UI patches describe changes to menus, labels and routes, one kind of operation. Save them as *.pkgpatch.json and list them in operations.ui in your manifest.

Not built yet

The build skips operations.ui and prints <addon>: <n> UI operation file(s) skipped; that stage is not built yet. This is the format for the planned build step. To change a menu today, ship an edited scene with replace-resource (Editing menus), or edit a !pkg resource with patch-pkg.

Example ​

json
{
  "schema_version": 1,
  "targets": [
    { "erp": "2025_asset_groups/ui_package/flow_frontend.erp",
      "resource": "eaid://ui_package/screens/fe_home.ui", "fragment": 0 },
    { "erp": "2025_asset_groups/ui_package/screens/fe_home.erp",
      "resource": "eaid://ui_package/screens/fe_home.ui", "fragment": 0 }
  ],
  "root": "Screens[0]:fe_home",
  "edits": [
    { "op": "set-text", "node": "contextual_panels.offline_contextual_panel.subtitle",
      "value": "Launched with Swofty Launcher, press", "localise": false }
  ]
}

targets lists the resources to change. The home screen has two copies, so both are listed. Node paths are relative to root. Edits run in order.

Screen edits ​

EditPurpose
clone-nodeCopy src to a sibling named as; optionally change properties with set
set-textSet a label's node, value and localise flag
set-propsChange properties on node using set
add-signalAdd a signal to a node's event
remove-signalRemove signals from a node's event to a target to

Signals name a target node (to) and pin (pin). Optional fields are from and attrs.

Routes and UI databases ​

For .uir and .uidb files, use clone-entry or set-value. Paths use dots for keys and [field=value] to select an array entry.

Text and prompts ​

Use set-text with "localise": false for literal text. To change a string in every menu that shows it, use lang.set (In-game text).

Keyboard and controller icons come from entries in tool_tips.uidb. See !pkg resources for the file format.

Publishing