Version 1.31.0


  • :link: Introducing st.page_link! Now, you can build custom navigation menus for your multipage apps. Check out our docs to see how.
  • :sweat_drops: Announcing st.write_stream to conveniently handle generators and streamed responses. Check out our docs to see how making chat apps just got easier.

Notable Changes

  • :memo: st.chat_input can be used inline and placed anywhere in the app. You can also have multiple st.chat_input widgets on a page (#7896).

Other Changes

  • :broom: Internal refactoring and cleanup (#7980). Thanks, whitphx!
  • :snowflake: Bug fix: Snowpark is now an optional dependency for SnowflakeConnection (#7919).
  • :spider: Bug fix: The watchdog suggestion is disabled when server.fileWatcherType is set to none or poll (#8024, #7999).
  • :lady_beetle: Bug fix: Required columns can be hidden when not using st.data_editor with dynamic rows (#7996, #7991).
  • :honeybee: Bug fix: New period types are supported for pandas 2.2.0 (#7988).
  • :ant: Bug fix: Custom components receive only the app’s origin and path to avoid reloading components when query parameters change (#7951, #7503). Thanks, eric-skydio!
  • :beetle: Bug fix: st.progress won’t raise an exception when given a value above 1.0 due to float precision (#7953, #5517). Thanks, notiona!
  • :books: Streamlit supportsimportlib-metadata version 7 (#7925). Thanks, elgalu!
  • :bug: Bug fix: AppTest correctly sees widgets inside containers (#7923, #7711).
  • :cd: Custom components no longer accumulate style elements when re-rendered for better performance (#7914). Thanks, Tom-Julux!

st.chat_input was changed in this release to allow placing it in different locations or having more than one on a page. CSS hacks aren’t officially supported, and so may break on any release. If you need help figuring out the adjustment for the new version, feel free to create a new topic with an executable snippet to show what you had before and how it’s not working for 1.31.0.

Can you make a new topic in the Using Streamlit category to make sure your questions gets a proper discussion of its own? If you include a screen shot of the effect with and without the CSS, that will save some time in answering your question.

The st.page_link feature works great! Thank you! :grinning: :+1:


Example Code:

with st.expander("🧭 Menu"):

    st.page_link("", label="Home", icon="🏠", use_container_width=True)
    st.page_link("pages/", label="Introduction Demo", icon="1️⃣", use_container_width=True)
    st.page_link("pages/", label="Dashboard Demo", icon="2️⃣", use_container_width=True)
    st.page_link("pages/", label="Interactive Demo", icon="3️⃣", use_container_width=True)
    st.page_link("pages/", label="Automated Demo", icon="4️⃣", use_container_width=True)
    st.page_link("pages/", label="Documentation", icon="5️⃣", use_container_width=True)
1 Like

In my case this caused streamlit-image-select to stop loading new images whenever they came. We use st.session.state in components, not query params.

Hi @Julia_K! Can you submit a bug report in GitHub so our engineers can take a look?