# PyCyphal v2 is coming

**URL:** <https://forum.opencyphal.org/t/pycyphal-v2-is-coming/2458>\
**Category:** PyCyphal\
**Created:** [April 10, 2026, 12:09pm UTC](https://forum.opencyphal.org/t/pycyphal-v2-is-coming/2458 "2026-04-10T12:09:19Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![pavel.kirienko](https://forum.opencyphal.org/user_avatar/forum.opencyphal.org/pavel.kirienko/32/9_2.png) [@pavel.kirienko](https://forum.opencyphal.org/u/pavel.kirienko)\
**Post date:** [April 10, 2026, 12:09pm UTC](https://forum.opencyphal.org/t/pycyphal-v2-is-coming/2458/1 "2026-04-10T12:09:19Z")

</div>

Almost a year ago I [announced the plan](https://github.com/OpenCyphal/pycyphal/issues/351) to release an updated PyCyphal v2 that will offer a radically new API and a much simpler design, building on the experience with v1. The pull request is now here:

> <https://github.com/OpenCyphal/pycyphal/pull/379>
>
> This is the new implementation that was first announced in https://github.com/Op…enCyphal/pycyphal/issues/351 almost a year ago.
> 
> While Cyphal/CAN is wire-compatible between the two versions, the API is completely different, and so is the design philosophy. PyCyphal v2 does not attempt to be a one-stop shop for Cyphal, rather it focuses on connectivity only, intentionally omitting application-level concerns. As a result, the new API is a tiny fraction of the old.
> 
> The new version is not yet ready for use but it will be soon staged on the main branch nevertheless, while we will continue to maintain v1 on a dedicated branch.
> 
> \## Merge checklist
> 
> \- \[x\] Add Cyphal/CAN. Currently, only Cyphal/UDP is available. An attempt will be made to reuse the extensive CAN media drivers from v1. One thing to focus on is https://github.com/OpenCyphal/pycyphal/issues/227
> - No attempt will be made to populate all of the CAN media implementations yet. This will be postponed for future work. For now, SocketCAN is considered sufficient.
> \- \[\] Provide the updated docs, but not using Sphinx this time but rather something much simpler, likely pdoc, at most MkDocs.
> \- \[\] Set up auto-publish when a new \`\_\_version\_\_\` tag is pushed on the master branch.

It has both UDP and CAN already, but the CAN transport only supports the SocketCAN backend at the moment. Porting the other backends from the old v1 is a no-brainer and I will task an agent to do that sometime soon, maybe even this weekend if time permits. The other missing bits are the updated docs and a new CD pipeline.

PyCyphal v2 will be published on PyPI under a different name `pycyphal2` because I anticipate that many will want to keep both versions installed in the same Python environment concurrently.

Usage:

```python
from pycyphal2 import Node
from pycyphal2.udp import UDPTransport

async def main():
    transport = UDPTransport.new()
    node = Node.new(transport, "my_node")
    
    sub = node.subscribe("my/topic")
    async for arrival in sub:
        print(
            f"Received message at {arrival.timestamp.s:.3f} published by node {arrival.breadcrumb.remote_id:016x} "
            f"on topic {arrival.breadcrumb.topic.name} with contents:",
            arrival.message.hex(),
            sep="\n"
        )

```
