v0.0.19

antonibigata/keysyncv0.0.19Jul 24, 2026by samuelcolvin

AI Summary

This release focuses on sandbox improvements, introducing iterator helpers, subprocess execution, and new modules like `unicodedata` while fixing various memory and scope-related bugs.

Key Highlights

  • Introduced iterator helpers to manage recursion and time.
  • Moved execution to a subprocess pool for better isolation.
  • Added `unicodedata` module and refactored `FromArgs` macros.
  • Fixed type-object marshalling and global name scoping issues.

New Features

  • Iterator helpers for recursion/time management.
  • Subprocess pool execution.
  • WebSocket protocol support.
  • StringBuilder to guard strings under construction.
  • New `unicodedata` module.

Full Release Notes

## What's Changed
* introduce iterator helpers that manage recursion / time by @davidhewitt in https://github.com/pydantic/monty/pull/454
* fix interactions with global names, function scopes & repl by @davidhewitt in https://github.com/pydantic/monty/pull/469
* experiment with `StringBuilder` to guard strings under construction by @davidhewitt in https://github.com/pydantic/monty/pull/448
* fix type-object marshalling across the sandbox boundary by @samuelcolvin in https://github.com/pydantic/monty/pull/478
* `FromArgs` slots cleanup by @samuelcolvin in https://github.com/pydantic/monty/pull/484
* fix(file): release the buffered-file OS-call pin on all paths by @arkuhn in https://github.com/pydantic/monty/pull/485
* add `__name__` et al. by @samuelcolvin in https://github.com/pydantic/monty/pull/495
* f-strings improvements by @samuelcolvin in https://github.com/pydantic/monty/pull/494
* fix: return error instead of panicking in `ForIter` heap read by @tontinton in https://github.com/pydantic/monty/pull/493
* Move execution to a subprocess pool by @samuelcolvin in https://github.com/pydantic/monty/pull/500
* Add 'Part of the Pydantic Stack' footer to README by @strawgate in https://github.com/pydantic/monty/pull/502
* fix(asyncio): raise RuntimeError on cross-gather coroutine reuse by @samuelcolvin in https://github.com/pydantic/monty/pull/503
* fix CI since subprocesses by @samuelcolvin in https://github.com/pydantic/monty/pull/505
* Async memory limits by @samuelcolvin in https://github.com/pydantic/monty/pull/504
* uprev ruff and ty crates by @samuelcolvin in https://github.com/pydantic/monty/pull/506
* move `py_eq` to accept `&Value` for RHS by @davidhewitt in https://github.com/pydantic/monty/pull/508
* use published ruff and ty crates by @samuelcolvin in https://github.com/pydantic/monty/pull/512
* reintroduce `feed_start` API to both python & JS by @davidhewitt in https://github.com/pydantic/monty/pull/507
* use stable clippy in ci by @samuelcolvin in https://github.com/pydantic/monty/pull/513
* Publish all library crates to crates.io by @samuelcolvin in https://github.com/pydantic/monty/pull/514
* websocket protocol by @samuelcolvin in https://github.com/pydantic/monty/pull/509
* Support multi-level (transitive) closure capture by @samuelcolvin in https://github.com/pydantic/monty/pull/516
* move recursion count from heap to VM by @davidhewitt in https://github.com/pydantic/monty/pull/511
* monty-cpython: rich sandbox tracebacks with source previews and carets by @samuelcolvin in https://github.com/pydantic/monty/pull/517
* fix various bugs with global name scoping by @davidhewitt in https://github.com/pydantic/monty/pull/510
* ci: try newer manylinux version by @davidhewitt in https://github.com/pydantic/monty/pull/519
* Add `unicodedata` module, refactor and improve `FromArgs` macros by @samuelcolvin in https://github.com/pydantic/monty/pull/522
* rename and change behaviour of `external_lookup` by @samuelcolvin in https://github.com/pydantic/monty/pull/520
* `encode` and `decode` codecs and error types by @samuelcolvin in https://github.com/pydantic/monty/pull/523
* Fix wasm CI by @samuelcolvin in https://github.com/pydantic/monty/pull/526
* Add `resume_auto()` to iteratively drive `feed_start` snapshots by @samuelcolvin in https://github.com/pydantic/monty/pull/527
* User-defined classes by @samuelcolvin in https://github.com/pydantic/monty/pull/515
* small perf wins by @samuelcolvin in https://github.com/pydantic/monty/pull/528
* Add benchmarks covering real agent workloads by @samuelcolvin in https://github.com/pydantic/monty/pull/530
* Bound native `evaluate_function` re-entry to prevent infinite recursion by @samuelcolvin in https://github.com/pydantic/monty/pull/529
* Restrict `git commit` and `git push` for claude by @samuelcolvin in https://github.com/pydantic/monty/pull/532
* Regex perf improvements by @samuelcolvin in https://github.com/pydantic/monty/pull/531
* String cheap wins (perf track 3) by @samuelcolvin in https://github.com/pydantic/monty/pull/537
* add ci stage for browser testing by @davidhewitt in https://github.com/pydantic/monty/pull/539
* prep for beta release by @samuelcolvin in https://github.com/pydantic/monty/pull/540
* Fixing CI for`0.0.19-beta.2` by @samuelcolvin in https://github.com/pydantic/monty/pull/542
* merge `DropWithHeap` / `DropWithVM` by @davidhewitt in https://github.com/pydantic/monty/pull/521
* fix interned longint ops by @davidhewitt in https://github.com/pydantic/monty/pull/547
* Add per-crate READMEs, rename `monty-cli` to `monty-runtime` by @samuelcolvin in https://github.com/pydantic/monty/pull/544
* migrate from ava to vitest by @davidhewitt in https://github.com/pydantic/monty/pull/548
* use web workers for browser wasm by @davidhewitt in https://github.com/pydantic/monty/pull/525
* remove cargo config by @davidhewitt in https://github.com/pydantic/monty/pull/546
* Monty-proto moves by @samuelcolvin in https://github.com/pydantic/monty/pull/549
* JSON error data, and type conversion to cpython by @samuelcolvin in https://github.com/pydantic/monty/pull/552
* Prep for `0.0.19-beta.3` by @samuelcolvin in https://github.com/pydantic/monty/pull/555
* monty-wasm-runtime publish false, prep 0.0.19-beta.4 by @samuelcolvin in https://github.com/pydantic/monty/pull/559
* clean up js packaging / smoke test by @davidhewitt in https://github.com/pydantic/monty/pull/550
* build and release the `monty-cpython` container by @samuelcolvin in https://github.com/pydantic/monty/pull/563
* remove mod eq optimization by @davidhewitt in https://github.com/pydantic/monty/pull/565
* Add pytest-style assert failure messages by @samuelcolvin in https://github.com/pydantic/monty/pull/556
* remove monty-cpython by @samuelcolvin in https://github.com/pydantic/monty/pull/571
* improve error messages from suspensions in `evaluate_function` by @davidhewitt in https://github.com/pydantic/monty/pull/573
* inline `clone_immediate` into `clone_with_heap` by @davidhewitt in https://github.com/pydantic/monty/pull/578
* Make an existing iterator self-iterable by @rewitt94 in https://github.com/pydantic/monty/pull/579
* Move mounting to the host-side and move `fs` to `monty-fs` by @samuelcolvin in https://github.com/pydantic/monty/pull/576
* Arg fixes, `int()`, `str()`, `round()` by @samuelcolvin in https://github.com/pydantic/monty/pull/584
* Public API fixes by @samuelcolvin in https://github.com/pydantic/monty/pull/587
* add iterator to `PyTrait` by @davidhewitt in https://github.com/pydantic/monty/pull/575
* Support class decorators by @rewitt94 in https://github.com/pydantic/monty/pull/582
* Implement iter(callable, sentinel) by @rewitt94 in https://github.com/pydantic/monty/pull/581
* Retain the OS-call payload in suspended state and drop `OsFunctionCall::Used` by @samuelcolvin in https://github.com/pydantic/monty/pull/583
* avoid collisions in `id` by @davidhewitt in https://github.com/pydantic/monty/pull/580
* migrate iterator callsites to `py_iter` by @davidhewitt in https://github.com/pydantic/monty/pull/588
* stop uninstalling workspace in `make install-py` by @davidhewitt in https://github.com/pydantic/monty/pull/595
* use web-time for the resource-tracker clock so max_duration works on wasm32-unknown-unknown by @Butch78 in https://github.com/pydantic/monty/pull/554
* Allow any iterable after `*`, not just five container types by @rewitt94 in https://github.com/pydantic/monty/pull/589
* `monty-types` crate by @samuelcolvin in https://github.com/pydantic/monty/pull/592
* Teach the type checker about iter/next by @rewitt94 in https://github.com/pydantic/monty/pull/596
* Bump version to 0.0.19-beta.5 by @samuelcolvin in https://github.com/pydantic/monty/pull/597
* fix npm publish by @davidhewitt in https://github.com/pydantic/monty/pull/603
* Fix leaks and panics on `MontyObject` conversion error paths by @samuelcolvin in https://github.com/pydantic/monty/pull/600
* release 0.0.19b6 by @davidhewitt in https://github.com/pydantic/monty/pull/604
* make `dev-py` install python dev deps by @davidhewitt in https://github.com/pydantic/monty/pull/606
* Cap CollectString/CollectStreams so print loops can't OOM the host by @Shaurya-Sethi in https://github.com/pydantic/monty/pull/558
* Remove `ResourceError::Exception` and fix `check_replace_size` shrinking bypass by @samuelcolvin in https://github.com/pydantic/monty/pull/610
* Remove `max_allocations` from resource limits by @samuelcolvin in https://github.com/pydantic/monty/pull/611
* Reject action-less open modes, fix mixed-indent traceback dedent by @samuelcolvin in https://github.com/pydantic/monty/pull/612
* use same build profile for codspeed as release by @samuelcolvin in https://github.com/pydantic/monty/pull/614
* Prep for v0.0.19 by @samuelcolvin in https://github.com/pydantic/monty/pull/616

## New Contributors
* @arkuhn made their first contribution in https://github.com/pydantic/monty/pull/485
* @tontinton made their first contribution in https://github.com/pydantic/monty/pull/493
* @strawgate made their first contribution in https://github.com/pydantic/monty/pull/502
* @rewitt94 made their first contribution in https://github.com/pydantic/monty/pull/579
* @Shaurya-Sethi made their first contribution in https://github.com/pydantic/monty/pull/558

**Full Changelog**: https://github.com/pydantic/monty/compare/v0.0.18...v0.0.19