using-streamlit-session-state

Manage application state across Streamlit reruns using st.session_state.

Updated Jan 12, 2026
One-click install
npx skills add https://github.com/oharato/databricks --skill using-streamlit-session-state-oharato
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: using-streamlit-session-state
Source: https://github.com/oharato/databricks/tree/main/.github/skills/developing-with-streamlit/skills/using-streamlit-session-state
Command: npx skills add https://github.com/oharato/databricks --skill using-streamlit-session-state-oharato

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

This Skill addresses the challenge of maintaining data and user interactions across multiple reruns in Streamlit applications, ensuring a seamless user experience.

Core Features & Use Cases

  • State Persistence: Persists data, widget states, and user inputs across Streamlit script reruns.
  • Callback Integration: Enables state updates through widget interactions using on_change and on_click callbacks.
  • Use Case: When building a multi-step form in Streamlit, use st.session_state to store user inputs from previous steps and carry them over to subsequent steps, preventing data loss.

Quick Start

Use st.session_state.setdefault to initialize a counter to zero if it doesn't exist.

Frequently Asked Questions about using-streamlit-session-state

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I persist variables and widget states across Streamlit script reruns?

Use `st.session_state` to persist data and widget interactions across Streamlit reruns. It prevents variable resets by maintaining application state throughout the script execution lifecycle.

What is the best way to manage a multi-step form in Streamlit without losing user inputs?

Managing a multi-step form in Streamlit requires `st.session_state` to store previous inputs. This carries user data across subsequent steps, preventing input loss during script reruns.

How do I update Streamlit session state using widget callbacks?

Update Streamlit session state using `on_change` and `on_click` callbacks. This callback integration enables state modifications directly through widget interactions without triggering conflicting assignments.

Can I share session state across multiple pages in a Streamlit app?

Yes, `st.session_state` supports cross-page state sharing in Streamlit. It maintains synchronized data across different pages, ensuring consistent application state throughout the user navigation.

Why does my Streamlit app reset module-level mutable state on every interaction?

Streamlit reruns scripts on every interaction, resetting module-level mutable state. Use `st.session_state` initialization patterns like `setdefault` to avoid these common pitfalls and maintain persistent data.

How do I initialize a variable in Streamlit session state only once?

Initialize variables in Streamlit session state using `st.session_state.setdefault`. This pattern ensures a variable initializes only once, preventing conflicting state assignments during subsequent reruns.