v1.0.0

pydantic/montyv1.0.0Sep 25, 2026by samuelcolvin

Upgrading?

AI Summary

Version 1.0.0 is the general availability release of Monty, featuring comprehensive support for Python 3.14 and a major overhaul of the serialization wire format. The release implements a whitelist-based serialization protocol and adds support for numerous core standard library modules.

Key Highlights

  • General Availability (v1.0.0) release
  • Full Python 3.14 wheel support
  • Serialization switched to CBOR with whitelist validation
  • Implementation of critical modules like random, copy, and binascii
  • Support for runtime type definitions like `tuple[int, str]`

Breaking Changes

  • Drop the experimental framing ahead of v1
  • Replace wire types with whitelist of allowed types

New Features

  • Implement the `format()` builtin
  • Implement `eval()` and `exec()`
  • Implement the `random` module and `os.urandom` host call
  • Implement the `copy` module
  • Support `print(file=sys.stderr)`
  • Support runtime definition of types like `tuple[int, str]`
  • Support attribute and subscript targets in unpacking
  • Implement `time.time()`, `time.sleep()`, and `asyncio.sleep()`
  • Implement `binascii` with uu, quoted-printable, and CRC-16 conversions
  • Implement remaining math aggregation functions and `fma`

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
* bump to b2, fix `monty-proto`'s self dev-dependency by @samuelcolvin in https://github.com/pydantic/monty/pull/908
* Switch dumps to use `CBOR` instead of `postcard` by @samuelcolvin in https://github.com/pydantic/monty/pull/913
* Give hot dumped types one-letter serde names by @samuelcolvin in https://github.com/pydantic/monty/pull/922
* Report the source position of every suspension by @samuelcolvin in https://github.com/pydantic/monty/pull/909
* Bump version to v1.0.0-beta.3 by @samuelcolvin in https://github.com/pydantic/monty/pull/927
* Classify a heap type for `copy` in one place by @rewitt94 in https://github.com/pydantic/monty/pull/894
* Move builtin class attribute lookup into `Type::class_getattr` by @rewitt94 in https://github.com/pydantic/monty/pull/910
* Round-trip `BuiltinFunction` through napi by @rewitt94 in https://github.com/pydantic/monty/pull/911
* Docs fixes by @samuelcolvin in https://github.com/pydantic/monty/pull/929
* Fix compile-time panic for lambda with nested comprehension by @rewitt94 in https://github.com/pydantic/monty/pull/925
* Build the type checker lazily, charging it to the worker baseline by @samuelcolvin in https://github.com/pydantic/monty/pull/928
* Add session IDs, forking, ephemeral sessions and auto-resume by @samuelcolvin in https://github.com/pydantic/monty/pull/933
* reduce gap between browser WASM and Node implementations by @davidhewitt in https://github.com/pydantic/monty/pull/665
* Prepare v1.0.0 🚀  by @samuelcolvin in https://github.com/pydantic/monty/pull/936

## 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

Related Repositories