Is there a way to collapse a st.sidebar?

Is there a way to collapse st.sidebar?

I tried using something like this to hide the content:

def hide_sidebar_content():
    st.session_state["hide_sidebar"] = True

def show_sidebar_content():
    st.session_state["hide_sidebar"] = False

But I don’t really like this approach because the sidebar’s arrow to open it is gone, and I end up needing to add another custom button to toggle it.

Is there an official or better way to collapse/expand the sidebar dynamically while keeping the default toggle arrow?

The preferred method is st.set_page_config. (The user can still override, but you can set the initial state.)

In my case i want to use this to hide the side bar when the user try to print the page, when start the streamlit i need it visible.

What were you trying to do with your Python functions in the original post that you couldn’t replace with st.set_page_config? You can conditionally set the parameters of st.set_page_config. (Run the app expanded and when whatever happens that you’re trying to close it, run it as collapsed.) Can you provide more information about how you’re triggering this change?

I have a Streamlit app that generates production reports. It has a sidebar for navigation that needs to start expanded by default.
These reports are printed on paper, so what I’d like is: when the user tries to print, the sidebar should automatically collapse, to make sure it isn’t printed.

The original code I tried actually hides the sidebar completely, instead of just collapsing it — and the arrow to expand it back also disappears from the screen.

I’m looking for a way to justcollapse the sidebar and keep the toggle arrow.

How are you triggering your current method, precisely? Can you provide a snippet of a page of Lorem ipsum and how you implement your current print-hide?

I’m making a llm chat bot app with login. In the login page I “hide” the side_bar with html tags:

st.markdown("""
    <style>
        section[data-testid="stSidebar"][aria-expanded="true"]{
            display: none;
        }
    </style>
""", unsafe_allow_html=True)

You could call it into a function before you are about to print

So you haven’t connected it in any way to the print action itself? (You can just replace st.markdown with st.set_page_config…)