Firmware Upgrade
When new device firmware is available, upgrade with wuji upgrade. It fetches firmware matched to each device from the official catalog, verifies it, flashes it over the current transport, and prints a per-device report. The device reboots into the new firmware automatically.
Scope and Action
Every invocation combines a scope (which devices) with an action (which version).
Scope:
- No scope flag: when only one device is connected, the scope flag is optional
--all: every discovered device (latest firmware only)--type <TYPE>: every device of one type, such as--type WujiGlove(matchesping's Device Type column, case-insensitive)--sn/--address/--handedness: one device, same selectors as other commands
Action:
- No action flag: upgrade the scoped devices to their latest versions
--to <VERSION>: install a specific version on the scoped devices--file <PATH>: flash a local firmware package onto the scoped devices--list: browse available firmware versions, requires one device type or one device, read-only--check: check all connected devices for firmware updates, works with any scope, read-only
A version number only makes sense for one device type, so --to, --file, and --list require a single-type scope: --type or one device. --all always means "latest for each device".
Usage
wuji upgrade --check # which devices have firmware updates (read-only)
wuji upgrade --all # upgrade every device to its latest
wuji upgrade --sn <SN> # upgrade one device to its latest
wuji upgrade --sn <SN> --to 0.11.0 # install a specific version on one device
wuji upgrade --type WujiGlove --to 0.11.0 # install a specific version on every device of one type
wuji upgrade --sn <SN> --list # list firmware versions available for one device
wuji upgrade --file fw.zip # flash a local firmware packageWithout a device selector, single-device actions auto-pick the only connected device. With several devices on the bus, the CLI errors out listing candidate SNs — pick one with --sn.
Read the Report
- One row per device:
Statusisok/skipped/failed, and theDetailcolumn carries the failure reason or skip note - Exit code: 0 unless a device
failed(skippeddoesn't count as failure) — ready for script assertions --checkexits 0 whether or not updates exist, and returns 1 only when the query itself fails. To gate scripts on update availability, use thestatusfield in--jsonoutput
Examples
wuji upgrade --check gives a read-only overview of all devices:
$ wuji upgrade --check
1/2 device(s) have updates available
┌──────────────────┬─────────────┬─────────┬────────┬──────────────────┐
│ SN ┆ Device Type ┆ Current ┆ Latest ┆ Status │
╞══════════════════╪═════════════╪═════════╪════════╪══════════════════╡
│ WG1KXXXXXXXXX001 ┆ WujiGlove ┆ 0.11.0 ┆ 0.11.1 ┆ update available │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ WG1KXXXXXXXXX002 ┆ WujiGlove ┆ 0.11.1 ┆ 0.11.1 ┆ up to date │
└──────────────────┴─────────────┴─────────┴────────┴──────────────────┘wuji upgrade --all confirms the plan, then flashes each device in turn and prints a report:
$ wuji upgrade --all
firmware: 0.11.1 (157.15 KiB, released 2026-06-24)
- Fixed an incorrect IMU initialization warning.
device(s) to upgrade (2):
WG1KXXXXXXXXX001 (0.11.0 → 0.11.1)
WG1KXXXXXXXXX002 (0.11.0 → 0.11.1)
proceed? [y/N] y
2 upgraded (2 device(s))
┌──────────────────┬────────┬────────┬────────┬──────────┐
│ SN ┆ Status ┆ Before ┆ After ┆ Duration │
╞══════════════════╪════════╪════════╪════════╪══════════╡
│ WG1KXXXXXXXXX001 ┆ ok ┆ 0.11.0 ┆ 0.11.1 ┆ 16s │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┤
│ WG1KXXXXXXXXX002 ┆ ok ┆ 0.11.0 ┆ 0.11.1 ┆ 16s │
└──────────────────┴────────┴────────┴────────┴──────────┘Devices already on the target version are skipped, and the Detail column says why:
$ wuji upgrade --all --yes
0 upgraded, 2 skipped (2 device(s))
┌──────────────────┬─────────┬────────┬───────┬──────────┬───────────────────┐
│ SN ┆ Status ┆ Before ┆ After ┆ Duration ┆ Detail │
╞══════════════════╪═════════╪════════╪═══════╪══════════╪═══════════════════╡
│ WG1KXXXXXXXXX001 ┆ skipped ┆ 0.11.1 ┆ - ┆ - ┆ already on 0.11.1 │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ WG1KXXXXXXXXX002 ┆ skipped ┆ 0.11.1 ┆ - ┆ - ┆ already on 0.11.1 │
└──────────────────┴─────────┴────────┴───────┴──────────┴───────────────────┘Installing a version below the current one is flagged in the prompt:
$ wuji upgrade --sn WG1KXXXXXXXXX001 --to 0.11.0
firmware: 0.11.0 (155.68 KiB, released 2026-06-18)
- Updated tactile output to the new 24×31 matrix format.
device(s) to upgrade (1):
WG1KXXXXXXXXX001 (0.11.1 → 0.11.0) ⚠ DOWNGRADE
proceed? [y/N]Structured Output
--json prints a structured report with the same fields as the tables, for scripting. Flashing actions require --yes together with --json / --jsonl:
wuji upgrade --check --json
wuji upgrade --all --yes --json