Modal 1.2.0
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.
Also shipped Oct 9, 2025Modal in October 2025 →
[Preview] DuckLake 0.3
As we announced earlier this year, MotherDuck now supports DuckLake , an integrated data lake and catalog format. DuckLake 0.3 makes working with DuckLake more robust, including CHECKPOINT for easy maintenance , new paths for Iceberg interoperability, spatial geometry types , and MERGE INTO support .
Workers - You can now deploy full-stack apps on Workers using Terraform
You can now upload Workers with static assets (like HTML, CSS, JavaScript, images) with the Cloudflare Terraform provider v5.11.0 ↗ , making it even easier to deploy and manage full-stack apps with IaC.
Workers - You can now deploy and manage Workflows in Terraform
You can now create and manage Workflows using Terraform, now supported in the Cloudflare Terraform provider v5.11.0 ↗ . Workflows allow you to build durable, multi-step applications -- without needing to worry about retrying failed tasks or managing infrastructure.
Performance improvements
- Sorting is 2x+ faster: Complete rewrite of sorting uses less memory and scales better across threads for ORDER BY, window functions, and list sorting More efficient small writes: Appending small numbers of rows now writes far fewer bytes 5x faster checkpointing: Reuses table metadata when tables aren't altered during checkpoint Parallel connection...
SQL syntax updates
- MERGE INTO statement: Standard SQL upserts without requiring primary keys or indexes FILL() window function: Interpolate missing values in ordered data Python-style macro arguments: Macros accept positional or named arguments for any parameter STRUCT to MAP cast: Direct casting between struct and map types
Parquet improvements
- VARIANT type reading: Read Parquet VARIANT types for faster semi-structured data processing Native geometry type writes: Write native Parquet geometry types Auto-globbing for directories: Automatically treats paths as directories and retries with glob patterns when no file is found Learn more in the official DuckDB Labs announcements for 1.4.0 and 1.4.1 .
More from ModalEvery Modal release →
Modal 1.2.1
- 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.
Modal 1.2.2
- 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...
Modal 1.2.3
- 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 1.2.4
- 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.
Modal 1.2.5
- 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).
Modal 1.2.6
- Fixed bug where iterating on a modal.Sandbox.exec output stream could raise unauthenticated errors.
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.
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.