replace_props
Bulk find and replace property values across a subtree. Apply exact-match replacement rules to all descendants of a target node, returning per-rule match counts.
Instructions
Bulk find-and-replace property values across a subtree (target node + all descendants). Destructive batch mutation — no preview, no undo across many nodes. Returns per-rule match counts.
Use when:
Theming pass: change every #FFF fill to #000 across a screen
Token migration: bump every fontSize from 14 to 16
Normalizing values left inconsistent by earlier passes
The alternative is N targeted single-node calls (set_text / set_fill / edit)
Returns: { data: { replacements: [{ rule: 0, matched: 12 }, { rule: 1, matched: 0 }] } }
Parameters beyond schema:
nodeis the subtree root; search recurses into all descendants (depth-first).Each rule's
fromis an EXACT-match string (no substring, no regex). For typed props (fontSize, opacity), pass values as strings — the executor coerces.Zero matches do NOT error — they return matched: 0. Sanity-check with discover_props first if you're unsure values exist.
Skip when:
Updating a single known node — use set_text / set_fill / set_stroke / set_layout for type-aware single-intent edits, or edit for generic.
Values are variable-bound (tokens) — replace_props bypasses bindings; use bind_variable to swap the token instead.
You need partial / fuzzy match — replace_props is exact-only; you'll need find_nodes + a loop.
Examples: // single rule, white -> black replace_props({node: "1:2", rules: [{prop: "fillColor", from: "#FFF", to: "#000"}]})
// batch theme update — both rules applied in one pass replace_props({node: "1:2", rules: [ {prop: "fillColor", from: "#FFF", to: "#000"}, {prop: "fontSize", from: "14", to: "16"} ]})
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Target node ID (e.g. "1:2") | |
| rules | Yes | Replacement rules |