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
Release files for kernmini 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kernmini-0.1.4.tar.gz | 33.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kernmini-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.7 kB
Release files / kernmini-0.1.4.tar.gz
| Download URL | kernmini-0.1.4.tar.gz |
|---|---|
| Size | 33.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aded26bbe580611c26b8f638e77c482a26a892bbce6dfe5eb35625d27bbe0a12
|
|
BLAKE2b-256 checksum How to use checksums |
302adf3e42ebcc4e55ddd1fbed1bb92d0a347fc3ca549889ebcfcb03aecd2c89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / kernmini-0.1.4-py3-none-any.whl
| Download URL | kernmini-0.1.4-py3-none-any.whl |
|---|---|
| Size | 32.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
036eccaddce71d23b9e13c323ccbb3156c9e90e971409b0c07f7ec7824897c87
|
|
BLAKE2b-256 checksum How to use checksums |
bbcf11113072c1a2f28d4f18433a1b355ac32da206219e6973e11a2472190d03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|