Cyphal/CAN v1.0 vs. v1.1 compatibility example

We have a device running Cyphal/CAN v1.1 on the network. We can see its topics using the new Cynic tool:

$ cn ls
{"hash": 15629337813696154377, "evictions": 0, "subject": 26189, "name": "feedback"}
{"hash": 11138084457145460620, "evictions": 0, "subject": 33172, "name": "command.i8"}
{"hash": 13789741955605845191, "evictions": 0, "subject": 16576, "name": "com.zubax.fluxgrip/1a7c39dc781016bf/zubax.manage"}

For Cynic to work without specifying the --can option, we have cynic.toml in the current working directory containing:

can = "slcan0"
dsdl_root = ".../zubax_dsdl/zubax"

Let’s say we want an older v1.0 subscriber to receive the feedback messages. If you look at the network using a v1.0 tool, like Yakut, normally it won’t see any subjects at all – Cyphal/CAN v1.1 uses a 16-bit-subject CAN message format not seen by v1.0 nodes. To allow a v1.0 node to pub/sub on our topic, we have to pin it, which we do by remapping the topic into 1234#1234 for subject-ID 1234 and so on. This particular device accepts the remap configuration via a management topic that uses the zubax.fluxgrip.Manage DSDL type (Cyphal v1.1 does not provide any standard configuration facilities or anything application-layer in general):

$ cn --io zubax/zubax_dsdl/zubax/fluxgrip/Manage.0.1.dsdl \
    req com.zubax.fluxgrip/1a7c39dc781016bf/zubax.manage \
    -- 'remap: "feedback=/1234#1234"'
{
    "success": {},
    "_meta_": {"ts": "2026-07-20T21:15:00.999403+03:00", "remote": 15, "topic": "com.zubax.fluxgrip/1a7c39dc781016bf/zubax.manage", "seqno": 0}
}

Then restart:

$ cn --io zubax/zubax_dsdl/zubax/fluxgrip/Manage.0.1.dsdl req com.zubax.fluxgrip/1a7c39dc781016bf/zubax.manage -- 'restart: no'
{
    "success": {},
    "_meta_": {"ts": "2026-07-20T21:17:57.168525+03:00", "remote": 15, "topic": "com.zubax.fluxgrip/1a7c39dc781016bf/zubax.manage", "seqno": 0}
}

The topic is now remapped as configured – the part after the # is removed because it is a pin expression that is consumed by the local node. For details see the Cy documentation or the Specification v1.1:

$ cn ls
{"hash": 11938621558174105243, "evictions": 4294966061, "subject": 1234, "name": "1234"}
{"hash": 11138084457145460620, "evictions": 0, "subject": 33172, "name": "command.i8"}
{"hash": 13789741955605845191, "evictions": 0, "subject": 16576, "name": "com.zubax.fluxgrip/1a7c39dc781016bf/zubax.manage"}

Then we can open, say, Yakut and observe the traffic which is now ordinary v1.0:

The traffic is visible on Yakut Monitor as well, but it says zombie because v1.1 nodes may not publish the heartbeat: