All Versions
10
Latest Version
Avg Release Cycle
57 days
Latest Release
179 days ago

Changelog History

  • v1.3.0 Changes

    September 25, 2025

    PythonMonkey 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, 2025

    PythonMonkey 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

    Full Changelog : v1.1.1...v1.2.0

  • v1.1.0 Changes

    December 03, 2024

    PythonMonkey v1.1.0

    πŸš€ This release adds Python 3.13 support to PythonMonkey.

    What's Changed

    Full Changelog : v1.0.0...v1.1.0

  • v1.0.0 Changes

    September 12, 2024

    PythonMonkey 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 given exception
    • πŸ‘» Using a python iterable as the yield of a JavaScript function* generator would cause a segfault rather than a TypeError: 'iterable' object is not an iterator exception
  • v0.9.0 Changes

    September 10, 2024

    PythonMonkey 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 a283127a5d0aa005c54d339e8ca27414b55f079b by @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

  • v0.8.1 Changes

    September 03, 2024
    • πŸ› bug fixes:

    • 🐎 performance improvements:

    • other:

  • v0.8.0 Changes

    July 31, 2024
    • python bytes objects are now passed to JavaScript as immutable Uint8Array
    • python dict and user-defined class objects now use the prototype chain for following methods in JavaScript:

      • Object.prototype.toString
      • Object.prototype.toLocaleString
      • Object.prototype.valueOf
    • 🌲 python iterator objects passed to JS now have the [Symbol.toPrimitive] and .valueOf properties in JavaScript to support use with console.log

  • 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:

    • βž• added a new tool inspired by wtfnode called WTFPythonMonkey to track down any hanging setTimeout/setInterval timers that are still ref'd when you hit ctrl-C.

      • When using pmjs, to enable it you can simply pass the --wtf flag, like so:

      pmjs --wtf<filename>.js

      importasyncioimportpythonmonkeyaspmfrompythonmonkey.lib.wtfpmimportWTFasyncdefpythonmonkey_main():pm.eval("setInterval(() => console.log(new Date), 500)")awaitpm.wait()withWTF():asyncio.run(pythonmonkey_main())

    • 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 None to match JS's behaviour of passing undefined, 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.copy and copy.deepcopy) for JSStringProxies

    • πŸ›  using the aforementioned WTFPythonMonkey, we've fixed several bugs related to timers, including:

      • the Future object is not initialized error and following segfault
      • heap-use-after-free in timerJobWrapper
      • hitting ctrl-C in pmjs printing out the entire Python KeyboardInterrupt traceback
      • intervals from setInterval were not being unref'd correctly
    • πŸ›  fixed a bug where uncaught JS Promise rejections would result in a Future exception was never retrieved Python error, rather than the actual JS error

    • βž• added support for HTTP-Keep-Alive in our implementation of XMLHttpRequest

    • πŸ›  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, 2024

    PythonMonkey 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