Clace : Streamlit app deployment platform

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

clace app create --spec python-streamlit --branch master --approve github.com/streamlit/streamlit-example /streamlit
clace app create --spec python-streamlit --param app_file=hello --approve - /streamlit_hello

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.

Do let me know any feedback, either here or at claceio/clace Β· Discussions Β· GitHub.

Regards
Ajay

4 Likes

Request to make a video of streamlit deployment using clace.
Also info about pricing please share.
Thanks
Sai

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.

Do let me know any feedback.

How does one handle secrets data?

See Overview – Clace for info.

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.

Secrets management support has been added to Clace, see Secrets Management – AppServer for WebApp Dev and Hosting | Clace for docs. AWS Secrets Manager and HashiCorp Vault are supported currently.

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.