Skip to main content

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

kernmini-0.1.0.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kernmini-0.1.0-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

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

Hashes for kernmini-0.1.0.tar.gz
Algorithm Hash digest
SHA256 1f54c24e4942f93557421a3b0cc5a95acf2ebd88546775d68b71c03a09d0c627
MD5 b532ae14b1ed83c84dc53cd96195225d
BLAKE2b-256 a969b0c72ca4e81e9fa826e355e0e984789c94050e8ce3cb8818f4ed615756cf

See more details on using hashes here.

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

Hashes for kernmini-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8addf6c92c2d0962dfbb26984b0e9fc101b78989fdd0f86a4330f545d0f23e35
MD5 25389f61470ba2639dae89c3444a549d
BLAKE2b-256 d2dc8ec0f6fbde279b6f22dadfeb7a416594db09a88f603c76123abd98b628e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page