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.
Upgrade Streamlit
Tip
To upgrade to the latest version of Streamlit, run:
Terminal
pip install --upgrade streamlit
Version 1.60.0 (latest)
Release date: July 21, 2026
Highlights
- β¨ You can now disable bulk data export app-wide with the new
client.disableDataExportconfig option. When set, the CSV export button is hidden forst.dataframe,st.data_editor, and chart table views, and clipboard copy is disabled for read-only dataframes (#15910, #8402, #11358).
Notable Changes
- π Security hardening (breaking changes):
- Streamlit now rejects host messages that appear to originate from child iframes or injected scripts, preventing origin spoofing (CWE-346) (#15800).
- Client-supplied query strings are now capped at 512 KiB and 1,000 fields, guarding against unbounded resource allocation (CWE-770) (#15803).
- New
server.maxWidgetStateSizeconfig option (default 25 MB) limits the widget state payload a client can send per script rerun, hardening against oversized widget and custom-component payloads (#15804).
- π
st.dataframenow preserves row selections when the user sorts the table (#16020, #8851). - π
st.tabshas a newheightparameter to set a fixed pixel height for the tab panel area (#15847, #12217). - π The
gapparameter inst.columnsnow accepts integer pixel values in addition to the existing string presets (#15850, #13005). - π¨
st.data_editornow useskeyas the primary row identity whennum_rows="fixed", improving stability when the underlying data changes (#15884). - π Zero delta values in
st.metricare now displayed in neutral grey instead of green or red, so a zero change no longer implies a positive or negative direction (#15790, #15005). - π Vega-Lite chart action buttons (download, copy spec to clipboard) are now integrated into the native Streamlit toolbar; the Vega-Lite action menu overlay has been removed (#15806).
Other Changes
- π Bug fix: Non-finite float values (e.g.
NaN,Inf) in URL query params are now rejected to prevent unexpected behavior (#15799). - π¦ Bug fix: Dangerous URLs in Graphviz link attributes are now sanitized (#15819).
- πͺ² Bug fix: HTML in PyDeck chart tooltip interpolations is now escaped to prevent injection (#15820).
- π Bug fix: Dangerous URLs in
st.link_buttonandst.imageare now sanitized (#15851). - π Bug fix:
st.selectboxnow virtualizes long dropdown option lists for better rendering performance (#15870, #15863). - π Bug fix: Viewport gutter is now preserved around dialogs on narrow screens (#15875).
- π·οΈ Bug fix: React Aria dialog overlays now stack correctly when multiple dialogs are open (#15876, #15859).
- πͺ³ Bug fix: The "Missing Submit Button" warning has been removed (#15889, #14247).
- πͺ° Bug fix:
st.tabspanels no longer stack visually after a widget rerun (#15894, #15893). - π¦ Bug fix:
st.metricarea chart fill baseline is now drawn correctly (#15907). - π¦ Bug fix:
run_everyauto-rerun timers are now deduplicated per fragment, preventing duplicate reruns (#15912). - π¦ Bug fix: Redundant keyboard tab stop removed from the file uploader dropzone for better accessibility (#15928).
- π¦ Bug fix: Auto-rerun correctly stops when a fragment is evicted (#15932).
- πΈοΈ Bug fix: A PyArrow 25 thread initialization crash is now avoided (#15947).
- π Bug fix: Missing
httpxerror message for the auth extra is now surfaced correctly (#15864). - π¦ Bug fix:
st.Appwith programmatic secrets now correctly honors theexpose_tokenssetting (#15865). - π¦ Bug fix:
RuntimeError: reentrant call inside _io.BufferedWriteron Ctrl+C is fixed (#15949, #15740). Thanks, chang-pro! - π½ Bug fix: File watcher no longer crashes on Windows drive-root paths (#15951, #12731).
- π» Bug fix: Overlay stacking and dismissal inside popovers works correctly (#15961).
- π Bug fix: Mobile keyboard no longer appears for
st.selectboxwhenfilter_mode=None(#15962). - π¦ Bug fix:
st.selectbox"No results" empty state is now styled correctly (#15967). - πͺ² Bug fix:
IndexErrorin number formatting for values β₯ 1 quadrillion is fixed (#15971). Thanks, eeshsaxena! - π Bug fix: Type-to-search in
st.selectboxis restored (#15996, #15985). - π Bug fix: Typing a value in
st.number_inputinside a form now correctly submits on the first Enter press (#16013, #13751). - π Bug fix: Hashing fallback warning messages are now more informative (#16040, #10957).
- π·οΈ Bug fix: Inconsistent checkbox margin in a horizontal container within a column is fixed (#16060, #13162).
- πͺ³ Bug fix: Widgets inside a popover that is itself inside a dialog are now clickable (#16067, #16005).
- πͺ° Bug fix:
st.echooutput now correctly includes decorators on the displayed function (#16068, #9252). - π© Internal
TTLCacheimplementation replaces thecachetoolsthird-party dependency (#16014).
Older versions of Streamlit
- 2026 release notes
- 2025 release notes
- 2024 release notes
- 2023 release notes
- 2022 release notes
- 2021 release notes
- 2020 release notes
- 2019 release notes
Still have questions?
Our forums are full of helpful information and Streamlit experts.