Modal 1.4.0
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.
Also shipped Mar 25, 2026Modal in March 2026 →
Attribution Alerts
Set alerts scoped to specific teams, services, environments, and more using cost attribution labels We’re excited to announce the general availability of Attribution Alerts in the Cost Management and Billing app!
The Shopify CLI app release `--force` flag is deprecated and will be removed
We are deprecating the --force flag on the shopify app deploy and shopify app release commands. The flag will be removed in a Shopify CLI release in May 2026. Why we're making this change The --force flag skips all confirmation prompts, including for extension deletions that can permanently remove data on installed shops.
New Filters for List Session Replays
What it is: Two new filters are now available on the List Session Replays API endpoint. 'amplitude_id' (integer) returns replays tied to a specific Amplitude user ID. 'replay_id' accepts up to 100 IDs in 'device_id/session_id' format and fetches those sessions directly, bypassing pagination.
Improvements to Distributions
What it is: Frequency charts, histogram charts, session length, and time-to-convert now support normalization, PDF, and CDF views. Normalization scales each series so its bars sum to 1, making groups with different sample sizes directly comparable , for example, U.S.
- Configurable Duckling cooldown periods: The cooldown period for Standard, Jumbo, Mega, and Giga Ducklings...
- Configurable Duckling cooldown periods: The cooldown period for Standard, Jumbo, Mega, and Giga Ducklings can now be configured from 1 minute to 24 hours via the UI, SQL, or REST API. Learn more in the Duckling sizes documentation.
More from ModalEvery Modal release →
Modal 1.4.1
- 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()).
Modal 1.4.2
- 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.
Modal 1.3.5
- 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.
Modal 1.3.4
- 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 =...
Modal 1.3.3
- 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 1.4.3
- 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.
Modal 1.3.2
- 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.
Modal 1.3.1
- 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.