What's Changed
Breaking Changes 🛠
- [chore] Remove deprecated
use_column_widthparameter fromst.imageby @lukasmasuch in #15786 - [fix] Deprecate string file paths in st.html/st.iframe in favour of pathlib.Path by @lukasmasuch in #16150
New Features 🎉
- [feat] Add lazy loading for st.dataframe by @lukasmasuch in #15756
- [feature] Add
iconparameter tost.metric(#12298) by @sfc-gh-dbyttow in #15805 - [feature] Add background refresh for st.cache_data and st.cache_resource by @lukasmasuch in #16057
- [feature] Add WebSocket Host allow-list by @lukasmasuch in #16147
- Add seconds granularity and
formatfor hour cycle tost.time_inputby @mayagbarnes in #16126 - Improve form support and enter to submit to
st.time_inputby @mayagbarnes in #16128 - Infer download_button file_name and mime from file object name by @SoMika00 in #16061
- [feature] Enforce disabled widget parameter server-side by @lukasmasuch in #16209
- Improve tag accessibility in
st.multiselectby @mayagbarnes in #16200
Bug Fixes 🐛
- [fix] Popover in sidebar rendered off-screen by @sfc-gh-dbyttow in #16087
- [fix] Escape now clears typed search query in st.selectbox by @sfc-gh-dbyttow in #16088
- Fix AppTest sys.path handling for script paths by @ishaanlabs-gg in #15775
- [fix] Clear stale AppTest elements on rerun by @lukasmasuch in #16123
- [fix] Clarify AppTest multipage path handling by @lukasmasuch in #16122
- Fix st.selectbox fuzzy search only matches contiguous substrings since 1.59.0 by @LuC-9 in #16009
- [fix] Commit open data_editor cell edit on outside click by @lukasmasuch in #16132
- [fix] TypeError in run_every fragments with Sentry threading by @sfc-gh-lwilby-1 in #16140
- [fix] Prevent st.data_editor row additions overwriting rows by @lukasmasuch in #16144
- [fix] Reject network paths and null bytes in st.Page by @lukasmasuch in #16146
- [fix] st.expander clipped after interrupted animation by @sfc-gh-dbyttow in #16090
- [fix] Lock Mermaid init config overrides by @lukasmasuch in #16151
- [bugfix] Honor Plotly layout fonts in Sankey charts (#11031) by @sfc-gh-dbyttow in #16164
- [bugfix] Multiselect dropdown background matches sidebar theme (#11348) by @sfc-gh-dbyttow in #16163
- fix(selectbox): flip sidebar dropdown up instead of clipping by @sfc-gh-bnisco in #16199
- [bugfix] Preserve IME composition in data_editor NumberColumn (#16129) by @sfc-gh-dbyttow in #16165
- [fix] Right-side padding preserved when code block is scrolled by @sfc-gh-dbyttow in #16091
- [bugfix] Higher-DPI Altair PNG export (#8177) by @sfc-gh-dbyttow in #16170
- [fix] st.bar_chart fails on column names containing "." by @sfc-gh-dbyttow in #16089
- [fix] Stable dataframe header background with alpha (#11950) by @sfc-gh-dbyttow in #16166
- [fix] Preserve fragment children across container reruns (#12514) by @sfc-gh-dbyttow in #16171
- [fix] Reconnect to existing session on unclean websocket close by @lukasmasuch in #15909
- [fix] Accept io.StringIO data in st.download_button by @sfc-gh-bnisco in #16272
- [fix] Keep pills and segmented_control selection highlighted when format_func changes by @sfc-gh-bnisco in #16271
- [fix] Suppress the skills nudge when an install would only conflict, and report why by @sfc-gh-nbellante in #15966
- Fix st.help header showing "page.run()" in multipage apps by @sfc-gh-dbyttow in #16244
Other Changes
- [chore] Release v1.60.0 by @github-actions[bot] in #16110
- Remove
BasewebfromTimeInputby @mayagbarnes in #15647 - Support pasting values in
TimeInputby @mayagbarnes in #16096 - [chore] Update emojis/material icons by @github-actions[bot] in #16202
- [chore] Adopt uv.lock for deterministic Python environments by @lukasmasuch in #15968
- [chore] Replace gitpython with subprocess git calls by @lukasmasuch in #16241
- [feature] Turn
st.Pageinto a proper class by @lukasmasuch in #16268
New Contributors
- @ishaanlabs-gg made their first contribution in #15775
- @LuC-9 made their first contribution in #16009
- @SoMika00 made their first contribution in #16061
Full Changelog: 1.60.0...1.61.0