Skip to content
SoftwareOfficial source

MicroDuck 0.17.4: Vet Book, Two Pads and Beta Identity

Pollen Robotics released stable daemon 0.17.3 and 0.17.4 on October 15; 0.17.4 is the latest at this October 16 review. The new vet book is local until a signed-in user presses s to publish a public dataset. The laptop UDP client now waits for a button press to claim a pad, enabling one pad per duck. On Beta boards, 0.17.4 reads the kernel SoC serial, so an automatically derived duck name may change; rescan after upgrading. Check the offered board build and running version before acting.

Pollen Robotics published stable daemon 0.17.3 on October 15, 2026 at 08:53 UTC and 0.17.4 at 15:58 UTC. The latter was GitHub latest at this October 16 review. This site checked fixed commits and package metadata; it did not install either release or test a robot, gamepad or Hugging Face account.

Choose the current release, then inspect your board.

What changed since stable 0.17.2
ReleaseReader-facing changeBoundary
0.17.3Adds a local lifetime vet book and optional public card sharing; improves idle looks; laptop duckctl can claim different pads for different ducks.A pad claim needs a button press. Vet-book sharing is a separate, deliberate public action.
0.17.4Beta boards use the kernel SoC serial instead of the duplicated U-Boot value; the duckctl 0.17.4 package and documented Homebrew route are available.An automatically named Beta may appear under a new name. Zero 3W keeps its earlier serial source.

These are published stable releases, unlike the separate development prereleases. A GitHub release is not proof that your particular board has installed it or that every hardware behavior works in the field. The policy-set v8 manifest did not change in this review, so do not infer a new gait from the daemon version. Previous stable daemon 0.17.2 · October 13 ↗ Stable daemon 0.17.3 · October 15 ↗ Latest checked stable daemon 0.17.4 · October 15 ↗ Unchanged official policy-set v8 manifest ↗.

Save a local baseline and use the board-offered stable update.

On an official robot, record the running version, current name, overrides, policy list and health. update check daemon reads the stable offer; it does not install. If the checker offers 0.17.4 for the declared board, support the robot, keep power steady and allow service restarts before applying. A preorder without hardware has nothing to run here. Pinned 0.17.4 vet book, idle and update instructions ↗.

Read-only checks on the robot
robotctl version
robotctl system info
robotctl update status
robotctl update check daemon
robotctl configure --list
robotctl policy list
robotctl health
Install the compatible stable release offered to this robot
sudo robotctl update apply daemon

Afterward compare the live release, system identity and health with your saved output. Read the update transcript if anything failed or the name changed. An explicit manual rollback requires a prior daemon release still installed on that board; it does not undo a public vet-book dataset or change an independently versioned policy set. Pinned 0.17.4 vet book, idle and update instructions ↗.

Confirm the running result
robotctl version
robotctl system info
robotctl health
robotctl update log
robotctl update show
Only if a previous daemon release is installed
sudo robotctl update rollback daemon
robotctl version
robotctl health

Read the vet book locally before deciding whether to share.

robotctl vetbook opens a live terminal page; --json returns the local record for inspection. It begins tracking when the new robotd runs; it cannot reconstruct earlier unrecorded history. The book holds life and motor counters, sensor records and a diary, and is saved on the robot about once a minute and at normal shutdown. Press n in the page to add a local note. Pinned 0.17.4 vet book, idle and update instructions ↗.

Local inspection; account status is read-only
robotctl vetbook
robotctl vetbook --json
robotctl account status

Sharing is opt-in and public: after sudo robotctl account login, pressing s in the terminal page asks updaterd to create or update a public Hugging Face dataset named <user>/<duck>-vetbook, plus a card link and QR code. The published JSON drops free-text diary notes and internal bookkeeping, but retains counters, dates, servo wear and a share block with owner, robot, time and daemon. Re-sharing replaces the current files while Hub history retains old copies; renaming the robot creates another dataset and leaves the old one. Inspect the local book and account before pressing s; do not treat the card as private. Pinned vet-book publication and privacy implementation ↗ Official public vet-book card Space ↗.

Claim one laptop pad for each duck.

In 0.17.3 and later, duckctl udp-pad waits for a press on the pad it should send; that selecting press is not forwarded as an action. For two ducks on a trusted LAN, plug in two pads, open one terminal per duck, start the first command and press its pad, then start the second and press the other. A pad already in use is skipped. --pad 2 selects the laptop’s second discovered pad without a press for scripts, but that number may change on unplug/replug. The robot’s optional UDP pad must already be enabled; it replaces Bluetooth pad input while enabled, and UDP port 4210 has no authentication or encryption. Pinned 0.17.4 one-pad-per-duck UDP instructions ↗ Pinned laptop pad-claim implementation ↗.

Laptop example; replace both sample LAN addresses
duckctl udp-pad 192.168.1.42
# In a second terminal, with a second pad:
duckctl udp-pad 192.168.1.43

The latest laptop client is duckctl 0.17.4 on PyPI for macOS, Linux and Windows. The pinned official guide also documents a Homebrew tap on macOS/Linux. Upgrade the tool you actually use before expecting the new pad-claim screen; duckctl scan is a passive way to identify a robot and does not start driving it. Pinned 0.17.4 laptop duckctl and Homebrew instructions ↗ Published duckctl 0.17.4 laptop package ↗.

If duckctl was installed as a uv tool
uv tool upgrade duckctl
duckctl scan
Alternative Homebrew install or upgrade
brew install pierre-rouanet/tools/duckctl
brew upgrade duckctl

After a Beta upgrade, scan again for its actual name.

0.17.4 fixes a Beta-board identity collision: Beta now reads the kernel’s /proc/cpuinfo Serial, because its U-Boot device-tree value could be the same on two boards from one lot. Zero 3W keeps reading the device-tree serial. The serial feeds the default duck-xxxx name, generated voice, chorale ID and remote hardware ID. If a Beta used its automatic name, rediscover it with duckctl scan and use the name it now advertises for --name; an explicitly chosen name need not change. A bonded robot may advertise less often, so use the first-connection guide to distinguish sparse advertisements from a naming problem; a changed default name alone is not a reason to delete a Bluetooth bond. This site did not observe any board renaming in person. Pinned board-specific SoC serial implementation ↗ Pinned serial-derived default name ↗ Pinned 0.17.4 laptop duckctl and Homebrew instructions ↗.

The other released 0.17.3 change is richer idle look-around: after about two seconds with a running policy and no move or head command, the duck may glance, lean its neck, open its beak and occasionally yawn. Pad head modes keep control of the head. The [idle] settings are tunable through sudo robotctl configure and require a robotd restart; do not mistake this source behavior for a measured motion on every machine. Pinned 0.17.4 vet book, idle and update instructions ↗.

Where to go next.

CONTINUE THE CONVERSATION

What would you like to understand next?

Keep the source, your environment and your observations together.