Run a Streamlit app
Getting an application running on Fly.io is essentially working out how to package it as a deployable image. Once packaged, it can be deployed to the Fly.io platform.
In this guide we’ll learn how to deploy a Streamlit application on Fly.io.
Streamlit turns data scripts into shareable web apps in minutes. All in pure Python. No front‑end experience required.
Spinning up a streamlit
app takes no time at all!
Speedrun
First, install flyctl, the Fly.io CLI, and sign up to Fly.io if you haven’t already.
The fastest way to get a basic Streamlit server on Fly.io is to use our streamlit template:
git clone git@github.com:fly-apps/hello-streamlit.git streamlit-app
cd streamlit-app
fly launch --generate-name
Deploy a Streamlit from scratch
For managing our project, we use Poetry. For more information on the initial setup with poetry, refer to setting up a python environment. We can initialize a new project like so:
poetry new streamlit-app
cd streamlit-app
poetry shell
Then we have to add the streamlit dependency:
poetry add streamlit
Now, let’s create a simple streamlit app in main.py
:
import streamlit as st
st.write('hello from fly.io')
We can then serve the development version of the app using the streamlit
cli tool:
streamlit run main.py
This will display a ‘hello from fly.io!’ message when you visit the root URL.
Before deploying, we must add a bit of configuration to .streamlit/config.toml
:
[server]
headless = true
This ensures that our app doesn’t give a prompt when we ship it.
And with that you can deploy the app!
fly launch
Scanning source code
Detected a streamlit app
Warning: This organization has no payment method, turning off high availability
Creating app in [redacted]/[app-name]
We're about to launch your app on Fly.io. Here's what you're getting:
Organization: Your Name (fly launch defaults to the personal org)
Name: [app-name] (derived from your directory name)
Region: Amsterdam, Netherlands (this is the fastest region for you)
App Machines: shared-cpu-1x, 1GB RAM (most apps need about 1GB of RAM)
Postgres: <none> (not requested)
Redis: <none> (not requested)
Sentry: false (not requested)
...
==> Building image
...
==> Building image with Docker
...
Watch your deployment at https://fly.io/apps/[app-name]/monitoring
...
Visit your newly deployed app at https://[app-name].fly.dev/
This will generate a fly.toml
file with the configuration for your app and a Dockerfile that uses multi-stage builds.
Refer to the fly.toml docs for more configuration options.
To deploy a new version of your app, simply run fly deploy
in the project directory.
You can check out the full (yet minimal) example in this GitHub repository for a reference.