Highlights
-
Introducing st.datetime_inputto set date and time in a single widget. -
To avoid blocking your script, you can pass a callable to st.download_buttonfor on-demand download generation (#12942, #5053). -
st.chat_inputcan optionally accept audio input (#12836, #13054).
Notable Changes
-
You can configure keyboard shortcuts for buttons (#12975, #1291). -
You can now pass query parameters to st.switch_pageandst.page_link(#13027, #8102, #8112, #13093). -
st.htmlhas a newunsafe_allow_javascriptparameter to execute JavaScript (#12918). -
st.metrichas a newdelta_arrowparameter to configure the visibility and orientation of the delta arrow (#12982, #4775). -
You can configure the horizontal alignment of st.markdown,st.caption,st.title,st.header,st.subheader, andst.textwith a newtext_alignmentparameter (#13032, #4109, #13034, #13036). -
You can use a spinner everywhere you can set an iconand in theavatarparameter ofst.chat_message. The spinner can’t be used as a page favicon (#13045, #6415). -
You can now add tooltips to st.badge(#12897, #12878). Thanks, marcolanfranchi! -
You can configure placeholder text for null values in st.dataframeandst.data_editorwith a newplaceholderparameter (#12968, #7360). -
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.file_uploader -
st.camera_input
-
-
st.plotly_charthas a height parameter to use with flex containers (#12593). -
↔️
st.container,st.dataframe, andst.data_editorsupportwidth="content"(#12848, #12875, #12391). -
Streamlit supports Python 3.14 and Vega-Altair 6! -
st.bokeh_charthas been removed. Use thestreamlit-bokehcustom component instead. -
**kwargsis deprecated inst.vega_lite_chart(#13141). -
The .add_rows()method is under consideration for removal. Please leave feedback (#13063). -
We’re improving community contributions by using a public workflow for discussing feature specs (#12248).
Other Changes
-
For better performance, Streamlit uses uvloopif it’s installed (#13047). -
For improved performance, Markdown plugins are lazy loaded (#13152). -
To improve load times, we reduced the bundle size (#13071, #13077, #13099, #13115, #13128). -
To improve performance, we’ve refactored session context data (#12788, #12789, #12790, #12791). -
The hovering performance of st.line_chartwas improved (#13156, #13154). -
st.metricwas optimized to prevent poor hovering performance with large data sets (#12983). -
The packagingPython dependency is no longer version-capped (#13073). -
For clarity, Streamlit logs a warning if you try to hide a non-range index when using st.data_editorwithnum_rows="dynamic". A non-range index must be editable to add rows (#12978, #8263). -
Bug fix: Streamlit auth raises a warning instead of an error when browser back navigation revisits a consumed OAuth callback (#13127, #13101). -
Bug fix: The WebSocket timeout was increased on Android to improve st.file_uploaderperformance (#13132, #11419). -
Bug fix: Query parameters are preserved when using browser back and forward navigation (#13129, #9279). -
Bug fix: For custom components v2, the frontend key is correctly computed to be stable if it has a key in Python and otherwise change when its parameters change (#12950). -
Bug fix: Empty code blocks in Markdown don’t display “undefined” (#13074, #12986). Thanks, ashm-dev! -
Bug fix: st.feedbackis prevented from wrapping (#12970, #12068). -
Bug fix: Custom components v2 don’t raise a warning when placeholders are replaced as a result of the initial manifest scan (#13043, #13042). -
Bug fix: st.audio_inputhas the correct padding for its waveform (#13010). -
Bug fix: The date and time icons in st.data_editorare visible in dark mode (#12994, #12852). Thanks, aritradhabal! -
Bug fix: st.pillsandst.segmented_controlwrap correctly whenwidth="content"(#12969, #12067, #12879, #12857). -
Bug fix: st.color_pickerhas a minimum width to prevent a pixel width below its intrinsic size (#12962, #12872). -
Bug fix: Disabled widgets hide their borders (#12949). -
st.audio_inputandst.chat_inputshow a clearer message when microphone permissions are insufficient (#12914). -
Bug fix: st.navigationuses the sidebar font and Streamlit falls back to its built-in fonts if a font can’t be found (#12948). -
Bug fix: MultiselectColumndoesn’t raise aValueErrorwhen adding new rows inst.data_editor(#12860, #12936, #12815). Thanks, kkchemboli! -
Bug fix: MultiselectColumnworks correctly when the underlying dataframe has an empty column (#12935, #12842). -
Bug fix: st.text_areaavoids negative height calculations that produce invalid CSS (#12891, #12867).