June 15, 20266 minute read

Product updates: VM Sandboxes, Lower latency routing, RBAC, and more

🌍 Lower latency with regional routing

To improve latency, Functions can now run closer to where they're called from. Instead of routing through the default US East region, you can send a Function's inputs through US West, EU West, or Asia Pacific South with a single setting on the Function. That lowers network latency for requests coming from outside US East, and keeps data in-region when you have residency requirements.

Read the docs for more.

🔲 VM Sandboxes (Alpha)

We're building a new VM runtime for Sandboxes. VM Sandboxes run a real Linux kernel, so they can support workloads that run Docker containers within the Sandbox, or that require Linux features like eBPF, systemd, cgroups, or custom filesystem mounts. This generally also leads to better filesystem performance for I/O sensitive workloads.

Check out our docs to get started.

📋 Domain Allowlisting for Sandboxes

It’s now possible to restrict the domains that processes inside of a Sandbox can connect to. When you provide a list of domains to outbound_domain_allowlist=[...] in modal.Sandbox.create(), requests outside of the allowlist will be blocked by Modal infrastructure, and the denial will be recorded in the App logs.

Learn more in the docs.

🗒️ Modal Skills

You can now install and manage official Modal Agent Skills using our modal skills CLI.

modal skills install to get started.

🔐 Role-Based Access Control

RBAC is now available to all Team and Enterprise plans. Built around Environments as enforceable security boundaries, it lets you give agents (and people) exactly the access they need. Restricted Environments make workspace members read-only by default, scope secrets and apps to the environment, and tie into Audit Logs for a full record of who did what. There's also a new modal.Environment object and new features in the modal environment CLI for managing all of this in code.

Read the blog for more.

📷 Share images across apps with Named Images

// sandbox_launcher.ts
const image = await modal.images.fromName("analytics-runtime");
const sb = await modal.sandboxes.create(app, image);

const p = await sb.exec([
  "python",
  "-c",
  "import pandas, sklearn; print('ready')",
]);
console.log(await p.stdout.readText());
sb.detach();

Named Images decouple Image builds from App deployment or Sandbox creation, and simplifies the process of sharing a canonical Image across a large number of apps. Essentially a Modal-native Image registry, this is now the recommended way to handle Image builds in Sandboxes.

Learn more in the docs.

📈 Improvements to the Workspace Limit UI

We’ve made improvements to the Workspace Limits UI to show current workspace-wide GPU usage, Container usage, and Sandbox creation rates.

💽 Volume Subdirectory Mounts

Scope a Volume mount to a sub_path="/some/path" to give each Sandbox session a piece of a shared Volume (and control read/write access).

Read the docs for more.

🩺 Sandbox Readiness Probes are now GA

Readiness probes give you a way to track when that initialization is complete, so you don’t have to build the polling or signaling yourself. Modal also uses probe results to give you observability into how long this startup phase typically takes.

Check out the docs to learn more.

⏱️ Sandbox Snapshot TTLs

Sandbox Filesystem and Directory Snapshots now support configurable TTLs and timeouts, giving you control over how long snapshot state is retained instead of relying on fixed defaults.

Please note: Starting in the 1.5 Python SDK or 0.8.0 JS and Go SDKs, the default TTL is now 30 days. You can retain the previous indefinite TTL for FS snapshots by specifying ttl=none.

Read more in the changelog.

Modal SDK Updates

We’ve released version 1.5.0 of the Modal Python SDK, and 0.8.0 of the JS and Go SDKs.

Learn more about these updates in our changelog.

More from Modal

⚡ How we achieved truly serverless GPUs

We dig deep into Modal’s cloud buffers, a content-addressed lazy filesystem, and CPU + GPU checkpoint/restore that take inference replica spin-up from ~2,000 seconds to ~50.

Read the blog → https://modal.com/blog/truly-serverless-gpus

🔬 Reinforcement learning is an infrastructure problem

What we've learned helping teams run RL post-training at scale: multi-node weight sync, queueing, GPU utilization. Plus, the Modal Training Gym, a new open-source library that lets you define a training job in under 100 lines.

Read the blog → https://modal.com/blog/reinforcement-learning-infrastructure-problem

🎛️ Boosting multimodal inference >10% with a single Python dict

A profiling story: we found a host-side bottleneck in SGLang's multimodal scheduler and replaced repeated CUDA IPC book-keeping with a simple cache. The result: +16% throughput and ~10% lower latency.

Read the blog → https://modal.com/blog/boosting-multimodal-inference-performance-by-greater-than-10-with-a-single-python-dictionary

🤖 Claude Managed Agents, now with Modal Sandboxes

We've partnered with Anthropic to launch a first-class integration between Modal Sandboxes and Claude Managed Agents. You can now run every tool call in a Modal Sandbox, with fast cold starts, custom images, and snapshotting, while Anthropic runs and manages the agent loop. We shipped two reference examples to get you started.

Read the blog to learn more and see the examples.

📍Upcoming Events

Ship your first app in minutes.

Get Started

$30 / month free compute