Release notes

This page lists highlights, bug fixes, and known issues for the latest release of Streamlit. If you're looking for information about nightly releases or experimental features, see Pre-release features.

star

Tip

To upgrade to the latest version of Streamlit, run:

Terminal
pip install --upgrade streamlit

Release date: July 6, 2026

Highlights

  • ✨ Introducing ButtonColumn β€” a new column type for st.dataframe and st.data_editor that renders clickable buttons inside table cells, letting users trigger actions directly from a row (#14544, #7015).
  • πŸ“Š st.dataframe has a new column statistics submenu β€” click the dropdown icon in any column header to see per-column summary stats (#14307, #13148).
  • 🍿 Introducing st.skeleton β€” a new element that renders animated loading placeholders, making it easy to give users visual feedback while content is loading (#15169, #8032).
  • 🎨 Introducing st.mermaid_chart β€” render Mermaid diagrams directly in your app, letting you embed flowcharts, sequence diagrams, and more. Mermaid also works from st.markdown (#14022, #10721).

Notable Changes

  • πŸŽ› st.chat_input has a new submit_mode parameter that controls widget behavior after the user submits a message, e.g. showing a stop button or disabling the chat input (#14344, #8323, #11854).
  • πŸ“‹ st.dataframe and st.data_editor support a new MarkdownColumn type in st.column_config that renders Markdown text inside table cells (#13931, #10211).
  • πŸ”— st.markdown has a new anchors parameter for adding linkable heading anchors to Markdown content (#15722, #13913).
  • πŸ’» You can now launch Streamlit apps directly with python app.py or uv run app.py using the new App.run() entry point β€” no more streamlit run required (#15563, #9450, #11420).
  • 🧩 st.fragment can now write to containers defined outside the fragment. Fragments can update any part of your app β€” including elements created before the fragment β€” without triggering a full rerun (#15623, #15620, #10481).
  • πŸ“Ž st.chat_input now supports pasting files directly into the input field (#15558, #10307).
  • πŸ€– st.write_stream now supports OpenAI Responses API streams in addition to the existing Chat Completions streams (#15559, #11061).
  • πŸ”’ st.set_page_config supports a new "locked" option for initial_sidebar_state that prevents users from toggling the sidebar open or closed (#15459, #15411).
  • πŸ’… Widgets have a new persist_state parameter for finer control over how widget state is preserved across reruns (#15645).
  • πŸ“· st.camera_input has a new resolution parameter to control the captured image resolution (#15766, #4320).
  • πŸ§ͺ AppTest now supports testing st.download_button and st.image (#15528, #9003).
  • πŸ’Ύ Programmatic secrets now support list values (#15491).
  • ⌨ You can now look up Streamlit API documentation from the CLI with streamlit docs <command> (#15547).
  • πŸ” A new server.xsrfCookieSameSite config option lets you customize the SameSite attribute of the XSRF cookie for deployments with specific cross-site requirements (#15634, #5793, #9397).
  • πŸ’‘ Streamlit now recommends installing AI coding skills on app startup to improve your development workflow with AI coding assistants (#15437, #15473).
  • βš™ The /_stcore/metrics endpoint now reports memory stats in a less detailed (cheaper) form by default (#15472).
  • πŸ‘» The deprecated Snowpark connection type has been removed. Migrate to a supported connection type (#15784).
  • πŸ‘» The deprecated st.bokeh_chart command has been removed. Use the streamlit-bokeh component instead (#15636).

Other Changes

  • ⚑ VegaLite charts now use Vega's native resize API for faster rendering when the container size changes (#15302).
  • 🎨 The pagination widget's selected-state styling has been redesigned (#15550).
  • πŸ”§ Various fixes related to the Baseweb library removal (#15737).
  • πŸ› Bug fix: The metrics endpoint no longer errors when SQLAlchemy connections are present (#15334).
  • πŸ¦‹ Bug fix: @st.fragment(run_every=...) no longer raises a TypeError in _run_with_thread_state (#15376).
  • πŸͺ² Bug fix: Named Snowflake connections defined in config files are now correctly discovered and used (#15382).
  • 🐜 Bug fix: P-mode PIL palette images are now hashed correctly to prevent hash collisions (#15397).
  • 🐝 Bug fix: The server now correctly binds to IPv6 dual-stack wildcards for the default address (#15400).
  • 🐞 Bug fix: Stale and invalid auth cookies are now cleared on login (#15420).
  • πŸ•·οΈ Bug fix: widgetMgr is synced correctly to fix lazy loading in tab.open (#15460).
  • πŸͺ³ Bug fix: Installed Custom Component v2 components are now correctly discovered in AppTest (#15488).
  • πŸͺ° Bug fix: st.pills and st.segmented_control callbacks now fire correctly after selection (#15522).
  • 🦠 Bug fix: The page title is no longer reset to the default on rerun (#15527).
  • 🦟 Bug fix: The "Missing Submit Button" warning no longer flashes briefly on app load (#15561).
  • πŸ¦‚ Bug fix: Streamlit now defaults to the polling file watcher in WSL environments, avoiding inotify issues (#15562).
  • πŸ¦— Bug fix: AppTest now correctly handles formatted labels in format_func widgets (#15564).
  • πŸ•ΈοΈ Bug fix: The invalid session upload error message now explains multi-replica deployment as a possible cause (#15635).
  • 🐌 Bug fix: st.selectbox no longer loses its selection when format_func depends on object identity (#15639).
  • 🦎 Bug fix: Pressing Escape no longer clears the current selection in st.multiselect (#15646).
  • πŸ¦€ Bug fix: StreamlitPage now validates that its source matches the registered page, catching misconfiguration earlier (#15721, #10572).
  • πŸ‘½ Bug fix: st.dataframe no longer intercepts the Ctrl+F keyboard shortcut when the search bar is disabled (#15764).
  • πŸ› Bug fix: Column headers in st.dataframe no longer wrap text in the column header menu (#15772).
forum

Still have questions?

Our forums are full of helpful information and Streamlit experts.