Streamlit is a Python framework that transforms data scripts into interactive web applications with minimal code. It is the fastest way to build apps in Keboola, perfect for rapid prototyping and internal tools.
When to Use Streamlit:
Key Advantages:

There are two ways to deploy a Streamlit app:
For simple use cases where your Streamlit code fits on one page, paste the code directly into a text area. This deployment type is ideal for simple apps or for testing. Check out this example from Streamlit docs.


You can also override Streamlit defaults like file upload size or browser settings without committing a .streamlit/config.toml file - see Streamlit Configuration below.
To use additional Python packages that are not already included in the base image, enter them into the Packages field.

If you have a complex application, push your app sources into GitHub and link the repository in this section. Provide the Project URL, choose the right branch, and finally, select your main entrypoint file.

If you are using a private repository, you have two options to authenticate:
Follow these steps to authenticate using your GitHub username and personal access token:
Private option, and enter your GitHub username and the personal access token you generated in step 1.To authenticate using your SSH private key, follow the instructions in the GitHub manual. After generating your key, enter your SSH private key into the appropriate configuration field and click Save.

To provide your app with environment variables or sensitive information like credentials, API keys, etc., use the Secrets section. These secrets will be injected into the secrets.toml file upon deployment of the app.
When you upload secrets.toml using the direct secrets upload UI, Keboola imports secrets as flat, top-level keys. Sections (TOML groups) are not preserved as nested structures. This means keys in the file become st.secrets["your_key"] after upload - you cannot access them as st.secrets["group"]["key"]. If your app expects nested secrets, use repo-based secrets.
Read more about the Streamlit secrets.
You can upload a secrets.toml file directly through the UI when developing an app from code. The upload process:
aws_key = "YOUR_AWS_KEY"
aws_secret = "YOUR_AWS_SECRET"
openai = "YOUR_OPENAI_KEY"
By default, there are two environment variables available that make it easy to access Keboola Storage from your application:
KBC_URL: This represents the URL of the current Keboola project.KBC_TOKEN: This represents the Storage token with full read-write access to Keboola Storage.To securely access Storage, we recommend creating a dedicated Storage token with limited permissions and passing it to your app as a secret. You can generate such a token following the guide here.
Important:
Do not name your secret KBC_TOKEN, as this name is reserved.
These environment variables can be accessed within your Streamlit app code. Here is an example of how to initialize the Keboola Storage token:
# Constants
kbc_token = os.environ.get('KBC_TOKEN')
kbc_url = os.environ.get('KBC_URL')
# Initialize Client
client = Client(kbc_url, kbc_token)
These variables represent the project where the application is deployed. To map data from a different project, you need to configure the appropriate secrets.
To load data from the Storage of a Keboola project into the app, use the input mapping section. Just select your table in the input mapping section and navigate to that by /data/in/tables/your_data.csv or /data/in/files/fileID_FileName.* in your code. Note that the app needs to be redeployed to fetch up-to-date data. Or you can use the Keboola Storage Python Client in the app to load the data as needed.
For writing data back to Keboola Project Storage, use the Keboola Storage Python Client.
To configure theming in your app, you can select from predefined themes or create a custom theme. Predefined themes include Keboola, Light Red, Light Purple, Light Blue, Dark Green, Dark Amber, and Dark Orange. Each theme has a specified primary color, background color, secondary background color, text color, and font. Users choosing Custom can manually set these values.

For Custom, users can select colors using the color pickers and choose the desired font from a list.

#1F8FFF#FFFFFF#E6F2FF#222529#FF5D5D#FFFFFF#FFE6E6#222529#9A6DD7#FFFFFF#F2E6FF#222529#0000B2#FFFFFF#E6E6FF#222529#4CAF50#222529#3D4F41#FFFFFF#FFC107#222529#4A3A24#FFFFFF#FFA500#222529#4A3324#FFFFFFFor Streamlit configuration beyond theming (e.g. upload size, server or browser settings), see Streamlit Configuration below.
Beyond the predefined themes above, you can inject any Streamlit configuration option into your app’s runtime config.toml directly from the Data App configuration in Keboola. This is useful when your app is deployed via the Code method (no Git repo, where you would otherwise commit a .streamlit/config.toml file) and you need to override Streamlit defaults such as upload size, server settings, or browser behavior.
In your Data App configuration, switch to the raw JSON editor and add a config.toml string under parameters.dataApp.streamlit:
{
"parameters": {
"dataApp": {
"streamlit": {
"config.toml": "[server]\nmaxUploadSize = 500\n"
}
}
}
}
The data app runtime extracts that string at startup and merges it into Streamlit’s runtime config in this order, with later values winning:
[server] address = "0.0.0.0" and [browser] gatherUsageStats = false).streamlit/config.toml (if Git-deployed)config.toml string injected via the Data App configuration aboveIncrease st.file_uploader size limit. Streamlit defaults to 200 MB. To accept larger files:
[server]
maxUploadSize = 500
Disable usage stats:
[browser]
gatherUsageStats = false
Streamlit theme options not exposed in the Theming form (e.g. base = "dark", additional font controls, newly-added Streamlit theme keys) - see Streamlit’s theme reference.
Note on theming: the Theming UI reads and rewrites the same
config.tomlfield. Non-theme sections you set here (e.g.[server],[browser]) are preserved when you save changes through the Theming UI. However, the Theming UI overwrites the[theme]section on save, so prefer the Theming UI when a value is available there - and use this raw JSON path for theme keys it doesn’t expose.
When the app is deployed, the code specified in one of the deployment methods will be injected into the Streamlit base Docker image. You can select a specific backend version when deploying your app. Each version defines the Python version, Streamlit version, and a set of pre-installed packages.
The following packages are pre-installed in all backend versions:
streamlit, pandas, numpy, matplotlib, plotly, scikit-learn, seaborngraphviz, deepmerge, python-dotenv, tomlkeboola.component, streamlit-aggrid, streamlit-keboola-api, streamlit_authenticatorStarting with backend version 1.15.0, each release is available with multiple Python versions (3.10, 3.11, 3.13). Python 3.10 is the default.
For the full list of available versions, pre-installed packages, and a changelog of what changed in each release, see the Backend Versions page.
The AgGrid Enterprise License is available for Streamlit apps in Keboola, offering enhanced data manipulation capabilities, including:
Ensure your app is configured to use the AgGrid component to take advantage of these enhanced features.
The enterprise license is pre-configured for all Keboola stacks, so no additional setup is required for supported applications.
To access the license key in your Streamlit app, use the following code:
import streamlit as st
from keboola_streamlit import KeboolaStreamlit
URL = st.secrets["kbc_url"]
TOKEN = st.secrets["kbc_token"]
keboola = KeboolaStreamlit(URL, TOKEN)
license_key = keboola.aggrid_license_key
You can use this license_key directly in AgGrid.
Reference Implementation: Keboola Streamlit Integration