Hi,
I have been building Clace, an open source web app deployment platform for internal tools. Clace makes it easy for you to deploy apps built using Streamlit across a team. https://clace.io/ has a demo of using Clace. Clace runs on Linux/Windows/OSX and works with Docker/Podman. Install Clace using instructions at Quick Start โ Clace. After starting Clace server (and making sure Docker/Podman is running), apps can be installed by running
The first command checks out the streamlit-example repo, builds an image and starts the container. The second command deploys the hello app, in another container. The apps are running at https://localhost:25223/streamlit and https://localhost:25223/streamlit_hello. Apps can be installed at a domain level also, like app1.localhost:/. See Security โ Clace for private repo access.
Code and config changes are applied using a blue-green (staged) deployment, allowing you to verify changes before making them live. Adding --dev to the create command creates the app in development mode. Adding OAuth based authentication is easy, without requiring any app code changes. See App Authentication โ Clace for details.
https://clace.io/intro_dark.mp4 shows the usage from CLI. I do not have a video (with audio recording) yet, will look into creating one.
In terms of pricing, it is open source, Apache 2 licensed. You run it on your own hardware, for free. The core functionality and the CLI interface will remain Apache 2 licensed.
Any params passed as app create --param my_password=abc to the app creation command are passed to the container as environment variables. The app code can read them from the env as usual.
If you want a param to be mandatory, then copy the file appspecs/python-streamlit/params.star at main ยท claceio/appspecs ยท GitHub into your app code. Add entries for the new params you want. Do not specify a default value. That way, any time an app is created from that repo, a param value has to be specified for the new param(s).
Currently, the value specified for the params are persisted in clear text in the Clace metadata (a sqlite database in $CL_HOME). I plan to look at adding integrations with secret managers to avoid that.
Another feature added is support for pausing idle apps. Apps which have not received any API calls for some time are automatically terminated. This allows you to run hundreds of Streamlit apps on one machine, giving a Cloud Run type interface on your own hardware. Idle-pause works well for internal tools since many of the apps might be idle much of the time. The idle-pause feature can be disabled for specific apps, since it can impact the Streamlit in-memory cache.