Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.10.1 - 2025-12-14

🏗️ Breaking changes

  • Improve Caller.queue_call rewake reliability and revise Pending.set_result. #272

🌀 Miscellaneous

  • Allow PendingManager.deactivate to be called multiple times. #271

0.10.0 - 2025-12-11

🌀 Miscellaneous

  • Prepare for release v0.10.0 #270

  • Maintenance #269

0.10.0-rc2 - 2025-12-10

📝 Documentation

  • Subshell docstrings #267

🌀 Miscellaneous

  • Prepare for release v0.10.0-rc2 #268

  • Fix Subshell resetting main_shell namespace reset. #266

0.10.0-rc1 - 2025-12-09

🏗️ Breaking changes

  • Rename Pending.wait argument shield as protect. #249

  • Drop MetadataKeys and rename execute_request_timeout to timeout and more tags. #247

  • Refactoring with view to supporting pyodide in the kernel. #244

  • Move RunMode.get_mode functionalty to Kernel.get_run_mode #240

🚀 Features

  • Add LastUpdatedDict and use it for the shell user_ns and user_global_ns. #262

  • Use standard dictionary for Fixed instead of weakkeydict for faster access. #258

  • Added PendingGroup and caller.create_pending_group. #252

  • Added SubshellPendingManager. #251

  • Caller.queue_call is now reset awaitable #250

  • Added PendingTracker, PendingManager and make Pending.set_result resettable. #248

  • Update uv.lock and bump anyio min version to 4.12 with support for winloop. #243

  • Add support for kernel subshells. #238

  • Run mode header can now be either # task or ##task. #239

  • Bump aiologic min version to 0.16 and use its import features. #234

🌀 Miscellaneous

  • Prepare for release v0.10.0-rc1 #265

  • Maintenance #264

  • Use gc.collect at kernel shutdown. #263

  • SubshellManager.create_subshell returns a subshell instead of the subshell_id. #261

  • Modify tests involving weakref to work with pypy. #260

  • Fix type hint for kernel.shell. #259

  • Kernel maintenance #257

  • Alternate kernel run modes. #256

  • Use a tuple to pack direct call instead a functools partial. #255

  • Do_complete_request bugfix. #253

  • Make signature of AsyncInteractiveShell.inspect_request consistent with other methods. #246

  • Move shell related requests to the shell. #245

  • Refactor Caller for improved shutdown. #242

  • Accept subshell_id from either the header or content. Content gets first option. #241

  • Add checkpoints to Caller. #237

  • Add py.typed #236

  • Restore Kernel to the module namespace. #235

0.9.2 - 2025-11-27

🌀 Miscellaneous

  • Prepare for release v0.9.2 #233

  • Fix typing_extensions min version. #232

0.9.1 - 2025-11-27

🌀 Miscellaneous

  • Prepare for release v0.9.1 #231

  • Move 'kernel' optional dependencies into normal dependencies. #230

  • Caller.start_sync now just uses asyncio.create_task instead of using an anyio token. #229

0.9.0 - 2025-11-25

🌀 Miscellaneous

  • Prepare for release v0.9.0 #228

  • Maintenance #227

  • Compat layer isn't required. #226

0.9.0-rc.4 - 2025-11-25

🏗️ Breaking changes

  • Caller refactoring and breaking changes; renamed 'async-context' to 'manual' and removed Caller.to_thread_advanced. #222

  • Make Caller() the preferred way to obtain a running caller. #217

  • Kernel refactoring - moving code around for better readability. #215

🚀 Features

  • Towards making async_kernel.Callable usable on pyodide. #223

  • Added time based idle worker cleanup. #219

  • Caller.as_completed and Caller.wait can now wait for any awaitables. #218

🌀 Miscellaneous

  • Prepare for release v0.9.0-rc.4 #225

  • Remove rudundant code in Caller.new. #224

  • Bump actions/checkout from 5 to 6 in the actions group #221

  • Prepare for release v0.9.0-rc.4 #220

  • Test with free threading python #216

0.9.0-rc.3 - 2025-11-19

🏗️ Breaking changes

  • Caller.wait - renamed argument 'shield' to 'cancel_unfinished' and inverted the logic. #213

