Release date: September 15, 2026
Highlights
Introducing st.echarts_chart, a new command that renders Apache ECharts options with Streamlit theming, and accepts dicts, JSON strings, orpyechartscharts (#16785).
Streamlit now supports async/awaitin app code, so you can use async libraries like httpx, aiohttp, and asyncpg directly (#16167, #744).st.cache_dataandst.cache_resourcework withasync deffunctions and cache the awaited result (#16168).
Announcing live updates for st.text_input: setlive=Trueand the widget commits while the user types, after a short pause (#16662, #4553).
Notable Changes
The on_change="ignore"mode reaches three more widgets, so a new value updates the widget and any bound query parameter without a rerun:
The mapbox.tokenconfig option is removed. Set theMAPBOX_API_KEYenvironment variable, or pass PyDeckapi_keysinstead (#16774, #16676, #16678).
Other Changes
Bug fix: st.dialoghides a leftover dialog as soon as the next full-app run starts, sost.rerun()closes the modal before later blocking work (#16901, #9405).
Bug fix: st.dataframeandst.data_editorconvert list columns that PyArrow cannot serialize to strings, instead of raising when the nesting levels differ (#16838, #9380).
Bug fix: Widgets after st.rerunkeep the values the user selected, instead of resetting to their defaults (#16762, #3533).
Bug fix: Altair mark_geoshapecharts render on first view, instead of showing an empty plot (#16886, #2910).
Bug fix: st.pydeck_charthonors pydeckviews, so OrbitView, GlobeView, andmap_provider=Nonerender as specified (#16819, #2590, #2302, #9933).
Bug fix: st.pydeck_chartrenders layers that declare deck.glextensions, instead of showing an error box (#16823).
Bug fix: Altair binding_radioandbinding_selectstay a single widget whenon_selectis enabled (#16809, #8765).
Bug fix: Vega and Altair bind=controls use Streamlit fonts, colors, and focus rings (#16813).
Bug fix: Vega-Lite legend titles get more padding under the Streamlit theme, so the title is not stuck to the first entry (#16818).
Bug fix: Elements stay dimmed after you press Stop, until the run actually finishes (#16839, #9904).
Bug fix: st.query_paramsskips a browser history entry when the query string does not change, so the Back button leaves the app (#16831, #9878).
Bug fix: Custom Components v2 keep in-flight trigger values, so the value reaches Python instead of the script rerunning without it (#16833, #16732).
Bug fix: st.download_buttonencodes filenames that a quotedContent-Dispositionheader cannot hold, so the browser saves the full name (#16646, #16631).
Bug fix: st.sliderswaps reversedmin_valueandmax_valuebounds, instead of truncating the range or raising an error about numbers you never passed (#16716, #16675).
Bug fix: st.number_inputraises a clear error whenmin_valueis greater thanmax_value(#16895).
Bug fix: Widgets raise an actionable error for an on_changemode they do not support (#16889).
Bug fix: Streamlit classifies invalid icon=values more precisely, so an empty value means no icon and a URL raises an image error (#16900).
Bug fix: The error for a nested url_pathnames the invalid path and links to the issue you can upvote (#16896).
Bug fix: Exception traces in the browser hide Streamlit package frames, keep your st.*call site, and show chained exceptions (#16718).
Bug fix: Coalesced reruns dispatch only the callbacks that have not run yet (#16765).
Bug fix: st.buttonand similar controls wait 500ms before they show a help tooltip on hover, so a pointer that crosses a control does not open one (#16794, #8686).
Bug fix: st.radioexposes option captions as descriptions, so assistive tech reads the option text as the name (#16811).
Bug fix: st.cache_resourcerejects asyncvalidateandon_releasecallbacks, instead of discarding the awaitable they return (#16860).
Bug fix: AppTesttreats unknown element subtypes asUnknownElement, so.run()finishes against a newer Streamlit (#16835).
Bug fix: AppTestraisesAppTestErrorwhen you callset_value()orclick()on an element with no typed wrapper (#16837).
Bug fix: AppTesttreats an emptyst.chat_inputsubmit as a real value, and printsChatInputValuewithout an error whenaccept_file=True(#16857).
Bug fix: AppTest.session_statesupports the same dict methods asst.session_state, which areget,keys,items,values,to_dict,len, and iteration (#16897).
Bug fix: streamlit skillsinstalls the bundled agent skills where Claude Code reads them, and reports an incomplete install instead of success (#16394).