building-streamlit-multipage-apps — echarts building-streamlit-multipage-apps, streamlit-echarts, community, echarts, ide skills, pyecharts, streamlit, Claude Code, Cursor, Windsurf

v1.0.0

About this Skill

Perfect for Python Analysis Agents needing advanced data visualization capabilities with Streamlit and ECharts. Building multi-page Streamlit apps. Use when creating apps with multiple pages, setting up navigation, or managing state across pages.

# Core Topics

andfanilo andfanilo
[595]
[72]
Updated: 3/15/2026

Killer-Skills Review

Decision support comes first. Repository text comes second.

Reference-Only Page Review Score: 7/11

This page remains useful for operators, but Killer-Skills treats it as reference material instead of a primary organic landing page.

Original recommendation layer Concrete use-case guidance Explicit limitations and caution Locale and body language aligned
Review Score
7/11
Quality Score
43
Canonical Locale
en
Detected Body Locale
en

Perfect for Python Analysis Agents needing advanced data visualization capabilities with Streamlit and ECharts. Building multi-page Streamlit apps. Use when creating apps with multiple pages, setting up navigation, or managing state across pages.

Core Value

Empowers agents to create multi-page Streamlit apps with structured navigation and directory organization, utilizing ECharts for interactive data visualization and providing a robust framework for app development with Python.

Ideal Agent Persona

Perfect for Python Analysis Agents needing advanced data visualization capabilities with Streamlit and ECharts.

Capabilities Granted for building-streamlit-multipage-apps

Building data analytics dashboards with multiple pages
Creating interactive data visualizations using ECharts
Developing scalable Streamlit apps with organized directory structures

! Prerequisites & Limits

  • Requires Streamlit installation
  • Must use 'app_pages/' directory for multi-page apps to avoid conflicts with Streamlit's auto-discovery API
  • Python 3.x compatibility required for Streamlit

Why this page is reference-only

  • - The underlying skill quality score is below the review floor.

Source Boundary

The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.

After The Review

Decide The Next Action Before You Keep Reading Repository Material

Killer-Skills should not stop at opening repository instructions. It should help you decide whether to install this skill, when to cross-check against trusted collections, and when to move into workflow rollout.

Labs Demo

Browser Sandbox Environment

⚡️ Ready to unleash?

Experience this Agent in a zero-setup browser environment powered by WebContainers. No installation required.

Boot Container Sandbox

FAQ & Installation Steps

These questions and steps mirror the structured data on this page for better search understanding.

? Frequently Asked Questions

What is building-streamlit-multipage-apps?

Perfect for Python Analysis Agents needing advanced data visualization capabilities with Streamlit and ECharts. Building multi-page Streamlit apps. Use when creating apps with multiple pages, setting up navigation, or managing state across pages.

How do I install building-streamlit-multipage-apps?

Run the command: npx killer-skills add andfanilo/streamlit-echarts/building-streamlit-multipage-apps. It works with Cursor, Windsurf, VS Code, Claude Code, and 19+ other IDEs.

What are the use cases for building-streamlit-multipage-apps?

Key use cases include: Building data analytics dashboards with multiple pages, Creating interactive data visualizations using ECharts, Developing scalable Streamlit apps with organized directory structures.

Which IDEs are compatible with building-streamlit-multipage-apps?

This skill is compatible with Cursor, Windsurf, VS Code, Trae, Claude Code, OpenClaw, Aider, Codex, OpenCode, Goose, Cline, Roo Code, Kiro, Augment Code, Continue, GitHub Copilot, Sourcegraph Cody, and Amazon Q Developer. Use the Killer-Skills CLI for universal one-command installation.

Are there any limitations for building-streamlit-multipage-apps?

Requires Streamlit installation. Must use 'app_pages/' directory for multi-page apps to avoid conflicts with Streamlit's auto-discovery API. Python 3.x compatibility required for Streamlit.

How To Install

  1. 1. Open your terminal

    Open the terminal or command line in your project directory.

  2. 2. Run the install command

    Run: npx killer-skills add andfanilo/streamlit-echarts/building-streamlit-multipage-apps. The CLI will automatically detect your IDE or AI agent and configure the skill.

  3. 3. Start using the skill

    The skill is now active. Your AI agent can use building-streamlit-multipage-apps immediately in the current project.

! Reference-Only Mode

This page remains useful for installation and reference, but Killer-Skills no longer treats it as a primary indexable landing page. Read the review above before relying on the upstream repository instructions.

Upstream Repository Material

The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.

Upstream Source

building-streamlit-multipage-apps

Install building-streamlit-multipage-apps, an AI agent skill for AI agent workflows and automation. Works with Claude Code, Cursor, and Windsurf with...

SKILL.md
Readonly
Upstream Repository Material
The section below is imported from the upstream repository and should be treated as secondary evidence. Use the Killer-Skills review above as the primary layer for fit, risk, and installation decisions.
Supporting Evidence

Streamlit multi-page apps

Structure and navigation for apps with multiple pages.

Directory structure

streamlit_app.py          # Main entry point
app_pages/
    home.py
    analytics.py
    settings.py

Important: Name your pages directory app_pages/ (not pages/). Using pages/ conflicts with Streamlit's old auto-discovery API and can cause unexpected behavior.

Main module

