2024 release notes
This page contains release notes for Streamlit versions released in 2024. For the latest version of Streamlit, see Release notes.
Version 1.41.0 (latest)
Release date: December 10, 2024
Notable Changes
- 🔲
st.metric
andst.columns
have a parameter to show an optional border (#9927, #9928). - 🎨 Text and background color in Markdown can use the "primary" color from the
theme.primaryColor
configuration option (#9676). - 🥶 You can freeze columns with column configuration to make them always visible when scrolling horizontally (#9535, #7078).
- 3️⃣ The
type
parameter for buttons accepts a new option,"tertiary"
(#9923). - 🚶♂️ Streamlit supports
pathlib.Path
objects everywhere you can use a string path (#9711, #9783). - ⏱️
st.date_input
andst.time_input
accept ISO formatted strings for initial values (#9753). - 💬
st.write_stream
accepts async generators, which it converts internally to sync generators (#8724, #8161). - 🪵 The
client.showErrorDetails
configuration option has additional values to show or hide more information (#9909). - 🔎 When Streamlit shows stack traces in the app for uncaught exceptions, internal code is omitted or reduced for easier debugging (#9913).
- 📈
st.line_chart
shows tooltips for the nearest point on hover (#9674). - 🌐
st.html
will attempt to convert non-string objects with._repr_html_()
before falling back tostr()
(#9877). - 🐍 Streamlit supports Python 3.13 and no longer supports Python 3.8 (#9635).
Other Changes
- 🔣 Material Symbols have been updated with the latest icons (#9813, #9810).
- 👽 Streamlit supports Watchdog version 6 (#9785). Thanks, RubenVanEldik.
- 🌀 Bug fix: Streamlit only shows cached function spinners on cache misses and doesn't show spinners for nested cached functions (#9956, #9951).
- 🔈 Bug fix: Streamlit's audio buffer handles channels better to correctly play audio recordings in Firefox (#9885, #9799).
- 🦊 Bug fix: URL patterns are matched correctly to allow Community Cloud developer tools to display correctly in Firefox (#9849, #9848).
- ☠️ Bug fix: Corrected a performance and alignment problem with containers (#9901, #9456, #9560).
- 👻 Bug fix:
st.rerun
will raise an error if an invalidscope
is passed to it (#9911, #9908). - 🦋 Bug fix: Dataframe toolbars show correctly in dialogs (#9897, #9461).
- 🦀 Bug fix:
LinkColumn
regex fordisplay_text
uses the correct URI decoding (#9895, #9893). - 🦎 Bug fix:
st.dataframe
has correct type hinting whenon_selection="ignore"
(#9898, #9669). - 🐌 Bug fix: Padding is applied consistently for wide and centered layout mode (#9882, #9707).
- 🕸️ Bug fix:
st.graphviz_chart
is displayed correctly whenuse_container_width=True
(#9867, #9866). - 🦗 Bug fix: The overloaded definitions of
st.pills
andst.segmented_control
use the correct selection-mode default (#9801). Thanks, RubenVanEldik! - 🦂 Bug fix:
st.text_area
(and other widgets) are correctly submitted in a form when usingCtrl+Enter
(#9847, #9841). - 🦟 Bug Fix:
st.write
rendersDeltaGenerator
objects withst.help
(#9828, #9827). - 🦠 Bug fix:
st.text_area
correctly matches the value in Session State when used with a key (#9829, #9825). - 🪰 Bug fix:
st.text_input
does not trigger a rerun when a user submits an unchanged value (#9826). - 🪳 Bug fix: Improved styling for
st.exception
to fix overflow and incorrect padding (#9818, #9817, #9816). - 🕷️ Bug fix: Large dataframe don't overflow and cover the dataframe toolbar in fullscreen mode (#9803, #9798).
- 🐞 Bug fix:
st.audio_input
shows the correct time on recording in time zones with a half-hour offset (#9791, #9631). - 🐝 Bug fix: In iOS,
st.number_input
shows a number pad instead of a keyboard when in focus (#9766, #9763). - 🐜 Bug fix: Widget keys containing hyphens are correctly added to HTML classes in the DOM with an
st-key-
prefix (#9793). - 🪲 Bug fix: Audio files created by
st.audio_input
include a timestamp to ensure unique file names (#9768). - 🐛 Bug fix: Double slash URL pathnames do not create a 301 redirect (#9754, #9690).
Version 1.40.0
Release date: November 6, 2024
Highlights
- 💊 Introducing
st.pills
to create a single- or multi-select group of pill-buttons. - 🎛️ Introducing
st.segmented_control
to create a segmented button or button group. - 🎤 Announcing the general availability of
st.audio_input
, a widget to let users record sound with their microphones.
Notable Changes
- ➡️ Markdown renders a limited set of typographical symbols (arrows and comparators).
- You can use
:streamlit:
to render the Streamlit logo in Markdown. - 🐍
st.text
wraps text and no longer uses monospace font. - 🪣 You can set
use_container_width
forst.image
.use_column_width
is deprecated. - 📅
st.date_input
infers the first day of the week from the user’s locale (#9706, #5215).
Other Changes
- 🎶 Streamlit’s CLI tool accepts array values for configuration options (#9577).
- ⛓️ Static file serving supports symlinks (#9147, #9146). Thanks, link89!
- 🚀 Streamlit provides helpful links for deployment when an app is running locally (#9681).
- ↕️ The fullscreen button for charts matches with the dataframe toolbar (#9721).
- 🏃 The running-man icon has a brief delay before rendering to avoid an unnecessary flicker for fast running apps (#9732).
- 🖇️ The
ComponentRequestHandler
allows symlinks (#9588). - 👆 Streamlit works with
pillow
version 11 (#9742). Thanks, hauntsaninja! - 🗺️ Deck.gl was upgraded to version 9.0.33 (#9636).
- 🦠 Bug fix:
st.latex
stays center-aligned when using thehelp
keyword argument (#9698, #9682). Thanks, emmagarr! - 🪰 Bug fix: Apps correctly access local storage on Android (#9744, #9740).
- 🕷️ Bug fix: Cached class methods can be cleared (#9642, #9633).
- 🐞 Bug fix: Streamlit clears fragment auto-reruns when a user changes pages. This prevents an invalid index (#9617).
- 🐝 Bug fix:
st.page_link
margins are correct (#9625). - 🐜 Bug fix: Form widgets show submission instructions when in focus (#9576, #7079).
- 🪲 Bug fix:
st.navigation
correctly reconcilesclient.showSidebarNavigation
(#9589, #9581). - 🐛 Bug fix:
st.text_area
requires a minimum height of 68px which fits two lines (#9561, #9217). - 💅 Bug fix: Various styling fixes (#9529, #8131, #9555, #9496, #9554, #9349, #7739).
Version 1.39.0
Release date: October 1, 2024
Highlights
- 🎤 Introducing
st.experimental_audio_input
to let users record with their microphones! - 📍
st.pydeck_chart
can return selection events!
Notable Changes
- 😃
st.button
,st.download_button
,st.form_submit_button
,st.link_button
, andst.popover
each have a new parameter to add an icon. - 🏢
st.logo
has a new parameter to adjust the size of your logo. - 🧭
st.navigation
lets you display an always-expanded or collapsible menu using a newexpanded
parameter. - ↕️ You can set
height
andwidth
forst.map
andst.pydeck_chart
. - ↩️ Form submission behavior can be configured with a new
enter_to_submit
parameter (#9480, #7538, #9406, #8042). - ⏱️ A new config option,
server.disconnectedSessionTTL
, lets you set a minimum time before a disconnected session is cleaned up (#9179). - 🤹 Dataframes support multi-index headers (#9483, #6319).
Other Changes
- 🔑 Widget keys appear as HTML classes in the DOM with an
st-key-
prefix (#9295, #5437, #3888). - 🔍 The
StreamlitAPIException
class has been extended into more specific exceptions for some of the most common errors (#9318). - 🗺️
st.map
andst.pydeck_chart
have a full-screen toggle that matches the dataframe toolbar. - ⬆️ Frontend dependencies for Vega have been upgraded (#9443, #9438).
- 🕵️ Streamlit is compatible with Watchdog version 5 (#9354). Thanks, RubenVanEldik!
- 🔁 Streamlit is compatible with Tenacity version 9 (#9348).
- 🔢 Bug fix: Column configuration will override any text or number format from
pandas.Styler
(#9538, #7329, #7977). - 🦋 Bug fix: Deck GL zoom button has the correct border radius (#9536).
- 🦐 Bug fix: Embedded apps have the correct padding to avoid hiding elements (#9524, #9341).
- 🎨 Bug fix: The
st.multiselect
placeholder text has the correct color (#9523, #9514). - 🧹 Bug fix:
st.json
scrolls horizontally instead of overflowing its container (#9521, #9520). - 🌬️ Bug fix: Bokeh charts (temporarily) don't have a fullscreen button to prevent horizontal scrolling (#9528, #2358).
- 🐡 Bug fix: Users are correctly redirected if they add a trailing slash to a page URL (#9500, #9127).
- 📁 Bug fix:
st.Page
warns developers against using subdirectories inurl_path
, which is not supported (#9499). - 💩 Bug fix: Streamlit correctly calculates dataframe widths to prevent Minified React error #185: Maximum update depth exceeded (#9490, #7949).
- ☠️ Bug fix: ScriptRunContext handles the active script hash to avoid a race condition where widgets lose state in a multipage app (#9441, #9100).
- 🪱 Bug fix: PDFs don't appear as plain text when hosted through static file serving in Streamlit (#9439, #9425).
- 👻 Bug fix: Fragment elements don't disappear when used with custom components and callbacks (#9381, #9389, #9372).
- 👽 Bug fix: Streamlit watches the correct directory for file changes (#9453, #7467).
- 🦀 Bug fix: The sidebar navigation uses page count to determine when to display a "show more" button for more consistent behavior (#9394).
- 🦎 Bug fix: The internal script hash is updated at the beginning of a script run instead of the end for correct page routing when a script run is interrupted (#9408, #8975).
- 🐌 Bug fix: Bold formatting in headers is ignored (#9395, #4248).
- 🕸️ Bug fix: Streamlit correctly identifies the MIME type of more files to prevent custom components from not rendering (#9390, #9365). Thanks, t0mdavid-m!
- 🦗 Bug fix: The
client.showSidebarNavigation
configuration option works correctly withst.navigation
(#9379). - 🦂 Bug fix: Streamlit uses
example.com
instead oftest.com
in a health check to avoid unnecessary warnings (#9371). Thanks, wyattscarpenter! - 🦟 Bug fix:
st.Page
will raise an error if it tries to initialize a page with an empty path (#9374, #8892). - 🦠 Bug fix: An unchanged
st.dialog
can be programmatically reopened after a user has dismissed it (#9333, #9323). - 🪰 Bug fix: Streamlit will not remove underscores from declared page titles in
st.Page
(#9375, #8890). - 🪳 Bug fix:
st.logo
does not flicker when switching pages (#9361, #8815). - 🕷️ Bug fix:
st.data_editor
allows users to re-add a row with the same index after deleting it (#8864, #8854). - 🐞 Bug fix:
st.logo
maintains its aspect ratio when resized to fit within the sidebar width (#9368). - 🐝 Bug fix: Streamlit correctly removes
st.logo
if not called during a rerun (#9337, #9336). - 🐜 Bug fix:
st.logo
does not flicker when the sidebar changes its state (#9338). - 🪲 Bug fix: Streamlit renders
st.balloons
andst.snow
in a React Portal for improved rendering and compatibility withst.dialog
(#9335, #9236). - 🐛 Bug fix: Option labels are cleanly truncated when
st.multiselect
is displayed in a narrow container (#9334, #8213).
Version 1.38.0
Release date: August 27, 2024
Highlights
- 📈 Streamlit natively supports more dataframe formats! Use dataframe and series objects from popular libraries like Dask, Modin, Numpy, pandas, Polars, PyArrow, Snowpark, Xarray, and more. Use database cursors compliant with the Python Database API Specification 2.0. Use anything that supports the Python dataframe interchange protocol. See the docs.
Notable Changes
- ↔️ You can control the initial expansion state of
st.json
elements. - 🧑💻 You can choose to wrap lines in
st.code
. - 🕵️ Streamlit supports Kubernetes style secrets so you can use Snowflake Snowpark Container Services secret format (#9078).
- ⤴️ Breaking change: We removed a patch that allows custom validators in
pydantic<2.0
(#9257). - 💔 Breaking change: We removed the experimental cache replay feature from caching decorators (#9305).
Other Changes
- 🌐 For better app efficiency, a WebSocket reconnect will not trigger a rerun unless a script run was interrupted (#9083).
- 👋 We updated our
streamlit hello
app to use Google Material icons. - ⌨️
st.number_input
,st.selectbox
,st.slider
,st.select_slider
, andst.radio
provide more precise type hinting for their return values (#9048, #9296, #8717). Thanks, Asaurus1! - ⭐
st.feedback
provides more precise type hinting for its return value (#9216). Thanks, wyattscarpenter! - 💅 We improved theme management for embedded apps via
postMessage
(#9103). - 🌱 Bug fix: Within the sidebar, the image for
st.logo
resizes along with the sidebar width (#9298, #8707). - 🪹 Bug fix: When a parent fragment updates, Streamlit cleans up child fragments correctly (#9246, #9233, #9267).
- 💩 Bug fix: Elements unstale within a fragment rerun as they are updated instead of all together at the end of the fragment rerun (#9285).
- 🪱 Bug fix: If a block type changes during a rerun, Streamlit discards the child elements of that block to prevent improper visual artifacts, like
st.tabs
causing a blank page (#9276, #9259, #8676). - ☠️ Bug fix: Widget state is preserved when page reruns are interrupted with another rerun (#9187, #9163). Thanks, dannyopts!
- 👽 Bug fix:
options
inst.selectbox
,st.multiselect
,st.radio
, andst.select_slider
correctly usedict_items
(#9241, #9237, #5377). - 👻 Bug fix: A
SelectboxColumn
index will show with the correct, grayed-out styling in a dataframe (#9231, #8772). - 🦀 Bug fix:
st.write_stream
will not immediately fail when receiving an empty chunk (#9234, #9227). - 🦋 Bug fix: Streamlit won't auto-scroll to an empty anchor, if present (#9206, #9203).
- 🦎 Bug fix: We changed the handling of
scriptRunId
to preventst.tabs
from showing extra, empty tabs in fragments (#9186, #9158, #9215). - 🐌 Bug fix: Automatically rerunning fragments don't raise
FragmentStorageKeyError
to prevent a possible race condition (#9183, #9080). - 🕸️ Bug fix: We improved
st.plotly_chart
's handling of the pass-through keyword argumentconfig
(#9190, #9134). - 🦗 Bug fix: Markdown in all
label
parameters correctly ignores headers (#9189, #9141). - 🦂 Bug fix: We reverted a change to fragments which caused some widgets to lose state in some circumstances (#9178, #9171).
- 🦟 Bug fix: The deprecation warnings for
st.experimental_fragment
andst.experimental_dialog
only show when the commands are called. This prevents custom components which use them from raising premature warnings on import (#9170, #9143). - 🦠 Bug fix:
st.code
shows syntax highlighting for diff code whenlanguage="diff"
(#9172, #8687). - 🪰 Bug fix: Streamlit commands that raise
ScriptControlException
execute as expected in try-except blocks (#9167, #9155, #9182). - 🪳 Bug fix: The
value
forst.date_input
has the correct type for linting (#9149). Thanks, wyattscarpenter! - 🕷️ Bug fix: We updated
plotly.js
to supporthoversubplots="axis"
(#9144, #9118). - 🐞 Bug fix: We stabilized the identity of
st.map
instances so the command doesn't create multiple maps when its parameters are updated (#9092, #8329). - 🐝 Bug fix: You can now clear the cache for cached class instance methods (#9101, #8638).
- 🐜 Bug fix: Copy buttons work correctly in dialogs (#9130, #9112).
- 🪲 Bug fix: Streamlit magic works consistently in for-else, while-else, try-else, try-except, and match blocks (#9110, #9109). Thanks, whitphx!
- 🐛 Bug fix: When printing an app, the bottom container will always print at the end without overlapping other content (#9129).
Version 1.37.0
Release date: July 25, 2024
Highlights
- 🍪 Introducing
st.context
to read headers and cookies! - ⭐ Introducing
st.feedback
to collect ratings and sentiment from your users! - 👟 Announcing the general availability of
st.fragment
, a decorator that lets you rerun functions independently of the whole page. - 🍿 Announcing the general availability of
st.dialog
, a decorator that lets you create modal dialogs.
Notable Changes
- ℹ️ You can use icons from the Material Symbols library in Markdown!
- 📈 You can pass
graphviz.Source
objects tost.graphviz_chart
. - 📊 You can modify the stacking behavior for
st.bar_chart
andst.area_chart
. - 🔭 Within a fragment, you can scope
st.rerun
to the fragment. - 🪺 Streamlit supports nested fragments (#8931, #8635).
- 📞 Fragments can be used in callback functions (#8916, #8591).
Other Changes
- ⭕ Material Symbols are rounded instead of outlined (#8998).
- 🔢 Streamlit supports Numpy version 2.0 (#8940).
- 😄 We've updated emoji validation for new emojis (#8923).
- 👻 We've removed several experimental commands with new, generally available versions (#8943).
- ☠️ We've removed deprecated configuration options per their announced expiration date (#9005, #9013, #9018).
- 🦎 Bug fix: Nested fragments rerun correctly when a child fragment precedes a widget in the parent fragment (#9114).
- 🐌 Bug fix: Streamlit validates file paths before performing additional checks when using static file serving for improved security (#8990).
- 🕸️ Bug fix:
st.map
displays at the correct width insidest.expander
(#9070, #8004). - 🦗 Bug fix: Streamlit displays the correct (Windows) path for
secrets.toml
in an error message (#9061, #6147). - 🦂 Bug fix:
st.switch_page
correctly clears non-embed query parameters when the user switches pages (#9059, #9050). - 🦟 Bug fix: Custom themes display correctly for multipage elements like
st.page_link
(#8994, #8978). - 🦠 Bug fix:
st.snow
andst.balloons
don't show in prints (#9053, #7790). - 🪰 Bug fix: We've improved the default formatting for
st.number_input
(#9035, #7163). - 🪳 Bug fix: An
st.navigation
example was corrected (#9027, #9026). Thanks, mahotd! - 🕷️ Bug fix: Dialogs no longer have a brief delay when closing (#9023, #8747).
- 🦀 Bug fix: Streamlit correctly raises a
KeyError
when encountered in a fragment instead of a misleading, fragment-related error (#9011, #8494). - 🐞 Bug fix: Streamlit doesn't clear
MediaFileManager
on fragment reruns to prevent invalid references (#9010, #8932). - 🐝 Bug fix: Custom themes are correctly removed when deleted (#8989, #8962).
- 🐜 Bug fix: Streamlit supports non-unix style paths for correct multipage routing in Windows (#8988, #8958).
- 🪲 Bug fix: Using
st.rerun
in a fragment will not cause the app's main body content to render in the fragment in rare events (#8798). - 🐛 Bug fix: When an exception is raised within a fragment, Streamlit shows the error message within the fragment (#8868).
Version 1.36.0
Release date: June 20, 2024
Highlights
- 🧭 Introducing
st.navigation
andst.Page
for a new way to define multipage apps! Check out the docs to learn more.
Notable Changes
- 📊
st.bar_chart
can render charts horizontally. - ℹ️
st.expander
supports adding an icon next to its label. - 🏗️
st.columns
lets you set vertical alignment. - 📲 Custom components support callback functions (#8633, #3977).
- 📥 Fragments no longer support rendering widgets outside of their main body (#8756).
- 🏷️ You can now customize axis labels for
st.area_chart
,st.bar_chart
,st.line_chart
, andst.scatter_chart
. - ⌛ The caching parameter
experimental_allow_widgets
is deprecated (#8817). - ❌ Streamlit no longer supports legacy caching.
st.cache
is now an alias forst.cache_data
andst.cache_resource
(#8737). - ⬆️ Streamlit supports
protobuf
version 5 (#8627).
Other Changes
- ✨ Streamlit Hello uses
st.navigation
andst.Page
, the new, preferred method for declaring multipage apps (#8806). - 🧹 Streamlit no longer appends "· Streamlit" to the page title of apps, unless running on Community Cloud (#8900).
- 🦋 Streamlit magic and
st.write
usest.json
to displayst.secrets
(#8659, #2905). - 🔍 Streamlit doesn't automatically check for newer version on PyPi (#8841, #8453).
- 🐌 Bug fix: Custom component functions require importing
streamlit.components.v1
(#8666, #8644). - 🕸️ Bug fix: Reverted change to handle Altairs
resolve_scale
method since it caused a regression (#8845, #8642). - 🦗 Bug fix: Images in Markdown do not overflow the Markdown container (#8794).
- 🦂 Bug fix: Clarified the error message for
st.selectbox
whenindex
is larger than the size ofoptions
(#8775, #8771). - 🦟 Bug fix: Streamlit correctly handles non-widget elements with IDs (#8770, #8768).
- 🦠 Bug fix: Docstrings correctly identify when
use_container_width=True
is the default (#8809). - 🪰 Bug fix: Streamlit has a consistent minimum element height for better vertical alignment (#8797, #8835, #8027, #8706).
- 🪳 Bug fix: Added check to ensure
SessionInfo
is initialized before performing actions (#8779, #8321, #7549). - 🕷️ Bug fix: Dataframe use raw numbers without formatting by default (#8708, #8695).
- 🐞 Bug fix: Updated the error message for disallowed writes to Session State (#8720, #8715).
- 🐝 Bug fix: Streamlit doesn't initialize
LocalSourcesWatcher
if file watching is disabled (#8741, #8738). - 🐜 Bug fix:
st.experimental_dialog
no longer has an invalid default value fortitle
(#8729). - 🪲 Bug fix: Removed deprecated kwargs in
ast.Call
to prevent type error (#8711). Thanks, JelleZijlstra! - 🐛 Bug fix:
st.experimental_dialog
is explicitly exported to avoid a type checking error (#8728, #8712).
Version 1.35.0
Release date: May 23, 2024
Highlights
- 📈 Announcing user selections for charts! Use
st.plotly_chart
,st.altair_chart
, andst.vega_lite_chart
to make chart widgets for even more interactive apps. - 🚣♂️ Announcing user selections for dataframes. Get row and column selections from users with
st.dataframe
. - 💼 Introducing
st.logo
to add an image in the sidebar, above navigation.
Notable Changes
- 🔗
st.page_link
supports Material icons (#8593). - ⚓ Anchor button for headers display inline at the end of headers for a more beautiful and consistent appearance (#8587).
- 🈂️
SQLConnection
acceptsquery
as asqlalchemy.URL.create
parameter so you can specify character sets (#8581). Thanks, LucianLiu6!
Other Changes
- 🕸️ Bug fix: A fallback method was added for CSV downloads to increase browser compatibility (#8452, #8210).
- 🦗 Bug fix: Column config is deep-copied when cloned to prevent unintentional modifications (#8677).
- 🦂 Bug fix:
st.data_editor
renders correctly when usingnum_rows=dynamic
with null values in added rows (#8640, #7458). - 🦟 Bug fix:
streamlit run
will display thelocalhost
address when initializing Streamlit withserver.headless=true
(#8647, #8629). - 🦠 Bug fix: Scroll margin matches the new toolbar (app chrome) height (#8641, #8554).
- 🪰 Bug fix: Enum coercion is compatible with StrEnum (#8622, #8500). Thanks, 97k!
- 🪳 Bug fix: Focus is returned to chat input after clicking submit for a better mobile experience (#8637).
- 🕷️ Bug fix: Internal parameter and view names for Altair charts are stabilized for better performance (#8628).
- 🐞 Bug fix: Typing was improved for
st.query_params.update()
andst.query_params.from_dict()
(#8614, #8613). Thanks, Asaurus1! - 🐝 Bug fix: The fullscreen button no longer appears for
st.table
to prevent unwanted side scrolling (#8621, #2358). - 🐜 Bug fix: Streamlit correctly clears stale elements when using
st.rerun
(#8599, #8360). - 🪲 Bug fix: Custom components can be executed standalone for testing and scripting (#8620, #8606).
- 👻 Bug fix: Plotly charts no longer render cached data when updated (#8191, #5902)
- 👽 Plotly chart widths will not overflow its parent container when rendered in a bordered container (#8191, #8244).
- 🦀 Plotly charts using
webgl
render correctly on M1/M2 chipsets for macOS (#8191, #8169). - 🦋 Plotly charts are sized correctly when rendered vertically adjacent (#8191, #7597).
- 🦎 Bug fix: Plotly charts retain their state when the app window is resized (#8191, #6324).
- 🐛 Bug fix: Plotly charts in
st.tabs
no longer flicker when changing tabs (#8191, #8575). - 🐌 Bug fix: Plotly charts respect
use_container_width
if this parameter is changed between reruns (#8191, #8576).
Version 1.34.0
Release date: May 2, 2024
Highlights
- 🍿 Introducing
st.experimental_dialog
! Create a modal overlay that can also rerun independently from the rest of your app. Check out the docs to learn how.
Notable Changes
- 🔣
st.toast
,st.chat_message
,st.set_page_config
,st.info
,st.success
,st.error
, andst.warning
can use Google Material Symbols for their icons. - 🌈 Markdown supports background colors for text. Check out the feature demo app.
- 🎥
st.audio
andst.video
can now be set to autoplay.st.video
can be muted. - 🗃️ You can clear specific cached values for a cached function. Thanks, OscarSaharoy!
- ❓ You can now set all query parameters with a single call to
st.query_params.from_dict
. Thanks, Asaurus1!
Other Changes
- 🔲 Streamlit supports Modin and Snowpark pandas DataFrames and Series (#8506).
- ⏱️ Improved support for
period
data types inst.dataframe
andst.data_editor
(#7987). - 🗺️ Streamlit supports using
pydeck-carto
withst.pydeck_chart
(#8422). - ❄️ Additional
snowflake
requirements were updated to allow Python versions 3.8 to 3.11 (#8538). - 🍞
st.toast
received visual improvements and now appears in the top right (#8433). - 🦋 Visual tweaks for dialogs and modals.
- 🦀 Bug fix:
st.write_stream
returns an empty string when passed a generator with no yield (#8560). - 🦎 Bug fix: Widgets that support
None
values can be correctly set toNone
through Session State (#8529, #7649). - 🐌 Bug fix: If the initial value for
st.date_input
is not set and today's date falls outside the declared minimum or maximum, then the minimum or maximum will be used instead, whichever is closer (#8519, #6167). - 🕸️ Bug fix: Altair's
resolve_scale
method is handled correctly (#8497, #1667). - 🦗 Bug fix:
st.multiselects
correctly handles sets when passed tooptions
ordefault
(#8471, #8466). - 🦂 Bug fix:
st.status
does not show the expander toggle when empty (#8369). - 🦟 Bug fix: The width of
vconcat
charts in Vega and Altair is set correctly (#8498, #2751). - 🦠 Bug fix: Apps print beautifully and no longer show excessive whitespace (#8502, #7815).
- 🪰 Bug fix: Invalid escape sequences were removed to avoid warnings from
pytest
(#8510, #8501). - 🪳 Bug fix:
st.file_uploader
callback is correctly executed once per file selection after the first selection (#8493, #4877). - 🕷️ Bug fix: Streamlit is compatible down to
pillow
version 7.1.0 instead of 9.1.0 (#8492, #8486). - 🐞 Bug fix: Widget values are correctly dropped when a script run is interrupted by switching pages (#8425, #7338).
- 🐝 Bug fix: Apps in dark mode will return to dark mode after printing (#8469, #7879).
- 🐜 Bug fix: Component ready state is dynamic to avoid race conditions that caused blank apps in Safari (#8434, #8362).
- 🪲 Bug fix:
st.slider
yields a Python error whenmin_value
is less than or equal tomax_value
(#8413, #8342). - 🐛 Bug fix: Time is offset correctly for Vega and Altair (#8278, #4342).
Version 1.33.0
Release date: April 4, 2024
Highlights
- 👟 Introducing
st.experimental_fragment
to decorate functions and rerun them independently of the whole page. Check out the docs and give your apps a speed boost! - 🌐 Introducing
st.html
to insert custom HTML into your app! Check out the docs for how to use it.
Notable Changes
- 📺
st.audio
andst.video
allow looping and setting an end time (#8203, #8348). - 🔁
AppTest
allows switching pages withAppTest.switch_page
(#8280). - 🧪
format_func
is accessible inAppTest
for widgets that use it (#8189, #8019, #7679). - 📈 Column configuration now includes
AreaChartColumn
.LineChartColumn
no longer shows area (#8237). - 🚧 Breaking change:
st.write
will no longer setunsafe_allow_html=True
when passed an object containing a_repr_html_
method. For more information, see PR #8238.
Other Changes
- 🖱️Users can click on the widget label to focus on input for
st.number_input
,st.text_input
, andst.text_area
(#8155). Thanks, filiptammergard! - ⬆️ Streamlit supports
packaging
version 24.x (#8338, #8328). - 🕸️ Bug fix: Streamlit now watches for changes to imported modules in addition to pages (#8372). Thanks, zyxue!
- 🦗 Bug fix: Overflowing toast messages are correctly truncated (#8337, #8330).
- 🦂 Bug fix:
st.status
correctly updates to complete when using LangChain'sStreamlitCallbackHandler
(#8331). - 🦟 Bug fix: Custom components no longer show white backgrounds in dark themes (#8242, #8156, #7813).
- 🦠 Bug fix: Content area width is reduced when a fullscreen icon would otherwise cause horizontal overflow (#8279, #6990).
- 🪰 Bug fix: Custom components with undefined frame heights will render with a height of 0 (#8290, #8285).
- 🪳 Bug fix: Restored a check for active sessions to prevent apps from needlessly running when no users are connected (#8294).
- 🕷️ Bug fix: Custom themes have precedence over embedding options (#8021, #7118).
- 🐞 Bug fix: Reverted the async timer to expire session storage cache to address computational efficiency (#8281).
- 🐝 Bug fix: When using
st.popover
withuse_container_width=True
, the popover container's minimum width will match the popover button (#8266, #8261). - 🐜 Bug fix: Using
st.rerun
with a triggering widget inAppTest
no longer creates an infinite loop (#8264, #7768). - 🪲 Bug fix: URLs are correctly decoded in
LinkColumn
if regex is used or if not using fully qualified URLs (#8258, #7064). - 🐛 Bug fix:
st.query_params
only sends oneForwardMsg
when updating multiple parameters (#8205, #8199). Thanks, Asaurus1!
Version 1.32.0
Release date: March 7, 2024
Highlights
- 🍿 Introducing
st.popover
to create popover elements in your Streamlit apps. Check out the docs to see how to use it!
Notable Changes
- 📺 You can now pass subtitles to
st.video
! Check out our feature demo. - ⚗️
AppTest
includes support forst.expander
andst.status
. - 🧪
AppTest.from_function
accepts a function that takes arguments and/or returns a value. - 🧩 The timeout warning for custom components was replaced with an element skeleton to improve the UX for slow-loading components, especially in some cloud-hosted platforms (#8179, #7046).
- 📄
st.switch_page
andst.page_link
received significant improvements to path handling, performance, and visual appearance (see below for details). - 🦀 Bug fix: Streamlit uses
glide-data-grid
version 6.0.4 to fix a variety of dataframe issues (#7779, #6900, #7032, #7727, #6810, #7930, #7949, #7831, #8168). - 💦 Bug fix: We've plugged a significant memory leak in the coroutine loop. Apps that generate a large number of small messages between client and server will benefit greatly (#8068, #7989, #6510).
Other Changes
- 💪 Multiple modules are now lazy-loaded to speed up Streamlit's import time (#8150, #8143, #8134, #8113, #8125, #8111, #8109, #6066).
- 🖼️
st.write
supportsPIL
images (#8039). - 🔗
st.radio
allows markdown links within the items passed tooptions
(#8028, #7992). - 💀 The
deprecation.showPyplotGlobalUse
config option is deprecated and will be removed in the subsequent release (#8133). - 🤖 Streamlit supports AzureOpenAI chat stream (#8107, #8084).
- 🌐 The
/healthz
endpoint supports the HTTP HEAD method (#8145, #8144). Thanks, rahulmistri1997! - 🌀 The
cache
parameter forst.spinner
is now private (_cache
) since it's for internal use (#8118). - 🏃 Session storage is checked and expired asynchronously to improve performance and efficiency of apps with lower traffic (#8083).
- 🐜
st.write_stream
raises a descriptiveException
when the message cannot be parsed (#8036). - 📘 Fixed a typo in the examples for
st.switch_page
andst.page_link
(#8162). Thanks, t1emp0! - 👻 Bug fix:
st.help
correctly displays conditional members (#8228). - 🦋 Bug fix: App State fully clears on page change to prevent lingering stale elements (#8208).
- 🦎 Bug fix:
st.info
,st.success
,st.warning
, andst.error
don't overflow with long markdown strings (#8194, #6394). - 🐌 Bug fix: Streamlit shows a warning that port 3000 is reserved for development when the server port is set to 3000 (#8152, #8149).
- 🕸️ Bug fix:
st.page_link
andst.switch_page
have improved path calculation for consistency (#8127). - 🦗 Bug fix:
st.page_link
shows the correct path in browser on hover (#8086, #8080). - 🦂 Bug fix:
st.page_link
andst.switch_page
normalize paths for correct handling in Windows (#8103, #8070). - 🦟 Bug fix: Script runner uses a while loop instead of recursion to avoid stack overflows (#8100).
- 🦠 Bug fix:
st.page_link
andst.switch_page
correctly handle relative paths prefixed with"/"
(#8085, #8081). - 🪰 Bug fix:
st.image
parses paths in Windows correctly (#8092, #7271, #6066). - 🪳 Bug fix:
st.switch_page
no longer waits for the current page to finish running before switching pages (#8054, #7954). - 🕷️ Bug fix:
st.map
and other simple charts correctly handle color when data is not indexed starting from 0 (#8158, #8079, #8077). Thanks, awhazell! - 🐞 Bug fix:
st.selectbox
,st.multiselect
,st.select_slider
, andst.radio
use shallow copies of their options to prevent unexpected mutations (#8064, #7534). - 🐝 Bug fix: The selected time in
st.time_input
displays correctly in dark mode (#8056, #7436). - 🪲 Bug fix: Dataframe scrollbars display correctly in the latest version of Chrome (#8034).
- 🐛 Bug fix: Casting
st.query_params
tostr
will print the content of the query parameters instead of the class description (#8030).
Version 1.31.0
Release date: February 1, 2024
Release videos
Highlights
- 🔗 Introducing
st.page_link
! Now, you can build custom navigation menus for your multipage apps. Check out our docs to see how. - 💦 Announcing
st.write_stream
to conveniently handle generators and streamed responses. Check out our docs to see how making chat apps just got easier.
Notable Changes
- 📝
st.chat_input
can be used inline and placed anywhere in the app. You can also have multiplest.chat_input
widgets on a page (#7896).
Other Changes
- 🧹 Internal refactoring and cleanup (#7980). Thanks, whitphx!
- ❄️ Bug fix: Snowpark is now an optional dependency for
SnowflakeConnection
(#7919). - 🕷️ Bug fix: The watchdog suggestion is disabled when
server.fileWatcherType
is set tonone
orpoll
(#8024, #7999). - 🐞 Bug fix: Required columns can be hidden when not using
st.data_editor
with dynamic rows (#7996, #7991). - 🐝 Bug fix: New period types are supported for pandas 2.2.0 (#7988).
- 🐜 Bug fix: Custom components receive only the app's origin and path to avoid reloading components when query parameters change (#7951, #7503). Thanks, eric-skydio!
- 🪲 Bug fix:
st.progress
won't raise an exception when given a value above 1.0 due to float precision (#7953, #5517). Thanks, notiona! - 📚 Streamlit supports
importlib-metadata
version 7 (#7925). Thanks, elgalu! - 🐛 Bug fix:
AppTest
correctly sees widgets inside containers (#7923, #7711). - 💿 Custom components no longer accumulate style elements when re-rendered for better performance (#7914). Thanks, Tom-Julux!
Version 1.30.0
Release date: January 11, 2024
Release videos
Highlights
- 🔄 Announcing
st.switch_page
to programmatically switch pages in multipage apps! Check out our docs to learn about this highly anticipated feature! - ❓Introducing
st.query_params
to handle variables passed through your app's URL. Check out our docs to understand this feature and how it's been upgraded and improved from our experimental version!
Notable Changes
- 📐
st.container
can be configured with a height to create grids or scrolling containers (#7697, #2169, #2447). - 🔗 For dataframes,
LinkColumn
has a simplified UI and can be configured with display text, including programmatically defined text through regular expressions (#7784, #7741, #6787). - 🧭 Sidebar navigation for multipage apps can be hidden via configuration (#7852).
- ⏩ Plotly figures can load even faster when used in combination with
orjson
(#7860). Thanks, eric-skydio! - ♻️ Behavior change: Query parameters are removed when changing pages (#7817, #6725, #5505).
Other Changes
- 🛠️
showFooter
is no longer an embed option since the footer no longer exists (#7902, #7785). - 🕵️ All security concerns should be reported through HackerOne (#7783).
- 🕷️ Bug fix: Tabs are not disabled when stale to prevent flickering (#7905, #7820).
- 🛡️ Bug fix: The full file path is used instead of a prefix to prevent custom components from reaching beyond their own folders (#7901).
- 🪱 Bug fix: Widgets raise an exception if its values aren't Python comparable (#7840, #3714).
- 🐞 Bug fix: The down-arrow icons on expanders maintain a consistent size (#7596). Thanks, matiboux!
- 🐝 Bug fix: Tabs no longer flicker when switching between them (#7904).
- 🐜 Bug fix: Enter-to-submit is automatically disabled when the associated
st.form_submit_button
is disabled (#7827, #7822). - 🪲 Bug fix: Required columns cannot be hidden with column configuration (#7888, #7559).
- 🐛 Bug fix: Using
nan
as a value inSelectboxColumn
will raise an error instead of silently failing (#7887, #7558). - 🌙 Bug fix: Custom component iframes allow dark mode (#7821, #7813).
- 🪰 Bug fix: The command to start Streamlit is not sent to the frontend (#7787).
- 💅 Bug fix: The background color of
st.toggle
is enhanced for better visibility (#7788). - 🪳 Bug fix: Built-in charts can handle ordered categorical columns (#7771, #7776).
Still have questions?
Our forums are full of helpful information and Streamlit experts.