2025 release notes

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

Release date: March 25, 2025

Highlights

  • 💈 Introducing advanced theming options! Use an assortment of configuration options to customize the appearance of your app. Change the fonts, colors, and roundness of your app without CSS.
  • 👮 Introducing st.badge to insert a colored badge element. You can also include badges in Markdown using a new directive.
  • 🏗️ Use streamlit init in your terminal to create all the local files you need for a new Streamlit app.

Notable Changes

  • 🤖 st.exception includes links to open Google or ChatGPT with the contents of the exception. This includes uncaught exceptions displayed in the app.
  • 🗺️ You can access the user's locale through st.context (#10563).

Other Changes

  • 📄 When using a pages/ directory to automatically generate a multipage app, no pages (including the entrypoint file) can have the same inferred URL pathname (#10276).
  • 🏎️ To improve performance, Streamlit uses the React 18 createRoot API for its frontend (#10453).
  • 📝 To improve compatibility with AI tools, script compilation errors are logged when logger.level="error" and not just when logger.level="debug" (#10826).
  • 🪵 Streamlit automatically enables more detailed logging if rich is installed (#10650).
  • 🔢 st.slider and st.number_input raise an error when assigned a value in excess of a declared minimum or maximum (#9964, #9342).
  • 🛠️ st.table support pandas Styler.set_tooltips() (#10561, #10553).
  • ℹ️ Material symbols have been updated to the latest icon set (#10813, #10717).
  • 🦋 Visual tweaks to headers (#10599).
  • 🦀 Bug fix: st.html displays correctly when used inside st.tabs (#10825, #10815).
  • 🦎 Bug fix: For backwards compatibility, theme.font="sans serfi" is internally converted to the new theme.font="sans-serif" (#10789, #10786).
  • 🐌 Bug fix: When using st.secrets, if Streamlit can't find the secrets.toml file, it will raise a FileNotFoundError (#10508, #8559).
  • 🕸️ Bug fix: st.secrets raises a clear TypeError if you try to assign a value to an attribute (#10698, #10107).
  • 🦗 Bug fix: In single-page apps, st.page_link does not highlight external links as if they are the current page (#10690, #10689).
  • 🦂 Bug fix: st.poppover displays at the correct width when using the help parameter (#10709, #10693).
  • 🦟 Bug fix: All components (and custom components) that read their width from the DOM initially load with a width of -1 px to prevent flickering (#10712, #10672, #10663, #10644).
  • 🦠 Bug fix: When st.number_input is configured to use integers, the default minimum and maximum values will prevent integer overflow (#10655, #6740).
  • 🪰 Bug fix: st.navigation uses immutable types to prevent mypy errors (#10670).
  • 🪳 Bug fix: Custom components correctly inherit font from theme configuration (#10661, #10660).
  • 🕷️ Bug fix: Dataframes correctly support Dask data objects (#10662).
  • 🐞 Bug fix: Button widths are correct when using the help parameter (#10658, #10648, #10656).
  • 🐝 Bug fix: Scrolling is disabled when hovering over st.number_input to prevent accidental value changes (#10642, #8867).
  • 🐜 Bug fix: st.chat_input gives a clear error in the UI when the file size limit is exceeded (#10530).
  • 🪲 Bug fix: The favicon and Markdown emojis use the same SVG emoji source for consistency (#10539, #6822).
  • 🐛 Bug fix: The dataframe search bar is more responsive to width (#10534, #10532).

Release date: March 4, 2025

Highlights

  • 📁 Announcing the option to accept files with st.chat_input!
  • 📒 Introducing a new column type for column configuration! Use JsonColumn to show JSON-compatible objects.

Notable Changes

Other Changes

  • 🥷 Users can hide dataframe columns (#10264, #6870).
  • 📅 Users can change the format of numbers, dates, and times in dataframes (#10420).
  • ↔️ Users can auto-size column widths (#10476).
  • 🐻‍❄️ Streamlit supports Polars dataframe and series hashing (#10408, #10347).
  • ☠️ rich is no longer a required dependency for Streamlit (#10320).
  • 🦋 st.file_uploader has a better display format in narrow containers (#10272).
  • 🦎 Bug fix: Tabs are prevented from having a width of zero to prevent flickering (#10533).
  • 🐌 Bug fix: Column order is correctly displayed when set in column configuration (#10445, #10442).
  • 🕸️ Bug fix: We updated dataframe null handling to prevent deprecation warnings (#10484).
  • 🦗 Bug fix: Elapsed time doesn't overflow for st.audio_input (#10410, #10373). Thanks, ashm-dev!
  • 🦂 Bug fix: st.altair_chart does not show an incorrect "true" tooltip when the user makes a selection (#10456, #10448).
  • 🦟 Bug fix: Streamlit does not raise a RuntimeError when an asyncio event loop is not already running (#10455, #10452).
  • 🦠 Bug fix: The key for an internal MIME type is set correctly to avoid a browser warning (#10404).
  • 🪰 Bug fix: st.data_editor automatically scrolls to the bottom when a user adds a row (#10405, #10351).
  • 🪳 Bug fix: Tooltips are suppressed on user-added rows in st.data_editor to prevent erroneous warnings (#10398).
  • 🕷️ Bug fix: st.logo displays consistently when used with fragments and dialogs (#10377, #10350, #10382).
  • 🐞 Bug fix: st.graphviz_chart has rounded corners for consistent style (#10224).
  • 🐝 Bug fix: Streamlit raises a clear exception when an underscore is used in provider for st.login (#10360, #10356).
  • 🐜 Bug fix: The dataframe column menu displays correctly inside dialogs (#10359, #10357).
  • 🪲 Bug fix: Exception handling was adjusted for improved compatibility with Cython (#10354, #10353). Thanks, tutu-sol!
  • 🐛 Bug fix: st.pills and st.segmented_control have consistent font sizes across browsers (#10349).

Release date: February 4, 2025

Highlights

  • 👩‍💻 Introducing st.login() and st.logout() to authenticate users with any OpenID Connect provider.

Notable Changes

Other Changes

  • 📌 Dataframes have column menus for users to sort and pin columns (#10206).
  • 🚦 Dataframes support categorical indices (#9647, #10195).
  • 🛸 Dataframes show a hover highlight on rows (#8096, #10104).
  • ⚠️ When dataframes have cell values that are inconsistent with their configured type, Streamlit shows a tooltip describing the error (#8253, #9899).
  • ➰ If there is an existing asyncio event loop when a Streamlit app starts, the app will reuse it instead of creating a new one (#10164). Thanks, DeltaGa!
  • 🖼️ Streamlit recognizes pyspark.sql.connect.dataframe.DataFrame objects as dataframes (#9953, #9954). Thanks, OSalama!
  • 😃 We've updated emoji validation for new emojis (#10149).
  • 🔣 Material Symbols have been updated with the latest icons (#10247).
  • 💅 Visual tweaks and improvements (#8705, #9823, #10047, #10048, #10083, #10087, #10225).
  • ⭕ st.image displays rounded corners for consistent design (#9999).
  • 🎩 Bug fix: Top margin is applied correctly in st.columns (#10265, #10268).
  • 💩 Bug fix: react-syntax-highlighter is aliased to prevent rendering errors in st.code (#10231, #10244).
  • 🧹 Bug fix: We improved error messages for st.query_params (#10111, #10237).
  • 🪱 Bug fix: Linting for st.altair_chart recognizes all Altair chart types (#10202).
  • ↗️ Bug fix: st.dataframe supports raw Arrow data (#5606, #10191).
  • 🐍 Bug fix: st.navigation and st.page_link work when running in pure Python tests (#10163).
  • ☠️ Bug fix: Retries were added to prevent a possible race condition when files are removed while Streamlit is running (#10148).
  • 👽 Bug fix: When printing an app, st.logo will only print once (#10165, #10171).
  • 🌍 Bug fix: Material icons are marked to prevent translation (#10168, #10174).
  • 👻 Bug fix: st.vega_lite_chart correctly caches and updates its data (#6689, #10125).
  • 🦀 Bug fix: When a fragment ID is not found, Streamlit logs a warning but doesn't raise an error (#9921, #10130).
  • 🦋 Bug fix: The label on st.expander correctly fades when stale (#10085).
  • 🦎 Bug fix: st.date_input provides better type hinting for its return value (#9477, #9620). Thanks, pranaybattu!
  • 🐌 Bug fix: In dataframes, small float values display their first significant figure instead of displaying as 0 (#10060).
  • 🕸️ Bug fix: When rich is installed, errors are only logged once. (#10097).
  • 🦗 Bug fix: st.text preserves whitespace (#10055, #10062).
  • 🦂 Bug fix: Dataframe width is not ignored when height is changed (#9762, #10036).
  • 🦟 Bug fix: Multi index columns correctly handle empty labels (#9749, #10035).
  • 🦠 Bug fix: Pinned columns respect column_order in when configured in st.dataframe (#9997, #10034).
  • 🪰 Bug fix: Tooltips don't overflow to the left or right (#9288, #9452, #9983).
  • 🪳 Bug fix: Disabled feedback widgets correctly show their value (#10030).
  • 🕷️ Bug fix: Widgets correctly submit values if a user edits the value and immediately clicks a button (#10007, #10018).
  • 🐞 Bug fix: Some MIME types have been hardcoded to protect against browser misconfiguration (#10004, #10010).
  • 🐝 Bug fix: Files that unnecessarily inflated Streamlit's installation size were removed (#10008, #10011).
  • 🐜 Bug fix: st.date_input gives the correct type hint for the value parameter (#10005, #10006).
  • 🪲 Bug fix: st.write passes to st.html when ._repr_html() is present for an object (#9910).
  • 🐛 Bug fix: st.html preserves target=_blank if set in an HTML string (#9972, #9994).
forum

Still have questions?

Our forums are full of helpful information and Streamlit experts.