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.61.0 (latest)
Release date: August 4, 2026
Highlights
- β‘ Introducing lazy loading for
st.dataframe: large dataframes now load their rows on demand automatically, so the browser stays responsive. A newlazyparameter lets you turn this on or off explicitly, and PolarsLazyFrameobjects are supported natively (#15756). - πΏ
st.cache_dataandst.cache_resourcehave a newrefresh_mode="background"option that refreshes expired cache values in the background, so your app keeps serving the previous value without waiting (#16057, #5871).
Notable Changes
- π―
st.metrichas a newiconparameter to display an icon next to the metric label (#15805, #12298). - β±
st.time_inputreceived a major revamp with editable time segments, a newformatparameter to control the hour cycle (12-hour, 24-hour, or localized), seconds granularity whenstepis under 60 seconds, paste support, and improved form behavior with Enter-to-submit (#16126, #16128, #16096, #15647, #6423, #8234). - π₯
st.multiselecthas improved tag accessibility, including keyboard navigation between tags and WAI-ARIA-aligned dropdown focus (#16200, #16109). - π₯
st.download_buttonnow infers a missingfile_nameandmimefrom a file object's name when you pass data opened from disk (#16061). Thanks, SoMika00! - πͺ
st.Pageis now a proper class, soisinstance(page, st.Page)behaves as expected (StreamlitPageremains a backward-compatible alias) (#16268). - π New
server.allowedHostsconfig option lets deployments with known hostnames restrict incoming WebSocket handshakes (#16147). - π‘ The
disabledwidget parameter is now enforced server-side, so a disabled widget never accepts a value from the browser (#16209). - π» Breaking change: The deprecated
use_column_widthparameter has been removed fromst.image. Use thewidthparameter instead (#15786). - β οΈ Breaking change: Passing local file paths as strings to
st.htmlandst.iframeis deprecated. Use apathlib.Pathobject to load local files instead (#16150).
Other Changes
- π Bug fix:
AppTestnow converts a script file path to its parent directory before adding it tosys.path(#15775). Thanks, ishaanlabs-gg! - π¦ Bug fix: An unclean WebSocket close now reconnects to the existing session, preserving widget values,
st.session_state, and run count instead of restarting the app (#15909, #8901). - πͺ² Bug fix: The in-app "install skills" nudge is now suppressed when an install would only conflict, and reports why (#15966).
- π Bug fix:
st.selectboxfuzzy search matches non-contiguous substrings again, fixing a regression since 1.59.0 (#16009, #16003). Thanks, LuC-9! - π Bug fix:
st.popoverplaced insidest.sidebarno longer renders off-screen (#16087, #9387). - π Bug fix: Pressing Escape in
st.selectboxnow clears the typed search query and restores the committed label (#16088, #16004). - π·οΈ Bug fix:
st.bar_chartand other built-in charts no longer fail on column names containing a.(#16089, #7714). - πͺ³ Bug fix:
st.expanderno longer stays clipped after a rapid open/close interaction interrupts its animation (#16090, #16027). - πͺ° Bug fix: Right-side padding is preserved when a
st.codeblock is scrolled horizontally to the end (#16091, #8206). - π¦ Bug fix:
AppTestmultipage path handling is now deterministic and better documented (#16122, #8429, #8154). - π¦ Bug fix:
AppTestnow clears stale elements on each rerun, so its element tree no longer accumulates duplicate widgets from earlier runs (#16123, #9128, #12566). - π¦ Bug fix: An open
st.data_editorcell edit is now committed when you click outside the grid (#16132, #7868). - π¦ Bug fix:
@st.fragment(run_every=...)no longer raises aTypeErrorwhen Sentry's threading integration is enabled (#16140, #16139). - πΈοΈ Bug fix:
st.data_editorrow additions no longer silently overwrite existing rows for non-RangeIndexDataFrames (#16144). - π Bug fix:
st.Pagenow rejects network paths and null bytes before touching the filesystem (#16146). - π¦ Bug fix: Mermaid config keys hardened by Streamlit can no longer be overridden by inline
%%{init}%%directives in diagram source (#16151). - π¦ Bug fix: The
st.multiselectdropdown background now matches the sidebar theme (#16163, #11348). - π½ Bug fix: Plotly Sankey charts now honor layout fonts set via
fig.update_layout(font=...)(#16164, #11031). - π» Bug fix:
st.data_editorNumberColumnnow preserves IME composition, so CJK input is no longer cut off after the first composed digit (#16165, #16129). - π Bug fix: A dataframe header background configured with an alpha channel now renders stably instead of shifting color on hover (#16166, #11950).
- π¦ Bug fix: Downloading an Altair/Vega-Lite chart as PNG now respects display DPI for a higher-resolution export (#16170, #8177).
- πͺ² Bug fix: Fragments nested inside a shared container no longer lose their children after the enclosing parent fragment reruns (#16171, #12514).
- π Bug fix: An
st.selectboxnear the bottom of the sidebar now flips its dropdown up instead of clipping past the viewport (#16199, #16181). - π Bug fix:
st.helpno longer shows "page.run()" as the header in multipage apps (#16244, #11430). - π Bug fix:
st.pillsandst.segmented_controlkeep the current selection highlighted when aformat_funcchanges an option's label between reruns (#16271, #16269). - π·οΈ Bug fix:
st.download_buttonnow acceptsio.StringIOdata as documented (#16272, #16270). - πͺ³ Bug fix: Port auto-increment is restored on Windows, so a second
streamlit runno longer binds an in-use port (#16315, #16296). - πͺ° Bug fix: An
st.statusopened on a container declared outside a fragment no longer blanks the app (#16316, #16281). - π¦ Bug fix: The host message guard again accepts same-window self-posts, restoring embedded Streamlit-in-Snowflake auth delivery (#16327).
- π¦ Streamlit no longer depends on GitPython and inspects local repositories via the
gitCLI instead (#16241).
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.