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 =...
Also shipped Feb 23, 2026Modal in February 2026 →
Subscriptions APIs: Introduce SubscriptionBillingAttemptState
As of April 2026, you now have access to the SubscriptionBillingAttemptState field in the GraphQL Admin API. This new field replaces several loosely-typed nullable fields with a discriminated union pattern, enhancing the API's ergonomics and self-documentation. | Deprecated Field | New Equivalent | Notes | |
February Release Spotlight
OpenRouter has added model benchmarks to its pages, introduced a free model router, and improved cost transparency across providers.
Agents, R2, Containers - Backup and restore API for Sandbox SDK
Sandboxes now support createBackup() and restoreBackup() methods for creating and restoring point-in-time snapshots of directories. This allows you to restore environments quickly. For instance, in order to develop in a sandbox, you may need to include a user's codebase and run a build step.
Hyperdrive no longer caches queries using STABLE PostgreSQL functions
Hyperdrive now treats queries containing PostgreSQL STABLE functions as uncacheable, in addition to VOLATILE functions. Previously, only functions that PostgreSQL categorizes ↗ as VOLATILE (for example, RANDOM() , LASTVAL() ) were detected as uncacheable.
Security Center - Saved views for Threat Events
TL;DR: You can now create and save custom configurations of the Threat Events dashboard, allowing you to instantly return to specific filtered views , such as industry-specific attacks or regional Sankey flows , without manual reconfiguration. Why this matters Threat intelligence is most effective when it is personalized.
Workspace-level sharing for Enterprise
You can now share files, projects, and teams with an entire workspace.
More from ModalEvery Modal release →
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.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.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.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.
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.
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.0
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.