streamlit-app
SKILL.md
Streamlit Apps in Wizard
Apps live in apps/wizard/app_pages/. Run with make wizard or .venv/bin/etlwiz <alias>.
Creating a New App
- Create
apps/wizard/app_pages/your_app/app.py:
import streamlit as st
st.set_page_config(page_title="Wizard: Your App", page_icon="🪄", layout="wide")
def main():
st.title("Your App")
main()
- Register in
apps/wizard/config/config.ymlunder a section'sappslist:
- title: "Your App"
alias: your-app
entrypoint: app_pages/your_app/app.py
description: "What it does"
maintainer: "@slack-handle"
icon: ":material/icon:"
Key Utilities
# Caching (supports ttl, show_time, works outside Streamlit too)
from apps.wizard.utils.components import st_cache_data
@st_cache_data(custom_text="Loading...", ttl="1h")
# URL-synced widgets (shareable state)
from apps.wizard.utils.components import url_persist
url_persist(st.selectbox)(label="Option", options=["a", "b"], key="my_key")
# ⚠️ Booleans stored as "True"/"False" strings in URL
# Charts
from apps.wizard.utils.components import grapher_chart, grapher_chart_from_url
grapher_chart(catalog_path="grapher/ns/ver/ds#var")
grapher_chart(variable_id=123, selected_entities=["France"], tab="map")
# Data loading
from apps.wizard.utils.cached import load_variables_in_dataset, load_variable_data
# Environment & DB
from etl.config import OWID_ENV # .base_site, .indicators_url, .data_api_url
from etl.db import get_engine
from sqlalchemy.orm import Session
Components (apps.wizard.utils.components)
st_horizontal()— flexbox row context managerPagination(items, items_per_page, pagination_key)— paginated listsgrapher_chart()/grapher_chart_from_url()— OWID chartsst_wizard_page_link(alias)— link to another Wizard pagest_tag(name, color, icon)/tag_in_md()— colored badgesst_toast_success()/st_toast_error()— toast notificationspreview_file(path)— code preview in expander
Rules
st.set_page_config()must be the first Streamlit command- Use
@st_cache_datafor expensive operations - Use
url_persist()for shareable widget state - Material icons:
:material/icon_name:(Google Material Symbols) - HTTP requests: always
timeout=30and.raise_for_status()
Weekly Installs
43
Repository
owid/etlGitHub Stars
138
First Seen
Feb 16, 2026
Security Audits
Installed on
kimi-cli43
gemini-cli43
amp43
cline43
github-copilot43
codex43