A graphical CAN bus tool: live trace and plots, transmit, CANopen, UDS, J1939, XCP and CCP, and Python scripting, on any adapter supported by python-can -- PEAK, Vector, Kvaser, IXXAT, SocketCAN and low-cost SLCAN adapters among them. Apache-2.0.
- Adapters: every interface python-can supports -- PEAK PCAN, Vector, Kvaser, IXXAT, ETAS, Intrepid neoVI, NI-CAN and NI-XNET, SYS TEC, Neousys, CANalyst-II, CANtact, candleLight and other gs_usb devices, SLCAN (CANable, Lawicel), 8devices USB2CAN, Seeed Studio, Robotell, isCAN and serial adapters; SocketCAN and socketcand on Linux; UDP multicast, to share frames with other python-can programs on the same computer or the local network; and a virtual bus that needs no hardware at all.
- Live trace of every connected channel on one timebase, CAN FD included, with recording to six log formats and replay of a log onto a bus. Filtering is at two levels: an acceptance filter on a channel, which drops frames before they arrive, and a filter on the trace, which hides them and discards nothing.
- Transmit raw frames, DBC messages edited by signal, or a CANopen RPDO, once or repeating, with a rolling counter and a checksum -- XOR, sums, CRC-8, CRC-16 or your own -- worked out for every frame.
- Signals and Plot from DBC decode, CANopen TPDOs or XCP and CCP polling, with export to CSV and import of MDF and MF4 measurement files.
- Database: every message and signal in the loaded DBC files, with each message's bits drawn out -- a multiplexed one for one value of its multiplexer at a time -- and a message sent to Transmit or the trace, or a signal to the plot, from there.
- CANopen: node list, object dictionary, PDO configuration, EMCY, LSS, SYNC, DCF save, apply and compare, and the network's PDOs, heartbeats and emergencies saved as a DBC.
- Custom panes: the CANopen objects a job needs, laid out as a form with labels and units. Built from the object dictionary with no code, and polled into Signals and Plot.
- UDS over ISO-TP: sessions, security access, DIDs, DTCs, routines, and firmware transfer in either direction.
- J1939: nodes from address claims, DM1 faults with lamp status and the failure mode in words, multi-packet messages (TP.BAM and TP.CM), requesting and sending PGNs, and SPNs decoded from a J1939 DBC.
- XCP and CCP on CAN: connect, seed and key, and reading and writing A2L measurements and characteristics by polling.
- ASCII Log: reads any CAN identifier as text, for devices that print a console into the data bytes.
- CAN off an oscilloscope: frames that pyscopegui, also on PyPI, decodes from a scope's channel arrive by UDP multicast, and are traced, decoded and plotted like frames from an adapter.
- Python hooks with hot reload, replaceable components (your own CAN interface, ISO-TP transport, or XCP or CCP engine), a live console and Run script.
- Plugins that add a pane of their own, installed from a zip. Two come with pycangui: CANopen firmware download (CiA 302-3) and CiA 402 motor control.
- Simulated nodes: devices written as Python files, on a virtual bus or standing on a real adapter, and gateways between channels.
- Workspaces: one for each device or project you work on, holding its hooks, EDS files, databases, channels and layout, and exported as one zip.
Full details in the manual, which is also under Help > Documentation in the application. What each version added, changed and fixed is in the changelog, which is part of the manual too.
There are three options:
-
With pip -- from PyPI, into whichever Python environment you choose. Python 3.12 or newer is needed.
To install it:
pip install pycanguiTo run it:
pycanguiTo update it:
pip install --upgrade pycanguiIt is an ordinary Python package with an ordinary entry point, so the choice of environment is yours.
On Linux, Qt needs one system library first: see On Linux below.
-
The Windows installer --
pycangui-<version>-setup.exefrom the releases page. Nothing else is needed: not even Python. It installs a self-contained application, offers a desktop shortcut, and uninstalls cleanly. This is the one for somebody who wants a CAN tool rather than a Python package.It asks first who it is for: everybody who uses the computer, which needs administrator rights, or only you, which does not.
-
From a Git clone -- clone the repository, then double-click
pycangui.cmd(Windows) or run./pycangui.sh(Linux). This is the way to have the latest changes before they are released, or to contribute. Python 3.12 or newer must be on the PATH.The first run sets itself up: it creates a virtual environment -- a folder called
.venvholding its own copy of Python and only the libraries pycangui needs, so nothing else on the machine is touched -- and downloads a couple of hundred megabytes into it. That takes a few minutes once; every later start is immediate, and deleting.venvundoes the whole thing. Ifuvis installed it is used instead of pip, which makes rebuilding that folder a matter of seconds.If the Python
.venvwas made with is uninstalled -- or replaced by a newer version -- the launcher says so, and offers to delete.venvand set it up again with the Python installed now. Workspaces and settings are not in.venv, and are kept.On Linux, run it from a terminal, so its messages can be read:
./pycangui.shDebian, Ubuntu, Linux Mint and the like often leave out the package that lets Python create
.venv. The launcher names it if it is missing:sudo apt install python3-venvDouble-clicking
pycangui.shin a file manager works too: choose Run in Terminal when it asks, for the same reason.For a shortcut, Tools > Settings > Add shortcut to Start menu (the applications menu on Linux) and, on Windows, Add shortcut to desktop. The entry starts the launcher, so a start from it after a pull still picks up new libraries.
The launcher keeps its own
.venvon purpose and will not use an environment you already have. That is the point of it: it is the way in for somebody who does not want to think about Python environments, and one that sometimes used yours and sometimes did not would be worse than one that never does. To run a checkout in an environment of your own instead,pip install -e .installs it there, reading the source.
On Linux, however pycangui is installed -- with pip or from a clone -- Qt needs a system library to draw the window, and Debian, Ubuntu, Linux Mint and the like often leave it out:
sudo apt install libxcb-cursor0
Without it pycangui stops as it starts, with a message about the xcb platform plugin.
Where your own files are kept is the same whichever way it was installed: your workspaces, hooks, EDS files and settings are in %APPDATA%\pycangui on Windows, ~/.config/pycangui on Linux and ~/Library/Application Support/pycangui on macOS. Upgrading and uninstalling leave that folder alone.
Windows and Linux, on Python 3.12 or newer. Both are tested on every push: Windows on Python 3.14 and 3.15, and Linux on every version from 3.12 to 3.15.
macOS passes the same tests on Apple silicon and Intel Macs, run for each release, but has not yet been tested on real CAN hardware.
Any adapter python-can supports, listed under What it does above. The adapter maker's driver is not bundled: install it and python-can finds it at run time. A virtual channel needs no hardware at all.
pycangui is Apache-2.0 and is a pure-Python application on top of these packages, each used unmodified under its own licence (licence text as declared in the package metadata). The LGPL components stay separate, replaceable packages, as the LGPL requires.
| Package | Used for | Licence |
|---|---|---|
| Python | Runtime | PSF-2.0 |
| PySide6-Essentials | GUI toolkit (Qt for Python) | LGPL-3.0 (used under LGPL) |
| shiboken6 | Qt binding runtime used by PySide6 | LGPL-3.0 (used under LGPL) |
| python-can | CAN adapter abstraction | LGPL-3.0 |
| canopen | CANopen protocol stack | MIT |
| cantools | DBC / KCD / SYM / ARXML decoding | MIT |
| pyqtgraph | Plotting | MIT |
| numpy | Numeric arrays for plotting | BSD-3-Clause (with 0BSD / MIT / Zlib / CC0 parts) |
| python-can-j1939 | J1939 transport and address claim | MIT |
| pywin32 | Finding USB2CAN adapters through python-can, on Windows | PSF-2.0 |
| udsoncan | UDS client | MIT |
| can-isotp | ISO-TP transport for UDS | MIT |
| bincopy | Intel HEX / S-record / binary firmware files | MIT |
| msgpack | Packing frames for UDP multicast, on Windows | Apache-2.0 |
| asammdf | Reading MDF / MF4 measurement files | LGPL-3.0 |
asammdf, the MDF and MF4 reader, is currently the only optional entry: the Windows installer includes it, and a pip installation fetches it the first time a measurement file is opened. pip install pycangui[all] includes it up front. On Python 3.15 it cannot be installed yet, since one of the libraries it needs has no download for 3.15; everything else installs and runs there.
Only LGPL Qt modules are used (QtCore, QtGui, QtWidgets). pycangui depends on PySide6-Essentials, the package that holds them. Adapter drivers (PCAN, Kvaser, Vector, ...) are not included: install the vendor's driver and python-can loads it at run time.
The Windows releases are not code-signed for now, so Windows SmartScreen warns about the
installer: More info > Run anyway goes past it. Where an unsigned program is a problem --
a company machine that blocks them, say -- install with pip instead (pip install pycangui,
above), which SmartScreen does not apply to. Signing is intended, and
CODE_SIGNING.md is the policy -- what will be signed and how, the team
roles, and the privacy policy.
- The Windows installer: Settings > Apps (or Add or remove programs), or Uninstall pycangui in its Start menu folder. It takes away its file associations and shortcuts too.
- pip:
pip uninstall pycangui, and what Tools > Settings added, as for a clone. - A Git clone: delete the folder. If Tools > Settings was used to add a shortcut
or to open
.dcf,.edsand.dbcfiles with it, take those away as well: the shortcuts are%APPDATA%\Microsoft\Windows\Start Menu\Programs\pycangui.lnkandpycangui.lnkon the desktop (on Linux,~/.local/share/applications/pycangui.desktop), and the file types areHKEY_CURRENT_USER\Software\Classes\pycangui.dcf,pycangui.edsandpycangui.dbcwith their entries under.dcf,.edsand.dbc(on Linux,pycangui-open.desktopandmime/packages/pycangui.xmlunder~/.local/share). The same applies to a pip installation that used them.
Your hooks, EDS files and settings are in %APPDATA%\pycangui (~/.config/pycangui on
Linux), and no way of uninstalling touches them; delete that folder to remove them too.
See CONTRIBUTING.md: the policy for changes, setting up to work on pycangui, running the tests, and building the Windows installer. Everyone taking part is asked to follow the code of conduct.
What is aimed for with a keyboard, a screen reader, large text and high contrast, what has been checked, and how to report a barrier, is in ACCESSIBILITY.md.
pycangui talks to real equipment. It is intended only for people trained and experienced in working with CAN networks and the equipment connected to them.
Joining a bus at the wrong bitrate makes a controller signal an error on every frame it sees, which can impact the nodes that are already on the bus. Transmitting, replaying a log, writing parameters, enabling a drive and downloading firmware all change what equipment does, and not all of them can be undone.
Know what is on the bus before you join it, and what a device will do before you write to it. Like any software, pycangui can have faults, so do not rely on it to keep anything off the bus. Where a mistake could hurt someone or damage equipment, keep a way to stop that equipment within reach.
pycangui is free software, provided under the Apache License 2.0, without warranty of any kind; see LICENSE and NOTICE.
The hook and simulated-node templates in pycangui/hooks and pycangui/nodes are the exception. They are copied into your workspace to be edited, and are released under MIT-0 (LICENSES/MIT-0.txt) with no copyright claimed, so what you write in them carries no conditions.
Development has made use of Anthropic's Claude.

