modal client library, including features, enhancements, fixes, and deprecations.
Latest
1.3.4 (2026-02-23)
Directory Snapshots (Beta) We’re introducing Directory Snapshots: a new beta feature for persisting specific directories past the lifetime of an individual Sandbox.- Added
modal.Sandbox.detach()method to disconnect your local client from the Sandbox and clean up resources modal.Sandbox.terminate()now accepts awaitparameter (defaultFalse)- Throughput for writing to the
stdinof amodal.Sandbox.execprocess has been increased by 8x - Added
modal.Volume.from_id()method for referencing a Volume by its object id
1.3.3 (2026-02-12)
- Added
modal billing reportCLI and promotedmodal.billing.workspace_billing_reportAPI to General Availability for Team and Enterprise plan workspaces - Added
modal.Queue.from_id()andmodal.Dict.from_id()methods - Modal’s async usage warnings are now enabled by default when using blocking interfaces in async contexts
- Can be disabled with
MODAL_ASYNC_WARNINGS=0orasync_warnings = falsein.modal.toml
- Can be disabled with
- Fixed bug where ASGI scope’s
statecontents could leak between requests when using@modal.asgi_app
1.3.2 (2026-01-30)
Dashboard integration:- Modal objects now have a
.get_dashboard_url()method - New
modal dashboardCLI andmodal app dashboard/modal volume dashboardsubcommands - Example:
- Can now pass a Sandbox ID (
sb-xxxxx) directly tomodal container logsCLI modal token infoCLI now includes the token name- Fixed issue where
modal.Cls.with_options()could sometimes use stale argument values when called repeatedly
1.3.1 (2026-01-22)
Python 3.14t support (experimental):- Improved experimental support for Python 3.14t (free-threaded Python) inside Modal containers
- Container environment now uses the Python implementation of the Protobuf runtime
- Use
modal.Image.from_registry("debian:bookworm-slim", add_python="3.14t")for 3.14t images - Only available on 2025.06 Image Builder Version
- Can now provide a
custom_domainfor amodal.Sandbox - Added
modal token infoCLI command - Added
--timestampsflag tomodal run,modal serve,modal deploy, andmodal container logs - Automatic CLI creation for
modal runnow supportsLiteraltype annotations - Fixed bug that could cause App builds to fail with uninformative
CancelledError - Improved client resource management when running
modal.Sandbox.exec
1.3.0 (2025-12-19)
Async warnings (experimental): Experimental support for detecting cases where Modal’s blocking APIs are used in async contexts. Opt in withMODAL_ASYNC_WARNINGS=1 or async_warnings = true in config.
Breaking changes and deprecations:
- Modal SDK will no longer propagate
grpclib.GRPCErrortypes; usemodal.Errorsubtypes instead max_inputsparameter renamed tosingle_use_containers(now takes boolean instead of integer)- Async (
.aio) interface deprecated frommodal.FunctionCall.from_id,modal.Image.from_id, andmodal.SandboxSnapshot.from_id replace_bytesanddelete_bytesmethods removed frommodal.file_iofilesystem interface- Images built with
modal.Image.micromamba()using 2023.12 Image Builder Version now match local Python version by default
1.2
1.2.6 (2025-12-16)
- Fixed bug where iterating on a
modal.Sandbox.execoutput stream could raise unauthenticated errors
1.2.5 (2025-12-12)
- Can now set a custom
name=for a Function without usingserialized=True - Can now start
modal shellwith a Modal Image ID (modal shell im-abc123) modal shellnow warns if you pass invalid combinations of arguments- Fixed bug in
modal shellthat causedvito fail with unicode decode errors - Fixed thread-safety issue in
modal.Sandboxresource cleanup - Improved performance when adding large local directories to an Image
- Improved async Sandbox performance by not blocking the event loop while reading from
stdoutorstderr
1.2.4 (2025-11-21)
- Fixed bug in
modal.Sandbox.execwhen usingstderr=StreamType.STDOUT(introduced in v1.2.3) - Added
h2_enabledoption inmodal.forward, which enables HTTP/2 advertisement in TLS establishment
1.2.3 (2025-11-20)
Non-preemptible containers: CPU Functions can now be configured to run on non-preemptible capacity:Non-preemptibility incurs a 3x multiplier on CPU and memory pricing. Not currently available for GPU Functions.
- Modal client can now respond gracefully to server throttling with automatic retries (controlled by
MODAL_MAX_THROTTLE_WAITconfig) modal.Sandbox.execimplementation rewritten for improved reliability and efficiency- Added
--add-localflag tomodal shell - Fixed bug where some Modal objects weren’t usable after being captured in a Memory Snapshot
1.2.2 (2025-11-10)
Volume mounts in Image builds:- All Modal objects now accept an optional
modal.Clientobject in their constructor methods - Sandbox
name=parameter now required to follow Modal object naming rules modal.CloudBucketMountnow supportsforce_path_style=True- Output from
modal config showis now valid JSON - Fixed bug where App tags were not attached to Image builds
1.2.1 (2025-10-22)
- Can override the default
-devsuffix for ephemeral Apps viadev_suffixfield in.modal.tomlorMODAL_DEV_SUFFIXenvironment variable - Fixed bug where reading long stdout/stderr from
modal.Sandbox.exec()could break intext=Truemode - Fixed bug where status code was not checked when downloading a file from a Volume
modal run --detach ...now exits more gracefully if you lose internet connection
1.2.0 (2025-10-09)
App tags:modal.App.set_tags() and retrieved with modal.App.get_tags().
Billing API (private beta):
New API for generating tabular billing reports: modal.billing.workspace_billing_report().
Serialization changes:
Internal changes to Function input/output serialization for better support with
modal-js and modal-go SDKs. Versions 0.4 or later of those SDKs require version 1.2 or later of the Python SDK.- Added
modal.Sandbox.create_connect_token()for HTTP/Websocket authentication - Added
modal.Image.build()method to eagerly trigger Image builds - Added
envparameter to multiple methods for configuring environment variables - Can now pass
modal.CloudBucketMounttomodal.Cls.with_options - Added
modal.Sandbox.get_tags()method modal.Dict.pop()now accepts optionaldefaultparameter- Can now
modal shellinto a running Sandbox by passing its Sandbox ID - Sandboxes can be configured to expose a PTY device via
pty=True - Added
modal.experimental.image_delete()function - Using
modal run --interactivenow suppresses Modal’s status spinner - Improved support for Protobuf 5+
- Deprecated
clientparameter fromSandbox.set_tags() - Deprecated
pty_infoparameter fromSandbox.create()andSandbox.exec() - Replaced
--no-confirmwith--yesinmodal environment deleteCLI
- Required to instantiate a
modal.Clsbefore invoking methods - Removed eager
.lookup()method from most Modal object classes - Removed public constructors on
modal.mount.Mountobject - Removed
context_mount=parameter from Docker-orientedmodal.Imagemethods - Removed
allow_cross_region_volumesparameter from function decorators - Removed
modal.experimental.update_autoscaler()function
1.1
1.1.4 (2025-09-03)
- Added
startup_timeoutparameter to@app.function()and@app.cls()decorators - Added optional
idle_timeoutparameter tomodal.Sandbox.create() - Added
cluster_idfield tomodal.experimental.get_cluster_info()dataclass - When
block_network=Trueinmodal.Sandbox.create(), now raises error if port parameters are also set - Functions decorated with
@modal.asgi_app()now return HTTP 408 instead of 502 for input timeout
1.1.3 (2025-08-19)
- Fixed bug from v1.1.2 affecting
modal.FunctionCallmethods when object is retrieved viamodal.FunctionCall.from_id - Added retries to improve robustness of
modal volume get
1.1.2 (2025-08-14)
Object management API: New API pattern for imperative management of Modal resource types:- Create
- Delete
- List
modal.Cls.with_optionsnow supportsregionandcloudkeyword arguments- Fixed bug that could cause Image builds to fail with
'FilePatternMatcher' object has no attribute 'patterns' - Fixed bug where
rdma=Truewas ignored when using@modal.experimental.clustered()with amodal.Cls
1.1.1 (2025-08-01)
Named Sandboxes:- Internal change to
modal.Image.uv_pip_installfor better portability (requires rebuild) - Added
.nameproperty and.info()method tomodal.Dict,modal.Queue,modal.Volume, andmodal.Secret - Sandboxes now support
experimental_optionsconfiguration - Improved Modal’s rich output in Jupyter notebooks
1.1.0 (2025-07-17)
2025.06 Image Builder Version (preview): Support for the new Image Builder Version with major improvements to Modal client dependency handling. See Image Config page to update. UV package manager support:- Optimized handling of
ignoreparameter inImage.add_local_dir - Added
poetry_versionparameter tomodal.Image.poetry_install_from_file - Added
modal.Sandbox.reload_volumesmethod - Added
build_argsparameter tomodal.Image.from_dockerfile - Can now use
@modal.experimental.clusteredandi6pnnetworking withmodal.Cls - Fixed bug where
Cls.with_optionswould fail with already-hydratedmodal.Secret - Fixed bug where Sandbox exec timeout was not respected by
ContainerProcess.wait()orpoll() - Fixed retry handling when using
modal run --detach
- Now raise
modal.exception.NotFoundErrorin all cases where Modal object lookups fail - Enforcing pre-1.0 deprecations on
modal.build,modal.Image.copy_local_file, andmodal.Image.copy_local_dir - Deprecating
environment_nameparameter inmodal.Sandbox.create() - Deprecated
namespaceparameter in.from_namemethods
1.0
1.0.5 (2025-06-27)
Read-only Volumes:- Introduced gradual fix for bug where
Function.mapandFunction.starmapleakmodal.exceptions.UserCodeExceptionwhenreturn_exceptions=True- Set
wrap_returned_exceptions=Falseto opt into future behavior
- Set
- Parameterized class inheritance now properly handles
modal.parameter()annotations from parent classes - Modal client now retries initial connection to Modal server
1.0.4 (2025-06-13)
- Multiple calls to
modal.Cls.with_optionsnow merge overrides - Added
--secretoption tomodal shell - Added
verbose: booloption tomodal.Sandbox.create() - Updated
modal.Sandbox.watch()so exceptions are raised in calling task
1.0.3 (2025-06-05)
Cron timezone support:- Added
h2_portsparameter toSandbox.createfor HTTP/2 encrypted ports - Added
--from-dotenvand--from-jsonoptions tomodal secret create Sandbox.terminateno longer waits for container shutdown by default- Improved performance and stability for
modal volume get - Fixed rare race condition in
Function.map - Fixed issue where
Function.mapwould stall for 55 seconds with empty iterator
1.0.2 (2025-05-26)
- Fixed incompatibility with breaking changes in
aiohttpv3.12.0
1.0.1 (2025-05-19)
- Added
--timestampsflag tomodal app logs - Fixed bug where objects from
Sandbox.listhadreturncode == 0for running Sandboxes - Fixed bug affecting systems where
sys.platform.nodeincludes unicode characters
1.0.0 (2025-05-16)
Other breaking changes:- Removed
modal.Mountas a public object and variousmount=parameters - Removed
show_progressparameter frommodal.App.run(usemodal.enable_outputcontext manager) - Passing flagged options to
Image.pip_installpackage list now raises error (useextra_options) - Removed backwards compatibility for
label=ortag=keywords in object lookup methods - Generator Functions can no longer be invoked with
Function.spawn - Removed
.resolve()method on Modal objects (use.hydrate()) - Functions decorated with
@modal.asgi_appor@modal.wsgi_appnow required to be nullary - Referencing
modal.Stubnow raisesAttributeError(renamed tomodal.App)