Managing deployments

Once you’ve finished using modal run or modal serve to iterate on your Modal code, it’s time to deploy. A Modal deployment creates and then persists an application and its objects, providing the following benefits:

  • Repeated application function executions will be grouped under the deployment, aiding observability and usage tracking. Programmatically triggering lots of ephemeral app runs can clutter your web and CLI interfaces.
  • Function calls are much faster because deployed functions are persistent and reused, not created on-demand by calls. Learn how to trigger deployed functions in Invoking deployed functions.
  • Scheduled functions will continue scheduling separate from any local iteration you do, and will notify you on failure.
  • Webhooks keep running when you close your laptop, and their URL address matches the deployment name.

Creating deployments

Deployments are created using the modal deploy command.

 % modal deploy whisper_pod_transcriber.main
✓ Initialized. View app page at
✓ Created objects.
├── 🔨 Created populate_podcast_metadata.
├── 🔨 Mounted /home/ubuntu/whisper_pod_transcriber at /root/whisper_pod_transcriber
├── 🔨 Created fastapi_app =>
├── 🔨 Mounted /home/ubuntu/whisper_pod_transcriber/whisper_frontend/dist at /assets
├── 🔨 Created search_podcast.
├── 🔨 Created refresh_index.
├── 🔨 Created transcribe_segment.
├── 🔨 Created transcribe_episode..
└── 🔨 Created fetch_episodes.
✓ App deployed! 🎉

View Deployment:

Running this command on an existing deployment will redeploy the app, incrementing its version.

Viewing deployments

Deployments can be viewed either on the apps web page or by using the modal app list command.

viewing deployments in the web interface

Stopping deployments

Deployments can be stopped in the web UI by clicking the red delete button on a deployment’s app page, or alternatively by using the modal app stop command.

Stopped deployments are eventually garbage collected.