The two-line change
On GitHub Actions, change the uses: line and the secret the token input reads. Everything else in the step stays.
- uses: actions/checkout@v4
-- uses: wokwi/wokwi-ci-action@v1
+- uses: mokxiorg/sim-action@v1
with:
- token: ${{ secrets.WOKWI_CLI_TOKEN }}
+ token: ${{ secrets.MOKXI_TOKEN }}
path: .
timeout: 10000
scenario: test.scenario.yaml
expect_text: Ready
fail_text: panic
serial_log_file: serial.log
A public repository needs no token: Mokxi CI is free for it, so you can delete the token: line. For a private one, CI comes with Pro (and the student price, Lifetime, Classroom and the trial; an account that still has Ultra keeps it too), so you need a CI token from a Pro account. Make the token under Settings > Developer, and save it as a repository secret named MOKXI_TOKEN. The action passes it to the command line tool, which checks your plan with it. Until December 11, 2026 everybody keeps CI and each run prints a notice.
The action takes Wokwi's input names (path, timeout, scenario, expect_text, fail_text, serial_log_file, elf, diagram_file, timeout_exit_code, args) with Wokwi's meanings: a bare timeout is milliseconds, path: / is the repository root, scenario is read relative to the project folder, and args is one line of options separated by spaces.
From a shell, wokwi-cli <dir> becomes npx @mokxi/cli run <dir>, and the options keep their names (--timeout, --expect-text, --fail-text, --scenario, --serial-log-file, --elf, --diagram-file, --timeout-exit-code, --screenshot-part, --screenshot-time, --screenshot-file, --vcd-file).
What runs unchanged
- Project files.
diagram.json, the sketch and its tabs,libraries.txt, andwokwi.toml. Whenwokwi.tomlnames a firmware file that exists (a PlatformIO, ESP-IDF, arduino-cli or Rust build), that build is run, as Wokwi does. When it does not exist, Mokxi compiles the sketch itself, so a repository with only source code works too. - Scenario steps.
wait-serial,write-serial(text or a list of bytes),delay,set-control,expect-pin(withpinandcontrol, or the newernamekey),take-screenshotwithsave-toandcompare-with, andtouch,touch-press,touch-moveandtouch-releaseon the ILI9341 touch panels. - Part ids. A step names a part by its id in your
diagram.json.
Three things behave differently:
- The default exit code for a timeout is 1. Wokwi's is 42. Set
timeout_exit_code: 42(or--timeout-exit-code 42) if your workflow checks for it. - Uno-class boards take 65 ms to start. The Uno, Nano and other ATmega boards model the chip's power-on start-up delay, so a pin checked in the first 70 ms or so of a run reads differently from Wokwi. Start a scenario with
delay: 100msor await-serial. - Screenshots of a whole circuit are SVG. A screenshot of a display part (an OLED, a TFT, a character LCD, e-paper or a Nokia screen) is a PNG of the panel's own pixels, and
compare-withchecks it against your reference pixel by pixel. A screenshot of any other part is an SVG drawing, andcompare-withis not checked for it. Take your reference images again with Mokxi: the first run of acompare-withwith no reference file saves its picture there for you to check and commit.
A Wokwi part with no Mokxi equivalent is left out and named in the log, the same as when you import the project into the editor. Importing from other tools lists what comes across.
How they compare
| Mokxi | Wokwi CI | |
|---|---|---|
| Where the simulation runs | On your CI runner | On Wokwi's servers |
| Compiles the sketch in CI | Yes, with the editor's own compiler, cached | No, you build it first |
| Free CI | Public repositories, with no limit on runs (they run on your runner) | About 50 CI minutes a month (per Wokwi's docs, checked 2026-10-26) |
| Paid CI | Private repositories with Pro; no minute count on your runner | Pro, from one seat, 2,000 CI minutes a month |
| Wokwi scenario files | Yes, unchanged | Yes |
| Extra steps | press, click, set, wait-pin, expect-toggles (timing), expect-led, expect-probe, expect-display |
|
| Display checks | expect-display (lit pixels, a region, a pixel, blank) and PNG compare-with |
PNG compare-with |
| JUnit report | Yes | Not in Wokwi's docs |
| Job summary and annotations | Yes: a table of results, each failure on the scenario's line with the last lines of serial output | Not in Wokwi's docs |
| Logic analyzer to VCD | --vcd-file |
--vcd-file |
| Simulated and wall time | Reported for every run | |
| Split across jobs | --shard 1/3 |
|
| Other CI (GitLab, Jenkins, CircleCI) | Yes, any machine with Node 18 | Yes |
| Diagram lint | mokxi lint |
wokwi-cli lint |
| ESP-IDF heap monitoring | Not yet | Yes |
| SD card images | Not yet | Yes |
| GDB server | Not yet | Yes |
| Code coverage | Not yet | Yes |
| Custom chips | Not yet | Yes |
| Typing into a run from stdin | Not yet | --interactive |
Pricing
Running mokxi run and mokxi test on your own computer is free, with no account. CI is free for public repositories on GitHub and gitlab.com, with no limit on runs: they run on your runner, not ours. A private repository comes with Pro, with 2,000 API minutes a month for mokxi simulate and mokxi run --cloud (an account that still has Ultra keeps CI and its 5,000 minutes).
Wokwi Pro is EUR 25 a seat a month, or EUR 20 a month billed yearly (per wokwi.com/pricing, checked 2026-10-26).
See Simulation tests in CI for the full command and scenario reference.