🌀 Miscellaneous

  • Prepare for release v0.9.0-rc.3 #214

0.9.0-rc.2 - 2025-11-19

🌀 Miscellaneous

  • Prepare for release v0.9.0-rc.2 #212

  • Name and hide Kernel.receive_msg_loop from debugpy. #211

  • Tidy up Caller.get. #210

  • Improved interrupts by adding a race to clear or re-reraise. #209

  • Kernel - convert traits to Fixed #208

  • Changed comm_manager to a Fixed property, the ipykernel patch is now only applied when the kernel is started. #207

  • Bugfixes for 'Fixed' class #206

0.9.0-rc.1 - 2025-11-18

🏗️ Breaking changes

  • Caller - instance checks names of children rather than all instances. #204

  • Caller restructuring adding new features and breaking changes plus added 'Fixed' class and renamed Future to Pending. #197

  • Caller enhancements and breaking changes #195

  • Remove unnecessary context copy and call from queue_call. #194

🚀 Features

  • Added Caller.zmq_context #198

  • Use queue run mode instead of direct which is no slower, but probably 'safer'. #193

📝 Documentation

  • Docs #203

  • Update readme. #202

  • Docs and shuffle code inside the kernel #200

  • Update mkdocs and mkdocstrings python - have released insiders features. #192

🌀 Miscellaneous

  • Prepare for release v0.9.0-rc.1 #205

  • Add the trait Kernel.print_kernel_messages which when set to false prevents messages from being printed. #201

  • General tidy and remove unrequired tests. #199

0.8.0 - 2025-11-12

🏗️ Breaking changes

  • Rename 'RunMode.blocking' to 'RunMode.direct'. #190

  • Add slots to Future. #186

  • Drop Future.init positional argument 'retain_metadata' #185

📝 Documentation

  • Maintenance and documentation. #187

🌀 Miscellaneous

  • Prepare for release v0.8.0 #191

  • Prepare for release v0.7.2 #189

  • General maintenance #188

0.7.1 - 2025-11-11

🚀 Features

  • Added Kernel.schedule_job, exposed Kernel.caller #181

📝 Documentation

  • Improve docstrings: #182

🌀 Miscellaneous

  • Prepare for release v0.7.1 #184

  • Make all Threads daemon and add daemon option to Caller.start_new. #183

0.7.0 - 2025-11-10

🏗️ Breaking changes

  • Drop 'run_mode' key from Job dict. #174

  • Remove usage of KernelConcurrencyMode. It was functional but unnecessary. #173

  • Run shell and control socket loops in threads without event loops. #172

🚀 Features

  • Use BinarySemaphore instead of Lock for best performance in send_reply. #178

  • Use a lock in send_reply. #175

📝 Documentation

  • Use BinarySemaphore instead of Lock for best performance in send_reply and update readme. #179

🌀 Miscellaneous

  • Prepare for release v0.7.0 #180

  • Switch from mdformat to prettier for formatting markdown #177

  • Improve typehints in tests. #176

  • Added Kernel.run and permit the kernel to run outside the main thread #171

0.7.0-rc.2 - 2025-11-07

🚀 Features

  • Use low-level async primatives in caller module. #169

🌀 Miscellaneous

  • Prepare for release v0.7.0-rc.2 #170

0.7.0-rc.1 - 2025-11-04

🏗️ Breaking changes

  • Use aiologic for thread-safe Event and Lock. #164

🌀 Miscellaneous

  • Prepare for release v0.7.0-rc.1 #167

0.6.3 - 2025-11-04

🌀 Miscellaneous

  • Prepare for release v0.6.3 #166

  • Kernel.execute_request unnecessarily sent a thread call to a new thread. #165

  • Update pre-commit #163

  • Use a dependency floor in requirements and upgrade lock file. #162

  • Make AsyncInteractiveShell.enable_gui raise NotImplementedError for unsupported guis. #161

0.6.2 - 2025-10-29

🌀 Miscellaneous

  • Prepare for release v0.6.2 #160

  • Bump the actions group with 2 updates #158

  • Don't reraise caught cancelled error in Caller_wrap_call. #159

  • Ensure debugInfo is fullly populated. #157

