dart_monty_wasm 0.7.0 copy "dart_monty_wasm: ^0.7.0" to clipboard
dart_monty_wasm: ^0.7.0 copied to clipboard

WASM backend for dart_monty, pure Dart bindings for Monty — a restricted sandboxed Python interpreter built in Rust.

dart_monty_wasm #

Part of dart_monty — pure Dart bindings for Monty, a restricted, sandboxed Python interpreter built in Rust.

Live Demo | GitHub | Monty

Bob This package is co-designed by human and AI — nearly all code is AI-generated.

Pure Dart web WASM implementation of dart_monty using dart:js_interop and @pydantic/monty. Runs the Monty Python interpreter in a Web Worker to avoid Chrome's synchronous WASM compile-size limit.

This package has no Flutter dependency and can be used in any Dart web project.

  • Flutter apps should import dart_monty instead — the federated plugin selects the correct backend automatically.
  • Pure Dart web projects can depend on this package directly to run Python via WASM in the browser.

Architecture #

Dart (compiled to JS) -> MontyWasm (dart:js_interop)
  -> DartMontyBridge (monty_glue.js)
    -> Web Worker (dart_monty_worker.js)
      -> @pydantic/monty WASM (NAPI-RS)

Key Classes #

Class Description
WasmBindings Abstract async interface for WASM operations
WasmBindingsJs Concrete JS interop implementation via Web Worker
MontyWasm MontyPlatform implementation using WasmBindings

Multi-Session Worker Pool (0.7.0) #

Each session runs in its own Worker with isolated memory. NAPI-RS overhead has been stripped (asyncWorkPoolSize: 0, shared: false), reducing memory from 256 MB to 16 MB per session. Snapshots transfer as Uint8Array (binary, no JSON serialization). Cancellation calls Worker.terminate() for preemptive kill with full crash isolation.

Requirements #

The web server must send COOP/COEP headers for SharedArrayBuffer support:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

Usage #

import 'package:dart_monty_wasm/dart_monty_wasm.dart';

Future<void> main() async {
  final monty = MontyWasm(bindings: WasmBindingsJs());

  final result = await monty.run('2 + 2');
  print(result.value); // 4

  await monty.dispose();
}

See the main dart_monty repository for full documentation.

0
likes
0
points
1.23k
downloads

Publisher

unverified uploader

Weekly Downloads

WASM backend for dart_monty, pure Dart bindings for Monty — a restricted sandboxed Python interpreter built in Rust.

Repository (GitHub)
View/report issues

Topics

#python #sandbox #wasm #interpreter

License

unknown (license)

Dependencies

dart_monty_platform_interface

More

Packages that depend on dart_monty_wasm