Install any skill in seconds. Free to start, no credit card required.
Get Started Free →streamlit/developing-with-streamlit
Use for ALL Streamlit tasks: creating, editing, debugging, beautifying, styling, theming, optimizing, or deploying Streamlit apps. Also custom components, st.components.v2, HTML/JS/CSS work. Discovers and loads version-matched reference docs from the user's installed Streamlit (>=1.57). Triggers: streamlit, st., dashboard, app.py, beautify, style, CSS, color, background, theme, button, widget styling, custom component, st.components, CCv2, session state, performance, cache, fragment, slow rerun,
Passed 20 of 20 test cases with the skill, and 15 of 20 without it.
and 2 more in the full report
5 fixed15 passed either way0 still failing0 broke3 errored
Tokens, turns and time describe resource use, not a dollar price.
This benchmark measured an earlier version of the skill.
One of 5 test cases the skill fixed. Same model, same prompt, with and without the skill.
I have an Apache ECharts option dictionary in `charts.py` that I want to render natively in Streamlit without installing third-party component wrappers. Which built-in command should be called?
| Checked | Without skill | With skill |
|---|---|---|
| Uses st.echarts_chart to render the chart options. | Missed | Passed |
The instructions your model reads when the skill loads.
This is a routing skill that directs you to specialized references for Streamlit development.
Invoke this skill when the user's request involves:
st.App, ASGI, Starlette, FastAPI integration, custom routes, middleware, or lifespan hooksTrigger phrases: "streamlit", "st.", "st.App", "dashboard", "app.py", "beautify app", "make it look better", "style", "CSS", "color", "background", "theme", "button", "slow rerun", "session state", "performance", "faster", "cache", "chat", "agentic", "chain of thought"
IMPORTANT — use_container_width is deprecated. Never add use_container_width to new code. Use width="stretch" or width="content" instead. Dataframes and most charts stretch to fill their container by default, but buttons, including st.button, st.download_button, st.form_submit_button, st.link_button, and st.page_link, default to width="content"; pass width="stretch" to make one fill its container. Remove use_container_width when you encounter it.
Apply these defaults unless the user's app or request clearly needs a different approach. For examples, read references/best-practices.md.
use_container_width; use width="stretch" or width="content" instead.st.html, st.markdown(..., unsafe_allow_html=True), or deprecated st.components.v1.html. Use custom HTML only when no native element provides the required UI or behavior.st.components.v1.html or st.components.v1.iframe commands. Use st.iframe for iframe-based rendering of URLs or HTML, and use st.html for HTML/CSS that should render directly in the app; st.html ignores JavaScript by default unless unsafe_allow_javascript=True..streamlit/config.toml to customize the appearance; see the theming reference.:material/icon_name:) over emojis for navigation, buttons, and labels. Use emojis sparingly, only when they add a special touch.label_visibility="collapsed" or label_visibility="hidden" when a visible label is not desired.st.info, st.success, st.warning, or st.error) needs a headline, pass keyword-only title= instead of bolding the first line of the body or adding a heading above it.alt= on images, charts, maps, media, iframes, PDFs, tables, dataframes, and data editors so assistive technologies can name them. Keep it short; decorative alt="" is only for st.image / st.pyplot. See references/media-display.md and references/data-display.md.st.container(border=True) for simple visual grouping. Prefer st.container(horizontal=True) over st.columns for responsive row layouts; use st.columns for fixed grids, precise width ratios, or side-by-side cards that must share a width.vertical_alignment="bottom" for rows that mix labeled inputs with buttons, checkboxes, or toggles, and give sibling cards consistent content (for example, all metrics with or all without delta) or height="stretch". See "Aligning elements side by side" in references/layouts.md.st.navigation and st.Page with an app_pages/ folder over the legacy pages/ directory, st.page_link, or other multipage-app v1 patterns.st.cache_data for serializable data and st.cache_resource for shared resources like API clients, raw connectors, and models; do not wrap st.connection, which is already cached. Include appropriate ttl and/or max_entries limits to prevent unbounded growth. Cache the expensive source data, then apply cheap interactive filters outside the cached function.st.container(), or isolate slow sections in fragments.st.fragment for independent sections that should rerun separately from the rest of the app, such as auto-refreshing charts or controls that do not need to rerun the full page.test cases passed, vs 15 / 20 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.