Skip to main content

ipymini

ipymini is a Python-only Jupyter kernel for Python with a small(ish), readable(ish) codebase and strong IPython parity.

This was almost entirely implemented by AI, and no human currently fully understands all the generated code, so please be very careful, because we don't actually know what this code does. The AI closely referenced the ipykernel, xeus, xeus-python, and jupyter_kernel_test projects during development. So all credit for this project belongs to the authors of those packages, and to authors of the excellent documentation and specifications referred to (e.g DAP spec; JEPs; etc) - but of course all blame for mistakes is entirely our/AI's fault.

Having said all that, we have been working on this and testing it for ~6 months before making it public, and it is working well for our needs at least (Mac and Linux usage on nbclassic and Solveit). We have restructured it a number of times to make it more modular and understandable, and added a lot of tests of concurrency, complex workflows, etc.


What we’ve aimed to do

  • Implement a full Jupyter kernel in pure Python.
  • Match ipykernel behavior where it matters (IOPub ordering, message shapes, history, inspect, etc.).
  • Use IPython instead of re‑implementing Python semantics.
  • Expand protocol‑level tests (IOPub, interrupts, completions, etc.) to approach upstream parity.

Requirements

  • Python 3.11+
  • jupyter_client, jupyter_core, ipython, pyzmq

If you need system ZMQ libs on macOS:

brew install libzmq

Install

From PyPI:

pip install ipymini

Wheel installs include a kernelspec in the environment, so Jupyter from that environment should discover ipymini without a separate install step.

Installing the kernel spec

For editable installs, use the built-in installer. It copies the repo kernelspec into a Jupyter kernels directory.

python -m ipymini install --user

Or install into the current environment:

python -m ipymini install --sys-prefix

After either option, you should see it in:

jupyter kernelspec list

Alternatively, use the repo’s JUPYTER_PATH during development. Set JUPYTER_PATH to include the repo’s share/jupyter:

export JUPYTER_PATH=/path/to/ipymini/share/jupyter:$JUPYTER_PATH

Running manually

ipymini is a normal Jupyter kernel executable. It expects a connection file:

python -m ipymini -f /path/to/connection.json

(When run via Jupyter, that file is created and passed automatically.)


Concurrent execution helpers

Inside an ipymini cell, get_ipython().kernel.unlock() lets queued shell messages run while the current cell awaits. get_ipython().kernel.subshell() is a context manager that routes later execute requests from the same client session to a temporary subshell:

with get_ipython().kernel.subshell():
    await something()

The same helpers are also available as from ipymini import unlock, subshell.


Configuring env and working directory

For per-launch configuration, rely on the kernel launcher:

  • KernelManager: pass env and cwd to start_kernel(...).
  • Kernelspec: add an "env" dict to share/jupyter/kernels/ipymini/kernel.json for static defaults.

Example (KernelManager):

from jupyter_client import KernelManager

km = KernelManager(kernel_name="ipymini")
km.start_kernel(env={"MY_FLAG": "1"}, cwd="/path/to/workdir")

Optional env flags:

  • IPYMINI_STOP_ON_ERROR_TIMEOUT: seconds to keep aborting queued executes after an error (default 0.0).

On POSIX, ipymini isolates the kernel into its own process group and terminates that group as the last shutdown step, so user-created child processes are cleaned up with the kernel. Nested ipymini kernels started by KernelManager watch their parent pid and shut themselves down when that parent exits. Direct SIGTERM to the kernel uses the same cleanup path. Windows does not provide this process-group cleanup guarantee; after normal cleanup the kernel process exits with os._exit().


Developer guide

See DEV.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipymini-0.1.19.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

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

ipymini-0.1.19-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file ipymini-0.1.19.tar.gz.

File metadata

  • Download URL: ipymini-0.1.19.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.2

File hashes

Hashes for ipymini-0.1.19.tar.gz
Algorithm Hash digest
SHA256 bda738a351d7de077abc2d05b69889278a4f6aee4c407dc775655d387a025fae
MD5 281c5114e2ce288d11d4a6ddc26ef6c0
BLAKE2b-256 155495f0b18e49d449cdc1c5ecdfc8273f1bd23f2c6a54a660c317f0b3eafbfd

See more details on using hashes here.

File details

Details for the file ipymini-0.1.19-py3-none-any.whl.

File metadata

  • Download URL: ipymini-0.1.19-py3-none-any.whl
  • Upload date:
  • Size: 26.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.2

File hashes

Hashes for ipymini-0.1.19-py3-none-any.whl
Algorithm Hash digest
SHA256 c70064b2b56ce0aaf50e009e65c71f1924cdc875d346a7590179675ac57ba1f7
MD5 8e6f4bea5d9ee37215c48b6acc752ad7
BLAKE2b-256 1577f5db620976c1bbf621366fa09cd974dac21b60b73d9b51f2d70e3d9ec2d0

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