Skip to content
/ comm Public

Python Comm implementation for the Jupyter kernel protocol

License

Notifications You must be signed in to change notification settings

ipython/comm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2223501 · Mar 18, 2025

History

38 Commits
Mar 18, 2025
Mar 18, 2025
Nov 4, 2023
Aug 1, 2022
Mar 18, 2025
Mar 12, 2024
Aug 1, 2022
Nov 4, 2023
Mar 12, 2024
Mar 18, 2025
Dec 13, 2023

Repository files navigation

Comm

It provides a way to register a Kernel Comm implementation, as per the Jupyter kernel protocol. It also provides a base Comm implementation and a default CommManager that can be used.

Register a comm implementation in the kernel:

Case 1: Using the default CommManager and the BaseComm implementations

We provide default implementations for usage in IPython:

import comm


class MyCustomComm(comm.base_comm.BaseComm):
    def publish_msg(self, msg_type, data=None, metadata=None, buffers=None, **keys):
        # TODO implement the logic for sending comm messages through the iopub channel
        pass


comm.create_comm = MyCustomComm

This is typically what ipykernel and JupyterLite's pyolite kernel will do.

Case 2: Providing your own comm manager creation implementation

import comm

comm.create_comm = custom_create_comm
comm.get_comm_manager = custom_comm_manager_getter

This is typically what xeus-python does (it has its own manager implementation using xeus's C++ messaging logic).

Comm users

Libraries like ipywidgets can then use the comms implementation that has been registered by the kernel:

from comm import create_comm, get_comm_manager

# Create a comm
comm_manager = get_comm_manager()
comm = create_comm()

comm_manager.register_comm(comm)