Changelog

This page lists highlights, bug fixes, and known issues for official Streamlit releases. If you're looking for information about nightly releases, beta features, or experimental features, see Try pre-release features.

star

Tip

To upgrade to the latest version of Streamlit, run:

pip install --upgrade streamlit

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 for st.expander and st.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 and st.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 supports PIL images (#8039).
  • 🔗 st.radio allows markdown links within the items passed to options (#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 for st.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 descriptive Exception when the message cannot be parsed (#8036).
  • 📘 Fixed a typo in the examples for st.switch_page and st.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, and st.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 and st.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 and st.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 and st.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, and st.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 to str will print the content of the query parameters instead of the class description (#8030).

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 multiple st.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 to none or poll (#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 supportsimportlib-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!

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 in SelectboxColumn 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).

Release date: November 30, 2023

Highlights

  • 🔲 st.container and st.form now have a border parameter to show or hide a border.
  • 🐍 Streamlit supports Python 3.12!

Notable Changes

  • st.dataframe, st.data_editor, and st.table support datetime.timedelta values (#7689, #4489).
  • 💀 Streamlit apps preload skeleton elements for a smoother appearance when initializing (#7598).
  • 🏃 Reduced the overhead of running AppTest-simulated apps, especially for fast-running apps (#7691).
  • 🛁 String representations of AppTest data are improved for a better testing and debugging experience (#7658).
  • 🔢 Apps can be configured to identify Enum classes as the same if they have matching member names (#7408, #4909). Thanks, Asaurus1!
  • ❌ The "Made with Streamlit" footer no longer appears at the bottom of apps (#7583).
  • 🧹 Unused config options have been deprecated (#7584).
  • 🕳️ Query parameters can be empty (#7601, #7416).
  • 💅 Visual tweaks (#7592, #7630).

Other Changes

  • 🦗 Bug fix: Convert floats to bytes instead of hashing to avoid hashing instability (#7754). Thanks, BlackHC!
  • 🦎 Bug fix: Corrected broken URLs and typos in error messages (#7746, #7764, #7770). Thanks, ObservedObserver!
  • 🐌 Bug fix: st.connection correctly caches results when using two connections of the same type (#7730, #7709).
  • 🕸️ Bug fix: Using context managers with multithreading now displays content in the expected order (#7715, #7668). Thanks, eric-skydio!
  • 🦂 Bug fix: Added https fallback when obtaining the host machine's address (#7712, #7703). Thanks, LarsHill!
  • 🛡️ Bug fix: Added security patch for pyarrow vulnerability. Custom components using pyarrow table deserialization should require pyarrow>=14.0.1 (#7695, #7700).
  • 🦟 Bug fix: Improved typing for st.connection (#7671). Thanks, thezanke!
  • 🪰 Bug fix: Retries of SnowflakeConnection methods are narrowed to only occur with transient errors to avoid unnecessary repeated errors (#7645, #7637).
  • 🏗️ Removed the v0 testing framework which was undocumented (#7657).
  • 🪳 Bug fix: The navigation expander arrow no longer disappears (#7634, #7547).
  • ❄️ Improved the error message for SnowflakeConnection when a configuration is not found (#7652).
  • 🕷️ Bug fix: st.rerun no longer causes a RecursionError when used with st.chat_input (#7643, #7629).
  • 🐞 Bug fix: st.file_uploader no longer causes an extra rerun and therefore doesn't conflict with st.chat_input (#7641, #7556).
  • 🐝 Bug fix: AppTest no longer raises an error when encountering st.container (#7644, #7636).
  • 🪲 Bug fix: Graphviz charts scale correctly when exiting fullscreen view (#7398, #7527).
  • 🎥 Bug fix: "Record a screencast" is hidden when known to be unsupported in a browser (#7604).
  • 🐛 Bug fix: Increased the top padding of embedded apps to better display the dataframe toolbar (#7681, #7609, #7607).
  • 🐜 Bug fix: st.rerun uses NoReturn for improved type checking (#7422) Thanks, kongzii.

Release date: October 26, 2023

Release videos

Highlights

  • 🧪 Introducing a new testing framework for Streamlit apps! Check out our documentation to learn how to build automated tests for your apps.
  • 💻 Announcing the general availability of st.connection, a command to conveniently manage connections in Streamlit apps. Check out the docs to learn more.
  • ❄️ SnowparkConnection has been upgraded to the new and improved SnowflakeConnection — the same, great functionality plus more! Check out our built-in connections.
  • 🛠️ st.dataframe and st.data_editor have a new toolbar! Users can search and download data in addition to enjoying improved UI for row additions and deletions. See our updated guide on Dataframes.

Notable Changes

  • 🌀 When using a spinner with cached functions, the spinner will be overlaid instead of pushing content down (#7488).
  • 📅 st.data_editor now supports datetime index editing (#7483).
  • 🔢 Improved support for decimal.Decimal in st.dataframe and st.data_editor (#7475).
  • 🥸 Global kwargs were added for hashlib (#7527, #7526). Thanks, DueViktor!
  • 📋 st.components.v1.iframe now permits writing to clipboard (#7487). Thanks, dilipthakkar!
  • 📝 SafeSessionState disconnect was replaced with script runner yield points for improved efficiency and clarity (#7373).
  • 🤖 The Langchain callback handler will show the full input string inside the body of a st.status when the input string is too long to show as a label (#7478). Thanks, pokidyshev!
  • 📈 st.graphviz_chart now supports using different Graphviz layout engines (#7505, #4089).
  • 🦋 Assorted visual tweaks (#7486, #7592).
  • 📊 plotly.js was upgraded to version 2.26.1 (#7449, #7476, #7045).
  • 💽 Legacy serialization for DataFrames was removed. All DataFrames will be serialized by Apache Arrow (#7429).
  • 🖼️ Compatibility for Pillow 10.x was added (#7442).
  • 📬 Migrated _stcore/allowed-message-origins endpoint to _stcore/host-config (#7342).
  • 💬 Added post_parent_message platform command to send custom messages from a Streamlit app to its parent window (#7522).

Other Changes

  • ⌨️ Improved string dtype handling for DataFrames (#7479).
  • ✒️ st.write will avoid using unsafe_allow_html=True if possible (#7432).
  • 🐛 Bug fix: Implementation of st.expander was simplified for improved behavior and consistency (#7247, #2839, #4111, #4651, #5604).
  • 🪲 Bug fix: Multipage links in the sidebar are now aligned with other sidebar elements (#7531).
  • 🐜 Bug fix: st.chat_input won't incorrectly prompt for label parameter in IDEs (#7560).
  • 🐝 Bug fix: Scroll bars correctly overlay st.dataframe and st.data_editor without adding empty space (#7090, #6888).
  • 🐞 Bug fix: st.chat_message behaves correctly with the removal of AutoSizer (#7504, #7473).
  • 🕷️ Bug fix: Anchor links are reliably produced for non-English headers (#7454, #5291).
  • ☃️ Bug fix: st.connections.SnowparkConnection more accurately detects when it's running within Streamlit in Snowflake (#7502).
  • 🪳 Bug fix: A user-friendly warning is shown when exceeding the size limitations of a pandas Styler object (#7497, #5953).
  • 🪰 Bug fix: st.data_editor automatically converts non-string column names to strings (#7485, #6950).
  • 🦠 Bug fix: st.data_editor correctly identifies non-range indices as a required column (#7481, #6995).
  • 🦟 Bug fix: st.file_uploader displays compound file extensions like csv.gz correctly (#7362). Thanks, mo42!
  • 🦂 Bug fix: Column Configuration no longer uses deprecated type checks (#7496, #7477, #7550). Thanks, c-bik!
  • 🦗 Bug fix: Additional toolbar items no longer stack vertically (#7470, #7471).
  • 🕸️ Bug fix: Column Configuration no longer causes a type warning in Mypy (#7457). Thanks, kopp!
  • 🐌 Bug fix: Bokeh Sliders no longer cause JavaScript errors (#7441, #7171).
  • 🦎 Bug fix: Caching now recognizes DataFrames with the same values but different column names as different (#7331, #7086).

Release date: September 21, 2023

Highlights

  • ✨ Introducing st.scatter_chart — a new, simple chart element to build scatter charts Streamlit-y fast and easy! See our documentation.
  • 🔗 Introducing st.link_button! Want to open an external link in a new tab with a bit more pizazz than a plain-text link? Check out our documentation to see how.
  • 🏃 Announcing the general availability of st.rerun, a command to interrupt your script and trigger an immediate rerun.

Notable Changes

Other Changes

  • 🐛 Bug fix: st.multiselect now shows a correct message when no result matches a user's search (#7205, #7116).
  • 🪲 Bug fix: st.experimental_user now defaults to test@example.com (#7219, #7215).
  • 🐜 Bug fix: st.slider labels don't overlap when small ranges are selected (#7221, #3385).
  • 🐝 Bug fix: Type-checking correctly identifies all string types to avoid hashing errors (#7255, #6455).
  • 🐞 Bug fix: JSON is parsed with JSON5 to avoid errors from null values when using st.pydeck_chart (#7256, #5799).
  • 🕷️ Bug fix: Identical widgets on different pages are correctly interpreted by Streamlit as distinct (#7264, #6146).
  • 🦋 Bug fix: Visual tweaks to widgets for responsive behavior (#7145).
  • 🪳 Bug fix: SVGs are accurately displayed (#7183, #3882).
  • 🪰 Bug fix: st.video correctly updates with changes to start_time (#7257, #7126).
  • 🦠 Bug fix: Additional error handling was added to st.session_state (#7280, #7206).
  • 🦟 Bug fix: st.map correctly refreshes with new data (#7307, #7294).
  • 🦂 Bug fix: The decorative app header line is no longer covered by the sidebar (#7297, #6264).
  • 🦗 Bug fix: st.code no longer triggers a CachedStFunctionWarning (#7306, #7055).
  • 🕸️ Bug fix: st.download_button no longer resets with different data (#7316, #7308).
  • 🐌 Bug fix: Widgets consistently recognize user interaction while a page is still running, with or without fastRerun enabled (#7283, #6643).
  • 🦎 Bug fix: st.tabs was improved to better handle and render conditionally appearing tabs (#7287, #7310, #5454, #7040).

Release date: August 24, 2023

Highlights

  • 🤖 Introducing st.status to display output from long-running processes and external API calls (#7140). Works great with st.chat_message! See our documentation for how to use this feature.
  • 🚥 Introducing st.toggle — an alternative to st.checkbox when you need an on/off switch.

Notable Changes

Other Changes

  • 🍞 Bug fix: Toast messages are no longer blocked by st.chat_input (#7204, #7115).
  • 🕸️ Bug fix: Widget IDs are now stable to prevent inconsistent statefulness (#7003).
  • 🦟 Bug fix: Browser autofill is correctly recognized within forms now (#7150, #7101, #7084).
  • 🪱 Bug fix: st.file_uploader no longer causes session state to reset when a websocket connection is dropped and reconnected (#7149, #7025).
  • 🏎️ Bug fix: Pydeck JSON data is cached for improved performance (#7113, #5532).
  • 🦋 Bug fix: st.chat_input no longer submits prematurely while typing with an input method editor (#6993).
  • 🐞 Bug fix: Label backgrounds for st.tabs are now transparent (#7070, #5707).
  • 🐝 Bug fix: Page width is no longer ignored when using the help parameter in st.button (#7033, #6161).
  • 🐜 Bug fix: Tweaked Altair color specification for improved visibility in dark mode (#7061, #3343).
  • 🪲 Bug fix: st.chat_message can correctly use local images as avatars (#7130).
  • 🐛 Bug fix: Specified that MD5 is not used for security (#7122, #7120).
  • 🪄 Bug fix: Async function docstrings are ignored by Streamlit magic (#7143, #7137).

Release date: July 20, 2023

Highlights

  • 🍞 Introducing st.toast — a command to briefly show toast messages to users in the bottom-right corner of apps. See our documentation on how to use this feature.

Notable Changes

  • 🗺️ st.map now has parameters for latitude, longitude, color, and size to customize data points (#6896).
  • 🚩 st.multiselect supports setting placeholders and specifying the maximum number of selections via the placeholder and max_selections keyword-only arguments, respectively (#6901, #4750). Thanks, @fhiroki!
  • 📅 Customize the date format for st.date_input with the format parameter (#6974, #5234).
  • ↩️ Forms can now be submitted with Enter/Return while inside st.text_input, st.number_input, or st.text_area (#6911, #3790).
  • 🍢 The app menu icon in the upper-right corner of apps has been changed from "" to "" (#6947).

Other Changes

  • ⛓️ Minimum required versions increased for multiple Python dependencies, including numpy>=1.19.3 and pandas>=1.3.0 (#6802).
  • 🛡️ protobufjs was bumped from 7.2.1 to 7.2.4 (#6959).
  • ✨ Visual design tweaks to Streamlit's input widgets (#6944).
  • 🦋 Bug Fix: st.slider now accepts general number types like numpy.int64 instead of just int and float (#6816, #6815). Thanks, @milliams!
  • 🐜 Bug Fix: Data labels for st.slider and st.select_slider no longer overflow when inside st.expander (#6828, #6297).
  • 🐛 Bug Fix: Elements no longer re-render from scratch with each rerun (#6923, #6920).
  • 🐞 Bug Fix: st.data_editor hashes styler objects correctly for stability across reruns (#6815, #6898).
  • 🐝 Bug Fix: Fixed the padding for embedded apps using st.chat_input to prevent messages being cutoff (#6979).

Release date: June 27, 2023

Highlights

  • 💬 Introducing st.chat_message and st.chat_input — two new chat elements that let you build conversational apps. Learn how to use these features in your LLM-powered chat apps in our tutorial.
  • 💾 Streamlit's caching decorators now allow you to customize Streamlit's hashing of input parameters with the keyword-only argument hash_funcs.

Notable Changes

  • 🐍 We've deprecated support for Python 3.7 in the core library and Streamlit Community Cloud (#6868).
  • 📅 st.cache_data and st.cache_resource can hash timezone-aware datetime objects (#6812, #6690, #5110).

Other Changes

  • ✨ Visual design tweaks to Streamlit's input widgets (#6817).
  • 🐛 Bug fix: st.write pretty-prints dataclasses using st.help (#6750).
  • 🪲 Bug fix: st.button's height is consistent with that of other widgets (#6738).
  • 🐜 Bug fix: Upgraded the react-range frontend dependency to fix the memory usage of sliders (#6764, #5436). Thanks @wolfd!
  • 🐝 Bug fix: Pydantic validators no longer result in exceptions on app reruns (#6664, #3218).
  • 🐞 Bug fix: streamlit config show honors newlines (#6758, #2868).
  • 🪰 Bug fix: Fixed a race condition to ensure Streamlit reruns the latest code when the file changes (#6884).
  • 🦋 Bug fix: Apps no longer rerun when users click anchor links (#6834, #6500).
  • 🕸️ Bug fix: Added robust out-of-bounds checks for min_value and max_value in st.number_input (#6847, #6797).

Release date: June 1, 2023

Highlights

  • ✂️ Announcing the general availability of st.data_editor, a widget that allows you to edit DataFrames and many other data structures in a table-like UI. Breaking change: the data editor's representation used in st.session_state was altered. Find out more about the new format in Access edited data.
  • ⚙️ Introducing the Column configuration API with a suite of methods to configure the display and editing behavior of st.dataframe and st.data_editor columns (e.g. their title, visibility, type, or format). Keep an eye out for a detailed blog post and in-depth documentation upcoming in the next two weeks.
  • 🔌 Learn to use st.experimental_connection to create and manage data connections in your apps with the new Connecting to data docs and video tutorial.

Notable Changes

  • 📊 Streamlit now supports Protobuf 4 and Altair 5 (#6215, #6618, #5626, #6622).
  • ☎️ st.dataframe and st.data_editor can hide index columns with hide_index, specify the display order of columns with column_order, and disable editing for individual columns with the disabled parameter.
  • ⏱️ The ttl parameter in st.cache_data and st.cache_resource accepts formatted strings, so you can simply say ttl="30d", ttl="1h30m" and any other combination of w, d, h, m, s supported by Pandas's Timedelta constructor (#6560).
  • 📂 st.file_uploader now interprets the type parameter more accurately. For example, "jpg" or ".jpg" now accept both "jpg" and "jpeg" extensions. This functionality has also been extended to "mpeg/mpg", "tiff/tif", "html/htm", and "mpeg4/mp4".
  • 🤫 The new global.disableWidgetStateDuplicationWarning configuration option allows the silencing of warnings triggered by setting widget default values and keyed session state values concurrently (#3605, #6640). Thanks, @antonAce!

Other Changes

  • 🏃‍♀️Improved startup time by lazy loading some dependencies (#6531).
  • 👋 Removed st.beta_* and st.experimental_show due to deprecation and low-use (#6558)
  • 🚀 Further improvements to st.dataframe and st.data_editor:
    • Improved editing on mobile devices for the data editor (#6548).
    • All editable columns have an icon in their column header and support tooltips (#6550, #6561).
    • Enable editing for columns containing datetime, date, or time values (#6025).
    • New input validation options for columns in the data editor, such as max_chars and validate for text columns, and min_value, max_value and step for number columns (#6563).
    • Improved type parsing capabilities in the data editor (#6551).
    • Unified missing values to None in returned data structures (#6544).
    • A warning is shown in cells when integers exceed the maximum safe value of (2^53) -1 (#6311, #6549).
    • Prevented editing the sessions state by showing a warning (#6634).
    • Fixed issues with list columns sometimes breaking the frontend (#6644).
    • Fixed a display issue with index columns using category dtype (#6680, #6598).
    • Fixed an issue that prevented a rerun when adding empty rows (#6598).
    • Unified the behavior between st.data_editor and st.dataframe related to auto-hiding the index column(s) based on the input data (#6659, #6598)
  • 🛡️ Streamlit's Security Policy can be found in its GitHub repository (#6666).
  • 🤏 Documented the integer size limit for st.number_input and st.slider (#6724).
  • 🐍 The majority of Streamlit's Python dependencies have set a maximum allowable version, with the standard upper limit set to the next major version, but not inclusive of it (#6691).
  • 💅 UI design improvements to in-app modals (#6688).
  • 🐞 Bug fix: st.date_input's date selector is equally visible in dark mode (#6072, #6630).
  • 🐜 Bug fix: the sidebar navigation expansion indicator in multipage apps is restored (#6731).
  • 🐛 Bug fix: The docstring and exception message for st.set_page_config have been updated to clarify that this command can be invoked once for each page within a multipage app, rather than once per entire app (#6594).
  • 🐝 Bug fix: st.json no longer collapses multiple spaces in both keys and values with single space when rendered (#6657, #6663).

Release date: April 27, 2023

Highlights

  • 🔌 Introducing st.experimental_connection: Easily connect your app to data sources and APIs using our new connection feature. Find more details in the API reference, and stay tuned for an upcoming blog post and in-depth documentation! In the meantime, explore our updated MySQL and Snowflake connection tutorials for examples of this feature.

Notable Changes

  • 🐼 Streamlit now supports Pandas 2.0 (#6413, #6378, #6507). Thanks, connortann!
  • 🍔 Customize the visibility of items in the toolbar, options menu, and the settings dialog using the client.toolbarMode config option (#6174).
  • 🪵 Streamlit logs now reside in the "streamlit" namespace instead of the root logger, enabling app developers to better manage log handling (#3978, #6377).

Other Changes

  • 🔏 CLI parameters can no longer be used to set sensitive configuration values (#6376).
  • 🤖 Improved the debugging experience by reducing log noise (#6391).
  • 🐞 Bug fix: @st.cache_data decorated functions support UUID objects as parameters (#6440, #6459).
  • 🐛 Bug fix: Tabbing through buttons and other elements now displays a red border only when focused, not when clicked (#6373).
  • 🪲 Bug fix: st.multiselect's clear icon is larger and includes a hover effect (#6471).
  • 🐜 Bug fix: Custom theme font settings no longer apply to code blocks (#6484, #6535).
  • ©️ Bug fix: st.code's copy-to-clipboard button appears when you hover on code blocks (#6490, #6498).

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 that st.file_uploader's File Selection Dialog only shows file types corresponding to those included in the type 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 mentions experimental_allow_widgets instead of the deprecated suppress_st_warning (#6216, #6217).

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 in st.experimental_data_editor (#6185, #6188).
  • 🐛 Bug fix: properly position st.metric's help 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 the show_spinner param now lists str as a supported type (#6207, #6213).
  • ⏱️ Made ping and websocket timeouts far more forgiving (#6212).
  • 🗺️ st.map and st.pydeck_chart docs state that Streamlit's Mapbox token will not work indefinitely (#6143).

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).

Release date: February 09, 2023

Highlights

  • 🎊 Introducing @st.cache_data and @st.cache_resource — two new caching commands to replace st.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 the text keyword parameter.
  • ↔️ st.button has an optional use_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 to True. 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 and st.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!

Release date: January 12, 2023

Notable Changes

  • 🪄 @st.experimental_singleton supports an optional validate parameter that accepts a validation function for cached data and is called each time the cached value is accessed.
  • 💾  @st.experimental_memo's persist 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).

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 or st.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 the use_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).

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-only sample_rate parameter.
  • 🔁 Functions cached with st.experimental_memo or st.experimental_singleton can contain Streamlit widgets using the experimental_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 and st.snow (#5401).

Release date: October 27, 2022

Highlights

  • 🎨 st.button and st.form_submit_button support designating buttons as "primary" (for additional emphasis) or "secondary" (for normal buttons) with the type keyword-only parameter.

Notable Changes

  • 🤏 st.multiselect has a keyword-only max_selections parameter to limit the number of options that can be selected at a time.
  • 📄 st.form_submit_button now has the disabled parameter that removes interactivity.

Other Changes

  • 🏓 st.dataframe and st.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, use datetime.timedelta objects as ttl parameter value, properly hash PIL images and Enum classes, show better error messages when returning unevaluated dataframes (#5447, #5413, #5504, #5426, #5515).
  • 🔍 Zoom buttons in maps created with st.map and st.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).

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 the use_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 the width parameter.

Other Changes

  • ⌨️ st.time_input allows for keyboard-only input (#5194).
  • 💿 st.memo will warn the user when using ttl and persist 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!

Release date: August 11, 2022

Highlights

  • 📊 Built-in charts (e.g. st.line_chart) get a brand-new look and parameters x and y! Check out our blog post for more information.

Notable Changes

  • ⏯ Functions cached with st.experimental_memo or st.experimental_singleton can now contain static st commands. This allows caching text, charts, dataframes, and more!
  • ↔️ The sidebar is now resizable via drag and drop.
  • ☎️ st.info, st.success, st.error, and st.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 through st.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 and st.pydeck_chart use light or dark style based on the app's theme (#5074, #5108).
  • 🎈 Clicks on elements below st.balloons and st.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)

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 the help keyword parameter.
  • 🚇 st.columns supports setting the gap size between columns with the gap 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)

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 a horizontal 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

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 to True).
  • 🏃‍♀️ 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).

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).

Release date: March 3, 2022

Highlights

  • Introducing st.snow, celebrating our acquisition by Snowflake! See more information in our blog post.

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).

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).

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 and st.experimental_singleton programmatically by using the clear() 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 or repr on threading.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).

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 with unsafe_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, and st.multiselect.

Release date: Nov 11, 2021

Notable Changes

  • ✏️ st.text_input and st.text_area now have a placeholder 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 vs st.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

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 with datetime index (#3653).
  • ✍️ Added some more type annotation in our codebase (#3908).

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).

Release date: Sep 22, 2021

Highlights

  • 💰 Introducing st.experimental_memo and experimental_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

  • 🐞 Bug fixes: Support svgs from a URL (#3809) and that do not start with <svg> tag (#3789).

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.

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).

Release date: Aug 5, 2021

Highlights

  • 🎓 Our layout primitives are graduating from beta! You can now use st.columns, st.container and st.expander without the beta_ 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).

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 their config.toml).

Other Changes

  • 🐞 Bug fixes: Unresponsive pydeck example (#3395), JSON parse error message (#2324), Tooltips rendering (#3300), Colorpicker not working on Streamlit Sharing (#2689).

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 an autocomplete 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)

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 a clear_on_submit parameter which "resets" all the form's widgets when the form is submitted.

Other Changes

Release date: May 13, 2021

Notable Changes

  • ♻️ Improvements to memory management by forcing garbage collection between script runs.

Release date: Apr 29, 2021

Highlights

  • 📝 Introducing st.form and st.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)

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)

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

  • Fixed bugs regarding file encodings (#1936, #2606) and caching functions (#2728)

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 from st.image, and replaced with output_format.

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.

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's use_column_width now defaults to an auto 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.

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.

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).

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.

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.

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.

Release date: October 28, 2020

Notable Changes

  • 🧪 st.set_page_config and st.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.

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.

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 use st.pydeck_chart instead.
  • 🚨 Breaking Change: Following the deprecation of width and height for st.altair_chart, st.graphviz_chart, st.plotly_chart, and st.vega_lite_chart in January 2020, we have now removed the args completely. Please set the width and height in the respective charting library.

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 set deprecation.showPyplotGlobalUse to False
  • 🎚 st.multiselect and st.select are now lightning fast when working with large datasets. Thanks masa3141!

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

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.

Release date: July 23, 2020

Highlights:

  • 📊 Default matplotlib to display charts with a tight layout. To disable this, set bbox_inches to None, inches as a string, or a Bbox
  • 🗃 Deprecation warning for automatic encoding on st.file_uploader
  • 🙈 If gatherUserStats is False, do not even load the Segment library. Thanks @tanmaylaud!

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 in st.slider, you can also pass in two-element lists to get a datetime range slider.

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, set server.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 or st.pyplot were sometimes missing.

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 the code_location argument in the docs.
  • 📦 Improved @st.cache support for Keras models and Tensorflow saved_models.

Release date: May 18, 2020

Highlights:

  • ↕️ Ability to set the height of an st.text_area with the height argument (expressed in pixels). See docs for more.
  • 🔡 Ability to set the maximimum number of characters allowed in st.text_area or st.text_input. Check out the max_chars argument in the docs.
  • 🗺️ Better DeckGL support for the H3 geospatial indexing system. So now you can use things like H3HexagonLayer in st.pydeck_chart.
  • 📦 Improved @st.cache support for PyTorch TensorBase and Model.

Release date: May 05, 2020

Highlights:

  • 🎨 New color-picker widget! Use it with st.beta_color_picker()
  • 🧪 Introducing st.beta_* and st.experimental_* function prefixes, for faster Streamlit feature releases. See docs for more info.
  • 📦 Improved @st.cache support for SQL Alchemy objects, CompiledFFI, PyTorch Tensors, and builtins.mappingproxy.

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 calling st.pyplot() rather than st.pyplot(fig)).

Release date: March 26, 2020

Highlights:

  • ⏲️ Ability to set expiration options for @st.cache'ed functions by setting the max_entries and ttl 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 via server.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.

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.

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!

Release date: January 29, 2020

Highlights:

  • ⌨️ Support for password fields! Just pass type="password" to st.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 hack Gist, you should re-download it! Depending on which hack you're using, here are some links to save you some time:

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 to st.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 and height arguments have been deprecated from most chart commands, and use_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).

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 and st.markdown! Try it out with st.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 call pyplot.clf every time. If you want to turn this behavior off, use st.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!

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

Release date: November 10, 2019

Highlights:

  • 👩‍🎓 SymPy support and ability to draw mathematical expressions using LaTeX! See st.latex, st.markdown, and st.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.

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 like http://domain.com/customPath.

Notable bug fixes:

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 and st.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

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 of st.
  • ⚡ 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 and st.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!

Release date: September 19, 2019

Highlights:

  • ✨ Magic commands! Use st.write without typing st.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:

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, and st.radio.
  • 🤖 Automatically fixes the Matplotlib backend -- no need to edit .matplotlibrc

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

Release date: July 9, 2019

Highlights:

  • ⚡ Support for interactive widgets! 🎈🎉

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

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

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 configNew config
    proxy.isRemoteserver.headless
    proxy.liveSaveserver.liveSave
    proxy.runOnSaveserver.runOnSave
    proxy.watchFileSystemserver.runOnSave
    proxy.enableCORSserver.enableCORS
    proxy.portserver.port
    browser.proxyAddressbrowser.serverAddress
    browser.proxyPortbrowser.serverPort
    client.waitForProxySecsn/a
    client.throttleSecsn/a
    client.tryToOutliveProxyn/a
    client.proxyAddressn/a
    client.proxyPortn/a
    proxy.autoCloseDelaySecsn/a
    proxy.reportExpirationSecsn/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.

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

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
forum

Still have questions?

Our forums are full of helpful information and Streamlit experts.