Release notes

This page lists highlights, bug fixes, and known issues for the latest release of Streamlit. If you're looking for information about nightly releases or experimental features, see Pre-release features.

star

Tip

To upgrade to the latest version of Streamlit, run:

pip install --upgrade streamlit

Release date: December 3, 2025

Highlights

Notable Changes

  • 🎹 You can configure keyboard shortcuts for buttons (#12975, #1291).
  • ❓ You can now pass query parameters to st.switch_page and st.page_link (#13027, #8102, #8112, #13093).
  • 〰️ st.html has a new unsafe_allow_javascript parameter to execute JavaScript (#12918).
  • ⬆️ st.metric has a new delta_arrow parameter 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, and st.text with a new text_alignment parameter (#13032, #4109, #13034, #13036).
  • πŸŒ€ You can use a spinner everywhere you can set an icon and in the avatar parameter of st.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.dataframe and st.data_editor with a new placeholder parameter (#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_chart has a height parameter to use with flex containers (#12593).
  • ↔️ st.container, st.dataframe, and st.data_editor support width="content" (#12848, #12875, #12391).
  • 🐍 Streamlit supports Python 3.14 and Vega-Altair 6!
  • πŸ‘» st.bokeh_chart has been removed. Use the streamlit-bokeh custom component instead.
  • ☠️ **kwargs is deprecated in st.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 uvloop if 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_chart was improved (#13156, #13154).
  • 🧹 st.metric was optimized to prevent poor hovering performance with large data sets (#12983).
  • πŸ‘½ The packaging Python 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_editor with num_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_uploader performance (#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.feedback is 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_input has the correct padding for its waveform (#13010).
  • 🦠 Bug fix: The date and time icons in st.data_editor are visible in dark mode (#12994, #12852). Thanks, aritradhabal!
  • πŸͺ° Bug fix: st.pills and st.segmented_control wrap correctly when width="content" (#12969, #12067, #12879, #12857).
  • πŸͺ³ Bug fix: st.color_picker has a minimum width to prevent a pixel width below its intrinsic size (#12962, #12872).
  • πŸ•·οΈ Bug fix: Disabled widgets hide their borders (#12949).
  • 🐞 st.audio_input and st.chat_input show a clearer message when microphone permissions are insufficient (#12914).
  • 🐝 Bug fix: st.navigation uses the sidebar font and Streamlit falls back to its built-in fonts if a font can't be found (#12948).
  • 🐜 Bug fix: MultiselectColumn doesn't raise a ValueError when adding new rows in st.data_editor (#12860, #12936, #12815). Thanks, kkchemboli!
  • πŸͺ² Bug fix: MultiselectColumn works correctly when the underlying dataframe has an empty column (#12935, #12842).
  • πŸ› Bug fix: st.text_area avoids negative height calculations that produce invalid CSS (#12891, #12867).
forum

Still have questions?

Our forums are full of helpful information and Streamlit experts.