0.6.1 - 2025-10-17

🚀 Features

  • Added Kernel.get_parent. #155

🌀 Miscellaneous

  • Prepare for release v0.6.1 #156

  • Bump astral-sh/setup-uv from 6 to 7 in the actions group #154

0.6.0 - 2025-09-30

🏗️ Breaking changes

  • Remove 'name' argument from get_instance (it can be provided as a kwarg. #152

  • Rename Caller.to_thread_by_name to Caller.to_thread_advanced change the first argument from a string or None to a dict. #151

🚀 Features

  • Add hooks to AsyncDisplayPublisher #150

🌀 Miscellaneous

  • Prepare for release v0.6.0 #153

  • Better handling of Keyboard Interrupt. #149

0.5.4 - 2025-09-28

🌀 Miscellaneous

  • Prepare for release v0.5.4 #148

  • Add functools.wraps decorator to kernel._wrap_handler to make it easier to identify which function it is wrapping. #147

  • Minimize calls to 'expensive' thread.Event methods #146

0.5.3 - 2025-09-27

📝 Documentation

  • Various documentation improvements. #144

🌀 Miscellaneous

  • Prepare for release v0.5.3 #145

  • Tidy up Caller queues and remove kernel.CancelledError. #143

  • Refactored ReentrantAsyncLock and AsyncLock with a new method 'base'. #142

0.5.2 - 2025-09-26

🐛 Fixes

🌀 Miscellaneous

  • Prepare for release v0.5.2 #141

  • Refactor Kernel and Subclass Caller from anyio.AsyncContextManagerMixin #139

0.5.1 - 2025-09-25

🚀 Features

  • Take advantage of current_token in utils.wait_thread_event. #136

🌀 Miscellaneous

  • Prepare for release v0.5.1 #138

  • Reinstate test_debugger for windows. #137

0.5.0 - 2025-09-24

🏗️ Breaking changes

  • Simplify queue with breaking changes #134

🌀 Miscellaneous

  • Prepare for release v0.5.0 #135

0.4.0 - 2025-09-23

🏗️ Breaking changes

  • Revise message handling for comm_msg #129

  • Improve Calller.get_instance to start a caller for the main thread if there isn't one running. #127

🚀 Features

  • Make Caller.queue_call and Caller.queue_call_no_wait thread safe #131

  • Add Caller.get_runner. #126

🌀 Miscellaneous

  • Prepare for release v0.4.0 #133

  • Maintenance #132

  • Put _send_reply back inside run_handler. #130

  • Prevent memory leaks in caller scheduled futures #128

  • Housekeeping #125

0.3.0 - 2025-09-14

🏗️ Breaking changes

  • Caller.queue_call - divide into queue_get_sender, queue_call and queue_call_no_wait. #123

  • Stricter handling in Caller class. #122

  • Add AsyncEvent class. #118

🚀 Features

  • Store Caller.call_later function details in the futures metadata #119

  • Add metadata to Future. #116

🌀 Miscellaneous

  • Prepare for release v0.3.0 #124

  • AsyncEvent maintenance - make more robust #120

  • Switch from pytest-retry to pytest-rerun failures. #117

  • Refactor Caller to speed up initialization of Future by removing the creation of the threading event. #115

0.2.1 - 2025-09-10

🏗️ Breaking changes

🚀 Features

  • Divide Lock into AsyncLock and ReentrantAsyncLock #113

  • Improve Lock class #112

  • Add a context based Lock #111

  • Add classmethod Caller.wait #106

  • Add 'shield' option to Caller.as_completed. #104

🌀 Miscellaneous

  • Prepare for release v0.2.1 #114

  • Bump actions/setup-python from 5 to 6 in the actions group #110

  • Maintenance - Caller refactoring #109

  • Drop WaitType for Literals directly in Caller.wait. #108

  • Change Caller._queue_map to a WeakKeyDictionary. #107

  • Refactor Caller.wait to avoid catching exceptions. #103

0.2.0 - 2025-09-06

🏗️ Breaking changes

  • Rename Caller.call_no_context to Caller.call_direct. #100

  • Future - breaking changes- better compatibility of Future.result #96

🚀 Features

  • Add the classmethod Caller.current_future. #99

  • Add timeout, shield and result optional arguments to Future wait and wait_sync methods: #97

  • Add optional argument 'msg' to Future.cancel method. #95

  • Support weakref on the Future class. #94

📝 Documentation

  • Documentation maintenance. #101

🌀 Miscellaneous

  • Prepare for release v0.2.0 #102

  • Result should raise cancelled error, but was raising and InvalidStateError. #98

0.1.4 - 2025-09-03

🏗️ Breaking changes

  • Optionally store a string representation of a kernel factory inside the kernel spec. #92

  • Use capital 'V' instead of 'v' for version flag in command_line. #88

📝 Documentation

  • Fix for publish-docs.yml not setting the version info correctly. #90

  • Include changelog in 'dev' version of docs. #89

  • Development documentation updates and fixes for publish-docs.yml. #87

🌀 Miscellaneous

  • Prepare for release v0.1.4 #93

  • Ensure there is only one kernel instance including subclases. #91

0.1.3 - 2025-09-02

🚀 Features

  • Add version option to command line. #82

🐛 Fixes

  • Fix bug setting version for mike. #80

📝 Documentation

  • Update documentation #84

🌀 Miscellaneous

  • Prepare for release v0.1.3 #86

  • Minor import changes. #85

  • Change base class of Kernel from ConnectionFileMixin to HasTraits #83

  • Overwrite subclass properties that should not be available. #81

  • CI checks for python 3.14 #63

0.1.2 - 2025-08-31

🏗️ Breaking changes

  • Breaking changes to kernel initialisation and launching #78

  • Enhancement - Make kernel async enterable. #77

📝 Documentation

  • Fix alias for latest docs and limit release versions. #75

🌀 Miscellaneous

  • Prepare for release v0.1.2 #79

  • CI and pre-commit maintenance #76

0.1.1 - 2025-08-28

🌀 Miscellaneous

  • Prepare for release v0.1.1 #74

  • Bugfixes - fix installing without trio and installing a kernelspec #73

0.1.0 - 2025-08-28

🏗️ Breaking changes

  • Caller.queue_call add argument send_nowait and convert to sync that optionally returns an awaitable. #71

🚀 Features

  • Add anyio_backend_options and use uvloop by default #70

📝 Documentation

  • Use mike for documentation versioning. #67

  • Update docs, readme and project description. #66

🌀 Miscellaneous

  • Prepare for release v0.1.0 #72

  • Drop matplotlib dependency. #69

0.1.0-rc3 - 2025-08-26

🚀 Features

  • Add more classifers and code coverage #64

🌀 Miscellaneous

  • Prepare for release v0.1.0-rc3 #65

  • Add workflow_run event because the release is not triggered if the release is created by another workflow. #62

0.1.0-rc2 - 2025-08-26

🌀 Miscellaneous

  • Prepare for release v0.1.0-rc2 #61

0.1.0-rc1 - 2025-08-26

📝 Documentation

  • Update licensing and contribution notes #27

🌀 Miscellaneous

  • Prepare for release v0.1.0-rc1 #60

  • Merge pull request #56 from fleming79/release/v0.1.0-rc1 #56

  • Revise new release #55

  • New release workflow in one step with publish option. #51

  • Improve release workflow, update documentation and license info. #29

  • Maintenance #26

[0.1.0-rc0] - 2025-08-24

🚀 Features

  • First release #18

  • Switch to vcs for versioning. #2

🐛 Fixes

  • Use no-local-version in pyproject.toml instead. #5

  • Use no-local-version on ci. #4

📝 Documentation

  • Revise workflow to work with tags that start with 'v'. No longer sets the tag when writing the changelog. #16

  • Switch to python installer to run git cliff. #14

  • Revise changelog template. #12

  • Do changelog as PR instead of push to main. #8

  • Git cliff #7

  • Fix mkdocs publishing #6

🌀 Miscellaneous

  • Bugfix #25

  • Update changelog #24

  • Update changelog #22

  • Release workflow changes #21

  • Update release workflow to use a template that appends output from git-cliff #17

  • Bump the actions group across 1 directory with 2 updates #3