Framework Frankfurt, Germany

Deploy Streamlit on Nodion

Nodion builds your Streamlit app with its Python buildpack and installs your dependencies, but it does not detect Streamlit itself: one web: line in a Procfile starts the server. The app then runs in Frankfurt.

Deploy to Nodion ›

from 1 EUR / month

Up to 15 € credit when signing up

Built as
Python app (pip, Poetry or Pipenv)
Start
streamlit run from your Procfile
Python
3.10 to 3.15, default 3.13
Region
EU Central (Frankfurt)

Deploy Streamlit step by step

  1. Add Streamlit and pin Python List streamlit and your data libraries in requirements.txt. Pin the Python version in .python-version to one your libraries support, because a range picks the newest release. requirements.txt
    streamlit
    pandas
  2. Start Streamlit from a Procfile Without this line Nodion would run python app.py, which executes the script but starts no server. The flags bind Streamlit to all interfaces and the PORT Nodion sets, and skip its interactive first-run prompt. Procfile
    web: streamlit run app.py --server.port $PORT --server.address 0.0.0.0 --server.headless true
  3. Keep secrets in environment variables Do not commit .streamlit/secrets.toml. Set API keys as secret variables on the Environment tab and read them with os.environ; they exist at runtime, which is when Streamlit runs your script.
  4. Create the app and push Create an application from your GitHub, GitLab, Bitbucket or Gitea repository in the region EU Central. Apps that load DataFrames need memory, so 1 GB is a reasonable start. Streamlit answers / with 200, so the default health check works as it is.

Good to know

  • One bigger instanceStreamlit keeps each session's state in the memory of the process that serves it. With several instances, a browser that reconnects can land on another one and start over, so one bigger instance is usually the simpler choice.
  • Files and cachesst.cache_data and files written at runtime live on the instance and are gone after the next deploy or the daily replacement with a fresh instance. Keep data you need in a database, a bucket or a volume.

What Nodion runs for you

  • Deploys without downtime Push to your branch and Nodion builds a new release. Traffic switches once the new instances answer their health check; a failed release leaves the running one in place. Apps with a local volume restart instead, because the disk belongs to one instance.
  • Databases next to the app Managed PostgreSQL, pgvector, MySQL, Valkey and ClickHouse in the same region. Attached databases arrive as DATABASE_URL, REDIS_URL or CLICKHOUSE_URL.
  • Previews per pull request Turn on previews and pull requests from your repository get their own app with its own URL and fresh, empty databases, created automatically or by hand. Forks and bot pull requests are skipped.
  • Workers, cron jobs and scaling Run workers as extra processes of the same app, schedule jobs on the Cron tab, and scale every process to up to 16 instances.
  • Release step With buildpacks, a Procfile release: line runs with every new build. Dockerfile apps, and redeploys or rollbacks to an earlier image, use a release command set on the app itself, which also takes precedence over the Procfile line. On static sites a release step runs in an image that holds only the built files.
  • Logs and metrics Build, release and runtime logs plus CPU, memory, disk and network metrics for every instance in the dashboard.
  • Domains and HTTPS A default hostname with HTTPS from the first deploy; your own domains get certificates automatically.

Further reading

Streamlit on Nodion: questions and answers

Does Nodion detect Streamlit apps?

No. The Python buildpack installs your dependencies, and the web: line in your Procfile starts streamlit run. Without that line the app never becomes ready.

Can I deploy a Gradio app the same way?

Yes, with web: python app.py in a Procfile and demo.launch(server_name="0.0.0.0", server_port=int(os.environ["PORT"])) in your script. Keep the explicit line: Gradio depends on FastAPI, and a lock file that lists it would trigger the FastAPI default.

How much memory does a Streamlit app need?

That depends on your data. The cost box starts at 1 GB, which suits many pandas-based dashboards; the dashboard shows memory per instance, and you change the size of the web process whenever you need to.

Where does my Streamlit app run?

In the EU Central region in Frankfurt, Germany. Build, registry, the app and its databases, volumes, buckets, logs and metrics stay in that region, and Nodion's API and control plane are hosted in Germany. Nodion GmbH is based in Stuttgart.

Can I use Streamlit in line with the GDPR?

Nodion provides the basis for it: Nodion GmbH is based in Stuttgart, Germany, in the Frankfurt region the app, its databases and volumes run in Germany, and you conclude the data processing agreement (DPA) under Art. 28 GDPR electronically in the dashboard. Whether your setup complies also depends on how you configure and use the app.

How much does it cost to run Streamlit on Nodion?

An app instance starts at 1 EUR per month. The setup in the cost box costs 4 EUR per month: App 4 EUR. Prices are net and billed per second, and you pick bigger sizes or more instances whenever you need them.

Can I use my own domain for my Streamlit app?

Yes. Every app gets a default hostname with HTTPS. Add your own domain on the app's Domains tab; the TLS certificate is issued and renewed automatically.

Give your agent a cloud.

Earn up to 15 € in credit when signing up.

Continue with GitHub

or with email

Stay in the loop.

Product news, no spam. Unsubscribe anytime.