kernmini
Everything a Jupyter kernel needs except the language.
kernmini is the language-agnostic core of a Jupyter kernel: connection files, HMAC-signed wire sessions, the full socket thread cast (shell/control async routers, IOPub with a bounded queue and JEP 65 welcomes, stdin routing, heartbeat), busy/idle and abort discipline, stop-on-error, interrupts, JEP 91 subshells, kernelspec installation, and process lifecycle (signal handling, process-group isolation and teardown, parent-watch crash safety). A kernel author supplies only an executor (the shell) and gets a correct, tested kernel around it.
ipymini is the reference kernel (IPython). Its integration suite is kernmini's main proving ground.
A complete kernel
from contextlib import contextmanager
from kernmini import run_kernel
class EchoShell:
def __init__(self, request_input=None, **kw): self.execution_count,self._stream = 0,None
def set_stream_sender(self, sender): self._stream = sender
@contextmanager
def execution_context(self, allow_stdin, silent): yield
def kernel_info(self):
return dict(implementation="echokernel", implementation_version="0.0.1", banner="echo",
language_info=dict(name="echo", version="1.0", mimetype="text/plain", file_extension=".txt"))
async def execute(self, code, silent=False, store_history=True, user_expressions=None, allow_stdin=False):
self.execution_count += 1
if self._stream: self._stream("stdout", f"echo: {code}\n")
return dict(execution_count=self.execution_count, result={"text/plain": code.upper()})
run_kernel(connection_file, EchoShell, subshells=False)
That's the whole kernel. Every Jupyter client (JupyterLab, nbclient, jupygate, ...) can now launch it, execute against it, stream its output, and interrupt and shut it down. kernmini.install_kernelspec(name, argv, display_name, language) registers it with Jupyter.
The shell contract is documented in DEV.md. Beyond the four members above, everything is opt-in by capability: implement complete/inspect/is_complete/history for language services, debug_request for a DAP debugger, interrupt for language-specific sync interruption, bind_kernel for a backref, and pass subshells=True when the shell supports concurrent instances.
Install
pip install kernmini
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kernmini-0.1.0.tar.gz.
File metadata
- Download URL: kernmini-0.1.0.tar.gz
- Upload date:
- Size: 27.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f54c24e4942f93557421a3b0cc5a95acf2ebd88546775d68b71c03a09d0c627
|
|
| MD5 |
b532ae14b1ed83c84dc53cd96195225d
|
|
| BLAKE2b-256 |
a969b0c72ca4e81e9fa826e355e0e984789c94050e8ce3cb8818f4ed615756cf
|
File details
Details for the file kernmini-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kernmini-0.1.0-py3-none-any.whl
- Upload date:
- Size: 24.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8addf6c92c2d0962dfbb26984b0e9fc101b78989fdd0f86a4330f545d0f23e35
|
|
| MD5 |
25389f61470ba2639dae89c3444a549d
|
|
| BLAKE2b-256 |
d2dc8ec0f6fbde279b6f22dadfeb7a416594db09a88f603c76123abd98b628e5
|