Changes in Jupyter Client


5.2.3 on GitHub

  • Fix hang on close in ThreadedKernelClient (used in QtConsole) when using tornado with asyncio (default behavior of tornado 5, see PR #352).
  • Fix errors when using deprecated KernelManager.kernel_cmd (PR #343, PR #344).


5.2.2 on GitHub


5.2.1 on GitHub

  • Add parenthesis to conditional pytest requirement to work around a bug in the wheel package, that generate a .whl which otherwise always depends on pytest see #324 and PR #325.


5.2 on GitHub

  • Define Jupyter protocol version 5.3:
  • New jupyter kernel command to launch an installed kernel by name (PR #240).
  • Kernelspecs where the command starts with e.g. python3 or python3.6—matching the version jupyter_client is running on—are now launched with the same Python executable as the launching process (PR #306). This extends the special handling of python added in 5.0.
  • Command line arguments specified by a kernelspec can now include {resource_dir}, which will be substituted with the kernelspec resource directory path when the kernel is launched (PR #289).
  • Kernelspecs now have an optional metadata field to hold arbitrary metadata about kernels—see Kernel specs (PR #274).
  • Make the KernelRestarter class used by a KernelManager configurable (PR #290).
  • When killing a kernel on Unix, kill its process group (PR #314).
  • If a kernel dies soon after starting, reassign random ports before restarting it, in case one of the previously chosen ports has been bound by another process (PR #279).
  • Avoid unnecessary filesystem operations when finding a kernelspec with KernelSpecManager.get_kernel_spec() (PR #311).
  • KernelSpecManager.get_all_specs() will no longer raise an exception on encountering an invalid kernel.json file. It will raise a warning and continue (PR #310).
  • Check for non-contiguous buffers before trying to send them through ZMQ (PR #258).
  • Compatibility with upcoming Tornado version 5.0 (PR #304).
  • Simplify setup code by always using setuptools (PR #284).
  • Soften warnings when setting the sticky bit on runtime files fails (PR #286).
  • Various corrections and improvements to documentation.


5.1 on GitHub

  • Define Jupyter protocol version 5.2, resolving ambiguity of cursor_pos field in the presence of unicode surrogate pairs.

  • Add Session.clone() for making a copy of a Session object without sharing the digest history. Reusing a single Session object to connect multiple sockets to the same IOPub peer can cause digest collisions.

  • Avoid global references preventing garbage collection of background threads.



5.0.1 on GitHub

  • Update internal protocol version number to 5.1, which should have been done in 5.0.0.


5.0.0 on GitHub

New features:

  • Implement Jupyter protocol version 5.1.

  • Introduce jupyter run command for running scripts with a kernel, for instance:

    jupyter run --kernel python3
  • New method BlockingKernelClient.execute_interactive() for running code and capturing or redisplaying its output.

  • New KernelManager.shutdown_wait_time configurable for adjusting the time for a kernel manager to wait after politely requesting shutdown before it resorts to forceful termination.


  • Set sticky bit on connection-file directory to avoid getting cleaned up.
  • jupyter_client.launcher.launch_kernel() passes through additional options to the underlying Popen, matching KernelManager.start_kernel().
  • Check types of buffers argument in Session.send(), so that TypeErrors are raised immediately, rather than in the eventloop.


  • In kernelspecs, if the executable is the string python (as opposed to an absolute path), sys.executable will be used rather than resolving python on PATH. This should enable Python-based kernels to install kernelspecs as part of wheels.
  • kernelspec names are now validated. They should only include ascii letters and numbers, plus period, hyphen, and underscore.

Backward-incompatible changes:

  • datetime objects returned in parsed messages are now always timezone-aware. Timestamps in messages without timezone info are interpreted as the local timezone, as this was the behavior in earlier versions.



4.4 on GitHub

  • Add KernelClient.load_connection_info() on KernelClient, etc. for loading connection info directly from a dict, not just from files.
  • Include parent headers when adapting messages from older protocol implementations (treats parent headers the same as headers).
  • Compatibility fixes in tests for recent changes in ipykernel.



4.3 on GitHub

  • Adds --sys-prefix argument to jupyter kernelspec install, for better symmetry with jupyter nbextension install, etc.



4.2.2 on GitHub

  • Another fix for the start_new_kernel() issue in 4.2.1 affecting slow-starting kernels.


4.2.1 on GitHub

  • Fix regression in 4.2 causing start_new_kernel() to fail while waiting for kernels to become available.


4.2.0 on GitHub

  • added jupyter kernelspec remove for removing kernelspecs
  • allow specifying the environment for kernel processes via the env argument
  • added name field to connection files identifying the kernelspec name, so that consumers of connection files (alternate frontends) can identify the kernelspec in use
  • added KernelSpecManager.get_all_specs() for getting all kernelspecs more efficiently
  • various improvements to error messages and documentation



4.1.0 on GitHub


  • Setuptools fixes for jupyter kernelspec
  • jupyter kernelspec list includes paths
  • add KernelManager.blocking_client()
  • provisional implementation of comm_info requests from upcoming 5.1 release of the protocol


The first release of Jupyter Client as its own package.