Streamlit
1 Introduction to Streamlit
1.1 What is Streamlit?
1.2 Why use Streamlit?
1.3 Setting up the environment
1.4 Creating your first Streamlit app
2 Basic Components
2.1 Text elements
2.1 1 Displaying text
2.1 2 Formatting text
2.2 Data display elements
2.2 1 Displaying data frames
2.2 2 Displaying tables
2.3 Input widgets
2.3 1 Text input
2.3 2 Number input
2.3 3 Date input
2.3 4 Dropdown selection
2.3 5 Slider
2.3 6 Checkbox
2.3 7 Radio buttons
2.3 8 Buttons
3 Advanced Components
3.1 Interactive widgets
3.1 1 Multiselect
3.1 2 File uploader
3.1 3 Color picker
3.2 Media elements
3.2 1 Displaying images
3.2 2 Displaying videos
3.2 3 Displaying audio
3.3 Chart elements
3.3 1 Line chart
3.3 2 Bar chart
3.3 3 Area chart
3.3 4 Scatter chart
3.3 5 Map chart
4 Layout and Styling
4.1 Layout components
4.1 1 Columns
4.1 2 Tabs
4.1 3 Expander
4.2 Styling elements
4.2 1 Custom CSS
4.2 2 Theming
4.2 3 Adding custom fonts
5 State Management
5.1 Session state
5.1 1 Managing state across reruns
5.1 2 Persisting state
5.2 Caching
5.2 1 Caching functions
5.2 2 Caching data
6 Deployment
6.1 Deploying to Streamlit Sharing
6.1 1 Setting up Streamlit Sharing
6.1 2 Deploying your app
6.2 Deploying to other platforms
6.2 1 Deploying to Heroku
6.2 2 Deploying to AWS
6.2 3 Deploying to Google Cloud
7 Best Practices
7.1 Writing clean and maintainable code
7.2 Optimizing performance
7.3 Handling errors and exceptions
7.4 Version control with Git
8 Advanced Topics
8.1 Integrating with other libraries
8.1 1 Integrating with Pandas
8.1 2 Integrating with Plotly
8.1 3 Integrating with TensorFlow
8.2 Building complex apps
8.2 1 Creating multi-page apps
8.2 2 Handling authentication
8.2 3 Building interactive dashboards
8.3 Custom components
8.3 1 Creating custom widgets
8.3 2 Extending Streamlit with custom components
9 Case Studies
9.1 Building a data exploration app
9.2 Building a machine learning model deployment app
9.3 Building a real-time data visualization app
5 1 2 Persisting State Explained

1 2 Persisting State Explained

Key Concepts

Session State

Session state in Streamlit is temporary storage that persists across reruns within a single session. This means that the data stored in session state will be available as long as the user is interacting with the application within the same browser tab.

Example:

import streamlit as st

if 'counter' not in st.session_state:
    st.session_state.counter = 0

st.session_state.counter += 1
st.write(f"Counter: {st.session_state.counter}")
    

Global State

Global state in Streamlit is persistent storage that retains data across multiple sessions. This means that the data stored in global state will be available even if the user closes the browser tab and revisits the application later.

Example:

import streamlit as st
import json

def save_state(state):
    with open('state.json', 'w') as f:
        json.dump(state, f)

def load_state():
    try:
        with open('state.json', 'r') as f:
            return json.load(f)
    except FileNotFoundError:
        return {}

state = load_state()
state['counter'] = state.get('counter', 0) + 1
save_state(state)
st.write(f"Counter: {state['counter']}")
    

st.session_state

st.session_state is a Streamlit object used to manage session state. It allows you to store and retrieve data that persists across reruns within a single session.

Example:

import streamlit as st

if 'username' not in st.session_state:
    st.session_state.username = st.text_input("Enter your username")

st.write(f"Welcome, {st.session_state.username}!")
    

st.experimental_get_query_params

st.experimental_get_query_params is a function to retrieve query parameters from the URL. This can be used to pass state between different pages or components within a Streamlit application.

Example:

import streamlit as st

params = st.experimental_get_query_params()
username = params.get('username', [''])[0]

st.write(f"Welcome, {username}!")
    

Analogies

Think of session state as a sticky note on your desk that you write on and refer to while working on a project. The note is only useful during your current work session and is discarded once you finish. Global state, on the other hand, is like a permanent record in a ledger that you can refer to even after you've finished your work and come back later.

By mastering the concept of persisting state in Streamlit, you can create more interactive and user-friendly applications that retain important information across different interactions and sessions.