streamlit
When working with Streamlit web apps, data dashboards, ML/AI app UIs, interactive Python visualizations, or building data science applications with Python
Install
mkdir -p .claude/skills/streamlit && curl -L -o skill.zip "https://mcp.directory/api/skills/download/412" && unzip -o skill.zip -d .claude/skills/streamlit && rm skill.zipInstalls to .claude/skills/streamlit
About this skill
Streamlit Skill
Comprehensive assistance with Streamlit development, generated from official documentation covering 317 pages of content including API reference, tutorials, deployment guides, and best practices.
When to Use This Skill
This skill should be triggered when:
- Building web apps with Python for data science, ML/AI, or analytics
- Creating dashboards with interactive visualizations and real-time data
- Developing data apps that need rapid prototyping and deployment
- Implementing widgets like buttons, sliders, file uploaders, or chat interfaces
- Working with charts using built-in charting or custom visualizations
- Deploying apps to Streamlit Community Cloud or other platforms
- Testing Streamlit apps with the app testing framework
- Configuring Streamlit apps with themes, secrets, or custom settings
- Building multi-page apps with navigation and routing
- Integrating authentication with OpenID Connect providers
Key Concepts
Core Architecture
Script-based execution: Streamlit apps run as Python scripts that rerun from top to bottom on every user interaction. This makes development simple but requires understanding state management.
Session State: Persistent data storage across reruns using st.session_state. Essential for maintaining user data, form inputs, and application state.
Caching: Use @st.cache_data for data operations and @st.cache_resource for expensive resources like ML models or database connections.
App Structure
Magic commands: Write variables or strings standalone to display them automatically (when magicEnabled is True).
Widget callbacks: Functions that run when widget values change, useful for complex interactions and state updates.
Fragments: Isolated portions of your app that can rerun independently with @st.fragment, improving performance for partial updates.
Quick Reference
Example 1: Hello World & Basic Display
import streamlit as st
# Simple text display
st.title("My First Streamlit App")
st.header("Welcome to Data Science")
st.write("Hello, World!")
# Magic command (displays automatically)
"This is magic!"
# Display data
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
st.dataframe(df)
Example 2: Interactive Widgets & Session State
import streamlit as st
# Initialize session state
if 'count' not in st.session_state:
st.session_state.count = 0
# Button with callback
def increment():
st.session_state.count += 1
st.button('Increment', on_click=increment)
st.write(f'Count: {st.session_state.count}')
# Various input widgets
name = st.text_input("Enter your name")
age = st.slider("Select age", 0, 100, 25)
option = st.selectbox("Choose option", ['A', 'B', 'C'])
uploaded_file = st.file_uploader("Upload CSV")
Example 3: Charts & Visualizations
import streamlit as st
import pandas as pd
import numpy as np
# Sample data
data = pd.DataFrame({
'date': pd.date_range('2024-01-01', periods=30),
'values': np.random.randn(30).cumsum()
})
# Built-in charts
st.line_chart(data.set_index('date'))
st.area_chart(data.set_index('date'))
st.bar_chart(data.set_index('date'))
# Map visualization
map_data = pd.DataFrame({
'lat': [37.76, 37.77, 37.78],
'lon': [-122.4, -122.41, -122.42]
})
st.map(map_data)
Example 4: Layouts & Containers
import streamlit as st
# Columns
col1, col2, col3 = st.columns(3)
with col1:
st.header("Column 1")
st.write("Content here")
with col2:
st.header("Column 2")
st.button("Click me")
with col3:
st.header("Column 3")
st.checkbox("Check me")
# Sidebar
with st.sidebar:
st.header("Sidebar")
filter_val = st.slider("Filter", 0, 100)
# Tabs
tab1, tab2 = st.tabs(["Data", "Charts"])
with tab1:
st.write("Your data here")
with tab2:
st.line_chart([1, 2, 3, 4, 5])
# Expander
with st.expander("Click to expand"):
st.write("Hidden content revealed!")
Example 5: Forms & User Input
import streamlit as st
# Form prevents rerun on every input change
with st.form("my_form"):
st.write("User Registration")
name = st.text_input("Name")
email = st.text_input("Email")
age = st.number_input("Age", min_value=0, max_value=120)
# Form submit button
submitted = st.form_submit_button("Submit")
if submitted:
st.success(f"Welcome {name}!")
st.session_state.user_data = {
'name': name,
'email': email,
'age': age
}
Example 6: Caching for Performance
import streamlit as st
import pandas as pd
import time
# Cache data loading (recomputes when inputs change)
@st.cache_data
def load_data(file_path):
time.sleep(2) # Simulate expensive operation
return pd.read_csv(file_path)
# Cache ML models/resources (persists across reruns)
@st.cache_resource
def load_model():
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
# Load trained model...
return model
# Use cached functions
data = load_data("data.csv")
model = load_model()
st.write(data)
Example 7: Chat Interface (LLM Apps)
import streamlit as st
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat messages
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
# Chat input
if prompt := st.chat_input("What would you like to know?"):
# Add user message
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.write(prompt)
# Generate and display assistant response
response = f"Echo: {prompt}" # Replace with actual LLM call
st.session_state.messages.append({"role": "assistant", "content": response})
with st.chat_message("assistant"):
st.write(response)
Example 8: App Testing with pytest
# app.py
import streamlit as st
st.session_state.beans = st.session_state.get("beans", 0)
st.title("Bean counter")
addend = st.number_input("Beans to add", 0, 10)
if st.button("Add"):
st.session_state.beans += addend
st.markdown(f"Beans counted: {st.session_state.beans}")
# tests/test_app.py
from streamlit.testing.v1 import AppTest
def test_increment_and_add():
"""Test that incrementing and adding works"""
at = AppTest.from_file("app.py").run()
at.number_input[0].increment().run()
at.button[0].click().run()
assert at.markdown[0].value == "Beans counted: 1"
Example 9: User Authentication (OpenID Connect)
import streamlit as st
# Check authentication status
if not st.user.is_logged_in:
if st.button("Log in"):
st.login()
else:
st.write(f"Hello, {st.user.name}!")
st.write(f"Email: {st.user.email}")
if st.button("Log out"):
st.logout()
# Configuration in .streamlit/secrets.toml:
# [auth]
# redirect_uri = "http://localhost:8501/oauth2callback"
# cookie_secret = "your-secret-key"
# client_id = "your-client-id"
# client_secret = "your-client-secret"
# server_metadata_url = "https://accounts.google.com/.well-known/openid-configuration"
Example 10: Configuration & Theming
# .streamlit/config.toml
[theme]
primaryColor = "#F63366"
backgroundColor = "#FFFFFF"
secondaryBackgroundColor = "#F0F2F6"
textColor = "#262730"
font = "sans-serif"
[server]
port = 8501
enableCORS = false
maxUploadSize = 200
[client]
showErrorDetails = true
toolbarMode = "auto"
Reference Files
This skill includes comprehensive documentation organized into focused categories:
api.md (439KB, 187 pages)
Complete API reference covering all Streamlit commands:
- Display elements:
st.write,st.markdown,st.title,st.header,st.text,st.code,st.latex - Data display:
st.dataframe,st.table,st.metric,st.json,st.data_editor - Charts:
st.line_chart,st.area_chart,st.bar_chart,st.map,st.plotly_chart,st.altair_chart - Input widgets:
st.button,st.checkbox,st.radio,st.selectbox,st.slider,st.text_input,st.file_uploader - Media:
st.image,st.audio,st.video,st.camera_input - Layouts:
st.columns,st.tabs,st.expander,st.container,st.sidebar - Chat elements:
st.chat_message,st.chat_input - Status elements:
st.progress,st.spinner,st.success,st.error,st.warning - Control flow:
st.stop,st.rerun,st.form,st.dialog,@st.fragment - State:
st.session_state,st.query_params - Caching:
@st.cache_data,@st.cache_resource - Connections:
st.connection, database integrations - User auth:
st.login,st.logout,st.user - Configuration:
st.set_page_config,config.tomloptions
tutorials.md (111KB, 57 pages)
Step-by-step guides and practical examples:
- Getting started tutorials: Creating your first app, multi-page apps
- LLM/Chat apps: Building conversational interfaces, chat response feedback
- Database connections: AWS S3, BigQuery, MongoDB, PostgreSQL, Snowflake, TigerGraph
- Data handling: Dataframe row selections, working with large datasets
- Execution flow: Fragments, forms, multipage navigation
- Authentication: Google, Microsoft OAuth integration
- Configuration: Theming, fonts, static file serving
concepts.md (103KB, 42 pages)
Deep dives into Streamlit architecture and advanced concepts:
- Architecture: How Streamlit runs, script execution model, app lifecycle
- Caching:
@st.cache_datavs@st.cache_resource, cache invalidation - Session State: Managing state across reruns, widget semantics
- Multi-page apps: Pages directory structure, navigation, dynamic routing
- Fragments: Partial reruns for performance optimization
- Forms: Batching user input to pr
Content truncated.
You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
pdf-to-markdown
aliceisjustplaying
Convert entire PDF documents to clean, structured Markdown for full context loading. Use this skill when the user wants to extract ALL text from a PDF into context (not grep/search), when discussing or analyzing PDF content in full, when the user mentions "load the whole PDF", "bring the PDF into context", "read the entire PDF", or when partial extraction/grepping would miss important context. This is the preferred method for PDF text extraction over page-by-page or grep approaches.
Related MCP Servers
Browse all serversBrowser Use lets LLMs and agents access and scrape any website in real time, making web scraping and web page scraping e
Boost your AI code assistant with Context7: inject real-time API documentation from OpenAPI specification sources into y
Uno Platform — Documentation and prompts for building cross-platform .NET apps with a single codebase. Get guides, sampl
The fullstack MCP framework for developing MCP apps for ChatGPT, Claude, and building MCP servers for AI agents. Connect
By Sentry. MCP server and CLI that provides tools for AI agents working on iOS and macOS Xcode projects. Build, test, li
Windows MCP — control mouse & keyboard, capture screenshots, manage windows and automate desktop apps from AI assistants
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.