# What changed in ipykernel

> 44 changes in ipykernel 6 to 7 from its official release notes, upgrade guides and advisories: 11 breaking, 2 deprecations, 2 security, 11 new APIs and options. Each one cited. Sources checked 2026-11-07. HTML: https://unstale.sh/pypi/ipykernel/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## ipykernel 7

### Breaking changes

- The minimum supported Python version is now 3.11. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- The PUB socket was replaced with an XPUB socket. (7.2.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.2.0)
- By default, thread output routes to the latest cell unless `get_ipython().set_parent()` is called explicitly; this behavior is now opt-in. (7.1.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.1.0)
- Support for Python 3.9 is dropped. (7.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.0.0)

### Security

- The debugger temporary directory is created with 0o700 permissions. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- Supports ZMQ Curve for transport encryption. (7.3.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.3.0)

### New APIs and options

- Thread-local parent headers can now be set and reset. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- Adds register_hook to ZMQShellDisplayHook so developers can register display hooks. (7.3.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.3.0)
- ZMQInteractiveShell supports the new iPython system_raise_on_error flag. (7.3.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.3.0)
- Adds unregister_hook to ZMQShellDisplayHook so developers can unregister display hooks. (7.3.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.3.0)
- The kernelspec now includes kernel_protocol_version, allowing the kernel protocol version to be specified there. (7.2.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.2.0)
- Adds a traitlet to store display outputs in history for `%notebook` saves; it defaults to False. (6.31.0, 7.1.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.1.0), [release notes](https://github.com/ipython/ipykernel/releases/tag/v6.31.0)
- Adds experimental support for kernel subshells, implemented using Tornado event loops. (7.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.0.0)

### Behavior and default changes

- Async cells can now process Comm messages. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- psutil is optional at runtime and its import is deferred until needed. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- Passes cell_meta from do_execute to run_cell. (7.3.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.3.0)
- The kernel filters internal frames from callstacks. (7.2.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.2.0)
- The kernel now advertises protocol 5.5. (7.2.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.2.0)

### Fixes and other changes

- The debug handler now validates variable names. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- ProactorEventLoop is enabled for ipykernel on Windows. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- When a subshell is unknown, replies now follow the busy, error, idle sequence. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- supported_encryption now uses a list, matching the latest JEP state. (7.4.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.4.0)
- Cell execution is marked as failing when a formatter errors out. (7.3.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.3.0)
- The IOPubThread constructor is backward compatible, helping existing code continue to work. (7.2.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.2.0)
- A close event was added for the wx timer app. (7.2.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.2.0)
- Fixes ContextVars persisting between cells. (7.1.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.1.0)
- Uses the kernel launching thread instead of assuming the main thread, fixing failures of asserts when kernels launch in new threads. (7.1.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.1.0)
- Fixes keyboard interrupts on Windows by manually resetting the interrupt event. (7.1.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.1.0)
- Fixes display of Matplotlib plots in separate windows. (7.1.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/v7.1.0)

## ipykernel 6

### Breaking changes

- Runs the control channel in a separate thread, which may change the order in which messages are processed. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Removes `find_connection_file` and the `profile` argument of `connect_qtconsole` and `get_connection_info`. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Removes the deprecated module; the notes direct users to import similar functionalities from `ipyparallel`. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- The `isatty` method returns true, which can improve some output such as colored output but may break other output. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Updates the Python requirement to 3.7. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Captures stdout and stderr output, including subprocesses and compiled libraries; some frontends may show duplicated output. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Changes the default timeout to 0.0 seconds. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)

### Deprecations

- Deprecates `Kernel._parent_header`; use `.get_parent()` instead. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Multiple shell streams are ignored and `Kernel.shell_streams` is deprecated; use `Kernel.shell_stream` instead. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)

### New APIs and options

- Adds the ability to set a cell name. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Adds debugger protocol support, enabling debugger functionality in JupyterLab, RetroLab, and other compatible frontends. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Implements the `inspectVariables` request; returned variables also include a `type` field. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Adds `Kernel.get_parent_header`. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)

### Fixes and other changes

- Adds `Kernel.get_parent` to match `set_parent`. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
- Returns the length of the item written to `OutStream`. (6.0.0) — [release notes](https://github.com/ipython/ipykernel/releases/tag/6.0.0)
