Modal 1.6.3
Modal 1.6.3 includes a new Image Builder version that improves caching for Dockerfile instructions and Python distributions. This update provides performance enhancements and security updates for function containers.
Also onFunding(Funding rounds)·Funding(Funding rounds)·Paydays(Pay schedule)
Modal 1.6.3 includes a new Image Builder version that improves caching for Dockerfile instructions and Python distributions. This update provides performance enhancements and security updates for function containers.
- The new metrics observability surface provides a flexible query interface for fetching detailed time-resolved data about performance and resource consumption: Use the new modal function metrics / modal server metrics CLIs to export metrics to JSON or CSV. Use methods in the new Function.metrics / Server.metrics namespaces to operate on metrics in code.
- We've added CLI commands for observability over Modal Endpoints: modal endpoint info displays basic metadata. modal endpoint stats reports aggregate performance metrics. modal endpoint logs fetches or streams logs.
Sandboxes now use our next-generation backend, affording substantially higher creation rates and concurrency limits for CPU Sandboxes. No code changes are required, but there are some semantic differences to be aware of: The modal.Sandbox.create() method now blocks until the Sandbox is scheduled instead of returning immediately.
- We've added a modal.Sandbox.logs API, allowing you to fetch() logs from a specific date/time range or to tail() the most recent logs. Note that only logs from the entrypoint process of a Sandbox are currently stored, and streaming logs via this interface is not currently supported.
With this release, it's now possible to opt into a more performant Sandbox backend, which affords substantially higher creation rates and concurrency. Set MODAL_SANDBOX_V2=1 as an environment variable and your Sandboxes will use this new system without any code changes. This will become the default behavior in version 1.6.0 of the Python SDK.
- We've added new APIs for programmatically retrieving logs on several object types: Function, Server, and FunctionCall. Each object exposes three different methods, allowing you to stream() logs as they are generated, fetch() logs from a specific date/time range, or tail() the most recent logs.
- We've added new interfaces for programmatic management of workspace settings: Use the modal.Workspace.settings.list() method or modal workspace settings list CLI to see current workspace-level settings. Use the modal.Workspace.settings.set() method or modal workspace settings set CLI to configure new values.
This release includes several major new features, including the debut of a new serverless compute primitive for low-latency HTTP applications (@app.server()) and a new CLI for deploying production-ready LLM inference endpoints with minimal configuration (modal endpoint).
This is a major release that includes several new features (named Images, version-pinned Function lookups, Sandbox domain allowlists), a new modal skills CLI, and a small number of breaking changes. We're introducing a "named Image" concept, akin to a Modal-native Image registry.
- This release introduces a new "regional routing" concept for Function inputs, which is now in Public Beta. By setting routing_region="..." in the @app.function() or @app.cls() decorators, you can configure the Function to route its inputs through servers in us-west, eu-west, or ap-south instead of us-east.
- We've added a new modal app rollover CLI command for triggering a redeployment of an App without making any code or configuration changes. A rollover replaces existing containers with fresh ones.
- We're introducing a concept of "readiness probes" for modal.Sandbox. This feature lets you configure a readiness check on a TCP port (modal.Probe.with_tcp()) or by executing a process (modal.Probe.with_exec()).
We've made significant CLI enhancements so that Modal logs can be more accessible to coding agents: The modal app logs and modal container logs commands now have the ability to fetch historical logs using counting (e.g. --tail 1000) or time-based (e.g., --since 4h, --until 2026-03-15, etc.) configuration.
- We've added a modal changelog CLI for retrieving changelog entries with a flexible query interface (e.g. modal changelog --since=1.2, modal changelog --since=2025-12-01, modal changelog --newer). We expect that this will be a useful way to surface information about new features to coding agents.
- We're introducing "Directory Snapshots": a new beta feature for persisting specific directories past the lifetime of an individual Sandbox. Using the new methods modal.Sandbox.snapshot_directory() and modal.Sandbox.mount_image(), you can capture the state of a directory and then later include it in a different Sandbox: python notest sb =...
- We've added a new modal billing report CLI and promoted the modal.billing.workspace_billing_report API to General Availability for all Team and Enterprise plan workspaces. We've added modal.Queue.from_id() and modal.Dict.from_id() methods to support referencing a Queue or Dict by its object id. Modal's async usage warnings are now enabled by default.
- Modal objects now have a .get_dashboard_url() method. This method will return a URL for viewing that object on the Modal dashboard: python fc = f.spawn() print(fc.get_dashboard_url()) # Easy access to logs, etc.
- We've improved our experimental support for Python 3.14t (free-threaded Python) inside Modal containers. The container environment will now use the Python implementation of the Protobuf runtime rather than the incompatible upb implementation.
Modal now supports Python 3.14. Python 3.14t (the free-threading build) support is currently a work in progress, because we are waiting for dependencies to be updated with free-threaded support. Additionally, Modal no longer supports Python 3.9, which has reached end-of-life.
- Fixed bug where iterating on a modal.Sandbox.exec output stream could raise unauthenticated errors.
- It is now possible to set a custom name= for a Function without using serialized=True. This can be useful when decorating a function multiple times, e.g. applying multiple Modal configurations to the same implementation. It is now possible to start modal shell with a Modal Image ID (modal shell im-abc123).
- Fixed a bug in modal.Sandbox.exec when using stderr=StreamType.STDOUT (introduced in v1.2.3). Added a new h2_enabled option in modal.forward, which enables HTTP/2 advertisement in TLS establishment.
- CPU Functions can now be configured to run on non-preemptible capacity by setting nonpreemptible=True in the @app.function() or @app.cls() decorator. This feature is not currently available when requesting a GPU. Note that non-preemptibility incurs a 3x multiplier on CPU and memory pricing. See the Guide for more information on preemptions.
- modal.Image.run_commands now supports modal.Volume mounts. This can be helpful for accelerating builds by keeping a package manager cache on the Volume: python cache_vol = modal.Volume.from_name("cache-mount") cmd_using_cache = "..." image = modal.Image.debian_slim().run_commands(cmd_using_cache, volumes={"/cache": cache_vol}) All Modal objects now accept...
- It's now possible to override the default -dev suffix applied to the autogenerated URLs for ephemeral Apps (i.e., when using modal serve) via a new dev_suffix field in the .modal.toml config file, or equivalently with the MODAL_DEV_SUFFIX environment variable.
In this release, we're introducing the concept of "App tags", which are simple key-value metadata that can be included to provide additional organizational context.
| Release-notes page | Site | Feed |
|---|---|---|
| Directory Snapshots, GLM modal.com | modal.com | None |
| Go SDK Release Notes modal.com | modal.com | None |
| JS SDK Release Notes modal.com | modal.com | None |
| modal changelog modal.com | modal.com | None |
| Python SDK Release Notes modal.com | modal.com | None |