v1.0.0-beta.1

pydantic/montyv1.0.0-beta.1Sep 21, 2026by samuelcolvin

Upgrading?

AI Summary

This beta release marks a significant milestone towards version 1.0.0 by introducing comprehensive support for standard Python modules such as math, time, random, and sys, alongside architectural improvements to the sandbox and runtime. It includes numerous bug fixes, performance optimizations, and support for Python 3.14t wheels.

Key Highlights

  • Added support for standard Python modules including math, time, random, sys, copy, and binascii.
  • Implemented core built-ins and formatting methods such as eval(), exec(), format(), and percent formatting.
  • Architectural changes include dropping experimental framing, flattening the wire value layout, and replacing wire types with a whitelist.
  • Added support for Python 3.14t wheels and improved runtime type definitions (e.g., tuple[int, str]).

New Features

  • Support for time.time(), time.sleep(), and asyncio.sleep() with timezone support.
  • Implementation of the random module and os.urandom host call.
  • Support for print(file=sys.stderr) and percent formatting.
  • Implementation of binascii with uu, quoted-printable, and CRC-16 conversions.
  • Support for runtime type definitions like tuple[int, str] and dict | dict.

Full Release Notes

## What's Changed
* Drop the experimental framing ahead of v1 by @rewitt94 in https://github.com/pydantic/monty/pull/811
* Percent formatting: `'...' % foo` and `b'...' % bar` by @samuelcolvin in https://github.com/pydantic/monty/pull/825
* fix flakey js test by @samuelcolvin in https://github.com/pydantic/monty/pull/826
* Implement the `format()` builtin by @samuelcolvin in https://github.com/pydantic/monty/pull/827
* Answer `date.today()` / `datetime.now()` in standard execution by @rewitt94 in https://github.com/pydantic/monty/pull/812
* Implement remaining math aggregation functions and `fma` by @samuelcolvin in https://github.com/pydantic/monty/pull/831
* fix telemetry context propagation by @davidhewitt in https://github.com/pydantic/monty/pull/830
* Support `print(file=sys.stderr)` by @rewitt94 in https://github.com/pydantic/monty/pull/818
* Finish `binascii` with the uu, quoted-printable and CRC-16 conversions by @rewitt94 in https://github.com/pydantic/monty/pull/816
* Build Python 3.14t wheels by @Kludex in https://github.com/pydantic/monty/pull/832
* make it possible to run smoke test from npm by @davidhewitt in https://github.com/pydantic/monty/pull/619
* fix browser smoke test install by @samuelcolvin in https://github.com/pydantic/monty/pull/844
* Move examples-only Python deps out of the dev group by @samuelcolvin in https://github.com/pydantic/monty/pull/849
* Match CPython for int/float arithmetic on long ints and float pow overflow by @samuelcolvin in https://github.com/pydantic/monty/pull/834
* Make the `examples` dependency group opt-in by @samuelcolvin in https://github.com/pydantic/monty/pull/852
* CWD support by @samuelcolvin in https://github.com/pydantic/monty/pull/828
* Add a watchdog for the CPython side of test cases and deflake `lookup__mutation.py` by @samuelcolvin in https://github.com/pydantic/monty/pull/854
* Accept long ints across `pow()`, `round()` and the `math` module by @samuelcolvin in https://github.com/pydantic/monty/pull/853
* Eager awaits by @samuelcolvin in https://github.com/pydantic/monty/pull/833
* Better `casefold` and other case methods compatibility by @samuelcolvin in https://github.com/pydantic/monty/pull/857
* Deps update by @samuelcolvin in https://github.com/pydantic/monty/pull/859
* Add the remaining `itertools` callables bar `tee` by @samuelcolvin in https://github.com/pydantic/monty/pull/860
* Revert itertools by @samuelcolvin in https://github.com/pydantic/monty/pull/861
* Support runtime definition of types like `tuple[int, str]` and `dict | dict` by @samuelcolvin in https://github.com/pydantic/monty/pull/858
* Implement the `sys` constants with a known value by @samuelcolvin in https://github.com/pydantic/monty/pull/863
* Support attribute and subscript targets in unpacking by @samuelcolvin in https://github.com/pydantic/monty/pull/865
* Add the antigravity example, running Monty in the browser by @samuelcolvin in https://github.com/pydantic/monty/pull/864
* Fix re-entrant source windows in `chain`, `pairwise` and `accumulate` by @rewitt94 in https://github.com/pydantic/monty/pull/843
* Missing `itertools` methods by @samuelcolvin in https://github.com/pydantic/monty/pull/862
* Add a regression test for the trailing-slash symlink escape by @samuelcolvin in https://github.com/pydantic/monty/pull/868
* Add the `random` module and an `os.urandom` host call by @samuelcolvin in https://github.com/pydantic/monty/pull/867
* Add the `copy` module by @rewitt94 in https://github.com/pydantic/monty/pull/791
* Check container growth against the memory limit before it allocates by @rewitt94 in https://github.com/pydantic/monty/pull/845
* Follow-ups for `datetime` by @rewitt94 in https://github.com/pydantic/monty/pull/838
* Fix two container-reentrancy panics by @rewitt94 in https://github.com/pydantic/monty/pull/846
* don't make static strings a requirement for dump stability by @davidhewitt in https://github.com/pydantic/monty/pull/810
* establish tampered snapshots as permitted: garbage in garbage out by @davidhewitt in https://github.com/pydantic/monty/pull/873
* Fix async task scheduling for batched host failures by @flyingmutant in https://github.com/pydantic/monty/pull/875
* Give each callable type its own `PyTrait::py_call` by @rewitt94 in https://github.com/pydantic/monty/pull/878
* Flat layout for wire value type by @samuelcolvin in https://github.com/pydantic/monty/pull/871
* Serialize dumps after the header in place, without a second buffer by @samuelcolvin in https://github.com/pydantic/monty/pull/881
* Shrink the largest dag decode bench to fit the decode budget by @samuelcolvin in https://github.com/pydantic/monty/pull/883
* remove needless `SOFT_LIMIT` variable from `monty-alloc` by @davidhewitt in https://github.com/pydantic/monty/pull/763
* Add `time.time()`, `time.sleep()` and `asyncio.sleep()` by @samuelcolvin in https://github.com/pydantic/monty/pull/866
* expose otel trace context from snapshots by @davidhewitt in https://github.com/pydantic/monty/pull/885
* purge `pool-architecture.md` by @davidhewitt in https://github.com/pydantic/monty/pull/887
* Replace session `max_duration` with feed and turn limits by @rewitt94 in https://github.com/pydantic/monty/pull/880
* add a general solution for wire decoding budgets by @davidhewitt in https://github.com/pydantic/monty/pull/874
* try to hide object internals by @davidhewitt in https://github.com/pydantic/monty/pull/886
* fix merge conflict by @davidhewitt in https://github.com/pydantic/monty/pull/891
* Comment and documentation fixes by @rewitt94 in https://github.com/pydantic/monty/pull/888
* Sort `StaticStrings` alphabetically by @rewitt94 in https://github.com/pydantic/monty/pull/889
* Change `DumpError` for future compatibility by @rewitt94 in https://github.com/pydantic/monty/pull/890
* Implement `eval()`, `exec()` and `locals()` by @samuelcolvin in https://github.com/pydantic/monty/pull/855
* Auto OS calls by @samuelcolvin in https://github.com/pydantic/monty/pull/892
* Use sleep and random in the antigravity example by @samuelcolvin in https://github.com/pydantic/monty/pull/897
* Timezone support by @samuelcolvin in https://github.com/pydantic/monty/pull/898
* Poll the time limit in large three-argument pow by @samuelcolvin in https://github.com/pydantic/monty/pull/899
* Reject overlapping host directories at mount registration by @samuelcolvin in https://github.com/pydantic/monty/pull/741
* Extend `time` module by @samuelcolvin in https://github.com/pydantic/monty/pull/901
* Replace wire types with whitelist of allowed types, and proxy for everything else by @samuelcolvin in https://github.com/pydantic/monty/pull/900
* Rename `AutoOsCalls` to `OsPolicy` by @samuelcolvin in https://github.com/pydantic/monty/pull/902
* Resolve exception classes directly and model them inbound by @samuelcolvin in https://github.com/pydantic/monty/pull/905
* Describe Monty as a sandbox and name the open-source form "OSS Monty" by @samuelcolvin in https://github.com/pydantic/monty/pull/904
* Uprev `ruff`, pre-check source by @samuelcolvin in https://github.com/pydantic/monty/pull/906
* Bump to v1.0.0-beta.1 by @samuelcolvin in https://github.com/pydantic/monty/pull/903

## New Contributors
* @Kludex made their first contribution in https://github.com/pydantic/monty/pull/832
* @flyingmutant made their first contribution in https://github.com/pydantic/monty/pull/875

**Full Changelog**: https://github.com/pydantic/monty/compare/v0.0.23...v1.0.0-beta.1

Related Repositories