What's Changed
New Features 🎉
- [feature] Add
on_change="ignore"mode to st.number_input by @lukasmasuch in #16649 - [fix] Support asyncio.get_event_loop() in scripts by @sfc-gh-lwilby-1 in #16167
- [feature] Add live parameter to st.text_input by @lukasmasuch in #16662
- [feature] Add st.echarts_chart for native Apache ECharts support by @lukasmasuch in #16785
- [feature] Async-aware st.cache_data and st.cache_resource by @sfc-gh-lwilby-1 in #16168
- [feature] Add
on_change="ignore"mode to st.select_slider by @lukasmasuch in #16776 - [feature] Add
on_change="ignore"mode to st.selectbox by @lukasmasuch in #16862
Bug Fixes 🐛
- [fix] Keep widget values after body-level st.rerun by @lukasmasuch in #16762
- [fix] Remove expired mapbox.token config option by @lukasmasuch in #16774
- [fix] Delay button help tooltips on hover by @lukasmasuch in #16794
- [fix] Prevent duplicate Altair bind widgets with on_select by @lukasmasuch in #16809
- [fix] Theme Altair parameter-binding widgets by @lukasmasuch in #16813
- [fix] Register deck.gl layer extensions in pydeck by @lukasmasuch in #16823
- [fix] Honor pydeck views in st.pydeck_chart by @lukasmasuch in #16819
- [fix] Encode download filenames unsafe in a quoted header by @sfc-gh-dbyttow in #16646
- [fix] Skip no-op query-param history entries by @lukasmasuch in #16831
- [fix] Expose st.radio captions as option descriptions by @mayagbarnes in #16811
- [fix] Parse unknown AppTest proto subtypes by @lukasmasuch in #16835
- [fix] Raise AppTestError for unsupported AppTest interactions by @lukasmasuch in #16837
- [fix] Increase Vega-Lite legend title padding by @lukasmasuch in #16818
- [fix] Stop dropping in-flight Custom Components v2 triggers by @mayagbarnes in #16833
- [fix] Stringify list columns PyArrow cannot serialize by @mayagbarnes in #16838
- [fix] Keep elements stale while a stop is pending by @mayagbarnes in #16839
- [fix] Install skills where Claude Code will find them by @sfc-gh-nbellante in #16394
- [fix] Preserve empty AppTest chat input and ChatInputValue repr by @lukasmasuch in #16857
- [fix] Reject async cache_resource lifecycle callbacks by @sfc-gh-lwilby-1 in #16860
- [fix] Render Altair mark_geoshape charts by @lukasmasuch in #16886
- [fix] Hide Streamlit internals from UI traces by @lukasmasuch in #16718
- [fix] Swap reversed st.slider min/max bounds by @lukasmasuch in #16716
- [fix] Reject inverted st.number_input min/max bounds by @lukasmasuch in #16895
- [fix] Improve nested url_path error message by @lukasmasuch in #16896
- [fix] Add dict methods to AppTest.session_state by @lukasmasuch in #16897
- [fix] Close leftover dialogs on full-app rerun by @lukasmasuch in #16901
- [fix] Classify invalid icon= values more precisely by @lukasmasuch in #16900
- [fix] Add AppTest proto-variant parse smoke tests by @lukasmasuch in #16911
- [fix] Reject unsupported on_change modes by @sfc-gh-lwilby-1 in #16889
- [fix] Prevent callback rerun coalescing races by @sfc-gh-lwilby-1 in #16765
Other Changes
- [chore] Release v1.63.0 by @github-actions[bot] in #16764
- [docs] Fix chartCategoricalColors and Graphviz docs by @lukasmasuch in #16815
- [chore] Update emojis/material icons by @github-actions[bot] in #16753
- Bump plotly.js from 3.7.0 to 4.0.0 in /frontend in the plotly group across 1 directory by @dependabot[bot] in #16740
- [docs] Discourage custom HTML in markdown docs by @lukasmasuch in #16830
- [chore] Update emojis/material icons by @github-actions[bot] in #16867
Full Changelog: 1.63.0...1.64.0