Flexible emulators frontend

Experimental Python CLI

  • Declarative. Define emulation targets in JSON. A target encapsulates the emulated machine, tools, and host channels configuration.

  • Flexible. Manage multiple emulator instances over a CLI or Python API.

  • Unopinionated. Use QEMU or Renode, or extend pw_emu to support your favorite emulator.

  • Configurable. Expose channels for debugging and monitoring through configurable host resources like sockets.

Declaratively configure an emulation target like this:

  "targets": {
    "qemu-lm3s6965evb": {
      "gdb": [
      "qemu": {
        "executable": "qemu-system-arm",
        "machine": "lm3s6965evb",
        "channels": {
          "chardevs": {
            "serial0": {
              "id": "serial0"

Then run a binary like this!

pw emu run --args=-no-reboot qemu-lm3s6965evb \
Get started & guides

How to set up and use pw_emu

CLI reference

Reference details about the pw_emu command line interface

API reference

Reference details about the pw_emu Python API


Reference details about pw_emu declarative configuration


Design details about pw_emu

SEED-0108: Emulators Frontend

The RFC explaining the initial design and motivations for pw_emu

Source code

Source code for pw_emu