Release date: March 3, 2026
Highlights
-
Introducing dynamic containers: st.tabs,st.popover, andst.expandercan rerun the app when they are opened or closed by setting theon_changeparameter. If a key is also provided, you can programmatically open and close them, too. -
Announcing widget binding! Most non-trigger widgets have a bindparameter to simplify syncing widget state with query parameters.
Notable Changes
-
st.imagehas alinkparameter to make images clickable with HTTP/HTTPS URLs (#14139, #9836). -
st.Pagehas avisibilityparameter that lets you hide pages in the navigation menu while keeping them routable (#13905, #10738). -
Markdown supports arbitrary CSS colors for text foreground and background (#14041, #7808). -
st.metrichas adelta_descriptionparameter to display descriptive text next to delta values (#13848, #13690). -
You can configure the font weight and size for st.metricwith the newmetricValueFontWeightandmetricValueFontSizeconfiguration options (#13550, #12300). Thanks, kagawa0710! -
st.tablehasheightandwidthparameters (#13850, #10775, #10820). -
st.altair_chartandst.vega_lite_chartsupport selections on multi-view charts (#13591, #8643). -
To prevent widgets from resetting when you change a parameter, widgets are transitioning to an identity based only on their keys (if provided). The following widgets use only their key for their identity: -
st.markdownacceptswidth="auto"to adapt its default behavior depending on the flex layout of its container (#13841). -
Added a new client.allowedOriginsconfig option to let you customize which origins can send cross-originpostMessage(#13829, #6389).
Other Changes
-
Page titles in st.Pageand section labels inst.navigationsupport Markdown (#14053, #14010, #11771). -
Common block elements in widget labels are auto-escaped for convenience (#13887, #7359). -
st.multiselectlets users select all options or all currently filtered options with a single click (#13795, #4714). -
Improved the design of st.multiselectandst.selectbox(#13004). Thanks, rishi-kumar0612! -
All widget drop-downs were restyled for consistency (#13796, #13797, #13798). -
↔️ For better accessibility,
st.tabsdisplays navigation arrows when the tabs overflow their container horizontally (#13987, #5552). -
The app menu was redesigned (#14101): -
Improved streamlit config showoutput to better distinguish theme value sources (#13761). -
To improve behavior in hosted environments, the Streamlit server acknowledges client heartbeats (#13810). -
Extended sprintfto support,as a thousands separator inNumberColumn,ProgressColumn,st.number_input,st.slider, andst.metric(#13284, #1301). -
Added a deprecation notice to SnowparkConnectionfor better visibility (#14125). -
Bug fix: st.spinneravoids a race condition when used right before a cache miss (#13849, #13634). -
Bug fix: st.date_inputvalues are normalized in Session State to prevent a type error (#14123, #14109). -
Bug fix: st.metricwith sparklines display correctly in horizontal flex containers (#14110, #13785). -
Bug fix: SQLConnection.query()caches results at the instance level instead of the class level (#14094, #14077). -
Bug fix: st.segmented_controlhas consistent border styling on hover (#14067, #12802). -
Bug fix: st.date_inputandst.datetime_inputremove validation marks when they are cleared (#14066, #14052). -
Bug fix: Fixed a rendering regression for vconcatcharts in Altair with faceted children (#14065, #14050). -
Bug fix: st.Pageraised an exception if it’s passed a URL path of only slashes (#14005, #13952). Thanks, nileshhadalgi016! -
Bug fix: The code block copy button was moved into a toolbar to prevent text overlap (#14024, #12958). -
Bug fix: st.tabsretain their state when rendered after a transitional element likest.spinner(#14023, #14018). -
Bug fix: Treemap and sunburst Plotly charts support selections (#13935, #9001). -
Bug fix: Fixed a width regression for layered vconcatcharts in Altair (#13980, #13974). -
Bug fix: st.multiselectraises an exception whenmax_selectionsisn’t positive (#13966, #13965). -
Bug fix: When a user adds a row to st.data_editor, all columns, including hidden ones, are initialized (#13916, #13915). -
Bug fix: st.select_sliderdoesn’t apply its format function twice inAppTest(#13837, #13832). -
Bug fix: Content in collapsed expanders is not included in page search (#13818).