Highlights
Introducing st.login()andst.logout()to authenticate users with any OpenID Connect provider.
Notable Changes
st.tablesupports Markdown (#8785, #10088).
st.spinnercan show elapsed time withshow_time=True(#6805, #10072).
st.imagesupports Markdown in thecaptionparameter (#6808, #10075).
st.codehas aheightparameter (#7418, #10080).- ↔️ Most charts default to using
use_container_width=True(#10064).
SnowflakeConnectionwas updated to match the current Snowflake API, which changes its handling of keyword arguments in some cases (#10122).
Users can drag and drop dataframe columns to rearrange them (#8796, #10099).
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.DataFrameobjects 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.imagedisplays rounded corners for consistent design (#9999).
Bug fix: Top margin is applied correctly in st.columns(#10265, #10268).
Bug fix: react-syntax-highlighteris aliased to prevent rendering errors inst.code(#10231, #10244).
Bug fix: We improved error messages for st.query_params(#10111, #10237).
Bug fix: Linting for st.altair_chartrecognizes all Altair chart types (#10202).
Bug fix: st.dataframesupports raw Arrow data (#5606, #10191).
Bug fix: st.navigationandst.page_linkwork 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.logowill only print once (#10165, #10171).
Bug fix: Material icons are marked to prevent translation (#10168, #10174).
Bug fix: st.vega_lite_chartcorrectly 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.expandercorrectly fades when stale (#10085).
Bug fix: st.date_inputprovides 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 richis installed, errors are only logged once. (#10097).
Bug fix: st.textpreserves whitespace (#10055, #10062).
Bug fix: Dataframe widthis not ignored whenheightis changed (#9762, #10036).
Bug fix: Multi index columns correctly handle empty labels (#9749, #10035).
Bug fix: Pinned columns respect column_orderin when configured inst.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_inputgives the correct type hint for thevalueparameter (#10005, #10006).
Bug fix: st.writepasses tost.htmlwhen._repr_html()is present for an object (#9910).
Bug fix: st.htmlpreservestarget=_blankif set in an HTML string (#9972, #9994).

