2026 release notes
This page contains release notes for Streamlit versions released in 2026. For the latest version of Streamlit, see Release notes.
Version 1.60.0
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).
Version 1.59.0
Release date: July 6, 2026
Highlights
- β¨ Introducing
ButtonColumnβ a new column type forst.dataframeandst.data_editorthat renders clickable buttons inside table cells, letting users trigger actions directly from a row (#14544, #7015). - π
st.dataframehas 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 fromst.markdown(#14022, #10721).
Notable Changes
- π
st.chat_inputhas a newsubmit_modeparameter 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.dataframeandst.data_editorsupport a newMarkdownColumntype inst.column_configthat renders Markdown text inside table cells (#13931, #10211). - π
st.markdownhas a newanchorsparameter for adding linkable heading anchors to Markdown content (#15722, #13913). - π» You can now launch Streamlit apps directly with
python app.pyoruv run app.pyusing the newApp.run()entry point β no morestreamlit runrequired (#15563, #9450, #11420). - π§©
st.fragmentcan 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_inputnow supports pasting files directly into the input field (#15558, #10307). - π€
st.write_streamnow supports OpenAI Responses API streams in addition to the existing Chat Completions streams (#15559, #11061). - π
st.set_page_configsupports a new"locked"option forinitial_sidebar_statethat prevents users from toggling the sidebar open or closed (#15459, #15411). - π
Widgets have a new
persist_stateparameter for finer control over how widget state is preserved across reruns (#15645). - π·
st.camera_inputhas a newresolutionparameter to control the captured image resolution (#15766, #4320). - π§ͺ
AppTestnow supports testingst.download_buttonandst.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.xsrfCookieSameSiteconfig option lets you customize theSameSiteattribute 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/metricsendpoint 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_chartcommand has been removed. Use thestreamlit-bokehcomponent 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 aTypeErrorin_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:
widgetMgris synced correctly to fix lazy loading intab.open(#15460). - πͺ³ Bug fix: Installed Custom Component v2 components are now correctly discovered in
AppTest(#15488). - πͺ° Bug fix:
st.pillsandst.segmented_controlcallbacks 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:
AppTestnow correctly handles formatted labels informat_funcwidgets (#15564). - πΈοΈ Bug fix: The invalid session upload error message now explains multi-replica deployment as a possible cause (#15635).
- π Bug fix:
st.selectboxno longer loses its selection whenformat_funcdepends on object identity (#15639). - π¦ Bug fix: Pressing Escape no longer clears the current selection in
st.multiselect(#15646). - π¦ Bug fix:
StreamlitPagenow validates that itssourcematches the registered page, catching misconfiguration earlier (#15721, #10572). - π½ Bug fix:
st.dataframeno longer intercepts the Ctrl+F keyboard shortcut when the search bar is disabled (#15764). - π Bug fix: Column headers in
st.dataframeno longer wrap text in the column header menu (#15772).
Version 1.58.0
Release date: May 28, 2026
Highlights
- π Introducing
parallel=Truefor@st.fragment, which lets fragments run concurrently for more responsive apps and background-style workflows (#15214). - πΏ Introducing
st.paginationto help you build paged interfaces, e.g. for dataframes (#14975, #10785). - π Announcing
streamlit skills, a new CLI command for installing AI agent skills (#15116).
Notable Changes
- π
st.Appnow supports custom script error handling, letting you attach a custom exception handler to your app (#14972, #3426, #8713). - π
st.expanderandst.statushave a newtypeparameter for a more compact visual style (#14054, #13246). - π» The deprecated
element.add_rowsfeature has been removed (#15034, #299, #13063, #7994, #5860). - π» LangChain callback handler integration has been removed (#15051).
Other Changes
- π Query-parameter-bound widgets now keep the URL in sync when their values change through Session State (#14744).
- π Widget and icon sizing is more consistent across the app (#15056, #15098, #13945).
- β± Streamlit reduces the timeout for external IP lookups to avoid startup freezes when the lookup is slow or unavailable (#14984).
- π‘
st.markdownnow blocksjavascript:andvbscript:URLs in Markdown links (#15161). - π Bug fix: Streamlit now supports symlinks in Starlette static file serving (#15112, #13600).
- π¦ Bug fix: Fragment apps no longer crash because of stale auto-reruns (#15130, #15084).
- πͺ² Bug fix:
blake2bhashing now usesusedforsecurity=Falsefor FIPS-compatible environments (#15149, #15148). Thanks, andriykislitsyn! - π Bug fix:
st.logincookies now restore 30-day persistence with aMax-Agevalue (#15194, #15193). Thanks, GiovanniPaoloGibilisco! - π Bug fix: OAuth PKCE behavior has been restored in the Starlette-based auth flow (#15282, #15115).
- π Bug fix: OAuth no longer regresses with
MismatchingStateErrorafter upgrading to 1.57.0 (#15048, #14991). - π·οΈ Bug fix: Provider tokens now use
joserfc, improving auth compatibility and token handling (#15178, #15170). - πͺ³ Bug fix:
st.vega_lite_charttooltips work again inside dialogs (#15191, #12390). Thanks, marawanokasha! - πͺ° Bug fix:
st.buttonwarns when a keyboard shortcut is reserved by the browser (#15217, #15216). - π¦ Bug fix:
st.markdownshows its help icon again whenunsafe_allow_html=True(#15232, #15211). - π¦ Bug fix: Browser Back/Forward navigation now works for pages with Unicode URL paths (#15281, #15267).
- π¦ Bug fix: Programmatically closed popovers and expanders no longer reopen when you interact with another container (#14945, #14943).
- π¦ Bug fix:
st.selectboxno longer hides its first option when exactly seven options are selected (#14997, #14989). - πΈοΈ Bug fix:
st.multiselectdisables "Select all" for very large option lists to avoid performance problems (#15301, #14918, #15299). - π Bug fix: Tables, dataframes, and data editors no longer accidentally overscroll during interaction (#15309). Thanks, kantuni!
Version 1.57.0
Release date: April 29, 2026
Highlights
- π Introducing Starlette as the default web server! Streamlit now uses Starlette/Uvicorn instead of Tornado, bringing improved ASGI compatibility, better performance, and access to the modern Python async ecosystem. The underlying server is also exposed via
st.Appfor advanced configuration (#14553, #439, #861). - πΏ Introducing
st.bottomβ a pinned container at the bottom of your app, perfect for chat inputs, toolbars, and persistent controls (#14726, #8564, #8185).
Notable Changes
- β¨ Introducing the
:shimmer[]markdown directive β add animated loading text to your apps withst.markdown(":shimmer[Loading...]")for a polished streaming experience (#14055, #13247). - β‘ Direct Polars-to-Arrow conversion now bypasses pandas entirely, improving performance and type fidelity for Polars DataFrames (#14885, #12913).
- π» Removed deprecated
spec,use_container_width, andsharingkeyword arguments fromst.plotly_chartandst.vega_lite_chart(#14800). - π» Removed the deprecated
_get_websocket_headersfunction. Usest.context.headersinstead (#14801). - π§ͺ
st.testing.v1.AppTestnow supportsst.pills,st.segmented_control, andst.dataframekey lookups (#14518, #11361, #11338). - π Alert elements (
st.info,st.warning,st.error,st.success) have a newtitleparameter for adding a bold header to alert messages (#14665, #12417). - π¨
st.menu_buttonandst.popovernow hide the chevron when using menu-style icon-only labels (#14697). - π―
st.Appis now available in thestnamespace for programmatic app configuration (#14722). - π
st.Apphas a newsecretsparameter to programmatically pass secrets instead of relying onsecrets.tomlfiles (#14861, #10543). - π€ Streamlit now bundles developing-with-streamlit AI agent skills in the pip package:
- π
st.videoandst.mapnow have rounded corners matching other Streamlit elements (#14781, #12806).
Other Changes
- π Bug fix:
st.dataframeno longer crashes with pandas 3ArrowStringArraycolumns (#14611, #14609). - π¦ Bug fix: Custom component v1 serialization now correctly downcasts large Arrow types instead of failing (#14617, #14608).
- πͺ² Bug fix:
@st.cache_dataand@st.cache_resourcenow chain the original exception inUnserializableReturnValueErrorfor better debugging (#14655, #14654). Thanks, mango766! - π Bug fix: CSS Color Level 4 color functions (
oklch,lab, etc.) are now supported in color parameters (#14674, #14573). - π Bug fix: Query parameter space encoding is now consistent across all operations (#14691, #14671).
- π Bug fix:
st.data_editorcorrectly preservesNonevalues with pandas 3.0+ (#14694, #14693). - π·οΈ Bug fix: Namespace package children are now correctly evicted when watched source files reload (#14708, #14704).
- πͺ³ Bug fix:
st.radionow retains selections when usingformat_funcwith custom option objects (#14815, #14814). - πͺ° Bug fix:
st.bar_chartaxis labels now correctly swap whenhorizontal=True(#14866, #14830). - π¦ Bug fix:
st.text_areawithheight="content"now sizes correctly on initial load (#14884, #14876). - π¦ Bug fix:
st.file_uploaderno longer shows duplicate equivalent file extensions in the accepted types display (#14552, #11991).
Version 1.56.0
Release date: March 31, 2026
Highlights
- πΏΒ Introducing
st.menu_buttonβ a new widget that renders a dropdown button with a customizable popover container for building menus, toolbars, and action lists (#13981, #11409). - πΒ Introducing
st.iframeβ embed external URLs or raw HTML content directly in your app using an iframe (#14433, #12977). - πΒ
st.selectboxandst.multiselectnow support afilter_modeparameter that lets users search and filter options by typing (#14537, #6160, #7238).
Notable Changes
- πΒ
st.dataframesupports programmatically setting selections via theselectionparameter (#13594, #10128). - π―Β
st.dataframehas a new"single-row-required"selection mode that always keeps exactly one row selected (#14288, #9253). - πΒ
st.dataframecolumn configuration now supports analignmentparameter for controlling text alignment in columns (#14333, #12106). - πΒ The column visibility menu in
st.dataframeis now always visible, making it easier to show and hide columns (#14336, #10649). - πΉΒ
AudioColumnandVideoColumnare now available inst.column_configfor displaying audio and video players directly in dataframes (#14032, #8345). - πΒ Streamlit now supports pandas 3.x (#13812, #13211).
- π§Β
st.navigationhas a newexpandedparameter to control how many sidebar items are visible before collapsing (#14051, #9646). - πΒ
st.Pagenow accepts external URLs, allowing you to add links to external sites in the navigation sidebar (#13691, #9025). Thanks, t0k0shi! - πΌΒ
st.tablehas newhide_indexandhide_headerparameters for cleaner table presentation (#14113, #8235, #9251). - β‘Β
st.link_buttonnow supports anon_clickcallback that triggers a rerun before navigating (#14116, #7453). - πΒ
st.file_uploaderandst.chat_inputnow accept file type shortcuts like"image","audio","video", and"document"(#14140). - πΒ
st.chat_inputhas a newheightparameter to control the initial height of the text area (#14165, #10724). - β¨Β Alert elements (
st.info,st.warning,st.error,st.success) now automatically extract a leading Material icon from the message body and display it as the alert icon (#14173, #10892). - πͺΒ Streaming markdown now auto-completes incomplete syntax (e.g., unclosed bold, links, or code blocks) during streaming for a cleaner reading experience (#13939).
- π·Β
st.pillsandst.segmented_controlnow have arequiredparameter to enforce that at least one option is always selected (#14414, #9870). - πΒ
st.containerhas a newautoscrollparameter that automatically scrolls to the bottom as new content is added (#14502, #8836). - π§©Β
st.tabs,st.expander, andst.popovernow preserve their open/closed state across reruns (#14332, #14356). - π Β Static files served via
st.static/now use native content types instead of a generic fallback (#14090). - π₯Β Media elements now support relative static file serving URLs (e.g.,
/app/static/video.mp4) (#14317, #12104). - π§ͺΒ
st.file_uploaderis now supported in AppTest for programmatic testing of file upload flows (#14341, #8093). - π§Β Widget state duplication warnings are now logged to the console instead of displayed in the app UI (#14141).
- π¦Β
BidiComponentResulthas been renamed toComponentResultin the custom components v2 API (#14253). - βΒ The
_stcore/metricsendpoint is now fully OpenMetrics-compliant (#14538).
Other Changes
- πΒ Bug fix: Streamlit can now run with Python optimization flags (
-O/-OO) (#14171, #14155). - π¦Β Bug fix: Reduced false-positive file change detections on Windows by adding a stability check to the file watcher (#14174, #13954).
- πͺ²Β Bug fix:
st.text_areawithheight="content"now correctly auto-sizes to fit content (#14228, #14222). - πΒ Bug fix: Stale anchor links are no longer preserved when clearing transient nodes (#14251, #14249).
- πΒ Bug fix:
BidiComponentManageris now properly initialized in AppTest mock runtime (#14301, #14274). Thanks, tysoncung! - πΒ Bug fix: Streamlit is now compatible with Python 3.14's PEP 649 deferred annotation evaluation (#14327, #14324).
- π·οΈΒ Bug fix: Tooltips on selected
st.multiselectoptions are now restored (#14353, #14351). - πͺ³Β Bug fix:
server.portis now correctly updated after binding to port 0 (#14372, #11308). Thanks, joanaarnauth! - πͺ°Β Bug fix: Bound query params are now correctly restored in the URL when navigating in multi-page apps (#14374, #14350).
- π¦ Β Bug fix: Restored the
reactJsonViewCompatshim for the local dev server (#14391). - π¦Β Bug fix:
st.exceptionlinks no longer overflow their container at small viewport widths (#14417, #12870). - π¦Β Bug fix: Headings inside horizontal containers (
st.columns) no longer have extra top padding (#14419, #12434). - π¦Β Bug fix: Programmatic dataframe selections now return
AttributeDictionaryfor consistent dot-notation access (#14455, #14454). - πΈοΈΒ Bug fix: Streaming markdown with color directives no longer shows rendering artifacts (#14468, #14460).
- πΒ Bug fix: The
session_durationmetric is now OpenMetrics-compliant (#14476, #14432). - π¦Β Bug fix: The main menu now has a visible border in dark mode (#14529).
Version 1.55.0
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.allowedOriginsΒ config 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 support for cachetools 7.x (#13839, #13801).
- β οΈΒ 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).
Version 1.54.0
Release date: February 4, 2026
Notable Changes
- π¨Β The
colorparameter ofst.area_chart,st.bar_chart,st.line_chart, andst.scatter_chartsupports the basic color palette which can be configured with theming (#13739, #12694). - β―οΈΒ You can use the new
theme.chartDivergingColorsto set default diverging colors for Plotly, Altair, and Vega-Lite charts. - πΒ You can configure the display of error help links with a new configuration option,
client.showErrorLinks(#13472, #11238). Thanks, karubian! - πΒ
st.logosupports Material icons and emojis (#13416). Thanks, rahuld109! - π₯·Β 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.dataframe(with selections)st.area_chartst.bar_chartst.line_chartst.scatter_chartst.altair_chartst.vegalite_chartst.pydeck_chartst.date_inputst.datetime_inputst.radiost.select_slider
- πΒ
ListColumnandMultiselectColumnlet users select the text of their pills for copying (#13663). - π»Β
st.experimental_get_query_paramsandst.experimental_set_query_paramshave been removed. Usest.query_paramsinstead. - β οΈΒ
st.experimental_userhas been removed. Usest.userinstead.
Other Changes
- π½Β The warning about the proposed removal of
.add_rows()shows in the browser. Please leave feedback (#13063). - π¦Β When a
.streamlit/config.tomlfile is created after a Streamlit app is running, the file watcher will recognize it without restarting the Streamlit server (#13625, #11296). - πΒ Bug fix: Path security validation improves protection against Server-Side Request Forgery (SSRF) and path traversal vulnerabilities (#13733).
- πΈοΈΒ Bug fix: Wildcard URLs display as
localhostin the browser URL and console output (#13720, #13712). - π¦Β Bug fix: Modals and drop-down menus don't collapse the sidebar (#13653).
- π¦Β Bug fix:
st.bar_chartdoesn't raise aKeyErrorwhen sorting melted data (#13695). - π¦Β Bug fix:
st.multiselectandst.selectboxdon't clear state when a custom class object is selected (#13648, #13646). - π¦ Β Bug fix: Transient nodes used for spinners will correctly anchor themselves in the Streamlit DOM to avoid an empty delta path (#13674).
- πͺ°Β Bug fix: Snowflake connections will re-initialize if closed (#13665).
- πͺ³Β Bug fix: Nested containers under a spinner don't raise a
Bad delta path indexerror (#13659, #13658). - π·οΈΒ Bug fix:
SnowflakeConnection.query()correctly passes theparamsargument to caching (#13652, #13644). - πΒ Bug fix:
client.toolbarMode="viewer"correctly hides developer options from the settings menu (#13623). - πΒ Bug fix: When using the experimental Starlette configuration, Streamlit auth can log users out of your identity provider and surface user tokens, consistent with recent updates (#13571).
- πΒ Bug fix: Streamlit will defensively not load packaged components with missing or invalid component names in their manifests (#13612).
- πͺ²Β Bug fix: The width of file chips in
st.chat_inputwas increased to reduce filename truncation (#13589). - πΒ Bug fix:
st.bar_chartdoesn't raise an error about y-axis minimum and maximum when the bars have all the same value (#13590, #13584).
Version 1.53.0
Release date: January 14, 2026
Highlights
- βοΈ You can create session-scoped caller's rights connections in Streamlit in Snowflake and other Snowpark Container Services environments.
- β Announcing experimental support for running Streamlit with Starlette with the new
server.useStarletteconfiguration option. - π Introducing
st.App, an experimental ASGI-compatible entry point that enables custom HTTP routes, middleware, lifecycle hooks, and integration with Python web frameworks like FastAPI and Starlette (#13537). - π You can expose OIDC ID and access tokens in
st.user.tokens(#12044). Thanks, velochy!
Notable Changes
- πͺ
st.logoutlogs users out of your identity provider, if supported by your OIDC setup (#12693). Thanks, velochy! - π To prevent unwanted stale elements, especially in chat layouts, Streamlit treats spinners as transient elements and doesn't include them in the element refresh that happens with reruns (#12826, #9239, #10199, #13166).
- π§© For custom components v2, style isolation is set in
st.components.v2.componentinstead of when an instance is mounted (#13518). - π¨ To access heading font size and weights in custom components without using JavaScript to parse an array, CSS custom properties in an app include individual properties for each heading font size and weight (#13268).
- βοΈ For custom components v2,
html,js, andcssare all fully optional (#13511). - π
BaseConnectionhas a new class method to scope connections globally or by session (#13506). - πΎ
st.cache_dataandst.cache_resourcecan be scoped to a session (#13482, #6703). - π§Ή
st.cache_resourcehas a new parameteron_releaseto use to clean up resources, like closing connections (#13439, #8674). - π·οΈ
st.multiselectdoesn't includeoptionsin widget identity when akeyis provided (#13448, #7855). - π’
st.number_inputdoesn't includeminandmaxin widget identity when akeyis provided (#13512, #11277). - π
st.selectboxdoesn't includeoptionsin widget identity when akeyis provided (#13383, #6352, #8496, #4854). - ποΈ You can format values for
st.sliderwith a newformatparameter (#13392, #13243). - πΌοΈ
st.dialoghas a newiconparameter to add an icon next to the dialog title (#13244, #13202). Thanks, KaranPradhan266! - βοΈ You can configure
st.data_editorto allow only adding or only deleting rows (#13228, #7091). - β‘οΈ You can display a button icon on the right instead of the left with a new
icon_positionparameter (#13150, #13069). Thanks, SiddhantSadangi! - βοΈ
st.columns,st.container, andst.spacesupport larger and smallergapandsizevalues (#13345). - π¦ You can configure the maximum file size for
st.file_uploaderandst.chat_inputwith a new parameter that overrides theserver.maxUploadSizeconfiguration option (#12816, #12692, #12579). Thanks, rishabhjain1712! - π You can configure the default width of the sidebar with
st.set_page_config(#12154, #11980). Thanks, jose-mindwayai! - π The
optionsparameter inst.select_slidersupports Markdown (#12960, #11774). Thanks, jensonjohnathon! - π The
deltaandvalueparameters inst.metricsupport Markdown (#13094, #11773). Thanks, jensonjohnathon! - π£ You can configure number format in
st.metric(#13193, #12229, #6951). - π You can set the color of
st.metricdelta indicators from the basic color palette (#13153, #4052, #6665).
Other Changes
- π You can exclude the port from your Streamlit auth redirect URI to use the current port (#12251, #12249). Thanks, velochy!
- π Various custom components v2 types were semantically renamed (#13515).
- π When an item is removed from
st.multiselect, the scroll position of the drop down is preserved (#13384, #13317). Thanks, kagawa0710! - π Pydantic sequences are treated as dataframe-like by Streamlit commands (#13348, #13344).
- π The logo displayed by
st.logolinks to the app's homepage (#13222, #13155). - β¨οΈ For improved accessibility, tooltips are keyboard focusable (#13379, #13330).
- β For improved accessibility, anchor links are keyboard focusable (#13378, #13329).
- πΊοΈ
st.jsondisplays a tooltip on hover for each element to show its full path (#13113, #13057). - π¬
st.chat_inputwas redesigned for improved style and accessibility (#13088, #13223, #13364, #13532, #13556, #13546, #13542, #13535, #13554, #13553, #13555, #13547). - π Various style updates for consistency (#13536, #13557).
- π
st.authis compatible with Authlib version 1.6.6 (#13333, #13335, #13424). - π½ Bug fix: Embedded apps respect the theme embedding option when they are configured with a custom theme (#13498, #13496). Thanks, ranmocy!
- π» Bug fix:
st.number_inputaccounts for floating point precision when incrementing and decrementing its value (#13484). - π¦ Bug fix:
st.altair_chartcorrectly displays HConcat and VConcat charts (#13423, #13410). - π¦ Bug fix:
st.selectboxis initialized correctly when its value is set from Session State (#13438, #13435). - π¦ Bug fix:
st.htmlindents list items correctly (#13437, #13426). - π Bug fix: A logger message for
SnowflakeConnectionreferences the correct URL to the Snowflake docs (#13363, #13361). - πΈοΈ Bug fix: Tooltip text with newlines renders correctly (#13365, #13339).
- π¦ Bug fix: The DOM elements within
st.spinnerare properly aligned when showing elapsed time (#13388, #13387). - π¦ Bug fix: Custom components v2 have the same cross-origin behavior as other elements in the app (#13376).
- π¦ Bug fix: CSS custom properties in custom components handle null or unset values correctly (#13240).
- π¦ Bug fix: Theme preference is persisted into new app sessions (#13306, #13280).
- πͺ° Bug fix:
st.dialogdoesn't show stale elements from a previous dialog (#13297, #10907). - πͺ³ Bug fix:
st.data_editorbehaves correctly when starting with a column ofNonevalues (#13309, #13305). - π·οΈ Bug fix: To correctly reflect edits to the theme configuration during development, theme settings are properly hashed (#13173).
- π Bug fix: In v2 custom components, app-level keyboard shortcuts (like
Rfor rerun) are disabled in typing contexts to prevent unintentional usage (#13264). - π Bug fix: Custom component v2 includes default values in component identity, unless a key is provided (#13266).
- π Bug fix: The sidebar navigation is correctly hidden when topbar navigation is used (#13227, #13224).
- πͺ² Bug fix:
st.logodisplays the logo correctly when an app uses top navigation (#13226, #13225). - π Bug fix: Error messages are clearer when width or height are invalidly set to
0(#13206, #12868).
Still have questions?
Our forums are full of helpful information and Streamlit experts.