Notable Changes
st.metricandst.columnshave a parameter to show an optional border (#9927, #9928).
Text and background color in Markdown can use the “primary” color from the theme.primaryColorconfiguration option (#9676).
You can freeze columns with column configuration to make them always visible when scrolling horizontally (#9535, #7078).
The typeparameter for buttons accepts a new option,"tertiary"(#9923).
Streamlit supports pathlib.Pathobjects everywhere you can use a string path (#9711, #9783).
st.date_inputandst.time_inputaccept ISO formatted strings for initial values (#9753).
st.write_streamaccepts async generators, which it converts internally to sync generators (#8724, #8161).
The client.showErrorDetailsconfiguration option has additional values to show or hide more information (#9909).
When Streamlit shows stack traces in the app for uncaught exceptions, internal code is omitted or reduced for easier debugging (#9913).
st.line_chartshows tooltips for the nearest point on hover (#9674).
st.htmlwill attempt to convert non-string objects with._repr_html_()before falling back tostr()(#9877).
Streamlit supports Python 3.13 and no longer supports Python 3.8 (#9635).
Other Changes
Material Symbols have been updated with the latest icons (#9813, #9810).
Streamlit supports Watchdog version 6 (#9785). Thanks, RubenVanEldik.
Bug fix: Streamlit only shows cached function spinners on cache misses and doesn’t show spinners for nested cached functions (#9956, #9951).
Bug fix: Streamlit’s audio buffer handles channels better to correctly play audio recordings in Firefox (#9885, #9799).
Bug fix: URL patterns are matched correctly to allow Community Cloud developer tools to display correctly in Firefox (#9849, #9848).
Bug fix: Corrected a performance and alignment problem with containers (#9901, #9456, #9560).
Bug fix: st.rerunwill raise an error if an invalidscopeis passed to it (#9911, #9908).
Bug fix: Dataframe toolbars show correctly in dialogs (#9897, #9461).
Bug fix: LinkColumnregex fordisplay_textuses the correct URI decoding (#9895, #9893).
Bug fix: st.dataframehas correct type hinting whenon_selection="ignore"(#9898, #9669).
Bug fix: Padding is applied consistently for wide and centered layout mode (#9882, #9707).
Bug fix: st.graphviz_chartis displayed correctly whenuse_container_width=True(#9867, #9866).
Bug fix: The overloaded definitions of st.pillsandst.segmented_controluse the correct selection-mode default (#9801). Thanks, RubenVanEldik!
Bug fix: st.text_area(and other widgets) are correctly submitted in a form when usingCtrl+Enter(#9847, #9841).
Bug Fix: st.writerendersDeltaGeneratorobjects withst.help(#9828, #9827).
Bug fix: st.text_areacorrectly matches the value in Session State when used with a key (#9829, #9825).
Bug fix: st.text_inputdoes not trigger a rerun when a user submits an unchanged value (#9826).
Bug fix: Improved styling for st.exceptionto fix overflow and incorrect padding (#9818, #9817, #9816).
Bug fix: Large dataframe don’t overflow and cover the dataframe toolbar in fullscreen mode (#9803, #9798).
Bug fix: st.audio_inputshows the correct time on recording in time zones with a half-hour offset (#9791, #9631).
Bug fix: In iOS, st.number_inputshows a number pad instead of a keyboard when in focus (#9766, #9763).
Bug fix: Widget keys containing hyphens are correctly added to HTML classes in the DOM with an st-key-prefix (#9793).
Bug fix: Audio files created by st.audio_inputinclude a timestamp to ensure unique file names (#9768).
Bug fix: Double slash URL pathnames do not create a 301 redirect (#9754, #9690).