python
1# streamlit_app.py 2import streamlit as st 3 4# Initialize global state (shared across pages) 5if "api_client" not in st.session_state: 6 st.session_state.api_client = init_api_client() 7 8# Define navigation 9page = st.navigation([ 10 st.Page("app_pages/home.py", title="Home", icon=":material/home:"), 11 st.Page("app_pages/analytics.py", title="Analytics", icon=":material/bar_chart:"), 12 st.Page("app_pages/settings.py", title="Settings", icon=":material/settings:"), 13]) 14 15# App-level UI runs before page content 16# Useful for shared elements like titles 17st.title(f"{page.icon} {page.title}") 18 19page.run()

Note: When you handle titles in streamlit_app.py, individual pages should NOT use st.title again.

Few pages (3-7) → Top navigation:

python
1page = st.navigation([...], position="top")

Creates a clean horizontal menu. Great for simple apps. Sections are supported too—they appear as dropdowns in the top nav.

Many pages or nested sections → Sidebar:

python
1page = st.navigation({ 2 "Main": [ 3 st.Page("app_pages/home.py", title="Home"), 4 st.Page("app_pages/analytics.py", title="Analytics"), 5 ], 6 "Admin": [ 7 st.Page("app_pages/settings.py", title="Settings"), 8 st.Page("app_pages/users.py", title="Users"), 9 ], 10}, position="sidebar")

Mixed: Some pages ungrouped:

Use an empty string key "" for pages that shouldn't be in a section. These ungrouped pages always appear first, before any named groups. Put all ungrouped pages in a single "" key:

python
1page = st.navigation({ 2 "": [ 3 st.Page("app_pages/home.py", title="Home"), 4 st.Page("app_pages/about.py", title="About"), 5 ], 6 "Analytics": [ 7 st.Page("app_pages/dashboard.py", title="Dashboard"), 8 st.Page("app_pages/reports.py", title="Reports"), 9 ], 10}, position="top")

Page modules

python
1# app_pages/analytics.py 2import streamlit as st 3 4# Access global state 5api = st.session_state.api_client 6user = st.session_state.user 7 8# Page-specific content (title is handled in streamlit_app.py) 9data = api.fetch_analytics(user.id) 10st.line_chart(data)

Global state

Initialize state in the main module only if it's needed across multiple pages:

python
1# streamlit_app.py 2st.session_state.api = init_client() 3st.session_state.user = get_user() 4st.session_state.settings = load_settings()

Tip: Use st.session_state.setdefault("key", default_value) to initialize values only if they don't exist.

Why main module (for global state):

  • Runs before every page
  • Ensures state is initialized
  • Single source of truth

Page-specific state

Use prefixed keys for page-specific state:

python
1# app_pages/analytics.py 2if "analytics_date_range" not in st.session_state: 3 st.session_state.analytics_date_range = default_range()

Share elements between pages

Put shared UI in the entrypoint (before page.run()) so it appears on all pages:

python
1# streamlit_app.py 2import streamlit as st 3 4pages = [...] 5page = st.navigation(pages) 6 7# Shared title 8st.title(f"{page.icon} {page.title}") 9 10# Shared sidebar widgets 11with st.sidebar: 12 st.selectbox("Theme", ["Light", "Dark"]) 13 14page.run()

Programmatic navigation

Navigate to another page programmatically:

python
1if st.button("Go to Settings"): 2 st.switch_page("app_pages/settings.py")

Create navigation links with st.page_link:

python
1st.page_link("app_pages/home.py", label="Home", icon=":material/home:") 2st.page_link("https://example.com", label="External", icon=":material/open_in_new:")

Note: Prefer st.navigation over st.page_link for standard navigation. Do not use st.page_link to recreate the nav bar you get with st.navigation. Only use st.page_link when linking to pages from somewhere other than the sidebar, or when building a more complex navigation menu.

Conditional pages

Show different pages based on user role, authentication, or any other condition by building the pages list dynamically:

python
1# streamlit_app.py 2import streamlit as st 3 4pages = [st.Page("app_pages/home.py", title="Home", icon=":material/home:")] 5 6if st.user.is_logged_in: 7 pages.append(st.Page("app_pages/dashboard.py", title="Dashboard", icon=":material/bar_chart:")) 8 9if st.session_state.get("is_admin"): 10 pages.append(st.Page("app_pages/admin.py", title="Admin", icon=":material/settings:")) 11 12page = st.navigation(pages) 13page.run()

Common conditions for showing/hiding pages:

  • st.user.is_logged_in for authenticated users
  • st.session_state flags (roles, permissions, feature flags)
  • Environment variables or secrets
  • Time-based access (e.g., beta features)

Imports from pages

When importing from page files in app_pages/, always import from the root directory perspective:

python
1# app_pages/dashboard.py - GOOD 2from utils.data import load_sales_data 3 4# app_pages/dashboard.py - BAD (don't use relative imports) 5from ..utils.data import load_sales_data

References

Related Skills

Looking for an alternative to building-streamlit-multipage-apps or another community skill for your workflow? Explore these related open-source skills.

View All

openclaw-release-maintainer

Logo of openclaw
openclaw

Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

333.8k
0
AI

widget-generator

Logo of f
f

Generate customizable widget plugins for the prompts.chat feed system

149.6k
0
AI

flags

Logo of vercel
vercel

The React Framework

138.4k
0
Browser

pr-review

Logo of pytorch
pytorch

Tensors and Dynamic neural networks in Python with strong GPU acceleration

98.6k
0
Developer