Release notes (historical)
This page contains release notes for Streamlit versions less than 1.22.0. For more recent versions of Streamlit, see Release notes.
Version 1.21.0
Release date: April 6, 2023
Highlights
- 📏 Introducing
st.divider
— a command that displays a horizontal line in your app. Learn how to use this command in its API reference. - 🔏 Streamlit now supports the use of a global
secrets.toml
file, in addition to a project-level file, to easily store and securely access your secrets. Learn more in Secrets management. - 🚀 st.help has been revamped to show more information about object methods, attributes, classes, and more, which is great for debugging (#5857, #6382)!
Notable Changes
- 🪜 st.time_input supports adding a stepping interval with the keyword-only
step
parameter (#6071). - ❓ Most text elements can include tooltips with the
help
parameter (#6043). - ↔️ st.pyplot has a
use_container_width
parameter to set the chart to the container width (now all chart elements support this parameter) (#6067). - 👩💻 st.code supports optionally displaying line numbers to the code block's left with the boolean
line_numbers
parameter (#5756, #6042). - ⚓ Anchors in header elements can be turned off by setting
anchor=False
(#6158).
Other Changes
- 🐼 st.table and st.dataframe support
pandas.Period
, and number and boolean types in categorical columns (#2547, #5429, #5329, #6248). - 🕸️ Added
.webp
to the list of allowed static file extensions (#6331) - 🐞 Bug fix: stop script execution on websocket close to immediately clear session information (#6166, #6204).
- 🐜 Bug fixes: updated allowed/disallowed label markdown behavior such that unsupported elements are unwrapped and only their children (text contents) render (#5872, #6036, #6054, #6163).
- 🪲 Bug fixes: don't push browser history states on rerun, use HTTPS to load external resources in
streamlit hello
, and make the browser back button work for multipage apps (#5292, #6266, #6232). Thanks, whitphx! - 🐝 Bug fix: avoid showing emoji on non-UTF-8 terminals. (#2284, #6088). Thanks, kcarnold!
- 📁 Bug fix: override default use of File System Access API for
react-dropzone
so thatst.file_uploader
's File Selection Dialog only shows file types corresponding to those included in thetype
parameter (#6176, #6315). - 💾 Bug fix: make the
.clear()
method on cache-decorated functions work (#6310, #6321). - 🏃 Bug fix:
st.experimental_get_query_params
doesn't need reruns to work (#6347, #6348). Thanks, PaleNeutron! - 🐛 Bug fix:
CachedStFunctionWarning
mentionsexperimental_allow_widgets
instead of the deprecatedsuppress_st_warning
(#6216, #6217).
Version 1.20.0
Release date: March 09, 2023
Notable Changes
- 🔐 Added support for configuring SSL to serve apps directly over HTTPS (#5969).
- 🖼️ Granular control over app embedding behavior with the
/?embed
and/?embed_options
query parameters. Learn how to use this feature in our docs (#6011, #6019). - ⚡ Enabled the
runner.fastReruns
configuration option by default to make apps much more responsive to user interaction (#6200).
Other Changes
- 🍔 Cleaned up the hamburger menu by removing the least used options (#6080).
- 🖨️ Design changes to ensure apps being printed or saved as a PDF look good (#6180).
- 🐞 Bug fix: improved
dtypes
checking inst.experimental_data_editor
(#6185, #6188). - 🐛 Bug fix: properly position
st.metric
'shelp
tooltip when not inside columns (#6168). - 🪲 Bug fix: regression in retrieving messages from the server's
ForwardMsgCache
(#6210). - 🌀 Bug fix:
st.cache_data
docstring for theshow_spinner
param now listsstr
as a supported type (#6207, #6213). - ⏱️ Made ping and websocket timeouts far more forgiving (#6212).
- 🗺️
st.map
andst.pydeck_chart
docs state that Streamlit's Mapbox token will not work indefinitely (#6143).
Version 1.19.0
Release date: February 23, 2023
Highlights
- ✂️ Introducing
st.experimental_data_editor
, a widget that allows you to edit DataFrames and many other data structures in a table-like UI. Read more in our documentation and blog post.
Other Changes
- ✨ Streamlit's GitHub README got a new look (#6016).
- 🌚 Improved readability of styled dataframe cells in dark mode (#6060, #6098).
- 🐛 Bug fix: make apps work again in the latest versions of Safari, and in Chrome with third-party cookies blocked (#6092, #6094, #6087, #6100).
- 🐞 Bug fix: refer to new cache primitives in the "Clear cache" dialog and error messages (#6082, #6128).
- 🐝 Bug fix: properly cache class member functions and instance methods (#6109, #6114).
- 🐜 Bug fix: regression in
st.metric
tooltip position (#6093, #6129). - 🪲 Bug fix: allow fullscreen button to show for dataframes, charts, etc, in expander (#6083, #6148).
Version 1.18.0
Release date: February 09, 2023
Highlights
- 🎊 Introducing
@st.cache_data
and@st.cache_resource
— two new caching commands to replacest.cache
! Check out our blog post and documentation for more information.
Notable Changes
- 🪆
st.columns
supports up to one level of column nesting (i.e., columns inside columns) in the main area of the app. - ⏳
st.progress
supports adding a message to display above the progress bar with thetext
keyword parameter. - ↔️
st.button
has an optionaluse_container_width
parameter to allow you to stretch buttons across the full container width. - 🐍 We formally added support for Python 3.11.
- 🖨️ Save your app as a PDF via the "Print" option in your app's hamburger menu.
- 🛎️ Apps can serve small, static media files via the
enableStaticServing
config option. See our documentation on how to use this feature and our demo app for an example.
Other Changes
- 🏁 All Streamlit endpoints (including
/healthz
) have been renamed to have a consistent pattern and avoid any clashes with reserved endpoints of GCP (notably Cloud Run and App Engine) (#5534). - ⚡ Improved caching performance when multiple sessions access an uncomputed cached value simultaneously (#6017).
- 🚧 Streamlit only displays deprecation warnings in the browser when the
client.showErrorDetails
config option is set toTrue
. Deprecation warnings always get logged to the console, regardless of whether they're displayed in-browser (#5945). - 🏓 Refactored the
st.dataframe
internals to improve dataframe handling and conversion, such as detecting more types, converting key-value dicts to dataframes, and more (#6026, #6023). - 💽 The behavior of widget labels when they are passed unsupported Markdown elements is documented (#5978).
- 📊 Bug fix: Plotly improvements — upgraded multiple frontend dependencies, including Plotly, to the latest version to properly redraw cached charts, make Plotly mapbox animations work, and allow users to update the figure layout when using the Streamlit theme (#5885, #5967, #6055).
- 📶 Bug fix: allow browser tabs that transiently disconnect (due to a network blip, load balancer timeout, etc.) to avoid losing all of their state (#5856).
- 📱 Bug fix: the keyboard is hidden on mobile when
st.selectbox
andst.multiselect
have less than 10 options (#5979). - 🐝 Bug fix: design tweaks to
st.metric
,st.multiselect
,st.tabs
, and menu items to prevent label overflow and scrolling issues, especially with small viewport sizes (#5933, #6034). - 🐞 Bug fix: switched to a functioning Twemoji URL from which page favicons are loaded in
st.set_page_config
(#5943). - ✍️ More type hints (#5986). Thanks, harahu!
Version 1.17.0
Release date: January 12, 2023
Notable Changes
- 🪄
@st.experimental_singleton
supports an optionalvalidate
parameter that accepts a validation function for cached data and is called each time the cached value is accessed. - 💾
@st.experimental_memo
'spersist
parameter can also accept booleans.
Other Changes
- 📟 Multipage apps exclude
__init__.py
from the page selector (#5890). - 📐 The iframes of embedded apps have the ability to dynamically resize their height (#5894).
- 🐞 Bug fix: thumb values of range sliders respect the container width (#5913).
- 🪲 Bug fix: all examples in docstrings of Streamlit commands contain relevant imports to make them reproducible (#5877).
Version 1.16.0
Release date: December 14, 2022
Highlights
- 👩🎨 Introducing a new Streamlit theme for Altair, Plotly, and Vega-Lite charts! Check out our blog post for more information.
- 🎨 Streamlit now supports colored text in all commands that accept Markdown, including
st.markdown
,st.header
, and more. Learn more in our documentation.
Notable Changes
- 🔁 Functions cached with
st.experimental_memo
orst.experimental_singleton
can contain Streamlit media elements and forms. - ⛄ All Streamlit commands that accept pandas DataFrames as input also support Snowpark and PySpark DataFrames.
- 🏷 st.checkbox and st.metric can customize how to hide their labels with the
label_visibility
parameter.
Other Changes
- 🗺️
st.map
improvements: support for upper case columns and better exception messages (#5679, #5792). - 🐞 Bug fix:
st.plotly_chart
respects the figure's height attribute and theuse_container_width
parameter (#5779). - 🪲 Bug fix: all commands with the
icon
parameter such as st.error, st.warning, etc, can contain emojis with variant selectors (#5583). - 🐝 Bug fix: prevent
st.camera_input
from jittering when resizing the browser window (#5661). - 🐜 Bug fix: update exception layout to avoid overflow of stack traces (#5700).
Version 1.15.0
Release date: November 17, 2022
Notable Changes
- 💅 Widget labels can contain inline Markdown. See our docs and demo app for more info.
- 🎵
st.audio
now supports playing audio data passed in as NumPy arrays with the keyword-onlysample_rate
parameter. - 🔁 Functions cached with
st.experimental_memo
orst.experimental_singleton
can contain Streamlit widgets using theexperimental_allow_widgets
parameter. This allows caching checkboxes, sliders, radio buttons, and more!
Other Changes
- 👩🎨 Design tweak to prevent jittering in sliders (#5612).
- 🐛 Bug fix: links in headers are red, not blue (#5609).
- 🐞 Bug fix: properly resize Plotly charts when exiting fullscreen (#5645).
- 🐝: Bug fix: don't accidentally trigger
st.balloons
andst.snow
(#5401).
Version 1.14.0
Release date: October 27, 2022
Highlights
- 🎨
st.button
andst.form_submit_button
support designating buttons as "primary" (for additional emphasis) or "secondary" (for normal buttons) with thetype
keyword-only parameter.
Notable Changes
- 🤏
st.multiselect
has a keyword-onlymax_selections
parameter to limit the number of options that can be selected at a time. - 📄
st.form_submit_button
now has thedisabled
parameter that removes interactivity.
Other Changes
- 🏓
st.dataframe
andst.table
accept categorical intervals as input (#5395). - ⚡ Performance improvements to Plotly charts (#5542).
- 🪲 Bug fix:
st.download_button
supports non-latin1 characters in filenames (#5465). - 🐞 Bug fix: Allow
st.image
to render a local GIF as a GIF, not as a static PNG (#5438). - 📱 Design tweaks to the sidebar in multipage apps (#5538, #5445, #5559).
- 📊 Improvements to the axis configuration for built-in charts (#5412).
- 🔧 Memo and singleton improvements: support text values for
show_spinner
, usedatetime.timedelta
objects asttl
parameter value, properly hash PIL images andEnum
classes, show better error messages when returning unevaluated dataframes (#5447, #5413, #5504, #5426, #5515). - 🔍 Zoom buttons in maps created with
st.map
andst.pydeck_chart
use light or dark style based on the app's theme (#5479). - 🗜 Websocket headers from the current session's incoming WebSocket request can be obtained from a new "internal" (i.e.: subject to change without deprecation) API (#5457).
- 📝 Improve the text that gets printed when you first install and use Streamlit (#5473).
Version 1.13.0
Release date: September 22, 2022
Notable Changes
- 🏷 Widgets can customize how to hide their labels with the
label_visibility
parameter. - 🔍
st.map
adds zoom buttons to the map by default. - ↔️
st.dataframe
supports theuse_container_width
parameter to stretch across the full container width. - 🪄 Improvements to
st.dataframe
sizing: Column width calculation respects column headers, supports double click between column headers to autosize, better fullscreen support, and fixes the issue with thewidth
parameter.
Other Changes
- ⌨️
st.time_input
allows for keyboard-only input (#5194). - 💿
st.memo
will warn the user when usingttl
andpersist
keyword argument together (#5032). - 🔢
st.number_input
returns consistent type after rerun (#5359). - 🚒
st.sidebar
UI fixes including a fix for scrollbars in Firefox browsers (#5157, #5324). - 👩💻 Improvements to usage metrics to guide API development.
- ✍️ More type hints! (#5191, #5192, #5242, #5243, #5244, #5245, #5246) Thanks harahu!
Version 1.12.0
Release date: August 11, 2022
Highlights
- 📊 Built-in charts (e.g.
st.line_chart
) get a brand-new look and parametersx
andy
! Check out our blog post for more information.
Notable Changes
- ⏯ Functions cached with
st.experimental_memo
orst.experimental_singleton
can now contain staticst
commands. This allows caching text, charts, dataframes, and more! - ↔️ The sidebar is now resizable via drag and drop.
- ☎️
st.info
,st.success
,st.error
, andst.warning
got a redesign and have a new keyword-only parameter:icon
.
Other Changes
- 🎚️
st.select_slider
correctly handles all floats now (#4973, #4978). - 🔢
st.multi_select
can take values from enums (#4987). - 🍊
st.slider
range values can now be set throughst.session_state
(#5007). - 🎨
st.progress
got a redesign (#5011, #5086). - 🔘
st.radio
better deals with list-like dataframes (#5021). - 🧞♂️
st.cache
properly handles JSON files now (#5023). - ⚓️ Headers render markdown now when the
anchor
parameter is set (#5038). - 🗻
st.image
can now load SVGs from Inkscape (#5040). - 🗺️
st.map
andst.pydeck_chart
use light or dark style based on the app's theme (#5074, #5108). - 🎈 Clicks on elements below
st.balloons
andst.snow
don't get blocked anymore (#5098). - 🔝 Embedded apps have lower top padding (#5111).
- 💅 Adjusted padding and alignment for widgets, charts, and dataframes (#4995, #5061, #5081).
- ✍️ More type hints! (#4926, #4932, #4933)
Version 1.11.0
Release date: July 14, 2022
Highlights
- 🗂 Introducing
st.tabs
to have tab containers in your app. See our documentation on how to use this feature.
Notable Changes
- ℹ️
st.metric
supports tooltips with thehelp
keyword parameter. - 🚇
st.columns
supports setting the gap size between columns with thegap
keyword parameter.
Other Changes
- 💅 Design tweaks to
st.selectbox
,st.expander
,st.spinner
(#4801). - 📱 The sidebar will close when users select a page from the navigation menu on mobile devices (#4851).
- 🧠
st.memo
supports dataclasses! (#4850) - 🏎 Bug fix for a race condition that destroyed widget state with rapid interaction (#4882).
- 🏓
st.table
presents overflowing content to be scrollable when placed inside columns and expanders (#4934). - 🐍 Types: More updated type annotations across Streamlit! (#4808, #4809, #4856)
Version 1.10.0
Release date: June 2, 2022
Highlights
- 📖 Introducing native support for multipage apps! Check out our blog post and try out our new
streamlit hello
.
Notable Changes
- ✨
st.dataframe
has been redesigned. - 🔘
st.radio
has ahorizontal
keyword-only parameter to display options horizontally. - ⚠️ Streamlit Community Cloud will support richer exception formatting.
- 🏂 Get user information on private apps using
st.experimental_user
.
Other Changes
- 📊 Upgraded Vega-Lite library to support even more interactive charting improvements. See their release notes to find out more. (#4751).
- 📈
st.vega_lite_chart
will respond to updates, particularly in response to input widgets (#4736). - 💬
st.markdown
with long text will always wrap (#4696). - 📦 Support for PDM (#4724).
- ✍️ Types: Updated type annotations across Streamlit! (#4679, #4680, #4681, #4682, #4683, #4684, #4685, #4686, #4687, #4688, #4690, #4703, #4704, #4705, #4706, #4707, #4708, #4710, #4723, #4733).
Version 1.9.0
Release date: May 4, 2022
Notable Changes
- 🪗
st.json
now supports a keyword-only argument,expanded
on whether the JSON should be expanded by default (defaults toTrue
). - 🏃♀️ More performance improvements from reducing redundant work each script run.
Other Changes
- 🏇 Widgets when
disabled
is set/unset will maintain its value (#4527). - 🧪 Experimental feature to increase the speed of reruns using configuration
runner.fastReruns
. See #4628 for the known issues in enabling this feature. - 🗺️ DataFrame timestamps support UTC offset (in addition to time zone notation) (#4669).
Version 1.8.0
Release date: March 24, 2022
Notable Changes
- 🏃♀️ Dataframes should see performance improvements (#4463).
Other Changes
- 🕰
st.slider
handles timezones better by removing timezone conversions on the backend (#4348). - 👩🎨 Design improvements to our header (#4496).
Version 1.7.0
Release date: March 3, 2022
Highlights
- Introducing
st.snow
, celebrating our acquisition by Snowflake! See more information in our blog post.
Version 1.6.0
Release date: Feb 24, 2022
Other Changes
- 🗜 WebSocket compression is now disabled by default, which will improve CPU and latency performance for large dataframes. You can use the
server.enableWebsocketCompression
configuration option to re-enable it if you find the increased network traffic more impactful. - ☑️ 🔘 Radio and checkboxes improve focus on Keyboard navigation (#4308).
Version 1.5.0
Release date: Jan 27, 2022
Notable Changes
- 🌟 Favicon defaults to a PNG to allow for transparency (#4272).
- 🚦 Select Slider Widget now has the
disabled
parameter that removes interactivity (completing all of our widgets) (#4314).
Other Changes
- 🔤 Improvements to our markdown library to provide better support for HTML (specifically nested HTML) (#4221).
- 📖 Expanders maintain their expanded state better when multiple expanders are present (#4290).
- 🗳 Improved file uploader and camera input to call its
on_change
handler only when necessary (#4270).
Version 1.4.0
Release date: Jan 13, 2022
Highlights
- 📸 Introducing
st.camera_input
for uploading images straight from your camera.
Notable Changes
- 🚦 Widgets now have the
disabled
parameter that removes interactivity. - 🚮 Clear
st.experimental_memo
andst.experimental_singleton
programmatically by using theclear()
method on a cached function. - 📨 Developers can now configure the maximum size of a message to accommodate larger messages within the Streamlit application. See
server.maxMessageSize
. - 🐍 We formally added support for Python 3.10.
Other Changes
- 😵💫 Calling
str
orrepr
onthreading.current_thread()
does not cause a RecursionError (#4172). - 📹 Gracefully stop screencast recording when user removes permission to record (#4180).
- 🌇 Better scale images by using a higher-quality image bilinear resampling algorithm (#4159).
Version 1.3.0
Release date: Dec 16, 2021
Notable Changes
- 💯 Support for NumPy values in
st.metric
. - 🌐 Support for Mesh Layers in PyDeck.
- 📊 Updated Plotly chart version to support the latest features.
- 🏀
st.spinner
element has visual animated spinner. - 🍰
st.caption
supports HTML in text withunsafe_allow_html
parameter.
Other Changes
- 🪲 Bug fix: Allow
st.session_state
to be used to set number_input values with no warning (#4047). - 🪲 Bug fix: Fix footer alignment in wide mode (#4035).
- 🐞 Bug fix: Better support for Graphviz and Bokeh charts in containers (columns, expanders, etc.) (#4039).
- 🐞 Bug fix: Support inline data values in Vega-Lite (#4070).
- ✍️ Types: Updated type annotations for experimental memo and singleton decorators.
- ✍️ Types: Improved type annotations for
st.selectbox
,st.select_slider
,st.radio
,st.number_input
, andst.multiselect
.
Version 1.2.0
Release date: Nov 11, 2021
Notable Changes
- ✏️
st.text_input
andst.text_area
now have aplaceholder
parameter to display text when the field is empty. - 📏 Viewers can now resize the input box in
st.text_area
. - 📁 Streamlit can auto-reload when files in sub-directories change.
- 🌈 We've upgraded Bokeh support to 2.4.1! We recommend updating your Bokeh library to 2.4.1 to maintain functionality. Going forward, we'll let you know if there's a mismatch in your Bokeh version via an error prompt.
- 🔒 Developers can access secrets via attribute notation (e.g.
st.secrets.key
vsst.secrets["key"]
) just like session state. - ✍️ Publish type annotations according to PEP 561. Users now get type annotations for Streamlit when running mypy (#4025).
Other Changes
- 👀 Visual fixes (#3863, #3995, #3926, #3975).
- 🍔 Fixes to the hamburger menu (#3968).
- 🖨️ Ability to print session state (#3970).
Version 1.1.0
Release date: Oct 21, 2021
Highlights
- 🧠 Memory improvements: Streamlit apps allocate way less memory over time now.
Notable Changes
- ♻️ Apps automatically rerun now when the content of
secrets.toml
changes (before this you had to refresh the page manually).
Other Changes
- 🔗 Redirected some links to our brand-new docs site, e.g. in exceptions.
- 🪲 Bug fix: Allow initialization of range slider with session state (#3586).
- 🐞 Bug fix: Refresh chart when using
add_rows
withdatetime
index (#3653). - ✍️ Added some more type annotation in our codebase (#3908).
Version 1.0.0
Release date: Oct 5, 2021
Highlights
- 🎈Announcing Streamlit 1.0! To read more about check out our 1.0 blog post.
Other Changes
- 🐞 Fixed an issue where using
df.dtypes
to show datatypes for a DF fails while using Arrow (#3709), Image captions stay within image width and are readable (#3530).
Version 0.89.0
Release date: Sep 22, 2021
Highlights
- 💰 Introducing
st.experimental_memo
andexperimental_singleton
, a new primitive for caching! See our blog post. - 🍔 Streamlit allows developers to configure their hamburger menu to be more user-centric.
Notable Changes
- 💅 We updated our UI to a more polished look with a new font.
- 🎨 We now support
theme.base
in the theme object when it's sent to custom components. - 🧠 We've modified session state to reset widgets if any of their arguments changed even if they provide a key.
- Some widget behavior may have changed, but we believe this change makes the most sense. We have added a section to our documentation describing how they behave.
Other Changes
Version 0.88.0
Release date: Sep 2, 2021
Highlights
- ⬇️ Introducing
st.download_button
, a new button widget for easily downloading files.
Notable Changes
- 🛑 We made changes to improve the redacted exception experience on Streamlit Community Cloud. When
client.showErrorDetails=true
exceptions display the Error Type and the Traceback, but redact the actual error text to prevent data leaks.
Version 0.87.0
Release date: Aug 19, 2021
Highlights
- 🔢 Introducing
st.metric
, an API for displaying KPIs. Check out the demo app showcasing the functionality.
Other Changes
- 🐞 Bug Fixes: File uploader retains state upon expander closing (#3557), setIn Error with
st.empty
(#3659), Missing IFrame embeds in docs (#3706), Fix error writing certain PNG files (#3597).
Version 0.86.0
Release date: Aug 5, 2021
Highlights
- 🎓 Our layout primitives are graduating from beta! You can now use
st.columns
,st.container
andst.expander
without thebeta_
prefix.
Notable Changes
- 📱 When using
st.columns
, columns will stack vertically when viewport size <640px so that column layout on smaller viewports is consistent and cleaner. (#3594).
Other Changes
- 🐞 Bug fixes: Fixed
st.date_input
crashes if its empty (#3194), Opening files with utf-8(#3022),st.select_slider
resets its state upon interaction (#3600).
Version 0.85.0
Release date: Jul 22, 2021
Highlights
- 🏹 Streamlit now uses Apache Arrow for serializing data frames when they are sent from Streamlit server to the front end. See our blog post.
- (Users who wish to continue using the legacy data frame serialization can do so by setting the
dataFrameSerialization
config option to"legacy"
in theirconfig.toml
).
- (Users who wish to continue using the legacy data frame serialization can do so by setting the
Other Changes
- 🐞 Bug fixes: Unresponsive pydeck example (#3395), JSON parse error message (#2324), Tooltips rendering (#3300), Colorpicker not working on Streamlit Sharing (#2689).
Version 0.84.0
Release date: Jul 1, 2021
Highlights
- 🧠 Introducing
st.session_state
and widget callbacks to allow you to add statefulness to your apps. Check out the blog post
Notable Changes
- 🪄
st.text_input
now has anautocomplete
parameter to allow password managers to be used
Other Changes
- Using st.set_page_config to assign the page title no longer appends "Streamlit" to that title (#3467)
- NumberInput: disable plus/minus buttons when the widget is already at its max (or min) value (#3493)
Version 0.83.0
Release date: Jun 17, 2021
Highlights
- 🛣️ Updates to Streamlit docs to include step-by-step guides which demonstrate how to connect Streamlit apps to various databases & APIs
Notable Changes
- 📄
st.form
now has aclear_on_submit
parameter which "resets" all the form's widgets when the form is submitted.
Other Changes
Version 0.82.0
Release date: May 13, 2021
Notable Changes
- ♻️ Improvements to memory management by forcing garbage collection between script runs.
Version 0.81.1
Release date: Apr 29, 2021
Highlights
- 📝 Introducing
st.form
andst.form_submit_button
to allow you to batch input widgets. Check out our blog post - 🔤 Introducing
st.caption
so you can add explainer text anywhere in you apps. - 🎨 Updates to Theming, including ability to build a theme that inherits from any of our default themes.
- 🚀 Improvements to deployment experience to Streamlit sharing from the app menu.
Other changes
- Support for binary files in Custom Components (#3144)
Version 0.80.0
Release date: Apr 8, 2021
Highlights
- 🔐 Streamlit now support Secrets management for apps deployed to Streamlit Sharing!
- ⚓️ Titles and headers now come with automatically generated anchor links. Just hover over any title and click the 🔗 to get the link!
Other changes
- Added
allow-downloads
capability to custom components (#3040) - Fixed markdown tables in dark theme (#3020)
- Improved color picker widget in the Custom Theme dialog (#2970)
Version 0.79.0
Release date: Mar 18, 2021
Highlights
- 🌈 Introducing support for custom themes. Check out our blog post
- 🌚 This release also introduces dark mode!
- 🛠️ Support for tooltips on all input widgets
Other changes
Version 0.78.0
Release date: Mar 4, 2021
Features
- If you're in the Streamlit for Teams beta, we made a few updates to how secrets work. Check the beta docs for more info!
- Dataframes now displays timezones for all DateTime and Time columns, and shows the time with the timezone applied, rather than in UTC
Notable Bug Fixes
- Various improvement to column alignment in
st.beta_columns
- Removed the long-deprecated
format
param fromst.image
, and replaced withoutput_format
.
Version 0.77.0
Release date: Feb 23, 2021
Features
- Added a new config option
client.showErrorDetails
allowing the developer to control the granularity of error messages. This is useful for when you deploy an app, and want to conceal from your users potentially-sensitive information contained in tracebacks.
Notable bug fixes
- Fixed bug where
st.image
wasn't rendering certain kinds of SVGs correctly. - Fixed regression where the current value of an
st.slider
was only shown on hover.
Version 0.76.0
Release date: February 4, 2021
Notable Changes
- 🎨
st.color_picker
is now out of beta. This means the old beta_color_picker function, which was marked as deprecated for the past 3 months, has now been replaced with color_picker. - 🐍 Display a warning when a Streamlit script is run directly as
python script.py
. st.image
'suse_column_width
now defaults to anauto
option which will resize the image to the column width if the image exceeds the column width.- ✂️ Fixed bugs (2437 and 2247) with content getting cut off within a
st.beta_expander
- 📜 Fixed a bug in
st.dataframe
where the scrollbar overlapped with the contents in the last column. - 💾 Fixed a bug for
st.file_uploader
where file data returned was not the most recently uploaded file. - ➕ Fixed bugs (2086 and 2556) where some LaTeX commands were not rendering correctly.
Version 0.75.0
Release date: January 21, 2021
Notable Changes
- 🕳
st.empty
previously would clear the component at the end of the script. It has now been updated to clear the component instantly. - 🛹 Previously in wide mode, we had thin margins around the webpage. This has now been increased to provide a better visual experience.
Version 0.74.0
Release date: January 6, 2021
Notable Changes
- 💾
st.file_uploader
. has been stabilized and the deprecation warning and associated configuration option (deprecation.showfileUploaderEncoding
) has been removed. - 📊
st.bokeh_chart
is no longer duplicated when the page loads. - 🎈 Fixed page icon to support emojis with variants (i.e. 🤦♀️ vs 🤦🏼♀️) or dashes (i.e 🌙 - crescent-moon).
Version 0.73.0
Release date: December 17, 2020
Notable Changes
- 🐍 Streamlit can now be installed on Python 3.9. Streamlit components are not yet compatible with Python 3.9 and must use version 3.8 or earlier.
- 🧱 Streamlit Components now allows same origin, enabling features provided by the browser such as a webcam component.
- 🐙 Fix Streamlit sharing deploy experience for users running on Git versions 2.7.0 or earlier.
- 🧰 Handle unexpected closing of uploaded files for
st.file_uploader
.
Version 0.72.0
Release date: December 2, 2020
Notable Changes
- 🌈 Establish a framework for theming and migrate existing components.
- 📱 Improve the sidebar experience for mobile devices.
- 🧰 Update
st.file_uploader
to reduce reruns.
Version 0.71.0
Release date: November 11, 2020
Notable Changes
- 📁 Updated
st.file_uploader
to automatically reset buffer on app reruns. - 📊 Optimize the default rendering of charts and reduce issues with the initial render.
Version 0.70.0
Release date: October 28, 2020
Notable Changes
- 🧪
st.set_page_config
andst.color_picker
have now been moved into the Streamlit namespace. These will be removed from beta January 28th, 2021. Learn more about our beta process here. - 📊 Improve display of bar charts for discrete values.
Version 0.69.0
Release date: October 15, 2020
Highlights:
- 🎁 Introducing Streamlit sharing, the best way to deploy, manage, and share your public Streamlit apps—for free. Read more about it on our blog post or sign up here!
- Added
st.experimental_rerun
to programatically re-run your app. Thanks SimonBiggs!
Notable Changes
- 📹 Better support across browsers for start and stop times for st.video.
- 🖼 Bug fix for intermittently failing media files
- 📦 Bug fix for custom components compatibility with Safari. Make sure to upgrade to the latest streamlit-component-lib.
Version 0.68.0
Release date: October 8, 2020
Highlights:
- ⌗ Introducing new layout options for Streamlit! Move aside, vertical layout. Make a little space for... horizontal layout! Check out our blog post.
- 💾 File uploader redesigned with new functionality for multiple files uploads and better support for working with uploaded files. This may cause breaking changes. Please see the new api in our documentation
Notable Changes
- 🎈
st.balloon
has gotten a facelift with nicer balloons and smoother animations. - 🚨 Breaking Change: Following the deprecation of
st.deck_gl_chart
in January 2020, we have now removed the API completely. Please usest.pydeck_chart
instead. - 🚨 Breaking Change: Following the deprecation of
width
andheight
forst.altair_chart
,st.graphviz_chart
,st.plotly_chart
, andst.vega_lite_chart
in January 2020, we have now removed the args completely. Please set the width and height in the respective charting library.
Version 0.67.0
Release date: September 16, 2020
Highlights:
- 🦷 Streamlit Components can now return bytes to your Streamlit App. To create a component that returns bytes, make sure to upgrade to the latest streamlit-component-lib.
Notable Changes
- 📈 Deprecation warning: Beginning December 1st, 2020
st.pyplot()
will require a figure to be provided. To disable the deprecation warning, please setdeprecation.showPyplotGlobalUse
toFalse
- 🎚
st.multiselect
andst.select
are now lightning fast when working with large datasets. Thanks masa3141!
Version 0.66.0
Release date: September 1, 2020
Highlights:
- ✏️
st.write
is now available for use in the sidebar! - 🎚 A slider for distinct or non-numerical values is now available with
st.select_slider
. - ⌗ Streamlit Components can now return dataframes to your Streamlit App. Check out our SelectableDataTable example.
- 📦 The Streamlit Components library used in our Streamlit Component template is now available as a npm package (streamlit-component-lib) to simplify future upgrades to the latest version. Existing components do not need to migrate.
Notable Changes
- 🐼 Support StringDtype from pandas version 1.0.0
- 🧦 Support for running Streamlit on Unix sockets
Version 0.65.0
Release date: August 12, 2020
Highlights:
- ⚙️ Ability to set page title, favicon, sidebar state, and wide mode via st.beta_set_page_config(). See our documentation for details.
- 📝 Add stateful behaviors through the use of query parameters with st.experimental_set_query_params and st.experimental_get_query_params. Thanks @zhaoooyue!
- 🐼 Improved pandas dataframe support for st.radio, st.selectbox, and st.multiselect.
- 🛑 Break out of your Streamlit app with st.stop.
- 🖼 Inline SVG support for st.image.
Callouts:
- 🚨Deprecation Warning: The st.image parameter format has been renamed to output_format.
Version 0.64.0
Release date: July 23, 2020
Highlights:
- 📊 Default matplotlib to display charts with a tight layout. To disable this,
set
bbox_inches
toNone
, inches as a string, or aBbox
- 🗃 Deprecation warning for automatic encoding on
st.file_uploader
- 🙈 If
gatherUserStats
isFalse
, do not even load the Segment library. Thanks @tanmaylaud!
Version 0.63.0
Release date: July 13, 2020
Highlights:
- 🧩 Support for Streamlit Components!!! See documentation for more info.
- 🕗 Support for datetimes in
st.slider
. And, of course, just like any other value you use inst.slider
, you can also pass in two-element lists to get a datetime range slider.
Version 0.62.0
Release date: June 21, 2020
Highlights:
- 📨 Ability to turn websocket compression on/off via the config option
server.enableWebsocketCompression
. This is useful if your server strips HTTP headers and you do not have access to change that behavior. - 🗝️ Out-of-the-box support for CSRF protection using the
Cookie-to-header token
technique. This means that if you're serving your Streamlit app from multiple replicas you'll need
to configure them to to use the same cookie secret with the
server.cookieSecret
config option. To turn XSRF protection off, setserver.enableXsrfProtection=false
.
Notable bug fixes:
- 🖼️ Added a grace period to the image cache expiration logic in order to fix multiple related bugs
where images sent with
st.image
orst.pyplot
were sometimes missing.
Version 0.61.0
Release date: June 2, 2020
Highlights:
- 📅 Support for date ranges in
st.date_picker
. See docs for more info, but the TLDR is: just pass a list/tuple as the default date and it will be interpreted as a range. - 🗣️ You can now choose whether
st.echo
prints the code above or below the output of the echoed block. To learn more, refer to thecode_location
argument in the docs. - 📦 Improved
@st.cache
support for Keras models and Tensorflowsaved_models
.
Version 0.60.0
Release date: May 18, 2020
Highlights:
- ↕️ Ability to set the height of an
st.text_area
with theheight
argument (expressed in pixels). See docs for more. - 🔡 Ability to set the maximimum number of characters allowed in
st.text_area
orst.text_input
. Check out themax_chars
argument in the docs. - 🗺️ Better DeckGL support for the H3 geospatial indexing
system. So now you can use things like
H3HexagonLayer
inst.pydeck_chart
. - 📦 Improved
@st.cache
support for PyTorch TensorBase and Model.
Version 0.59.0
Release date: May 05, 2020
Highlights:
- 🎨 New color-picker widget! Use it with
st.beta_color_picker()
- 🧪 Introducing
st.beta_*
andst.experimental_*
function prefixes, for faster Streamlit feature releases. See docs for more info. - 📦 Improved
@st.cache
support for SQL Alchemy objects, CompiledFFI, PyTorch Tensors, andbuiltins.mappingproxy
.
Version 0.58.0
Release date: April 22, 2020
Highlights:
- 💼 Made
st.selectbox
filtering case-insensitive. - ㈬ Better support for Tensorflow sessions in
@st.cache
. - 📊 Changed behavior of
st.pyplot
to auto-clear the figure only when using the global Matplotlib figure (i.e. only when callingst.pyplot()
rather thanst.pyplot(fig)
).
Version 0.57.0
Release date: March 26, 2020
Highlights:
- ⏲️ Ability to set expiration options for
@st.cache
'ed functions by setting themax_entries
andttl
arguments. See docs. - 🆙 Improved the machinery behind
st.file_uploader
, so it's much more performant now! Also increased the default upload limit to 200MB (configurable viaserver.max_upload_size
). - 🔒 The
server.address
config option now binds the server to that address for added security. - 📄 Even more details added to error messages for
@st.cache
for easier debugging.
Version 0.56.0
Release date: February 15, 2020
Highlights:
- 📄 Improved error messages for st.cache. The errors now also point to the new caching docs we just released. Read more here!
Breaking changes:
- 🐍 As announced last month, Streamlit no longer supports Python 2. To use Streamlit you'll need Python 3.5 or above.
Version 0.55.0
Release date: February 4, 2020
Highlights:
- 📺 Ability to record screencasts directly from Streamlit! This allows you to easily record and share explanations about your models, analyses, data, etc. Just click ☰ then "Record a screencast". Give it a try!
Version 0.54.0
Release date: January 29, 2020
Highlights:
- ⌨️ Support for password fields! Just pass
type="password"
tost.text_input()
.
Notable fixes:
- ✳️ Numerous st.cache improvements, including better support for complex objects.
- 🗣️ Fixed cross-talk in sidebar between multiple users.
Breaking changes:
- If you're using the SessionState
hackGist, you should re-download it! Depending on which hack you're using, here are some links to save you some time:
Version 0.53.0
Release date: January 14, 2020
Highlights:
-
🗺️ Support for all DeckGL features! Just use Pydeck instead of
st.deck_gl_chart
. To do that, simply pass a PyDeck object tost.pydeck_chart
,st.write
, or magic.Note that as a preview release things may change in the near future. Looking forward to hearing input from the community before we stabilize the API!
The goals is for this to replace
st.deck_gl_chart
, since it is does everything the old API did and much more! -
🆕 Better handling of Streamlit upgrades while developing. We now auto-reload the browser tab if the app it is displaying uses a newer version of Streamlit than the one the tab is running.
-
👑 New favicon, with our new logo!
Notable fixes:
- Magic now works correctly in Python 3.8. It no longer causes docstrings to render in your app.
Breaking changes:
-
Updated how we calculate the default width and height of all chart types. We now leave chart sizing up to your charting library itself, so please refer to the library's documentation.
As a result, the
width
andheight
arguments have been deprecated from most chart commands, anduse_container_width
has been introduced everywhere to allow you to make charts fill as much horizontal space as possible (this used to be the default).
Version 0.52.0
Release date: December 20, 2019
Highlights:
-
📤 Preview release of the file uploader widget. To try it out just call
st.file_uploader
!Note that as a preview release things may change in the near future. Looking forward to hearing input from the community before we stabilize the API!
-
👋 Support for emoji codes in
st.write
andst.markdown
! Try it out withst.write("Hello :wave:")
.
Breaking changes:
- 🧹
st.pyplot
now clears figures by default, since that's what you want 99% of the time. This allows you to create two or more Matplotlib charts without having to callpyplot.clf
every time. If you want to turn this behavior off, usest.pyplot(clear_figure=False)
- 📣
st.cache
no longer checks for input mutations. This is the first change of our ongoing effort to simplify the caching system and prepare Streamlit for the launch of other caching primitives like Session State!
Version 0.51.0
Release date: November 30, 2019
Highlights:
- 🐕 You can now tweak the behavior of the file watcher with the config option
server.fileWatcherType
. Use it to switch between:auto
(default) : Streamlit will attempt to use the watchdog module, and falls back to polling if watchdog is not available.watchdog
: Force Streamlit to use the watchdog module.poll
: Force Streamlit to always use polling.none
: Streamlit will not watch files.
Notable bug fixes:
- Fix the "keyPrefix" option in static report sharing #724
- Add support for getColorX and getTargetColorX to DeckGL Chart #718
- Fixing Tornado on Windows + Python 3.8 #682
- Fall back on webbrowser if xdg-open is not installed on Linux #701
- Fixing number input spin buttons for Firefox #683
- Fixing CTRL+ENTER on Windows #699
- Do not automatically create credential file when in headless mode #467
Version 0.50.1
Release date: November 10, 2019
Highlights:
- 👩🎓 SymPy support and ability to draw mathematical expressions using LaTeX! See
st.latex
,st.markdown
, andst.write
. - 🌄 You can now set config options using environment variables. For example,
export STREAMLIT_SERVER_PORT=9876
. - 🐱 Ability to call
streamlit run
directly with Github and Gist URLs. No need to grab the "raw" URL first! - 📃 Cleaner exception stack traces. We now remove all Streamlit-specific code from stack traces originating from the user's app.
Version 0.49.0
Release date: October 23, 2019
Highlights:
- 💯 New input widget for entering numbers with the keyboard:
st.number_input()
- 📺 Audio/video improvements: ability to load from a URL, to embed YouTube videos, and to set the start position.
- 🤝 You can now (once again) share static snapshots of your apps to S3! See
the S3 section of
streamlit config show
to set it up. Then share from top-right menu. - ⚙️ Use
server.baseUrlPath
config option to set Streamlit's URL to something likehttp://domain.com/customPath
.
Notable bug fixes:
- Fixes numerous Windows bugs, including Issues #339 and #401.
Version 0.48.0
Release date: October 12, 2019
Highlights:
- 🔧 Ability to set config options as command line flags or in a local config file.
- ↕️ You can now maximize charts and images!
- ⚡ Streamlit is now much faster when writing data in quick succession to your app.
- ✳️ Ability to blacklist folder globs from "run on save" and
@st.cache
hashing. - 🎛️ Improved handling of widget state when Python file is modified.
- 🙈 Improved HTML support in
st.write
andst.markdown
. HTML is still unsafe, though!
Notable bug fixes:
- Fixes
@st.cache
bug related to having your Python environment on current working directory. Issue #242 - Fixes loading of root url
/
on Windows. Issue #244
Version 0.47.0
Release date: October 1, 2019
Highlights:
- 🌄 New hello.py showing off 4 glorious Streamlit apps. Try it out!
- 🔄 Streamlit now automatically selects an unused port when 8501 is already in use.
- 🎁 Sidebar support is now out of beta! Just start any command with
st.sidebar.
instead ofst.
- ⚡ Performance improvements: we added a cache to our websocket layer so we no longer re-send data to the browser when it hasn't changed between runs
- 📈 Our "native" charts
st.line_chart
,st.area_chart
andst.bar_chart
now use Altair behind the scenes - 🔫 Improved widgets: custom st.slider labels; default values in multiselect
- 🕵️♀️ The filesystem watcher now ignores hidden folders and virtual environments
- 💅 Plus lots of polish around caching and widget state management
Breaking change:
- 🛡️ We have temporarily disabled support for sharing static "snapshots" of Streamlit apps. Now that we're no longer in a limited-access beta, we need to make sure sharing is well thought through and abides by laws like the DMCA. But we're working on a solution!
Version 0.46.0
Release date: September 19, 2019
Highlights:
- ✨ Magic commands! Use
st.write
without typingst.write
. See https://docs.streamlit.io/en/latest/api.html#magic-commands - 🎛️ New
st.multiselect
widget. - 🐍 Fixed numerous install issues so now you can use
pip install streamlit
even in Conda! We've therefore deactivated our Conda repo. - 🐞 Multiple bug fixes and additional polish in preparation for our launch!
Breaking change:
- 🛡️ HTML tags are now blacklisted in
st.write
/st.markdown
by default. More information and a temporary work-around at: https://github.com/streamlit/streamlit/issues/152
Version 0.45.0
Release date: August 28, 2019
Highlights:
- 😱 Experimental support for sidebar! Let us know if you want to be a beta tester.
- 🎁 Completely redesigned
st.cache
! Much more performant, has a cleaner API, support for caching functions called by@st.cached
functions, user-friendly error messages, and much more! - 🖼️ Lightning fast
st.image
, ability to choose between JPEG and PNG compression, and between RGB and BGR (for OpenCV). - 💡 Smarter API for
st.slider
,st.selectbox
, andst.radio
. - 🤖 Automatically fixes the Matplotlib backend -- no need to edit .matplotlibrc
Version 0.44.0
Release date: July 28, 2019
Highlights:
- ⚡ Lightning-fast reconnect when you do a ctrl-c/rerun on your Streamlit code
- 📣 Useful error messages when the connection fails
- 💎 Fixed multiple bugs and improved polish of our newly-released interactive widgets
Version 0.43.0
Release date: July 9, 2019
Highlights:
- ⚡ Support for interactive widgets! 🎈🎉
Version 0.42.0
Release date: July 1, 2019
Highlights:
- 💾 Ability to save Vega-Lite and Altair charts to SVG or PNG
- 🐇 We now cache JS files in your browser for faster loading
- ⛔ Improvements to error-handling inside Streamlit apps
Version 0.41.0
Release date: June 24, 2019
Highlights:
- 📈 Greatly improved our support for named datasets in Vega-Lite and Altair
- 🙄 Added ability to ignore certain folders when watching for file changes. See the
server.folderWatchBlacklist
config option. - ☔ More robust against syntax errors on the user's script and imported modules
Version 0.40.0
Release date: June 10, 2019
Highlights:
- Streamlit is more than 10x faster. Just save and watch your analyses update instantly.
- We changed how you run Streamlit apps:
$ streamlit run your_script.py [script args]
- Unlike the previous versions of Streamlit,
streamlit run [script] [script args]
creates a server (now you don't need to worry if the proxy is up). To kill the server, all you need to do is hit Ctrl+c.
Why is this so much faster?
Now, Streamlit keeps a single Python session running until you kill the server. This means that Streamlit can re-run your code without kicking off a new process; imported libraries are cached to memory. An added bonus is that st.cache
now caches to memory instead of to disk.
What happens if I run Streamlit the old way?
If you run $ python your_script.py
the script will execute from top to bottom, but won't produce a Streamlit app.
What are the limitations of the new architecture?
- To switch Streamlit apps, first you have to kill the Streamlit server with Ctrl-c. Then, you can use
streamlit run
to generate the next app. - Streamlit only works when used inside Python files, not interactively from the Python REPL.
What else do I need to know?
-
The strings we print to the command line when liveSave is on have been cleaned up. You may need to adjust any RegEx that depends on those.
-
A number of config options have been renamed:
Old config New config proxy.isRemote server.headless proxy.liveSave server.liveSave proxy.runOnSave server.runOnSave proxy.watchFileSystem server.runOnSave proxy.enableCORS server.enableCORS proxy.port server.port browser.proxyAddress browser.serverAddress browser.proxyPort browser.serverPort client.waitForProxySecs n/a client.throttleSecs n/a client.tryToOutliveProxy n/a client.proxyAddress n/a client.proxyPort n/a proxy.autoCloseDelaySecs n/a proxy.reportExpirationSecs n/a
What if something breaks?
If the new Streamlit isn't working, please let us know by Slack or email. You can downgrade at any time with these commands:
pip install --upgrade streamlit==0.37
conda install streamlit=0.37
What's next?
Thank you for staying with us on this journey! This version of Streamlit lays the foundation for interactive widgets, a new feature of Streamlit we're really excited to share with you in the next few months.
Version 0.36.0
Release date: May 03, 2019
Highlights
- 🚣♀️
st.progress()
now also accepts floats from 0.0–1.0 - 🤯 Improved rendering of long headers in DataFrames
- 🔐 Shared apps now default to HTTPS
Version 0.35.0
Release date: April 26, 2019
Highlights
- 📷 Bokeh support! Check out docs for
st.bokeh_chart
- ⚡️ Improved the size and load time of saved apps
- ⚾️ Implemented better error-catching throughout the codebase
Still have questions?
Our forums are full of helpful information and Streamlit experts.