Changelog History
-
v1.3.0 Changes
September 25, 2025PythonMonkey v1.3.0
π PythonMonkey now supports the soon-to-be-released (2025-10-07) Python 3.14!
What's Changed
Full Changelog : v1.2.0...v1.3.0
-
v1.2.0 Changes
July 19, 2025PythonMonkey v1.2.0
π§ PythonMonkey now has prebuilt wheels for glibc 2.31+ (Ubuntu 20.04+, Debian 11+, Fedora 32+, ...) on arm64 Linux! π₯³
What's Changed
- π― Chore: clone SpiderMonkey source code from the official Firefox github repo by @Xmader in #484
- chore: add marker file according to pep561 by @SaidBySolo in #464
- π CI: Build on Ubuntu 20.04 for arm64 linux release by @Xmader in #491
- π fix the embedded null character issue by @Xmader in #492
π New Contributors
- @SaidBySolo made their first contribution in #464
Full Changelog : v1.1.1...v1.2.0
-
v1.1.0 Changes
December 03, 2024PythonMonkey v1.1.0
π This release adds Python 3.13 support to PythonMonkey.
What's Changed
- π python 3.13 support by @Xmader in #442
- π Fix remaining memory bugs by @Xmader in #443
- π Fix the macOS 14 CI by @Xmader in #458
Full Changelog : v1.0.0...v1.1.0
-
v1.0.0 Changes
September 12, 2024PythonMonkey v1.0.0
π PythonMonkey is now stable for production, including Distributive's use-case of DCP! π₯³
π Bug Fixes:
- π» calling a python method that has 0 parameters in JavaScript would cause a segfault rather than a
TypeError: Class.method() takes 0 positional arguments but 1 was givenexception - π» Using a python iterable as the yield of a JavaScript
function*generator would cause a segfault rather than aTypeError: 'iterable' object is not an iteratorexception
- π» calling a python method that has 0 parameters in JavaScript would cause a segfault rather than a
-
v0.9.0 Changes
September 10, 2024PythonMonkey v0.9.0
π This release fixes the long annoying string corruption bug.
PythonMonkey is now super powerful and a lot more stable! π¦Ύ π¦Ύ π¦Ύ
π Generated release notes:
What's Changed
- β¬οΈ Upgrade SpiderMonkey to mozilla-central commit
a283127a5d0aa005c54d339e8ca27414b55f079bby @github-actions in #424 - π Fix the string corruption bug by @Xmader in #428
- π Philippe/final edits for first release by @philippedistributive in #427
- π Make the wheel packages we build also support lower versions of macOS by @Xmader in #415
- π Make easier debugging HTTP errors (such as
DCPError: no transports defined) by @Xmader in #371 - π Docs: add uninstallation instructions in the README by @Xmader in #431
- β Add CI for publishing to βistributive's archive server by @Xmader in #432
Full Changelog : v0.8.1...v0.9.0
- β¬οΈ Upgrade SpiderMonkey to mozilla-central commit
-
v0.8.1 Changes
September 03, 2024π bug fixes:
π performance improvements:
other:
-
v0.8.0 Changes
July 31, 2024- python
bytesobjects are now passed to JavaScript as immutableUint8Array python
dictand user-defined class objects now use the prototype chain for following methods in JavaScript:Object.prototype.toStringObject.prototype.toLocaleStringObject.prototype.valueOf
π² python iterator objects passed to JS now have the
[Symbol.toPrimitive]and.valueOfproperties in JavaScript to support use withconsole.log
- python
-
v0.7.1 Changes
July 18, 2024- π fixed a bug where users without Rust and cargo installed could not install pythonmonkey from a source distribution
-
v0.7.0 Changes
July 16, 2024β added a new build type:
- Sanitize : same as Debug , except with AddressSanitizer enabled
β added a new tool inspired by wtfnode called WTFPythonMonkey to track down any hanging
setTimeout/setIntervaltimers that are still ref'd when you hit ctrl-C.- When using
pmjs, to enable it you can simply pass the--wtfflag, like so:
pmjs --wtf<filename>.js
- When using pythonmonkey from python, it can be enabled by using a context manager (
with-statement) around the entry point of the event loop, like so:
importasyncioimportpythonmonkeyaspmfrompythonmonkey.lib.wtfpmimportWTFasyncdefpythonmonkey_main():pm.eval("setInterval(() => console.log(new Date), 500)")awaitpm.wait()withWTF():asyncio.run(pythonmonkey_main())
- When using
implemented JS-like function calling for python functions in JS. Similar to JS functions, you can now call python functions with too few or too many arguments without throwing an error.
- When too many arguments are supplied, those beyond the function's parameter count are ignored, e.g.:
deff(a,b):return[a,b]assert[1,2]==pm.eval("(f) => f(1, 2, 3)")(f)
- When too few arguments are supplied, those beyond the number of supplied arguments are passed as
Noneto match JS's behaviour of passingundefined, e.g.:
deff(a,b):return[a,b]assert[1,None]==pm.eval("(f) => f(1)")(f)
- This also works for functions with default arguments, or varargs, e.g.:
deff(a,b,c=42,d=43,*args):return[a,b,c,d,*args]assert[1,2,3,4,5]==pm.eval("(f) => f(1, 2, 3, 4, 5)")(f)assert[1,2,3,4]==pm.eval("(f) => f(1, 2, 3, 4)")(f)assert[1,2,3,43]==pm.eval("(f) => f(1, 2, 3)")(f)assert[1,2,42,43]==pm.eval("(f) => f(1, 2)")(f)assert[1,None,42,43]==pm.eval("(f) => f(1)")(f)assert[None,None,42,43]==pm.eval("(f) => f()")(f)
π implemented the copy protocol (both
copy.copyandcopy.deepcopy) for JSStringProxiesπ using the aforementioned WTFPythonMonkey, we've fixed several bugs related to timers, including:
- the
Future object is not initializederror and following segfault - heap-use-after-free in
timerJobWrapper - hitting ctrl-C in
pmjsprinting out the entire PythonKeyboardInterrupttraceback - intervals from
setIntervalwere not being unref'd correctly
- the
π fixed a bug where uncaught JS Promise rejections would result in a
Future exception was never retrievedPython error, rather than the actual JS errorβ added support for
HTTP-Keep-Alivein our implementation ofXMLHttpRequestπ fixed a memory leak related to cross-language strings
π fixed a bug where attempting to install Pythonmonkey from source failed on Ubuntu 24.04
π PythonMonkey now uses the bleeding edge version of SpiderMonkey on this and all future releases
π we now build and distribute binaries for python 3.8 on amd64 Mac OS
-
v0.6.0 Changes
May 02, 2024PythonMonkey v0.6.0
- π significant performance improvements, particularly in memory usage
π improved build system and build time, including making building the docs optional, and the following build types:
- Release : stripped symbols, maximum optimizations (default, what gets published on pip)
- DRelease : same as Release , except symbols are not stripped
- Debug : minimal optimizations
- Profile : same as Debug , except profiling is enabled
π fixed a bug where users with particularly old versions of PythonMonkey were unable to update to the latest release using pip unless they completely uninstalled PythonMonkey first