2026 release notes
This page contains release notes for Streamlit versions released in 2026. For the latest version of Streamlit, see Release notes.
Version 1.67.0
Release date: November 5, 2026
Highlights
- ๐ฒ Introducing
st.grid, a responsive grid container for repeated tiles like metric cards, galleries, and dashboard cards that reflow with the available width (#17800, #11101). - ๐ค Announcing agent-accessible apps! When you turn on the experimental
server.enableAgentApioption, AI agents and other programs can use your app over HTTP or through an MCP endpoint that you can add to clients like Claude, ChatGPT, Cursor, and VS Code (#17731, #17510). - ๐จ Introducing a refreshed default theme! The built-in light and dark themes have a warmer palette, updated colors, and widget and sidebar borders shown by default, and
st.mapmarkers use your theme's primary color (#17450, #17467, #17495, #17493).
Notable Changes
- ๐พ You can limit the memory used by
st.cache_datawith its newmax_sizeparameter for each function, or across all functions with the newserver.maxCacheDataSizeconfiguration option (#17552, #17553, #2911). - ๐ฉ The following widgets have a new
requiredparameter to prevent users from committing or submitting an empty value:st.date_input(#17165).st.time_input(#17420).st.datetime_input(#17565).st.text_area(#17590, #17737).st.selectbox(#17676).
- ๐
st.dialogaccepts a pixel width, so you can size a dialog to fit fixed-width content. Invalidwidthvalues now raise an error instead of falling back to the small dialog (#17412). - ๐งญ
st.Pagehas ahelpparameter to describe each page in a navigation tooltip, whichst.page_linkalso uses by default (#17807). - ๐ช
st.selectboxhas aniconparameter to show an emoji or Material icon at the start of the field, likest.text_input(#17850, #17840). - ๐
st.echarts_charthas new selection and data features:- Set
on_selectto return the point and brush selections that you enable in the chart's spec (#16786). - Dataframes in
dataset.sourceare sent as Arrow, which makes large charts faster and displays values the same way asst.dataframe(#17678). - Dataframe-backed charts have a "Show data" toolbar action that displays the chart's data as a table (#17708).
- Set
- โก
st.altair_chartandst.vega_lite_chartsend selections as soon as a click or brush gesture ends, so selection reruns are faster and a form submitted right after includes the latest selection (#17666). - ๐ง You can set a server-wide default TTL for
st.connectionwith the newrunner.connectionDefaultTTLconfiguration option (#17248).
Other Changes
- ๐ The bundled
developing-with-streamlitagent skill has improved guidance on theming and CSS, Session State, testing with AppTest, dynamic containers, and performance (#17473, #17483, #17496, #17605, #17674, #17675, #17724). - ๐ The docstrings for
st.pyplot,st.plotly_chart, andst.echarts_chartand the bundled agent skill recommend Vega-based charts orst.echarts_chartwith a dataframe source for new charts.st.echarts_chartalso raises an error for unsupported ECharts GL map components instead of rendering a blank chart (#17769, #17810). - ๐ข
st.echarts_charttooltips acceptst.metricnumber formats intooltip.valueFormatter, so you can format tooltip values without JavaScript (#17755). - ๐งช
AppTestsupportsst.data_editor, file uploads inst.chat_input, and settingst.userandst.contextfor a test (#17476, #17464, #17611). - ๐ฃ Type checkers infer a fixed-length tuple from
st.columnswhen you pass an integer from 1 to 6 or a tuple of up to six widths, so a mismatched unpack is caught before the app runs (#17498, #17506). - ๐ Charts,
st.metric, andst.dataframeload faster because the "Show data" grid and Vega are downloaded only when needed (#17846, #17853). - โฉ The Material Symbols icon font starts loading at app startup, so icons appear sooner on first load (#17849, #17839).
- ๐ Corrected outdated docstrings and configuration help text, including for
client.toolbarMode(#17613). - ๐ Bug fix:
st.echarts_charthas better default layouts for titles with top legends, treemaps, and horizontalmarkLinelabels (#17885). - ๐ฆ Bug fix: Default tooltips in
st.echarts_chartlabel each field and format dates when the chart's data is a dataframe indataset.source(#17883). - ๐ชฒ Bug fix: The page keeps scrolling when the mouse wheel passes over an
st.echarts_chartthat zooms or pans with the wheel, such as a default treemap, until the pointer rests on the chart (#17882, #17507). - ๐ Bug fix: When an
st.echarts_chartspec can't be serialized, the error names the offending value and how to convert it (#17881). - ๐ Bug fix: The agent API matches browser behavior more closely and has more accurate snapshots, clearer error messages, and better MCP tool descriptions (#17870, #17871, #17872, #17880).
- ๐ Bug fix:
height="stretch"dataframes and data editors fall back to their default height when no parent sets one, and they stay inside their parent while you resize them (#17879, #17662). - ๐ท๏ธ Bug fix: Dataframes and chart "Show data" tables no longer have extra space below them (#17864).
- ๐ชณ Bug fix:
st.echarts_charthides overlapping labels on time, value, and log axes by default (#17858). - ๐ชฐ Bug fix:
snowflake-callers-rightsconnections use the container's protocol and port settings and no longer require a default database and schema (#17848, #17820). - ๐ฆ Bug fix: The range calendar in
st.date_inputno longer loses or double-commits the first date you pick (#17833). - ๐ฆ Bug fix: Element calls no longer rewrite shared method attributes, which serialized concurrent script threads on free-threaded Python (#17823, #17801).
- ๐ฆ Bug fix: Widgets don't rerun the app when an interaction leaves their value unchanged, like closing
st.multiselectwithout changing it (#17822). - ๐ฆ Bug fix: Keyed elements stay mounted when a rerun inserts content above them, so they keep their state, focus, and in-progress input (#17804).
- ๐ธ๏ธ Bug fix: The global Streamlit meta-skill reliably finds a project's bundled agent skill on Windows, macOS, and Linux without creating or syncing Python environments (#17803).
- ๐ Bug fix: Installing the bundled agent skills from the in-app prompt no longer fails when the server's console can't print the install summary, which mostly affected Windows (#17802).
- ๐ฆ Bug fix: Streamlit replaces pandas
inplace=calls that pandas 3.1 deprecates, sost.data_editorrow deletion and charts keep working on pandas 4 (#17795). - ๐ฆ Bug fix:
st.vega_lite_chartredraws when new data has the same shape as the old data, and Altair and built-in charts update their data in place instead of rebuilding the view (#17793). - ๐ฝ Bug fix:
st.dataframeandst.data_editorwith a fixed height expand to show more rows in fullscreen (#17791, #17771). - ๐ Bug fix:
st.echarts_chartand Vega-based charts use faster rendering defaults for very large datasets, so they no longer stall the browser (#17788). - ๐ฆ Bug fix: Time axes in
st.echarts_chartshow midnight values as dates instead of with a00:00:00time (#17781). - ๐ชฒ Bug fix:
st.echarts_chartlogs chart errors to the browser console and can render again after an option fails (#17780). - ๐ Bug fix:
st.metricsparklines and the dataframe column statistics menu no longer log a Vega-Lite version warning in the browser console (#17778). - ๐ Bug fix: Muted text, like placeholders and file uploader hints, meets WCAG AA contrast in the default light theme (#17766, #8289, #8249, #8276, #8288, #16149).
- ๐ Bug fix: Dollar amounts in Markdown, like
$315K of $1.46M, render as plain text instead of being parsed as math (#17753). - ๐ท๏ธ Bug fix:
st.echarts_chartdefault colors are readable in dark mode. Candlestick charts also use green for rising and red for falling, matchingst.plotly_chart(#17750). - ๐ชณ Bug fix: Altair and Vega-Lite charts restore their interval brush rectangle after remounting or switching to fullscreen (#17744).
- ๐ชฐ Bug fix: Element toolbars, like the one on
st.dataframe, appear above an overlappingst.segmented_controloption and stay clickable (#17734). - ๐ฆ Bug fix: Printed apps follow the on-screen layout without charts, cards, metrics, or the sidebar overlapping or getting clipped (#17727).
- ๐ฆ Bug fix:
st.pydeck_chartresets its camera when a rerun changes the chart's views, such as from a map view to a globe view (#17701). - ๐ฆ Bug fix: Errors and docs for
@st.fragment(parallel=True)no longer suggest writing to outside containers, which parallel fragments don't support (#17688, #17612). - ๐ฆ Bug fix: When script runs overlap, the frontend applies each run's completion to the run that finished, so stale elements are cleaned up correctly and
st.chat_inputandst.text_inputre-enable at the right time (#17686). - ๐ธ๏ธ Bug fix:
st.dataframe,st.table, andst.data_editorcorrectly display decimals, periods, intervals, categoricals, and other Arrow types (#17684, #5864). - ๐ Bug fix:
st.plotly_chart(theme=None)no longer applies the app's theme fonts and backgrounds, so light figures stay readable in dark mode (#17671, #17665). - ๐ฆ Bug fix: Custom themes that don't set
textColorno longer log an invalid sidebar color warning in the browser console (#17669, #17638). - ๐ฆ Bug fix: When two pages in
st.navigationresolve to the same URL pathname, the error names both pages (#17646). - ๐ฝ Bug fix:
st.feedbacksupports thepersist_stateandbindparameters like other input widgets (#17621). - ๐ Bug fix: A
snowflake-callers-rightsconnection raises an error if it's used from a session other than the one that created it, so queries can't run with another user's identity (#17584). - ๐ฆ Bug fix:
st.audio_inputin the sidebar no longer shows an error after a successful recording (#17583, #17585). - ๐ชฒ Bug fix: Help tooltips no longer open and stick when their trigger gets focus from a mouse click, such as after closing an
st.dialog(#17581, #17562). - ๐ Bug fix: Calling
.toast()on the object returned byst.toastupdates the toast in place again (#17580, #17522). - ๐ Bug fix: The
st.chat_inputaudio waveform stays visible after the text area expands, and recording works with a customheight(#17579, #17528). - ๐ Bug fix: The error for a fragment writing to an outside container without a reserved position explains how to reserve one (#17577, #17563).
- ๐ท๏ธ Bug fix: The "File change" prompt no longer goes missing when run on save is off (#17551).
- ๐ชณ Bug fix: The default time slider can reach the end of the day, and other sliders can reach a maximum that falls just past their last full step (#17504, #17494).
- ๐ชฐ Bug fix: Type hints for
st.componentsmatch their runtime behavior (#17501). - ๐ฆ Bug fix: Top navigation section dropdowns support arrow-key navigation and follow the expected Tab order, and Tab skips links hidden in the overflow menu (#17423, #17482, #17339).
- ๐ฆ Bug fix: Type checkers report unknown container methods, like
st.sidebar.echo(), as errors (#17475). - ๐ฆ Bug fix: Custom Components v2 events,
st.menu_buttonselections, andButtonColumnclicks are no longer lost when another widget updates while their rerun is queued (#17471, #17215). - ๐ฆ Bug fix: After
st.logout(), a reconnecting client can't resume the logged-out session or its Session State (#17310). - ๐ธ๏ธ Bug fix: Timedelta columns in
st.dataframeandst.data_editordisplay as readable durations, sort by value, and can be edited.NumberColumnalso has a new"duration"format (#16722, #8949, #9751).
Version 1.66.0
Release date: October 14, 2026
Highlights
- ๐ Introducing the
theme.paddingTopandtheme.paddingBottomconfig options, so you can set the space between the app chrome and your page content, with optional[theme.sidebar]overrides (#17350, #6336). - ๐ Announcing
on_change="ignore"for every stateful widget, so a new value updates the widget and any bound query parameter without a rerun, and Python receives it on the next rerun (#5827). This release adds the remaining widgets:st.pillsandst.segmented_control(#17307, #17452).st.feedback(#17281).st.color_picker(#17209).st.datetime_input(#17267).st.camera_inputandst.audio_input(#17246, #17328).st.data_editor(#17347).st.pagination(#17397).
Notable Changes
- ๐งญ Apps have a "Skip to main content" link and
<main>and<nav>landmarks for keyboard and screen-reader users. Custom CSS selectors likesection[data-testid="stMain"]should drop the tag (#17418, #17338, #17416). - ๐งช
AppTestsupports more elements:at.formandat.form_submit_buttonlet you look up forms by key and click their submit buttons (#17229).at.link_buttonandat.page_link(#17308).at.progress,at.html, andat.help(#17280).at.paginationcan select a page for the next run (#17322).at.audio_inputandat.camera_inputcan stage a recording or photo for the next run (#17346, #17459).
- ๐ Streamlit supports Python 3.15 (#17426, #17422).
- ๐ป Due to end of life, Python 3.10 is no longer supported. The minimum supported versions of NumPy, pandas, Pillow, and PyArrow are raised to releases with Python 3.11 wheels (#17315).
Other Changes
- ๐ฆ
httptoolsis now an optional dependency. Installstreamlit[performance]to keep Uvicorn's faster HTTP parser (#16554). - ๐ฟ Streamlit no longer requires the
tomldependency (#17315, #17342). - โ Streamlit logs a startup warning when
websockets17 or later is installed withuvicornolder than 0.52.0, a combination that can break the WebSocket handshake behind proxies that forward non-ASCII headers (#17115, #16030). - ๐ Bug fix:
st.switch_pageandst.page_linkreject Windows network and device paths before resolving them, so untrusted input can't trigger an SMB connection (#17301). - ๐ฆ Bug fix: A disabled
st.download_buttonwith a callabledataargument no longer registers a download that can run the callable (#17288). - ๐ชฒ Bug fix: Apps embedded in an iframe sandboxed without
allow-same-originrender instead of staying blank (#17409, #17402). - ๐ Bug fix: A run that is stopped or replaced while waiting for another run's cached value exits promptly instead of holding a thread (#17340).
- ๐ Bug fix: Streamlit logs an error at startup when
secrets.tomlcan't be parsed, instead of silently continuing with empty secrets (#17428). - ๐ Bug fix: Checking for a missing
st.*attribute withhasattrorgetattrno longer imports modules, which could raise aRuntimeErrorin code that iteratessys.modules(#17311, #17298). - ๐ท๏ธ Bug fix: A fragment callback that only calls
st.switch_pageorst.stopno longer logs a false warning about displaying elements (#17292). - ๐ชณ Bug fix: Keyed containers no longer trigger React key warnings or remount while a rerun is in progress (#17456).
- ๐ชฐ Bug fix: Side-by-side elements line up better:
height="stretch"elements in horizontal containers match the tallest element in their row, and vertically alignedst.columnsfill the row height (#17392). - ๐ฆ Bug fix: Stretch-height charts fall back to their default height when nothing gives them one, and stretch-height containers and forms grow to fit their content (#17410, #17424).
- ๐ฆ Bug fix:
st.echarts_charttooltips use the theme's font weight and round long numbers (#17333). - ๐ฆ Bug fix:
st.pydeck_charttooltips appear at the cursor instead of above it (#17313, #17309). - ๐ฆ Bug fix: Buttons, checkboxes, toggles, and other labels show a hover tooltip only when their text is cut off (#17266, #17264).
- ๐ธ๏ธ Bug fix: Muted icon buttons in widgets, such as clear and microphone buttons, share one color treatment and are no longer tinted by a custom
theme.grayColor(#17231). - ๐ Bug fix: Screen readers skip Material icons and decorative images, and icon-only controls have accessible names (#17170, #12873).
- ๐ฆ Bug fix: The sidebar's expand and collapse buttons report their state with
aria-expanded. Custom CSS or scripts that readaria-expandedon the sidebar should usedata-collapsedinstead (#17293). - ๐ฆ Bug fix:
st.date_inputandst.datetime_inputhave a calendar button that keyboard users can reach with Tab and that reports its state to screen readers (#17294, #17296, #17316). - ๐ฝ Bug fix:
st.selectboxandst.multiselectlet screen readers announce the active option while you type (#17295, #16841). - ๐ป Bug fix: Type hints for
st.connection,st.query_params,st.secrets, andst.session_statematch runtime behavior more closely (#17245, #17419, #17460, #17466). - ๐ Bug fix:
AppTestlayout collections such asat.expanderandat.tabscan be looked up by key (#17256). - ๐ฆ Bug fix:
AppTestkeepspersist_state="page"widget values and selected tabs across reruns of the same page (#17305, #17249). - ๐ชฒ Bug fix:
AppTestrenders imported Custom Components v2, includingst.pdf, in everyAppTestinstance in the same process (#17331, #17216).
Version 1.65.0
Release date: October 2, 2026
Highlights
- ๐ฟ Announcing side drawers for
st.dialog: setposition="left"orposition="right"to open a dialog as a full-height drawer (#16863, #8186). - ๐ผ Introducing the
altparameter, so you can give images, media, charts, maps, and data elements an accessible name for screen readers:st.imageandst.pyplot(#17137).st.audio,st.video, andst.pdf(#16568, #17118).st.altair_chart,st.vega_lite_chart, and the built-inst.line_chart,st.bar_chart,st.area_chart, andst.scatter_chart(#17041, #17069).st.echarts_chart,st.plotly_chart,st.graphviz_chart, andst.mermaid_chart(#17080, #17081, #17085, #17096).st.mapandst.pydeck_chart(#17086).st.dataframe,st.data_editor, andst.table(#17125, #17095).st.iframe(#17040, #16607).
Notable Changes
- ๐ The
on_change="ignore"mode reaches eight more widgets, so a new value updates the widget and any bound query parameter without a rerun:st.checkboxandst.toggle(#16960).st.radio(#16951).st.multiselect(#16908).st.text_area(#17002).st.date_input(#17064).st.time_input(#17159).st.file_uploader(#17172).
- ๐
st.text_inputandst.number_inputhave a newrequiredparameter that blocks empty values from being committed or submitted in a form (#16956, #17023, #13497). - ๐
st.expanderandst.tabssupportbind="query-params", so you can share a URL that keeps an expander open or a tab selected (#15462, #16988). - ๐ You can paste a full date range into the start field of a range-mode
st.date_inputto set both dates at once (#17004). - ๐ The new
theme.dataframeHeaderTextColorconfig option sets the header text color forst.dataframeandst.data_editor(#17181, #16478). - ๐งช
AppTest.query_paramsreturns single values as strings instead of one-item lists, so assertions likeat.query_params["x"] == ["1"]need to become== "1"(#17191).
Other Changes
- ๐ก Mistyped or removed
st.*commands raise anAttributeErrorthat suggests the correct name or replacement (#16912). - ๐ฌ Session State mutation errors show the exact
st.session_state[key]expression and how to fix it (#17016). - ๐ฆ Streamlit can be installed alongside
websockets17.x (#17113, #17097). - ๐ Bug fix:
st.query_paramsfollows the URL when browser back/forward changes only the query string on the same page (#16989, #13963). - ๐ฆ Bug fix: Widgets bound to query parameters restore their values from the URL on browser back/forward (#16998, #13853).
- ๐ชฒ Bug fix: Ctrl+C and SIGTERM stop the server even when an app script is stuck in a loop (#17022, #2975).
- ๐ Bug fix: Dialogs opened from a fragment stay responsive when that fragment reruns (#17039, #17011).
- ๐ Bug fix: Keyed widgets that first appear after a Session State write show the stored value instead of their default (#17106, #17093).
- ๐ Bug fix:
st.data_editorkeeps leading decimals, so typing.07commits0.07instead of7(#16920, #16909). - ๐ท๏ธ Bug fix: Clearing a dataframe selection through Session State a second time also unchecks the rows in the grid (#17224, #17195).
- ๐ชณ Bug fix:
LinkColumnshows the:material/open_in_new:icon in narrow columns instead of truncated text (#17090, #14782). - ๐ชฐ Bug fix:
st.chat_inputplaced inst.bottomno longer triggers scroll-to-bottom for the app (#16980, #16977). - ๐ฆ Bug fix: Pressing Enter in a form submits with the correct button when the first submit button is disabled (#17171).
- ๐ฆ Bug fix: Synchronous
st.cache_dataandst.cache_resourcefunctions that return an awaitable raise a clear error instead of a confusing serialization failure (#16921). - ๐ฆ Bug fix:
st.imageaccepts the removeduse_column_widthparameter with a warning instead of raising aTypeError(#16999). - ๐ฆ Bug fix:
st.imageandst.pyplotno longer use list indexes as alt text, andst.imagelinks with unsafe URL schemes render as plain images (#17136). - ๐ธ๏ธ Bug fix: Element toolbar buttons include the element's
alttext in their accessible names and have a 24px minimum target size (#17211, #17225, #16148, #17127). - ๐ Bug fix: Range-mode
st.date_inputvalidation errors say the date is outside the allowed range instead of naming the wrong field (#16983). - ๐ฆ Bug fix: Range-mode
st.date_inputcancels a half-finished calendar selection when the app changes its value (#16984). - ๐ฆ Bug fix:
st.date_inputclears partly typed dates when aclear_on_submitform resets (#16985). - ๐ฝ Bug fix:
st.date_inputandst.datetime_inputkeep their clear and error icons visible in narrow layouts (#16986). - ๐ป Bug fix: Unchecked
st.checkboxandst.radiooptions show a hover state again, matching secondary buttons (#17034, #17035). - ๐ Bug fix: A custom
theme.borderColorno longer fills the off track ofst.toggleor the main menu's auto-rerun toggle (#17079, #17083). - ๐ฆ Bug fix: The visible sidebar border gets stronger on hover when
theme.showSidebarBorderis enabled (#17071, #12803). - ๐ชฒ Bug fix: Keyboard events without a key no longer throw errors in global hotkeys or non-dismissible dialogs (#17105, #17111, #17082, #17107).
- ๐ Bug fix:
CacheReplayClosureErrornames the layout block instead of showing a$THINGplaceholder (#17065). - ๐ Bug fix:
AppTestform widgets commit their values only when the form is submitted, matching the browser (#16972). - ๐ Bug fix:
AppTest.get()accepts the same element names asAppTestattributes, such asdatetime_inputandpills(#17000). - ๐ท๏ธ Bug fix:
AppTestlistsst.expanderelements with an icon underat.expanderinstead ofat.status(#17162). - ๐ชณ Bug fix:
AppTestsupportsst.spacethroughat.space(#17208).
Version 1.64.0
Release date: September 15, 2026
Highlights
- โจ Introducing
st.echarts_chart, a new command that renders Apache ECharts options with Streamlit theming, and accepts dicts, JSON strings, orpyechartscharts (#16785). - ๐ Streamlit now supports
async/awaitin app code, so you can use async libraries like httpx, aiohttp, and asyncpg directly (#16167, #744).st.cache_dataandst.cache_resourcework withasync deffunctions and cache the awaited result (#16168).
- ๐ Announcing live updates for
st.text_input: setlive=Trueand the widget commits while the user types, after a short pause (#16662, #4553).
Notable Changes
- ๐ The
on_change="ignore"mode reaches three more widgets, so a new value updates the widget and any bound query parameter without a rerun: - ๐ป The
mapbox.tokenconfig option is removed. Set theMAPBOX_API_KEYenvironment variable, or pass PyDeckapi_keysinstead (#16774, #16676, #16678).
Other Changes
- ๐ Bug fix:
st.dialoghides a leftover dialog as soon as the next full-app run starts, sost.rerun()closes the modal before later blocking work (#16901, #9405). - ๐ฆ Bug fix:
st.dataframeandst.data_editorconvert list columns that PyArrow cannot serialize to strings, instead of raising when the nesting levels differ (#16838, #9380). - ๐ชฒ Bug fix: Widgets after
st.rerunkeep the values the user selected, instead of resetting to their defaults (#16762, #3533). - ๐ Bug fix: Altair
mark_geoshapecharts render on first view, instead of showing an empty plot (#16886, #2910). - ๐ Bug fix:
st.pydeck_charthonors pydeckviews, so OrbitView, GlobeView, andmap_provider=Nonerender as specified (#16819, #2590, #2302, #9933). - ๐ Bug fix:
st.pydeck_chartrenders layers that declare deck.glextensions, instead of showing an error box (#16823). - ๐ท๏ธ Bug fix: Altair
binding_radioandbinding_selectstay a single widget whenon_selectis enabled (#16809, #8765). - ๐ชณ Bug fix: Vega and Altair
bind=controls use Streamlit fonts, colors, and focus rings (#16813). - ๐ชฐ Bug fix: Vega-Lite legend titles get more padding under the Streamlit theme, so the title is not stuck to the first entry (#16818).
- ๐ฆ Bug fix: Elements stay dimmed after you press Stop, until the run actually finishes (#16839, #9904).
- ๐ฆ Bug fix:
st.query_paramsskips a browser history entry when the query string does not change, so the Back button leaves the app (#16831, #9878). - ๐ฆ Bug fix: Custom Components v2 keep in-flight trigger values, so the value reaches Python instead of the script rerunning without it (#16833, #16732).
- ๐ฆ Bug fix:
st.download_buttonencodes filenames that a quotedContent-Dispositionheader cannot hold, so the browser saves the full name (#16646, #16631). - ๐ธ๏ธ Bug fix:
st.sliderswaps reversedmin_valueandmax_valuebounds, instead of truncating the range or raising an error about numbers you never passed (#16716, #16675). - ๐ Bug fix:
st.number_inputraises a clear error whenmin_valueis greater thanmax_value(#16895). - ๐ฆ Bug fix: Widgets raise an actionable error for an
on_changemode they do not support (#16889). - ๐ฆ Bug fix: Streamlit classifies invalid
icon=values more precisely, so an empty value means no icon and a URL raises an image error (#16900). - ๐ Bug fix: The error for a nested
url_pathnames the invalid path and links to the issue you can upvote (#16896). - ๐ฆ Bug fix: Exception traces in the browser hide Streamlit package frames, keep your
st.*call site, and show chained exceptions (#16718). - ๐ชฒ Bug fix: Coalesced reruns dispatch only the callbacks that have not run yet (#16765).
- ๐ Bug fix:
st.buttonand similar controls wait 500ms before they show a help tooltip on hover, so a pointer that crosses a control does not open one (#16794, #8686). - ๐ Bug fix:
st.radioexposes option captions as descriptions, so assistive tech reads the option text as the name (#16811). - ๐ Bug fix:
st.cache_resourcerejects asyncvalidateandon_releasecallbacks, instead of discarding the awaitable they return (#16860). - ๐ท๏ธ Bug fix:
AppTesttreats unknown element subtypes asUnknownElement, so.run()finishes against a newer Streamlit (#16835). - ๐ชณ Bug fix:
AppTestraisesAppTestErrorwhen you callset_value()orclick()on an element with no typed wrapper (#16837). - ๐ชฐ Bug fix:
AppTesttreats an emptyst.chat_inputsubmit as a real value, and printsChatInputValuewithout an error whenaccept_file=True(#16857). - ๐ฆ Bug fix:
AppTest.session_statesupports the same dict methods asst.session_state, which areget,keys,items,values,to_dict,len, and iteration (#16897). - ๐ฆ Bug fix:
streamlit skillsinstalls the bundled agent skills where Claude Code reads them, and reports an incomplete install instead of success (#16394).
Version 1.63.0
Release date: September 1, 2026
Highlights
- ๐ฏ Introducing event-scoped fragment reruns, which let a widget callback rerun just one named fragment:
- Name a fragment with
@st.fragment(key=โฆ)and target it withst.rerun("filters")orst.rerun(["alpha", "beta"])from anon_changeoron_clickcallback (#16161). st.rerun()andst.switch_page()now take effect inside widget callbacks instead of being discarded with a warning; apps that relied on the previous no-op will now rerun (#16158).
- Name a fragment with
- โจ Introducing
on_change="ignore", a new mode that updates a widget in the browser without rerunning your app. Your script receives the buffered value on the next rerun, such as a button click, and the mode is available onst.sliderandst.text_input(#14828, #16605). - ๐ฟ Introducing
type="step"forst.expanderandst.status, which renders containers as a connected timeline โ well suited to showing an agent's or a pipeline's progress (#16558, #13248).
Notable Changes
- ๐ The
wrapparameter introduced in 1.62.0 extends to more commands:st.pillsandst.segmented_controlacceptwrapto keep options on one horizontally scrollable row (#16369, #13516).st.markdown,st.title,st.header,st.subheader,st.caption, andst.textacceptwrap=Falseto keep long copy on one ellipsized line (#16617, #12583).- Controls placed directly in
st.columnsnow default to no wrapping so neighboring controls keep the same height; passwrap=Trueto restore wrapping (#16578).
- ๐ข
st.multiselecthas a newselect_allparameter to always show, never show, or threshold the "Select all" bulk action, and pressing Enter now selects the first row (#16673, #16537). - ๐ผ
st.title,st.header, andst.subheaderhave a newiconparameter that renders a leading emoji or Material Symbol scaled to the heading (#16418, #11752). - ๐งช
AppTestis more robust: apps using unimplemented commands stay inspectable, interacting with a disabled widget raises, container keys are exposed throughat.container(key=โฆ)andat.get_by_key(), andswitch_page()resolves pages registered byst.navigation(#16711, #9814, #12844, #13163, #16611). - โ The new
runner.cacheBackgroundRefreshTTLMultiplierconfig option widens or narrows the stale-while-revalidate window forrefresh_mode="background"caches (#16599).
Other Changes
- ๐จ Invalid API usage raises specific
StreamlitAPIExceptionsubclasses for missing, incompatible, out-of-range, and wrongly typed parameters instead of generic Streamlit,TypeError, orValueErrorfailures (#16508, #16637, #16656, #16668, #16690, #16701, #16707). - ๐
st.spinnerkeeps animating at a slower rate underprefers-reduced-motionand exposes its label as an accessible status, so paused motion is not mistaken for a hung app (#16620, #16598). - ๐
st.contextsupports key notation sost.context["timezone"]matchesst.context.timezone,st.user.is_logged_inis typed asbool, and the documentedst.user.tokensnames surface in autocompletion (#16710). - ๐ Bug fix: The install-skills prompt shown with local error messages sizes its action labels to match the card's text (#16482).
- ๐ฆ Bug fix:
st.coderenders very long inputs instead of failing with a call-stack error, by skipping syntax highlighting past a line-count threshold (#16567, #11996). - ๐ชฒ Bug fix:
st.date_inputandst.datetime_inputno longer crash for values near Python's minimum and maximum dates when no explicit bounds are given (#16582, #7427). - ๐ Bug fix:
st.menu_buttondropdowns and JSON path tooltips stay interactive insidest.dialog(#16583). - ๐ Bug fix: Pressing Cmd/Ctrl+C no longer opens the clear-cache dialog when the modifier is released before the C key (#16615).
- ๐ Bug fix: Markdown list items holding a long unbreakable token wrap inside narrow containers instead of overflowing them (#16632, #16618).
- ๐ท๏ธ Bug fix: Type checkers infer the documented return types for
st.plotly_chart,st.pydeck_chart,st.file_uploader,st.chat_input, andst.selectboxwhen arguments are omitted or not literals (#16633, #16630). - ๐ชณ Bug fix: Embedded apps forward the full guest-to-host
postMessagestream to in-iframe hosts, which unblocks metrics events whenmetricsUrlis"postMessage"(#16647, #16644). - ๐ชฐ Bug fix: Ctrl/Cmd+A selects the typed filter text in
st.multiselectinstead of being intercepted as a bulk-select shortcut (#16650). - ๐ฆ Bug fix:
st.datetime_inputkeeps a time entered before a date, so completing the date commits the time on screen instead of midnight (#16664). - ๐ฆ Bug fix: Invalid-color errors render their valid formats as a list, and object reprs with uppercase hexadecimal addresses take the same
st.writeandst.helppath on Windows as elsewhere (#16683, #16674, #16677). - ๐ฆ Bug fix: The calendar header shows the year matching the visible grid when
min_valueandmax_valuecross a year boundary (#16706, #16686). - ๐ฆ Bug fix: File uploads no longer hang when in-process ASGI middleware such as Sentry has already read the request body (#16709, #16697).
- ๐ธ๏ธ Bug fix: Library warnings that previously appeared only as in-app alerts also log to the server console with a stack trace, so CLI users and coding agents can see them (#16717).
Version 1.62.0
Release date: August 19, 2026
Highlights
- โจ Introducing client-side validation (
validate) and specialized email, URL, phone, and search types (type) forst.text_input, with smart defaults for validation, autofill, mobile keyboards, icons, and placeholders (#15752, #15714, #8790, #7348, #16385, #6704, #10744). - ๐งฉ Introducing the new
wrapparameter, which lets you choose whether horizontal layouts, widgets, and labels wrap or remain on one scrollable or truncated row:st.columnsand horizontalst.containerlayouts can remain on one horizontally scrollable row withwrap=False(#16131, #16367, #5003, #2313, #16484, #9544, #12582).st.buttonand other button-like controls,st.checkbox, andst.togglecan keep labels on one line when desired (#16325, #16470).st.multiselectcan keep selected chips on one horizontally scrollable row (#16509, #12644).
- ๐ Announcing the public
streamlit.typingnamespace for stable imports of Streamlit-owned types, including fully typed selection and data editor state values (#16094, #16275, #16295, #7801, #16351, #16471).
Notable Changes
- ๐จ Date and datetime inputs have a more accessible, keyboard-friendly editing experience:
st.date_inputnow uses segmented fields and an accessible calendar for single dates and ranges (#16460, #7865, #8556, #12699, #9667, #7100, #4941, #9946).st.datetime_inputnow offers segmented date and time fields with an integrated calendar and time editor (#16501, #16502).- Bug fix: Date and datetime values stay within their input borders in narrow containers, and calendars indicate today's date (#16565).
- ๐ You can configure chart categorical, sequential, and diverging colors separately for light, dark, and sidebar themes (#16357, #16355).
- ๐ค Theme font-weight settings support increments of 50 for finer typography control (#16396, #16354).
- ๐ป The long-deprecated
st.cachecommand has been removed; usest.cache_dataorst.cache_resourceinstead (#15787). - โ ๏ธ Passing Matplotlib
savefigkeyword arguments tost.pyplotis deprecated; save the figure directly and display it withst.imageinstead (#16450). - ๐ป Calling
st.pyplotwithout an explicit figure is no longer supported (#16464).
Other Changes
- ๐ช When Streamlit raises an uncaught error during local development, the error display can offer to install Streamlit's agent skills for supported coding agents (#15693).
- ๐
st.tableuses a 14-pixel font size consistent with other Streamlit widgets (#16397, #16389). - ๐จ Invalid enum-like parameter values consistently raise
StreamlitValueErrorwhile preserving compatibility with existing specialized exception classes (#16422). - ๐ฆ Streamlit no longer requires the
tenacitydependency for SQL and Snowflake connection retries (#16497). - ๐ Bug fix:
st.popoverkeeps its contents visible and scrollable in narrow or embedded viewports (#16173, #9340). - ๐ฆ Bug fix:
st.pyplotsupports SVG output throughformat="svg"(#16283, #11489). - ๐ชฒ Bug fix:
runner.cacheHashSeedlets apps change the sample used to hash large pandas, Polars, and NumPy objects without invalidating existing caches by default (#16284, #14622). - ๐ Bug fix: Heading anchors update when heading text changes during a rerun (#16286, #8793).
- ๐ Bug fix: Altair charts reconstructed with
alt.Chart.from_jsonpreserve their inline datasets (#16288, #6269). - ๐ Bug fix: Nested
st.fragmentfunctions with queued periodic reruns no longer execute twice and create duplicate element IDs (#16314, #10719). - ๐ท๏ธ Bug fix: Multiple Streamlit servers correctly advance to the next available port on Windows (#16315, #16296).
- ๐ชณ Bug fix: Updating
st.statusthrough a container created outside a fragment no longer corrupts the app's element tree (#16316, #16281). - ๐ชฐ Bug fix: Streamlit falls back to MD5 for element IDs, cache keys, and file watching on FIPS-enabled systems whose BLAKE2b implementation rejects custom digest sizes (#16324, #15148).
- ๐ฆ Bug fix: Embedded Streamlit-in-Snowflake apps can receive same-window authentication messages while retaining host-message spoofing protections (#16327).
- ๐ฆ Bug fix: Streamlit remains compatible with newer Starlette gzip middleware while preserving correct media, download, and range-response handling (#16342, #16344, #16341, #16462).
- ๐ฆ Bug fix: Malformed WebSocket messages are rejected without exposing tracebacks or absolute server paths to the browser (#16392, #16391).
- ๐ฆ Bug fix: The startup warning for
server.enableCORS=falseaccurately describes CORS and XSRF behavior instead of claiming the setting is overridden (#16393, #16390). - ๐ธ๏ธ Bug fix: Derived code and dataframe-header background colors respect custom theme background settings (#16401, #16398).
- ๐ Bug fix: Timelike
st.slidervalues are validated against the frontend's safe numeric range instead of silently changing (#16475, #16474). - ๐ฆ Bug fix:
st.toastnotifications remain visible when immediately followed byst.rerun()(#16498, #7740). - ๐ฆ Bug fix:
st.color_pickerremains interactive inside dialogs (#16541, #16538). - ๐ฝ Bug fix:
st.metricrestores its sparkline after chart data becomes empty and is populated again (#16543, #16539).
Version 1.61.0
Release date: August 4, 2026
Highlights
- โก Introducing lazy loading for
st.dataframe: large dataframes now load their rows on demand automatically, so the browser stays responsive. A newlazyparameter lets you turn this on or off explicitly, and PolarsLazyFrameobjects are supported natively (#15756). - ๐ฟ
st.cache_dataandst.cache_resourcehave a newrefresh_mode="background"option that refreshes expired cache values in the background, so your app keeps serving the previous value without waiting (#16057, #5871).
Notable Changes
- ๐ฏ
st.metrichas a newiconparameter to display an icon next to the metric label (#15805, #12298). - โฑ
st.time_inputreceived a major revamp with editable time segments, a newformatparameter to control the hour cycle (12-hour, 24-hour, or localized), seconds granularity whenstepis under 60 seconds, paste support, and improved form behavior with Enter-to-submit (#16126, #16128, #16096, #15647, #6423, #8234). - ๐ฅ
st.multiselecthas improved tag accessibility, including keyboard navigation between tags and WAI-ARIA-aligned dropdown focus (#16200, #16109). - ๐ฅ
st.download_buttonnow infers a missingfile_nameandmimefrom a file object's name when you pass data opened from disk (#16061). Thanks, SoMika00! - ๐ช
st.Pageis now a proper class, soisinstance(page, st.Page)behaves as expected (StreamlitPageremains a backward-compatible alias) (#16268). - ๐ New
server.allowedHostsconfig option lets deployments with known hostnames restrict incoming WebSocket handshakes (#16147). - ๐ก The
disabledwidget parameter is now enforced server-side, so a disabled widget never accepts a value from the browser (#16209). - ๐ป Breaking change: The deprecated
use_column_widthparameter has been removed fromst.image. Use thewidthparameter instead (#15786). - โ ๏ธ Breaking change: Passing local file paths as strings to
st.htmlandst.iframeis deprecated. Use apathlib.Pathobject to load local files instead (#16150).
Other Changes
- ๐ Bug fix:
AppTestnow converts a script file path to its parent directory before adding it tosys.path(#15775). Thanks, ishaanlabs-gg! - ๐ฆ Bug fix: An unclean WebSocket close now reconnects to the existing session, preserving widget values,
st.session_state, and run count instead of restarting the app (#15909, #8901). - ๐ชฒ Bug fix: The in-app "install skills" nudge is now suppressed when an install would only conflict, and reports why (#15966).
- ๐ Bug fix:
st.selectboxfuzzy search matches non-contiguous substrings again, fixing a regression since 1.59.0 (#16009, #16003). Thanks, LuC-9! - ๐ Bug fix:
st.popoverplaced insidest.sidebarno longer renders off-screen (#16087, #9387). - ๐ Bug fix: Pressing Escape in
st.selectboxnow clears the typed search query and restores the committed label (#16088, #16004). - ๐ท๏ธ Bug fix:
st.bar_chartand other built-in charts no longer fail on column names containing a.(#16089, #7714). - ๐ชณ Bug fix:
st.expanderno longer stays clipped after a rapid open/close interaction interrupts its animation (#16090, #16027). - ๐ชฐ Bug fix: Right-side padding is preserved when a
st.codeblock is scrolled horizontally to the end (#16091, #8206). - ๐ฆ Bug fix:
AppTestmultipage path handling is now deterministic and better documented (#16122, #8429, #8154). - ๐ฆ Bug fix:
AppTestnow clears stale elements on each rerun, so its element tree no longer accumulates duplicate widgets from earlier runs (#16123, #9128, #12566). - ๐ฆ Bug fix: An open
st.data_editorcell edit is now committed when you click outside the grid (#16132, #7868). - ๐ฆ Bug fix:
@st.fragment(run_every=...)no longer raises aTypeErrorwhen Sentry's threading integration is enabled (#16140, #16139). - ๐ธ๏ธ Bug fix:
st.data_editorrow additions no longer silently overwrite existing rows for non-RangeIndexDataFrames (#16144). - ๐ Bug fix:
st.Pagenow rejects network paths and null bytes before touching the filesystem (#16146). - ๐ฆ Bug fix: Mermaid config keys hardened by Streamlit can no longer be overridden by inline
%%{init}%%directives in diagram source (#16151). - ๐ฆ Bug fix: The
st.multiselectdropdown background now matches the sidebar theme (#16163, #11348). - ๐ฝ Bug fix: Plotly Sankey charts now honor layout fonts set via
fig.update_layout(font=...)(#16164, #11031). - ๐ป Bug fix:
st.data_editorNumberColumnnow preserves IME composition, so CJK input is no longer cut off after the first composed digit (#16165, #16129). - ๐ Bug fix: A dataframe header background configured with an alpha channel now renders stably instead of shifting color on hover (#16166, #11950).
- ๐ฆ Bug fix: Downloading an Altair/Vega-Lite chart as PNG now respects display DPI for a higher-resolution export (#16170, #8177).
- ๐ชฒ Bug fix: Fragments nested inside a shared container no longer lose their children after the enclosing parent fragment reruns (#16171, #12514).
- ๐ Bug fix: An
st.selectboxnear the bottom of the sidebar now flips its dropdown up instead of clipping past the viewport (#16199, #16181). - ๐ Bug fix:
st.helpno longer shows "page.run()" as the header in multipage apps (#16244, #11430). - ๐ Bug fix:
st.pillsandst.segmented_controlkeep the current selection highlighted when aformat_funcchanges an option's label between reruns (#16271, #16269). - ๐ท๏ธ Bug fix:
st.download_buttonnow acceptsio.StringIOdata as documented (#16272, #16270). - ๐ชณ Bug fix: Port auto-increment is restored on Windows, so a second
streamlit runno longer binds an in-use port (#16315, #16296). - ๐ชฐ Bug fix: An
st.statusopened on a container declared outside a fragment no longer blanks the app (#16316, #16281). - ๐ฆ Bug fix: The host message guard again accepts same-window self-posts, restoring embedded Streamlit-in-Snowflake auth delivery (#16327).
- ๐ฆ Streamlit no longer depends on GitPython and inspects local repositories via the
gitCLI instead (#16241).
Version 1.60.0
Release date: July 21, 2026
Highlights
- โจ You can now disable bulk data export app-wide with the new
client.disableDataExportconfig option. When set, the CSV export button is hidden forst.dataframe,st.data_editor, and chart table views, and clipboard copy is disabled for read-only dataframes (#15910, #8402, #11358).
Notable Changes
- ๐ Security hardening (breaking changes):
- Streamlit now rejects host messages that appear to originate from child iframes or injected scripts, preventing origin spoofing (CWE-346) (#15800).
- Client-supplied query strings are now capped at 512 KiB and 1,000 fields, guarding against unbounded resource allocation (CWE-770) (#15803).
- New
server.maxWidgetStateSizeconfig option (default 25 MB) limits the widget state payload a client can send per script rerun, hardening against oversized widget and custom-component payloads (#15804).
- ๐
st.dataframenow preserves row selections when the user sorts the table (#16020, #8851). - ๐
st.tabshas a newheightparameter to set a fixed pixel height for the tab panel area (#15847, #12217). - ๐ The
gapparameter inst.columnsnow accepts integer pixel values in addition to the existing string presets (#15850, #13005). - ๐จ
st.data_editornow useskeyas the primary row identity whennum_rows="fixed", improving stability when the underlying data changes (#15884). - ๐ Zero delta values in
st.metricare now displayed in neutral grey instead of green or red, so a zero change no longer implies a positive or negative direction (#15790, #15005). - ๐ Vega-Lite chart action buttons (download, copy spec to clipboard) are now integrated into the native Streamlit toolbar; the Vega-Lite action menu overlay has been removed (#15806).
Other Changes
- ๐ Bug fix: Non-finite float values (e.g.
NaN,Inf) in URL query params are now rejected to prevent unexpected behavior (#15799). - ๐ฆ Bug fix: Dangerous URLs in Graphviz link attributes are now sanitized (#15819).
- ๐ชฒ Bug fix: HTML in PyDeck chart tooltip interpolations is now escaped to prevent injection (#15820).
- ๐ Bug fix: Dangerous URLs in
st.link_buttonandst.imageare now sanitized (#15851). - ๐ Bug fix:
st.selectboxnow virtualizes long dropdown option lists for better rendering performance (#15870, #15863). - ๐ Bug fix: Viewport gutter is now preserved around dialogs on narrow screens (#15875).
- ๐ท๏ธ Bug fix: React Aria dialog overlays now stack correctly when multiple dialogs are open (#15876, #15859).
- ๐ชณ Bug fix: The "Missing Submit Button" warning has been removed (#15889, #14247).
- ๐ชฐ Bug fix:
st.tabspanels no longer stack visually after a widget rerun (#15894, #15893). - ๐ฆ Bug fix:
st.metricarea chart fill baseline is now drawn correctly (#15907). - ๐ฆ Bug fix:
run_everyauto-rerun timers are now deduplicated per fragment, preventing duplicate reruns (#15912). - ๐ฆ Bug fix: Redundant keyboard tab stop removed from the file uploader dropzone for better accessibility (#15928).
- ๐ฆ Bug fix: Auto-rerun correctly stops when a fragment is evicted (#15932).
- ๐ธ๏ธ Bug fix: A PyArrow 25 thread initialization crash is now avoided (#15947).
- ๐ Bug fix: Missing
httpxerror message for the auth extra is now surfaced correctly (#15864). - ๐ฆ Bug fix:
st.Appwith programmatic secrets now correctly honors theexpose_tokenssetting (#15865). - ๐ฆ Bug fix:
RuntimeError: reentrant call inside _io.BufferedWriteron Ctrl+C is fixed (#15949, #15740). Thanks, chang-pro! - ๐ฝ Bug fix: File watcher no longer crashes on Windows drive-root paths (#15951, #12731).
- ๐ป Bug fix: Overlay stacking and dismissal inside popovers works correctly (#15961).
- ๐ Bug fix: Mobile keyboard no longer appears for
st.selectboxwhenfilter_mode=None(#15962). - ๐ฆ Bug fix:
st.selectbox"No results" empty state is now styled correctly (#15967). - ๐ชฒ Bug fix:
IndexErrorin number formatting for values โฅ 1 quadrillion is fixed (#15971). Thanks, eeshsaxena! - ๐ Bug fix: Type-to-search in
st.selectboxis restored (#15996, #15985). - ๐ Bug fix: Typing a value in
st.number_inputinside a form now correctly submits on the first Enter press (#16013, #13751). - ๐ Bug fix: Hashing fallback warning messages are now more informative (#16040, #10957).
- ๐ท๏ธ Bug fix: Inconsistent checkbox margin in a horizontal container within a column is fixed (#16060, #13162).
- ๐ชณ Bug fix: Widgets inside a popover that is itself inside a dialog are now clickable (#16067, #16005).
- ๐ชฐ Bug fix:
st.echooutput now correctly includes decorators on the displayed function (#16068, #9252). - ๐ฉ Internal
TTLCacheimplementation replaces thecachetoolsthird-party dependency (#16014).
Version 1.59.0
Release date: July 6, 2026
Highlights
- โจ Introducing
ButtonColumnโ a new column type forst.dataframeandst.data_editorthat renders clickable buttons inside table cells, letting users trigger actions directly from a row (#14544, #7015). - ๐
st.dataframehas a new column statistics submenu โ click the dropdown icon in any column header to see per-column summary stats (#14307, #13148). - ๐ฟ Introducing
st.skeletonโ a new element that renders animated loading placeholders, making it easy to give users visual feedback while content is loading (#15169, #8032). - ๐จ Introducing
st.mermaid_chartโ render Mermaid diagrams directly in your app, letting you embed flowcharts, sequence diagrams, and more. Mermaid also works fromst.markdown(#14022, #10721).
Notable Changes
- ๐
st.chat_inputhas a newsubmit_modeparameter that controls widget behavior after the user submits a message, e.g. showing a stop button or disabling the chat input (#14344, #8323, #11854). - ๐
st.dataframeandst.data_editorsupport a newMarkdownColumntype inst.column_configthat renders Markdown text inside table cells (#13931, #10211). - ๐
st.markdownhas a newanchorsparameter for adding linkable heading anchors to Markdown content (#15722, #13913). - ๐ป You can now launch Streamlit apps directly with
python app.pyoruv run app.pyusing the newApp.run()entry point โ no morestreamlit runrequired (#15563, #9450, #11420). - ๐งฉ
st.fragmentcan now write to containers defined outside the fragment. Fragments can update any part of your app โ including elements created before the fragment โ without triggering a full rerun (#15623, #15620, #10481). - ๐
st.chat_inputnow supports pasting files directly into the input field (#15558, #10307). - ๐ค
st.write_streamnow supports OpenAI Responses API streams in addition to the existing Chat Completions streams (#15559, #11061). - ๐
st.set_page_configsupports a new"locked"option forinitial_sidebar_statethat prevents users from toggling the sidebar open or closed (#15459, #15411). - ๐
Widgets have a new
persist_stateparameter for finer control over how widget state is preserved across reruns (#15645). - ๐ท
st.camera_inputhas a newresolutionparameter to control the captured image resolution (#15766, #4320). - ๐งช
AppTestnow supports testingst.download_buttonandst.image(#15528, #9003). - ๐พ Programmatic secrets now support list values (#15491).
- โจ You can now look up Streamlit API documentation from the CLI with
streamlit docs <command>(#15547). - ๐ A new
server.xsrfCookieSameSiteconfig option lets you customize theSameSiteattribute of the XSRF cookie for deployments with specific cross-site requirements (#15634, #5793, #9397). - ๐ก Streamlit now recommends installing AI coding skills on app startup to improve your development workflow with AI coding assistants (#15437, #15473).
- โ The
/_stcore/metricsendpoint now reports memory stats in a less detailed (cheaper) form by default (#15472). - ๐ป The deprecated Snowpark connection type has been removed. Migrate to a supported connection type (#15784).
- ๐ป The deprecated
st.bokeh_chartcommand has been removed. Use thestreamlit-bokehcomponent instead (#15636).
Other Changes
- โก VegaLite charts now use Vega's native resize API for faster rendering when the container size changes (#15302).
- ๐จ The pagination widget's selected-state styling has been redesigned (#15550).
- ๐ง Various fixes related to the Baseweb library removal (#15737).
- ๐ Bug fix: The metrics endpoint no longer errors when SQLAlchemy connections are present (#15334).
- ๐ฆ Bug fix:
@st.fragment(run_every=...)no longer raises aTypeErrorin_run_with_thread_state(#15376). - ๐ชฒ Bug fix: Named Snowflake connections defined in config files are now correctly discovered and used (#15382).
- ๐ Bug fix: P-mode PIL palette images are now hashed correctly to prevent hash collisions (#15397).
- ๐ Bug fix: The server now correctly binds to IPv6 dual-stack wildcards for the default address (#15400).
- ๐ Bug fix: Stale and invalid auth cookies are now cleared on login (#15420).
- ๐ท๏ธ Bug fix:
widgetMgris synced correctly to fix lazy loading intab.open(#15460). - ๐ชณ Bug fix: Installed Custom Component v2 components are now correctly discovered in
AppTest(#15488). - ๐ชฐ Bug fix:
st.pillsandst.segmented_controlcallbacks now fire correctly after selection (#15522). - ๐ฆ Bug fix: The page title is no longer reset to the default on rerun (#15527).
- ๐ฆ Bug fix: The "Missing Submit Button" warning no longer flashes briefly on app load (#15561).
- ๐ฆ Bug fix: Streamlit now defaults to the polling file watcher in WSL environments, avoiding inotify issues (#15562).
- ๐ฆ Bug fix:
AppTestnow correctly handles formatted labels informat_funcwidgets (#15564). - ๐ธ๏ธ Bug fix: The invalid session upload error message now explains multi-replica deployment as a possible cause (#15635).
- ๐ Bug fix:
st.selectboxno longer loses its selection whenformat_funcdepends on object identity (#15639). - ๐ฆ Bug fix: Pressing Escape no longer clears the current selection in
st.multiselect(#15646). - ๐ฆ Bug fix:
StreamlitPagenow validates that itssourcematches the registered page, catching misconfiguration earlier (#15721, #10572). - ๐ฝ Bug fix:
st.dataframeno longer intercepts the Ctrl+F keyboard shortcut when the search bar is disabled (#15764). - ๐ Bug fix: Column headers in
st.dataframeno longer wrap text in the column header menu (#15772).
Version 1.58.0
Release date: May 28, 2026
Highlights
- ๐ Introducing
parallel=Truefor@st.fragment, which lets fragments run concurrently for more responsive apps and background-style workflows (#15214). - ๐ฟ Introducing
st.paginationto help you build paged interfaces, e.g. for dataframes (#14975, #10785). - ๐ Announcing
streamlit skills, a new CLI command for installing AI agent skills (#15116).
Notable Changes
- ๐
st.Appnow supports custom script error handling, letting you attach a custom exception handler to your app (#14972, #3426, #8713). - ๐
st.expanderandst.statushave a newtypeparameter for a more compact visual style (#14054, #13246). - ๐ป The deprecated
element.add_rowsfeature has been removed (#15034, #299, #13063, #7994, #5860). - ๐ป LangChain callback handler integration has been removed (#15051).
Other Changes
- ๐ Query-parameter-bound widgets now keep the URL in sync when their values change through Session State (#14744).
- ๐ Widget and icon sizing is more consistent across the app (#15056, #15098, #13945).
- โฑ Streamlit reduces the timeout for external IP lookups to avoid startup freezes when the lookup is slow or unavailable (#14984).
- ๐ก
st.markdownnow blocksjavascript:andvbscript:URLs in Markdown links (#15161). - ๐ Bug fix: Streamlit now supports symlinks in Starlette static file serving (#15112, #13600).
- ๐ฆ Bug fix: Fragment apps no longer crash because of stale auto-reruns (#15130, #15084).
- ๐ชฒ Bug fix:
blake2bhashing now usesusedforsecurity=Falsefor FIPS-compatible environments (#15149, #15148). Thanks, andriykislitsyn! - ๐ Bug fix:
st.logincookies now restore 30-day persistence with aMax-Agevalue (#15194, #15193). Thanks, GiovanniPaoloGibilisco! - ๐ Bug fix: OAuth PKCE behavior has been restored in the Starlette-based auth flow (#15282, #15115).
- ๐ Bug fix: OAuth no longer regresses with
MismatchingStateErrorafter upgrading to 1.57.0 (#15048, #14991). - ๐ท๏ธ Bug fix: Provider tokens now use
joserfc, improving auth compatibility and token handling (#15178, #15170). - ๐ชณ Bug fix:
st.vega_lite_charttooltips work again inside dialogs (#15191, #12390). Thanks, marawanokasha! - ๐ชฐ Bug fix:
st.buttonwarns when a keyboard shortcut is reserved by the browser (#15217, #15216). - ๐ฆ Bug fix:
st.markdownshows its help icon again whenunsafe_allow_html=True(#15232, #15211). - ๐ฆ Bug fix: Browser Back/Forward navigation now works for pages with Unicode URL paths (#15281, #15267).
- ๐ฆ Bug fix: Programmatically closed popovers and expanders no longer reopen when you interact with another container (#14945, #14943).
- ๐ฆ Bug fix:
st.selectboxno longer hides its first option when exactly seven options are selected (#14997, #14989). - ๐ธ๏ธ Bug fix:
st.multiselectdisables "Select all" for very large option lists to avoid performance problems (#15301, #14918, #15299). - ๐ Bug fix: Tables, dataframes, and data editors no longer accidentally overscroll during interaction (#15309). Thanks, kantuni!
Version 1.57.0
Release date: April 29, 2026
Highlights
- ๐ Introducing Starlette as the default web server! Streamlit now uses Starlette/Uvicorn instead of Tornado, bringing improved ASGI compatibility, better performance, and access to the modern Python async ecosystem. The underlying server is also exposed via
st.Appfor advanced configuration (#14553, #439, #861). - ๐ฟ Introducing
st.bottomโ a pinned container at the bottom of your app, perfect for chat inputs, toolbars, and persistent controls (#14726, #8564, #8185).
Notable Changes
- โจ Introducing the
:shimmer[]markdown directive โ add animated loading text to your apps withst.markdown(":shimmer[Loading...]")for a polished streaming experience (#14055, #13247). - โก Direct Polars-to-Arrow conversion now bypasses pandas entirely, improving performance and type fidelity for Polars DataFrames (#14885, #12913).
- ๐ป Removed deprecated
spec,use_container_width, andsharingkeyword arguments fromst.plotly_chartandst.vega_lite_chart(#14800). - ๐ป Removed the deprecated
_get_websocket_headersfunction. Usest.context.headersinstead (#14801). - ๐งช
st.testing.v1.AppTestnow supportsst.pills,st.segmented_control, andst.dataframekey lookups (#14518, #11361, #11338). - ๐ Alert elements (
st.info,st.warning,st.error,st.success) have a newtitleparameter for adding a bold header to alert messages (#14665, #12417). - ๐จ
st.menu_buttonandst.popovernow hide the chevron when using menu-style icon-only labels (#14697). - ๐ฏ
st.Appis now available in thestnamespace for programmatic app configuration (#14722). - ๐
st.Apphas a newsecretsparameter to programmatically pass secrets instead of relying onsecrets.tomlfiles (#14861, #10543). - ๐ค Streamlit now bundles developing-with-streamlit AI agent skills in the pip package:
- ๐
st.videoandst.mapnow have rounded corners matching other Streamlit elements (#14781, #12806).
Other Changes
- ๐ Bug fix:
st.dataframeno longer crashes with pandas 3ArrowStringArraycolumns (#14611, #14609). - ๐ฆ Bug fix: Custom component v1 serialization now correctly downcasts large Arrow types instead of failing (#14617, #14608).
- ๐ชฒ Bug fix:
@st.cache_dataand@st.cache_resourcenow chain the original exception inUnserializableReturnValueErrorfor better debugging (#14655, #14654). Thanks, mango766! - ๐ Bug fix: CSS Color Level 4 color functions (
oklch,lab, etc.) are now supported in color parameters (#14674, #14573). - ๐ Bug fix: Query parameter space encoding is now consistent across all operations (#14691, #14671).
- ๐ Bug fix:
st.data_editorcorrectly preservesNonevalues with pandas 3.0+ (#14694, #14693). - ๐ท๏ธ Bug fix: Namespace package children are now correctly evicted when watched source files reload (#14708, #14704).
- ๐ชณ Bug fix:
st.radionow retains selections when usingformat_funcwith custom option objects (#14815, #14814). - ๐ชฐ Bug fix:
st.bar_chartaxis labels now correctly swap whenhorizontal=True(#14866, #14830). - ๐ฆ Bug fix:
st.text_areawithheight="content"now sizes correctly on initial load (#14884, #14876). - ๐ฆ Bug fix:
st.file_uploaderno longer shows duplicate equivalent file extensions in the accepted types display (#14552, #11991).
Version 1.56.0
Release date: March 31, 2026
Highlights
- ๐ฟย Introducing
st.menu_buttonโ a new widget that renders a dropdown button with a customizable popover container for building menus, toolbars, and action lists (#13981, #11409). - ๐ย Introducing
st.iframeโ embed external URLs or raw HTML content directly in your app using an iframe (#14433, #12977). - ๐ย
st.selectboxandst.multiselectnow support afilter_modeparameter that lets users search and filter options by typing (#14537, #6160, #7238).
Notable Changes
- ๐ย
st.dataframesupports programmatically setting selections via theselectionparameter (#13594, #10128). - ๐ฏย
st.dataframehas a new"single-row-required"selection mode that always keeps exactly one row selected (#14288, #9253). - ๐ย
st.dataframecolumn configuration now supports analignmentparameter for controlling text alignment in columns (#14333, #12106). - ๐ย The column visibility menu in
st.dataframeis now always visible, making it easier to show and hide columns (#14336, #10649). - ๐นย
AudioColumnandVideoColumnare now available inst.column_configfor displaying audio and video players directly in dataframes (#14032, #8345). - ๐ย Streamlit now supports pandas 3.x (#13812, #13211).
- ๐งญย
st.navigationhas a newexpandedparameter to control how many sidebar items are visible before collapsing (#14051, #9646). - ๐ย
st.Pagenow accepts external URLs, allowing you to add links to external sites in the navigation sidebar (#13691, #9025). Thanks, t0k0shi! - ๐ผย
st.tablehas newhide_indexandhide_headerparameters for cleaner table presentation (#14113, #8235, #9251). - โกย
st.link_buttonnow supports anon_clickcallback that triggers a rerun before navigating (#14116, #7453). - ๐ย
st.file_uploaderandst.chat_inputnow accept file type shortcuts like"image","audio","video", and"document"(#14140). - ๐ย
st.chat_inputhas a newheightparameter to control the initial height of the text area (#14165, #10724). - โจย Alert elements (
st.info,st.warning,st.error,st.success) now automatically extract a leading Material icon from the message body and display it as the alert icon (#14173, #10892). - ๐ชย Streaming markdown now auto-completes incomplete syntax (e.g., unclosed bold, links, or code blocks) during streaming for a cleaner reading experience (#13939).
- ๐ทย
st.pillsandst.segmented_controlnow have arequiredparameter to enforce that at least one option is always selected (#14414, #9870). - ๐ย
st.containerhas a newautoscrollparameter that automatically scrolls to the bottom as new content is added (#14502, #8836). - ๐งฉย
st.tabs,st.expander, andst.popovernow preserve their open/closed state across reruns (#14332, #14356). - ๐ ย Static files served via
st.static/now use native content types instead of a generic fallback (#14090). - ๐ฅย Media elements now support relative static file serving URLs (e.g.,
/app/static/video.mp4) (#14317, #12104). - ๐งชย
st.file_uploaderis now supported in AppTest for programmatic testing of file upload flows (#14341, #8093). - ๐งย Widget state duplication warnings are now logged to the console instead of displayed in the app UI (#14141).
- ๐ฆย
BidiComponentResulthas been renamed toComponentResultin the custom components v2 API (#14253). - โย The
_stcore/metricsendpoint is now fully OpenMetrics-compliant (#14538).
Other Changes
- ๐ย Bug fix: Streamlit can now run with Python optimization flags (
-O/-OO) (#14171, #14155). - ๐ฆย Bug fix: Reduced false-positive file change detections on Windows by adding a stability check to the file watcher (#14174, #13954).
- ๐ชฒย Bug fix:
st.text_areawithheight="content"now correctly auto-sizes to fit content (#14228, #14222). - ๐ย Bug fix: Stale anchor links are no longer preserved when clearing transient nodes (#14251, #14249).
- ๐ย Bug fix:
BidiComponentManageris now properly initialized in AppTest mock runtime (#14301, #14274). Thanks, tysoncung! - ๐ย Bug fix: Streamlit is now compatible with Python 3.14's PEP 649 deferred annotation evaluation (#14327, #14324).
- ๐ท๏ธย Bug fix: Tooltips on selected
st.multiselectoptions are now restored (#14353, #14351). - ๐ชณย Bug fix:
server.portis now correctly updated after binding to port 0 (#14372, #11308). Thanks, joanaarnauth! - ๐ชฐย Bug fix: Bound query params are now correctly restored in the URL when navigating in multi-page apps (#14374, #14350).
- ๐ฆ ย Bug fix: Restored the
reactJsonViewCompatshim for the local dev server (#14391). - ๐ฆย Bug fix:
st.exceptionlinks no longer overflow their container at small viewport widths (#14417, #12870). - ๐ฆย Bug fix: Headings inside horizontal containers (
st.columns) no longer have extra top padding (#14419, #12434). - ๐ฆย Bug fix: Programmatic dataframe selections now return
AttributeDictionaryfor consistent dot-notation access (#14455, #14454). - ๐ธ๏ธย Bug fix: Streaming markdown with color directives no longer shows rendering artifacts (#14468, #14460).
- ๐ย Bug fix: The
session_durationmetric is now OpenMetrics-compliant (#14476, #14432). - ๐ฆย Bug fix: The main menu now has a visible border in dark mode (#14529).
Version 1.55.0
Release date: March 3, 2026
Highlights
- ๐ฟย Introducing dynamic containers:
st.tabs,st.popover, andst.expandercan rerun the app when they are opened or closed by setting theon_changeparameter. If a key is also provided, you can programmatically open and close them, too. - ๐๏ธย Announcing widget binding! Most non-trigger widgets have a
bindparameter to simplify syncing widget state with query parameters.
Notable Changes
- ๐ย
st.imagehas alinkparameter to make images clickable with HTTP/HTTPS URLs (#14139, #9836). - ๐ฅทย
st.Pagehas avisibilityparameter that lets you hide pages in the navigation menu while keeping them routable (#13905, #10738). - ๐จย Markdown supports arbitrary CSS colors for text foreground and background (#14041, #7808).
- ๐ย
st.metrichas adelta_descriptionparameter to display descriptive text next to delta values (#13848, #13690). - ๐ย You can configure the font weight and size for
st.metricwith the newmetricValueFontWeightandmetricValueFontSizeconfiguration options (#13550, #12300). Thanks, kagawa0710! - ๐ย
st.tablehasheightandwidthparameters (#13850, #10775, #10820). - ๐ย
st.altair_chartandst.vega_lite_chartsupport selections on multi-view charts (#13591, #8643). - ๐ย 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.markdownacceptswidth="auto"to adapt its default behavior depending on the flex layout of its container (#13841). - ๐ย Added a newย
client.allowedOriginsย config option to let you customize which origins can send cross-originpostMessage(#13829, #6389).
Other Changes
- ๐๏ธย Page titles in
st.Pageand section labels inst.navigationsupport Markdown (#14053, #14010, #11771). - ๐งนย Common block elements in widget labels are auto-escaped for convenience (#13887, #7359).
- ๐โโ๏ธย
st.multiselectlets users select all options or all currently filtered options with a single click (#13795, #4714). - ๐
ย Improved the design of
st.multiselectandst.selectbox(#13004). Thanks, rishi-kumar0612! - โผ๏ธย All widget drop-downs were restyled for consistency (#13796, #13797, #13798).
- โ๏ธย For better accessibility,
st.tabsdisplays navigation arrows when the tabs overflow their container horizontally (#13987, #5552). - ๐ย The app menu was redesigned (#14101):
- ๐ย Improved
streamlit config showoutput to better distinguish theme value sources (#13761). - โฅ๏ธย To improve behavior in hosted environments, the Streamlit server acknowledges client heartbeats (#13810).
- ๐ฃย Extended
sprintfto support,as a thousands separator inNumberColumn,ProgressColumn,st.number_input,st.slider, andst.metric(#13284, #1301). - โฌ๏ธย Added support for cachetools 7.x (#13839, #13801).
- โ ๏ธย Added a deprecation notice to
SnowparkConnectionfor better visibility (#14125). - ๐ฆย Bug fix:
st.spinneravoids a race condition when used right before a cache miss (#13849, #13634). - ๐ฆย Bug fix:
st.date_inputvalues are normalized in Session State to prevent a type error (#14123, #14109). - ๐ย Bug fix:
st.metricwith sparklines display correctly in horizontal flex containers (#14110, #13785). - ๐ธ๏ธย Bug fix:
SQLConnection.query()caches results at the instance level instead of the class level (#14094, #14077). - ๐ฆย Bug fix:
st.segmented_controlhas consistent border styling on hover (#14067, #12802). - ๐ฆย Bug fix:
st.date_inputandst.datetime_inputremove validation marks when they are cleared (#14066, #14052). - ๐ฆย Bug fix: Fixed a rendering regression for
vconcatcharts in Altair with faceted children (#14065, #14050). - ๐ฆ ย Bug fix:
st.Pageraised an exception if it's passed a URL path of only slashes (#14005, #13952). Thanks, nileshhadalgi016! - ๐ชฐย Bug fix: The code block copy button was moved into a toolbar to prevent text overlap (#14024, #12958).
- ๐ชณย Bug fix:
st.tabsretain their state when rendered after a transitional element likest.spinner(#14023, #14018). - ๐ท๏ธย Bug fix: Treemap and sunburst Plotly charts support selections (#13935, #9001).
- ๐ย Bug fix: Fixed a width regression for layered
vconcatcharts in Altair (#13980, #13974). - ๐ย Bug fix:
st.multiselectraises an exception whenmax_selectionsisn't positive (#13966, #13965). - ๐ย Bug fix: When a user adds a row to
st.data_editor, all columns, including hidden ones, are initialized (#13916, #13915). - ๐ชฒย Bug fix:
st.select_sliderdoesn't apply its format function twice inAppTest(#13837, #13832). - ๐ย Bug fix: Content in collapsed expanders is not included in page search (#13818).
Version 1.54.0
Release date: February 4, 2026
Notable Changes
- ๐จย The
colorparameter ofst.area_chart,st.bar_chart,st.line_chart, andst.scatter_chartsupports the basic color palette which can be configured with theming (#13739, #12694). - โฏ๏ธย You can use the new
theme.chartDivergingColorsto set default diverging colors for Plotly, Altair, and Vega-Lite charts. - ๐ย You can configure the display of error help links with a new configuration option,
client.showErrorLinks(#13472, #11238). Thanks, karubian! - ๐ย
st.logosupports Material icons and emojis (#13416). Thanks, rahuld109! - ๐ฅทย 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.dataframe(with selections)st.area_chartst.bar_chartst.line_chartst.scatter_chartst.altair_chartst.vegalite_chartst.pydeck_chartst.date_inputst.datetime_inputst.radiost.select_slider
- ๐ย
ListColumnandMultiselectColumnlet users select the text of their pills for copying (#13663). - ๐ปย
st.experimental_get_query_paramsandst.experimental_set_query_paramshave been removed. Usest.query_paramsinstead. - โ ๏ธย
st.experimental_userhas been removed. Usest.userinstead.
Other Changes
- ๐ฝย The warning about the proposed removal of
.add_rows()shows in the browser. Please leave feedback (#13063). - ๐ฆย When a
.streamlit/config.tomlfile is created after a Streamlit app is running, the file watcher will recognize it without restarting the Streamlit server (#13625, #11296). - ๐ย Bug fix: Path security validation improves protection against Server-Side Request Forgery (SSRF) and path traversal vulnerabilities (#13733).
- ๐ธ๏ธย Bug fix: Wildcard URLs display as
localhostin the browser URL and console output (#13720, #13712). - ๐ฆย Bug fix: Modals and drop-down menus don't collapse the sidebar (#13653).
- ๐ฆย Bug fix:
st.bar_chartdoesn't raise aKeyErrorwhen sorting melted data (#13695). - ๐ฆย Bug fix:
st.multiselectandst.selectboxdon't clear state when a custom class object is selected (#13648, #13646). - ๐ฆ ย Bug fix: Transient nodes used for spinners will correctly anchor themselves in the Streamlit DOM to avoid an empty delta path (#13674).
- ๐ชฐย Bug fix: Snowflake connections will re-initialize if closed (#13665).
- ๐ชณย Bug fix: Nested containers under a spinner don't raise a
Bad delta path indexerror (#13659, #13658). - ๐ท๏ธย Bug fix:
SnowflakeConnection.query()correctly passes theparamsargument to caching (#13652, #13644). - ๐ย Bug fix:
client.toolbarMode="viewer"correctly hides developer options from the settings menu (#13623). - ๐ย Bug fix: When using the experimental Starlette configuration, Streamlit auth can log users out of your identity provider and surface user tokens, consistent with recent updates (#13571).
- ๐ย Bug fix: Streamlit will defensively not load packaged components with missing or invalid component names in their manifests (#13612).
- ๐ชฒย Bug fix: The width of file chips in
st.chat_inputwas increased to reduce filename truncation (#13589). - ๐ย Bug fix:
st.bar_chartdoesn't raise an error about y-axis minimum and maximum when the bars have all the same value (#13590, #13584).
Version 1.53.0
Release date: January 14, 2026
Highlights
- โ๏ธ You can create session-scoped caller's rights connections in Streamlit in Snowflake and other Snowpark Container Services environments.
- โญ Announcing experimental support for running Streamlit with Starlette with the new
server.useStarletteconfiguration option. - ๐ Introducing
st.App, an experimental ASGI-compatible entry point that enables custom HTTP routes, middleware, lifecycle hooks, and integration with Python web frameworks like FastAPI and Starlette (#13537). - ๐ You can expose OIDC ID and access tokens in
st.user.tokens(#12044). Thanks, velochy!
Notable Changes
- ๐ช
st.logoutlogs users out of your identity provider, if supported by your OIDC setup (#12693). Thanks, velochy! - ๐ To prevent unwanted stale elements, especially in chat layouts, Streamlit treats spinners as transient elements and doesn't include them in the element refresh that happens with reruns (#12826, #9239, #10199, #13166).
- ๐งฉ For custom components v2, style isolation is set in
st.components.v2.componentinstead of when an instance is mounted (#13518). - ๐จ To access heading font size and weights in custom components without using JavaScript to parse an array, CSS custom properties in an app include individual properties for each heading font size and weight (#13268).
- โ๏ธ For custom components v2,
html,js, andcssare all fully optional (#13511). - ๐
BaseConnectionhas a new class method to scope connections globally or by session (#13506). - ๐พ
st.cache_dataandst.cache_resourcecan be scoped to a session (#13482, #6703). - ๐งน
st.cache_resourcehas a new parameteron_releaseto use to clean up resources, like closing connections (#13439, #8674). - ๐ท๏ธ
st.multiselectdoesn't includeoptionsin widget identity when akeyis provided (#13448, #7855). - ๐ข
st.number_inputdoesn't includeminandmaxin widget identity when akeyis provided (#13512, #11277). - ๐
st.selectboxdoesn't includeoptionsin widget identity when akeyis provided (#13383, #6352, #8496, #4854). - ๐๏ธ You can format values for
st.sliderwith a newformatparameter (#13392, #13243). - ๐ผ๏ธ
st.dialoghas a newiconparameter to add an icon next to the dialog title (#13244, #13202). Thanks, KaranPradhan266! - โ๏ธ You can configure
st.data_editorto allow only adding or only deleting rows (#13228, #7091). - โก๏ธ You can display a button icon on the right instead of the left with a new
icon_positionparameter (#13150, #13069). Thanks, SiddhantSadangi! - โ๏ธ
st.columns,st.container, andst.spacesupport larger and smallergapandsizevalues (#13345). - ๐ฆ You can configure the maximum file size for
st.file_uploaderandst.chat_inputwith a new parameter that overrides theserver.maxUploadSizeconfiguration option (#12816, #12692, #12579). Thanks, rishabhjain1712! - ๐ You can configure the default width of the sidebar with
st.set_page_config(#12154, #11980). Thanks, jose-mindwayai! - ๐ The
optionsparameter inst.select_slidersupports Markdown (#12960, #11774). Thanks, jensonjohnathon! - ๐ The
deltaandvalueparameters inst.metricsupport Markdown (#13094, #11773). Thanks, jensonjohnathon! - ๐ฃ You can configure number format in
st.metric(#13193, #12229, #6951). - ๐ You can set the color of
st.metricdelta indicators from the basic color palette (#13153, #4052, #6665).
Other Changes
- ๐ You can exclude the port from your Streamlit auth redirect URI to use the current port (#12251, #12249). Thanks, velochy!
- ๐ Various custom components v2 types were semantically renamed (#13515).
- ๐ When an item is removed from
st.multiselect, the scroll position of the drop down is preserved (#13384, #13317). Thanks, kagawa0710! - ๐ Pydantic sequences are treated as dataframe-like by Streamlit commands (#13348, #13344).
- ๐ The logo displayed by
st.logolinks to the app's homepage (#13222, #13155). - โจ๏ธ For improved accessibility, tooltips are keyboard focusable (#13379, #13330).
- โ For improved accessibility, anchor links are keyboard focusable (#13378, #13329).
- ๐บ๏ธ
st.jsondisplays a tooltip on hover for each element to show its full path (#13113, #13057). - ๐ฌ
st.chat_inputwas redesigned for improved style and accessibility (#13088, #13223, #13364, #13532, #13556, #13546, #13542, #13535, #13554, #13553, #13555, #13547). - ๐ Various style updates for consistency (#13536, #13557).
- ๐
st.authis compatible with Authlib version 1.6.6 (#13333, #13335, #13424). - ๐ฝ Bug fix: Embedded apps respect the theme embedding option when they are configured with a custom theme (#13498, #13496). Thanks, ranmocy!
- ๐ป Bug fix:
st.number_inputaccounts for floating point precision when incrementing and decrementing its value (#13484). - ๐ฆ Bug fix:
st.altair_chartcorrectly displays HConcat and VConcat charts (#13423, #13410). - ๐ฆ Bug fix:
st.selectboxis initialized correctly when its value is set from Session State (#13438, #13435). - ๐ฆ Bug fix:
st.htmlindents list items correctly (#13437, #13426). - ๐ Bug fix: A logger message for
SnowflakeConnectionreferences the correct URL to the Snowflake docs (#13363, #13361). - ๐ธ๏ธ Bug fix: Tooltip text with newlines renders correctly (#13365, #13339).
- ๐ฆ Bug fix: The DOM elements within
st.spinnerare properly aligned when showing elapsed time (#13388, #13387). - ๐ฆ Bug fix: Custom components v2 have the same cross-origin behavior as other elements in the app (#13376).
- ๐ฆ Bug fix: CSS custom properties in custom components handle null or unset values correctly (#13240).
- ๐ฆ Bug fix: Theme preference is persisted into new app sessions (#13306, #13280).
- ๐ชฐ Bug fix:
st.dialogdoesn't show stale elements from a previous dialog (#13297, #10907). - ๐ชณ Bug fix:
st.data_editorbehaves correctly when starting with a column ofNonevalues (#13309, #13305). - ๐ท๏ธ Bug fix: To correctly reflect edits to the theme configuration during development, theme settings are properly hashed (#13173).
- ๐ Bug fix: In v2 custom components, app-level keyboard shortcuts (like
Rfor rerun) are disabled in typing contexts to prevent unintentional usage (#13264). - ๐ Bug fix: Custom component v2 includes default values in component identity, unless a key is provided (#13266).
- ๐ Bug fix: The sidebar navigation is correctly hidden when topbar navigation is used (#13227, #13224).
- ๐ชฒ Bug fix:
st.logodisplays the logo correctly when an app uses top navigation (#13226, #13225). - ๐ Bug fix: Error messages are clearer when width or height are invalidly set to
0(#13206, #12868).
Still have questions?
Our forums are full of helpful information and Streamlit experts.