2026 release notes

This page contains release notes for Streamlit versions released in 2026. For the latest version of Streamlit, see Release notes.

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).

Release date: May 28, 2026

Highlights

  • ๐ŸŒŸ Introducing parallel=True for @st.fragment, which lets fragments run concurrently for more responsive apps and background-style workflows (#15214).
  • ๐Ÿฟ Introducing st.pagination to 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.App now supports custom script error handling, letting you attach a custom exception handler to your app (#14972, #3426, #8713).
  • ๐Ÿ“ st.expander and st.status have a new type parameter for a more compact visual style (#14054, #13246).
  • ๐Ÿ‘ป The deprecated element.add_rows feature 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.markdown now blocks javascript: and vbscript: 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: blake2b hashing now uses usedforsecurity=False for FIPS-compatible environments (#15149, #15148). Thanks, andriykislitsyn!
  • ๐Ÿœ Bug fix: st.login cookies now restore 30-day persistence with a Max-Age value (#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 MismatchingStateError after 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_chart tooltips work again inside dialogs (#15191, #12390). Thanks, marawanokasha!
  • ๐Ÿชฐ Bug fix: st.button warns when a keyboard shortcut is reserved by the browser (#15217, #15216).
  • ๐Ÿฆ  Bug fix: st.markdown shows its help icon again when unsafe_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.selectbox no longer hides its first option when exactly seven options are selected (#14997, #14989).
  • ๐Ÿ•ธ๏ธ Bug fix: st.multiselect disables "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!

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.App for 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 with st.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, and sharing keyword arguments from st.plotly_chart and st.vega_lite_chart (#14800).
  • ๐Ÿ‘ป Removed the deprecated _get_websocket_headers function. Use st.context.headers instead (#14801).
  • ๐Ÿงช st.testing.v1.AppTest now supports st.pills, st.segmented_control, and st.dataframe key lookups (#14518, #11361, #11338).
  • ๐Ÿ”” Alert elements (st.info, st.warning, st.error, st.success) have a new title parameter for adding a bold header to alert messages (#14665, #12417).
  • ๐ŸŽจ st.menu_button and st.popover now hide the chevron when using menu-style icon-only labels (#14697).
  • ๐ŸŽฏ st.App is now available in the st namespace for programmatic app configuration (#14722).
  • ๐Ÿ”‘ st.App has a new secrets parameter to programmatically pass secrets instead of relying on secrets.toml files (#14861, #10543).
  • ๐Ÿค– Streamlit now bundles developing-with-streamlit AI agent skills in the pip package:
    • Core development skills for AI coding assistants (#14745).
    • App and theme templates for quick scaffolding (#14746).
  • ๐Ÿ’… st.video and st.map now have rounded corners matching other Streamlit elements (#14781, #12806).

Other Changes

  • ๐Ÿ› Bug fix: st.dataframe no longer crashes with pandas 3 ArrowStringArray columns (#14611, #14609).
  • ๐Ÿฆ‹ Bug fix: Custom component v1 serialization now correctly downcasts large Arrow types instead of failing (#14617, #14608).
  • ๐Ÿชฒ Bug fix: @st.cache_data and @st.cache_resource now chain the original exception in UnserializableReturnValueError for 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_editor correctly preserves None values 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.radio now retains selections when using format_func with custom option objects (#14815, #14814).
  • ๐Ÿชฐ Bug fix: st.bar_chart axis labels now correctly swap when horizontal=True (#14866, #14830).
  • ๐Ÿฆ  Bug fix: st.text_area with height="content" now sizes correctly on initial load (#14884, #14876).
  • ๐ŸฆŸ Bug fix: st.file_uploader no longer shows duplicate equivalent file extensions in the accepted types display (#14552, #11991).

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.selectbox and st.multiselect now support a filter_mode parameter that lets users search and filter options by typing (#14537, #6160, #7238).

Notable Changes

  • ๐Ÿ“Šย st.dataframe supports programmatically setting selections via the selection parameter (#13594, #10128).
  • ๐ŸŽฏย st.dataframe has a new "single-row-required" selection mode that always keeps exactly one row selected (#14288, #9253).
  • ๐Ÿ“ย st.dataframe column configuration now supports an alignment parameter for controlling text alignment in columns (#14333, #12106).
  • ๐Ÿ‘€ย The column visibility menu in st.dataframe is now always visible, making it easier to show and hide columns (#14336, #10649).
  • ๐ŸŽนย AudioColumn and VideoColumn are now available in st.column_config for displaying audio and video players directly in dataframes (#14032, #8345).
  • ๐Ÿย Streamlit now supports pandas 3.x (#13812, #13211).
  • ๐Ÿงญย st.navigation has a new expanded parameter to control how many sidebar items are visible before collapsing (#14051, #9646).
  • ๐Ÿ”—ย st.Page now accepts external URLs, allowing you to add links to external sites in the navigation sidebar (#13691, #9025). Thanks, t0k0shi!
  • ๐Ÿ–ผย st.table has new hide_index and hide_header parameters for cleaner table presentation (#14113, #8235, #9251).
  • โšกย st.link_button now supports an on_click callback that triggers a rerun before navigating (#14116, #7453).
  • ๐Ÿ“ย st.file_uploader and st.chat_input now accept file type shortcuts like "image", "audio", "video", and "document" (#14140).
  • ๐Ÿ“ย st.chat_input has a new height parameter 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.pills and st.segmented_control now have a required parameter to enforce that at least one option is always selected (#14414, #9870).
  • ๐Ÿ”„ย st.container has a new autoscroll parameter that automatically scrolls to the bottom as new content is added (#14502, #8836).
  • ๐Ÿงฉย st.tabs, st.expander, and st.popover now 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_uploader is 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).
  • ๐Ÿ“ฆย BidiComponentResult has been renamed to ComponentResult in the custom components v2 API (#14253).
  • โš™ย The _stcore/metrics endpoint 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_area with height="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: BidiComponentManager is 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.multiselect options are now restored (#14353, #14351).
  • ๐Ÿชณย Bug fix: server.port is 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 reactJsonViewCompat shim for the local dev server (#14391).
  • ๐ŸฆŸย Bug fix: st.exception links 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 AttributeDictionary for consistent dot-notation access (#14455, #14454).
  • ๐Ÿ•ธ๏ธย Bug fix: Streaming markdown with color directives no longer shows rendering artifacts (#14468, #14460).
  • ๐ŸŒย Bug fix: The session_duration metric is now OpenMetrics-compliant (#14476, #14432).
  • ๐ŸฆŽย Bug fix: The main menu now has a visible border in dark mode (#14529).

Release date: March 3, 2026

Highlights

  • ๐Ÿฟย Introducing dynamic containers: st.tabs, st.popover, and st.expander can rerun the app when they are opened or closed by setting the on_change parameter. If a key is also provided, you can programmatically open and close them, too.
  • ๐Ÿ–‡๏ธย Announcing widget binding! Most non-trigger widgets have a bind parameter to simplify syncing widget state with query parameters.

Notable Changes

  • ๐Ÿ”—ย st.image has a link parameter to make images clickable with HTTP/HTTPS URLs (#14139, #9836).
  • ๐Ÿฅทย st.Page has a visibility parameter 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.metric has a delta_description parameter to display descriptive text next to delta values (#13848, #13690).
  • ๐Ÿ“ย You can configure the font weight and size for st.metric with the new metricValueFontWeight and metricValueFontSize configuration options (#13550, #12300). Thanks, kagawa0710!
  • ๐Ÿ“ย st.table has height and width parameters (#13850, #10775, #10820).
  • ๐Ÿ“ˆย st.altair_chart and st.vega_lite_chart support 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.markdown accepts width="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-origin postMessage (#13829, #6389).

Other Changes

  • ๐Ÿ–‹๏ธย Page titles in st.Page and section labels in st.navigation support Markdown (#14053, #14010, #11771).
  • ๐Ÿงนย Common block elements in widget labels are auto-escaped for convenience (#13887, #7359).
  • ๐Ÿ„โ€โ™‚๏ธย st.multiselect lets users select all options or all currently filtered options with a single click (#13795, #4714).
  • ๐Ÿ’…ย Improved the design of st.multiselect and st.selectbox (#13004). Thanks, rishi-kumar0612!
  • โ€ผ๏ธย All widget drop-downs were restyled for consistency (#13796, #13797, #13798).
  • โ†”๏ธย For better accessibility, st.tabs displays navigation arrows when the tabs overflow their container horizontally (#13987, #5552).
  • ๐Ÿ“ย The app menu was redesigned (#14101):
    • Improved accessibility (#13878, #14131).
    • Added a copy button for the Streamlit version (#13791).
    • Removed the settings menu, surfacing the theme selector and rerun settings in the main menu (#13937, #13988, #14048).
  • ๐Ÿ”ย Improved streamlit config show output to better distinguish theme value sources (#13761).
  • โ™ฅ๏ธย To improve behavior in hosted environments, the Streamlit server acknowledges client heartbeats (#13810).
  • ๐Ÿ”ฃย Extended sprintf to support , as a thousands separator in NumberColumn, ProgressColumn, st.number_input, st.slider, and st.metric (#13284, #1301).
  • โฌ†๏ธย Added support for cachetools 7.x (#13839, #13801).
  • โ˜ ๏ธย Added a deprecation notice to SnowparkConnection for better visibility (#14125).
  • ๐Ÿฆ€ย Bug fix: st.spinner avoids a race condition when used right before a cache miss (#13849, #13634).
  • ๐ŸฆŽย Bug fix: st.date_input values are normalized in Session State to prevent a type error (#14123, #14109).
  • ๐ŸŒย Bug fix: st.metric with 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_control has consistent border styling on hover (#14067, #12802).
  • ๐Ÿฆ‚ย Bug fix: st.date_input and st.datetime_input remove validation marks when they are cleared (#14066, #14052).
  • ๐ŸฆŸย Bug fix: Fixed a rendering regression for vconcat charts in Altair with faceted children (#14065, #14050).
  • ๐Ÿฆ ย Bug fix: st.Page raised 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.tabs retain their state when rendered after a transitional element like st.spinner (#14023, #14018).
  • ๐Ÿ•ท๏ธย Bug fix: Treemap and sunburst Plotly charts support selections (#13935, #9001).
  • ๐Ÿžย Bug fix: Fixed a width regression for layered vconcat charts in Altair (#13980, #13974).
  • ๐Ÿย Bug fix: st.multiselect raises an exception when max_selections isn'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_slider doesn't apply its format function twice in AppTest (#13837, #13832).
  • ๐Ÿ›ย Bug fix: Content in collapsed expanders is not included in page search (#13818).

Release date: February 4, 2026

Notable Changes

  • ๐ŸŽจย The color parameter of st.area_chart, st.bar_chart, st.line_chart, and st.scatter_chart supports the basic color palette which can be configured with theming (#13739, #12694).
  • โ˜ฏ๏ธย You can use the new theme.chartDivergingColors to 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.logo supports 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_chart
    • st.bar_chart
    • st.line_chart
    • st.scatter_chart
    • st.altair_chart
    • st.vegalite_chart
    • st.pydeck_chart
    • st.date_input
    • st.datetime_input
    • st.radio
    • st.select_slider
  • ๐Ÿ‘†ย ListColumn and MultiselectColumn let users select the text of their pills for copying (#13663).
  • ๐Ÿ‘ปย st.experimental_get_query_params and st.experimental_set_query_params have been removed. Use st.query_params instead.
  • โ˜ ๏ธย st.experimental_user has been removed. Use st.user instead.

Other Changes

  • ๐Ÿ‘ฝย The warning about the proposed removal of .add_rows() shows in the browser. Please leave feedback (#13063).
  • ๐ŸฆŽย When a .streamlit/config.toml file 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 localhost in 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_chart doesn't raise a KeyError when sorting melted data (#13695).
  • ๐ŸฆŸย Bug fix: st.multiselect and st.selectbox don'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 index error (#13659, #13658).
  • ๐Ÿ•ท๏ธย Bug fix: SnowflakeConnection.query() correctly passes the params argument 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_input was increased to reduce filename truncation (#13589).
  • ๐Ÿ›ย Bug fix: st.bar_chart doesn't raise an error about y-axis minimum and maximum when the bars have all the same value (#13590, #13584).

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.useStarlette configuration 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.logout logs 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.component instead 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, and css are all fully optional (#13511).
  • ๐Ÿ”— BaseConnection has a new class method to scope connections globally or by session (#13506).
  • ๐Ÿ’พ st.cache_data and st.cache_resource can be scoped to a session (#13482, #6703).
  • ๐Ÿงน st.cache_resource has a new parameter on_release to use to clean up resources, like closing connections (#13439, #8674).
  • ๐Ÿท๏ธ st.multiselect doesn't include options in widget identity when a key is provided (#13448, #7855).
  • ๐Ÿ”ข st.number_input doesn't include min and max in widget identity when a key is provided (#13512, #11277).
  • ๐Ÿ“‹ st.selectbox doesn't include options in widget identity when a key is provided (#13383, #6352, #8496, #4854).
  • ๐ŸŽš๏ธ You can format values for st.slider with a new format parameter (#13392, #13243).
  • ๐Ÿ–ผ๏ธ st.dialog has a new icon parameter to add an icon next to the dialog title (#13244, #13202). Thanks, KaranPradhan266!
  • โœ๏ธ You can configure st.data_editor to 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_position parameter (#13150, #13069). Thanks, SiddhantSadangi!
  • โ†”๏ธ st.columns, st.container, and st.space support larger and smaller gap and size values (#13345).
  • ๐Ÿ“ฆ You can configure the maximum file size for st.file_uploader and st.chat_input with a new parameter that overrides the server.maxUploadSize configuration 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 options parameter in st.select_slider supports Markdown (#12960, #11774). Thanks, jensonjohnathon!
  • ๐Ÿ“Š The delta and value parameters in st.metric support Markdown (#13094, #11773). Thanks, jensonjohnathon!
  • ๐Ÿ”ฃ You can configure number format in st.metric (#13193, #12229, #6951).
  • ๐ŸŒˆ You can set the color of st.metric delta 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.logo links 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.json displays a tooltip on hover for each element to show its full path (#13113, #13057).
  • ๐Ÿ’ฌ st.chat_input was 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.auth is 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_input accounts for floating point precision when incrementing and decrementing its value (#13484).
  • ๐Ÿฆ€ Bug fix: st.altair_chart correctly displays HConcat and VConcat charts (#13423, #13410).
  • ๐Ÿฆ‹ Bug fix: st.selectbox is initialized correctly when its value is set from Session State (#13438, #13435).
  • ๐ŸฆŽ Bug fix: st.html indents list items correctly (#13437, #13426).
  • ๐ŸŒ Bug fix: A logger message for SnowflakeConnection references 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.spinner are 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.dialog doesn't show stale elements from a previous dialog (#13297, #10907).
  • ๐Ÿชณ Bug fix: st.data_editor behaves correctly when starting with a column of None values (#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 R for 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.logo displays 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).
forum

Still have questions?

Our forums are full of helpful information and Streamlit experts.