NimbleStroker
Connect a NimbleStroker (with the Connectivity Module Dev Kit and community T-Code firmware) to ToyControl over USB. Requires the ToyControl Helper. Beta.
The NimbleStroker is a high-end single-axis stroker made by Exploratory Devices. Out of the box, it talks only to its own pendant (the dial that comes in the box). To drive it from ToyControl, you need a separate Connectivity Module Dev Kit add-on and a community firmware flashed onto it. Once flashed, the Dev Kit speaks T-Code over USB and ToyControl connects to it through the ToyControl Helper.
Support is in beta. We do not have one in-house to test against; please report success or failure with the in-app Report a bug button.
What you need
- A NimbleStroker (the actuator).
- A Connectivity Module Dev Kit from Exploratory Devices (shop.exploratorydevices.com). This is a separate $75 purchase. As of June 2026 it is out of stock at the manufacturer's shop; this article is here so you can set everything up the moment it restocks.
- A USB-C cable from the Dev Kit to your computer.
- The ToyControl Helper installed and running (see below).
- On Windows: the Silicon Labs CP201x VCP driver (free from Silicon Labs). Mac and Linux usually have it built in.
Install the Helper
The NimbleStroker connects over USB, which a browser cannot reach on its own, so ToyControl uses the Helper app to bridge it.
- Download the Helper for your computer:
- macOS: ToyControl-Helper.dmg
- Windows: ToyControl-Helper.exe
- Linux: ToyControl-Helper.AppImage
- Install it, then open it.
- First launch: allowing the unsigned Helper. The Helper is not yet code-signed, so your computer warns that it is from an unidentified developer. This is expected and safe. To allow it, just once:
- macOS: in your Applications folder, right-click (or hold Control and click) ToyControl Helper and choose Open, then click Open again. On newer macOS, instead open System Settings > Privacy & Security and click Open Anyway.
- Windows: if you see "Windows protected your PC", click More info, then Run anyway.
- Linux: make the AppImage executable (right-click > Properties > Permissions > allow executing, or
chmod +x ToyControl-Helper.AppImage), then run it. For USB access you may also need to join thedialoutgroup.
Full details are on the Helper app page.
Flash the Dev Kit
The Dev Kit ships blank. ToyControl drives it through the NimbleTCodeSerial community firmware (by mnh86), which exposes T-Code over USB serial.
- Install Visual Studio Code (free, code.visualstudio.com).
- Install the PlatformIO extension inside VS Code (search "PlatformIO IDE" in the Extensions tab).
- Clone or download the firmware repo: github.com/mnh86/NimbleTCodeSerial.
- Open the folder in VS Code. PlatformIO picks up the project automatically.
- Connect the Dev Kit to your computer by USB.
- Click the PlatformIO Upload button (the right-pointing arrow in the bottom status bar). The firmware compiles and flashes in about a minute.
The repo's README is the canonical setup guide and is kept current by the firmware author; check it if anything looks different from the steps above.
A note on the other community firmwares: NimbleTCodeWifi (WebSocket over Wi-Fi), krishpants/nimble_ble (custom Bluetooth), and Tuna-Toys/nimble_xtoys (XToys-flavored) exist. ToyControl does not drive any of them today. If you flashed one of those, reflash with NimbleTCodeSerial first.
Connect
- Plug the Dev Kit into your computer by USB. Leave the pendant connected to it; the pendant stays in the loop and doubles as an emergency stop.
- Open ToyControl at toycontrol.app in Chrome or Edge.
- Confirm the Helper is running. The ToyControl sidebar should show a green dot next to the Helper chip.
- Click the + in the Devices section.
- Pick NimbleStroker from the catalog.
- ToyControl pairs the Dev Kit. If you have a single, correctly-flashed Dev Kit plugged in, this happens automatically. If you have multiple USB-serial devices connected, the Helper shows a picker; pick the one labelled Silicon Labs CP2102 (or similar). If you instead see a row saying the firmware can't be controlled, you flashed the wrong firmware. Go back to Flash the Dev Kit above.
- The NimbleStroker appears in the sidebar with a green dot.
Test it
Mount the toy safely first; it moves with real force.
Click Test toy at the bottom. The actuator should run a short stroke. Vibration and air-valve channels also respond if your scene or script uses them.
What works
- Position (single-axis stroking, L0). The firmware enforces a safe range internally; you cannot push the piston past its mechanical limits.
- Vibration (V0).
- Air valve in / centred / out (A0).
- Force command (A1).
- Vibration frequency (A2).
What does not work yet
- Custom Bluetooth firmware (the
Nimble_BTdevice from krishpants/nimble_ble). Reflash with NimbleTCodeSerial to use ToyControl. - Wi-Fi / WebSocket firmware (NimbleTCodeWifi). Browsers refuse to talk to it from a secure site, and a helper-side bridge is not in the build yet. Use the USB serial path for now.
- XToys-flavored firmware (Tuna-Toys/nimble_xtoys). Different protocol, different ecosystem. Reflash with NimbleTCodeSerial.
- Automated routines firmware (NimbleAutoRoutines). Standalone, no host control. Reflash to drive from ToyControl.
- Force feedback from the actuator back to the host. The serial firmware does not expose it today.
The pendant during a session
The pendant stays connected to the Dev Kit while ToyControl drives the actuator. Two practical notes:
- Leave the dial alone while ToyControl is in control. Spinning it while a script or pattern is running is summed with what ToyControl sends, and the result is not predictable.
- Clicking the dial is an emergency stop. A single click pauses the actuator regardless of what ToyControl is sending. Useful if anything feels off.
Troubleshooting
- No device listed in the Helper picker. Confirm the Dev Kit is plugged in, the Helper is running (icon in the menu bar or system tray), and on Windows that the CP201x driver is installed. Try a different USB-C cable; some are charge-only.
- Device listed but won't connect. Reseat the cable. Try another USB port. Cycle the Dev Kit's power.
- Connects, but the actuator never moves. Most wrong-firmware cases are now caught up front by the in-app diagnostic (the picker shows a row saying the firmware can't be controlled) before you reach this state. If you got past that and the actuator still doesn't move, double-check that you flashed NimbleTCodeSerial, not one of the other community firmwares. The serial port enumerates the same way for all of them; only NimbleTCodeSerial speaks T-Code.
- Pendant beeps or the dial reads as stop. A previous click toggled the actuator off. Click the dial once more to clear.
- Motion feels coarse. T-Code motion smoothness comes from the script and from the firmware's easing curves. Try a slower script, or Patterns instead of a script, to compare.