The Kernel class is the base class for all kernel implementations that communicate with frontends over ZeroMQ (0MQ). To create a new language kernel, you must subclass Kernel and override several core methods that handle the Jupyter protocol messages.
Key methods to override:
do_execute(...): The core logic for executing user code. It must be an async def or return an awaitable.do_complete(...): Logic for code completion/intellisense.do_inspect(...): Logic for object introspection.do_history(...): Logic for accessing execution history.
Note: For consistency, it is highly recommended that these methods are coroutine functions (async def).
from ipykernel.kernelbase import Kernel
class MyCustomKernel(Kernel):
implementation = 'my_lang'
implementation_version = '1.0.0'
banner = 'My Custom Language Kernel'
language_info = {'name': 'mylang', 'version': '1.0'}
async def do_execute(self, code, silent, store_history=True, user_expressions=None, allow_stdin=False, *, cell_meta=None, cell_id=None):
# Your execution logic here
return {'status': 'ok', 'execution_count': 1, 'payload': []}
async def do_complete(self, code, cursor_pos):
# Your completion logic here
return {'matches': [], 'cursor_end': cursor_pos, 'cursor_start': cursor_pos, 'metadata': {}, 'status': 'ok'}
# ... override other do_* methods as needed