README.md
July 17, 2026 ยท View on GitHub
Cynic is a simple command-line tool for inspecting and exercising Cyphal networks.
Cynic is built for use with Cyphal v1.1, which introduces named topics.
It is fully interoperable with Cyphal/CAN v1.0 via pinned topics, where the topic name is constructed from its
subject-ID, like 1234#1234.
Usage
Install:
pip install cyphal-cynic
Run cn --help for full usage info, or read the code -- it is simple and compact. Some basic examples are shown below.
List topics visible in the network
cn ls
cn --can=can0 ls
cn --can=COM8 --bitrate=125000 ls
Publish/subscribe
printf '\x01\x02' | cn pub topic/foo
cn sub -o raw topic/foo > messages.bin
Set defaults per directory in cynic.toml, or use environment variables:
can = "/dev/serial/by-id/usb-Zubax*Babel*if00" # or SocketCAN iface name
bitrate = 1_000_000
dsdl_root = ["/home/user/public_regulated_data_types/uavcan", "/home/user/zubax_dsdl"]
RPC/streaming
Send a request, print response(s):
cn req topic/foo/bar --io=zubax/primitive/String1K.1.0.dsdl -- 'Hello world!'
Showcase
Firmware update via Cyphal/CAN
Put this in ./cynic.toml so that you don't have to say --can=slcan0 with every command (optional):
can = "slcan0" # Can also be a file wildcard for SLCAN
Run the file server in the background (or in a second terminal); the topic name here is arbitrarily chosen as fwupd:
cn fs fwupd &
Command the remote node to download the specified firmware file from topic fwupd:
echo 'upd com.zubax.fluxgrip-1-1.0.41c608fbec4f54d9.16c6d0fc4c1e972a.app.release.bin fwupd' | \
cn pub -i ~/zubax/zubax_dsdl/zubax/primitive/String256.1.0.dsdl command