-
Notifications
You must be signed in to change notification settings - Fork 2.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
st.experimental_fragment decorator #8343
Conversation
…ge (#8071) This PR kicks off work on the upcoming `st.experimental_fragment` (name TBD) feature by defining a new `FragmentStorage` protocol along with a simple concrete class (`MemoryFragmentStorage`) implementing it. None of this code is particularly interesting right now, but it'll eventually end up useful for allowing us to have fragments work well with horizontally scaled Streamlit apps (in the eventual future when we finally release better support for this).
This PR continues work on the `st.experimental_fragment` feature in a pretty boring way: we simply create a new `MemoryFragmentStorage` in the `AppSession` constructor and pass it to each `ScriptRunner` that we create. Note that we intentionally don't allow the `FragmentStorage` used by `AppSession`s to be configurable from `RuntimeConfig` for now as we're a ways away from needing to do this. We may choose to make this configurable before merging the feature branch into `develop` if we have the free time, but there's little pressure to do this right now so may also choose to punt on it until we have a concrete need for this.
This PR builds on work done in #8088 to plumb FragmentStorage instances to a session's ScriptRunContext. This probably could have been included in the previous PR, but we somehow didn't realize that we would need to do this while working on that one 🙈 We also add some new proto fields that we'll use in subsequent PRs.
…ator itself (#8122) This PR implements most of the necessary Python-side changes to get `st.experimental_fragment` working with the exception of the decorator itself, which we will add in its own PR to keep this diff from getting too large.
This PR continues the work started in #8122 and adds an initial implementation for the `@st.experimental_fragment` decorator. This doesn't get the feature to a working state just yet -- we still have the frontend side to write before things will work e2e.
This is a small change that I must have forgotten to make while focused on the backend side of this feature. In this PR, we attach a `fragmentId` to each delta sent from server -> client while running a fragment. Note that this differs from the prototype (where each widget sets this manually) because we need to attach a fragment ID to _all_ elements (and not just widgets) to ensure that we're able to mark elements as stale correctly during fragment runs. Also, we're still using the `fragmentId` name everywhere as we're still deciding on a different name for the internals of the implementation.
This PR implements roughly half of the frontend implementation of the upcoming `st.experimental_fragment` feature. In this half, we add most things that have to do with sending and receiving `fragmentId`s between the server and client. * the `currentFragmentId` from the current script run is set in `App.tsx` and passed around via `LibContext` so that elements can be marked as stale during fragment runs * `fragmentId`s set in `Delta` messages are plumbed to their corresponding `AppNode` instances * `fragmentId`s are passed to each widget component's props in `ElementNodeRenderer` * We updated all of the `WidgetStateManager` setter methods to take an optional `fragmentId` parameter so that widgets can pass back their `fragmentId`s to the `widgetMgr` instance * `fragmentId`s are also passed back to the server via `BackMsg` if set in `WidgetStateManager. sendUpdateWidgetsMessage()` Actually having each of our widget types pass an optional `fragmentId` back to the `WidgetStateManager` is done in #8165.
This PR does the now very mechanical work of passing `fragmentId`s from widgets to the `WidgetStateManager.set*Value()` methods when appropriate. We added/modified unit tests for all of this plumbing where appropriate but didn't do so for widgets that don't already include tests for calling appropriate the `WidgetStateManager` methods as those are likely to have been omitted due to the difficulty of implementing them for those specific widgets.
This PR implements a followup to #8173 that allows the `run_every` parameter of the `@st.experimental_fragment` decorator to accept the same types as the `ttl` parameters of `@st.cache_resource` and `@st.cache_data`. To do this, we shuffle some of the helper functions / exception types currently only used by our caching API around and change their names to be more general.
This PR simply adds a new `isFragmentRun` field to our page profiling metrics so that we can identify which page runs correspond to fragment runs vs full app runs.
This PR adds an e2e test for testing basic `@st.experimental_fragment` functionality. For now, we only verify that modifying a widget within a fragment reruns the fragment but not the full script, and we only do so for widgets that are relatively straightforward to test. More thorough testing (verifying that the return values of widgets within a fragment work as expected, testing for more complex widgets, etc) will be done in additional e2e tests that we'll add later when the feature is closer to completion.
…runs (#8260) This PR fixes three bugs that together resulted in some weird behavior when using `@st.experimental_fragment`. * The first is a simple one: we just forgot to also take a snapshot of `ctx.cursors`, which also needs to be reset when starting a fragment run to ensure we write to the correct position in the app. * To fix the second bug, we also need to reset both `ctx.cursor` and `dg_stack` when the script restarts due to a `RerunException`. Otherwise, we again end up writing to unexpected or nonexistent `deltaPath`s. (I'm less sure about whether this fix is the one we want to adopt long term, so I left a TODO to revisit it later). * Finally, we fix the behavior of the `clearStaleNodes` method to correctly account for the different possibilities that come up when clearing stale nodes from a page that contains elements both related and unrelated to a given fragment. This bug ended up being a bit more complex, so we added comments throughout `clearStaleNodes` to explain what's going on.
This PR fixes a bug in the `feature/st.experimental_fragment` branch where fragment runs would undo things set in an earlier call to `set_page_config`. The reason for this was simply that we were resetting both the title and favicon in every call to `handleNewSession`, even if the call corresponds to a fragment run. We fixed this by simply moving parts of `handleNewSession` into an `if` statement that only runs when we're not running a fragment. Note that no other notable code changes were made aside from moving blocks of code around.
Before the `st.experimental_fragment` feature was implemented, we were previously able to have a `RERUN` request cancel the currently executing script. This was because the only way that a script would ever run in the Streamlit execution model was fully from top-to-bottom, so any portion of the currently executing script that would not get to run due to being cancelled would still happen later in the rerun. With fragments, this is no longer true, and a rerun request corresponding to a fragment cancelling the currently executing script could result in important information from either a full script run or a different fragment being lost. To fix this, we change things so that `RERUN` requests corresponding to a fragment don't immediately cancel the currently executing script. Instead, they are enqueued to run after the current script run is complete. `RERUN` requests corresponding to full script runs retain their current behavior of cancelling any currently executing script and running immediately. --- Note that there's a small known bug in the current implementation that we'll get around to fixing later: running multiple fragments within a single scriptrunner execution (this can happen if the user clicks on >=3 slow-running fragments in quick succession) may result in strangeness as the frontend currently assumes that a scriptrunner execution runs either the full script or only one fragment. For now, we just leave a TODO in the code so that we get around to fixing this before the feature branch is merged.
This PR fixes a bug that was mentioned in a TODO comment in #8298: fragments may be batched so that multiple are run by a single run of a `ScriptRunner`, but the frontend assumes that at most one is run. The result of this is that, when multiple fragments are run by one `ScriptRunner`, only one of the corresponding sets of elements rendered to the app are marked as stale when all of them should be.
6c9da73
to
8fe4d42
Compare
I somehow managed to forget that we need to set the `fragmentIdsThisRun` state variable on a full rerun too since otherwise running the full script after a fragment run will fail to reset the array. User-visible issues due to this bug seem to be rare in practice but can be (probabilistically) observed when using `st.rerun` within a fragment. The same script used to demonstrate the bug in #8332 can also be used to trigger this one: ```python import streamlit as st show_stuff = st.checkbox("Show stuff") if show_stuff: st.write("hello") @st.experimental_fragment def fragment(): if st.button("Rerun everything"): st.rerun() fragment() ``` 1. Click on the "Rerun everything" button 2. Rapidly select and unselect the checkbox. 3. Notice that (sometimes) a duplicate button will appear.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 🚀
*, | ||
run_every: int | float | timedelta | str | None = None, | ||
) -> Callable[[F], F] | F: | ||
"""Allow a function to be run independently of the full script. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
btw @sfc-gh-jcarroll @sfc-gh-dmatthews, I wrote this docstring just to have something reasonable for now, but I'm assuming we'll want to tweak/edit it before this PR gets merged
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks fairly reasonable to me, I'll happily defer to you and Debbie on any tweaks or suggestions of bigger things to include.
In case it's a useful reference, here's the (significantly more verbose) draft doc string I put together for the spec. I think the main interesting questions from my version are:
- For the first line, is it useful to include "...turn a function into a [Streamlit] fragment..." along with the description of what it does? I think the answer partly depends on how much we want to lean into that as a noun we use elsewhere.
- Whether we want to include any of the last 4 paragraphs of my version in the docstring, or just talk about those in the docs page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@vdonato I'll render the new docs page to check it out. Do you prefer a follow-up PR with any docstring tweaks, or a commit directly to this branch (if it hasn't merged already).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whoops, I totally forgot that a draft docstring was included in the spec 🙈. Happy to use either one or some combination of the two, but will also defer to @sfc-gh-dmatthews on this.
This PR is likely to be merged Thursday or Friday depending on how quickly QA is able to wrap up some testing passes on the feature, so committing directly to this branch should be ok if it isn't already checked in.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like QA wrapped up earlier than expected, so I'm going to go ahead and click merge on this PR now / any docs tweaks can be made in a PR to develop 🎉
<!--⚠️ BEFORE CONTRIBUTING PLEASE READ OUR CONTRIBUTING GUIDELINES! https://github.com/streamlit/streamlit/wiki/Contributing --> ## Describe your changes Closes #1360 This PR adds a dialog layout container. This is exposed to users via the `@st.experimental_dialog` decorator. A function decorated with this decorated will render a dialog when being called. The body of the decorated function will be rendered as the dialog's content. It uses the fragment decorator (introduced in #8343) under the hood so that the dialog can be interacted with without triggering a full-app rerun. Example: ```python import streamlit as st @st.experimental_dialog("Streamlit Example Dialog") def example_dialog(some_arg: str, some_other_arg: int): st.write(f"You passed following args: {some_arg} | {some_other_arg}") # interacting with the text_input only re-runs `example_dialog` some_text_input = st.text_input("Type something:", key="example_dialog_some_text_input") # following write is updated when chaning the text_input inside the dialog st.write(f"You wrote '{some_text_input}' in the dialog") if st.button("Close the dialog"): st.rerun() if st.button("Open dialog"): example_dialog("Some string arg", 42) # following write is updated with the dialog's text input when the dialog was opened, the text input was interacted with and a re-run was triggered, e.g. by clicking the Close-button defined in `example_dialog` st.write(f"You wrote '{st.session_state.get('example_dialog_some_text_input', '')}' in the dialog") ``` ![Screenshot 2024-04-04 at 16 31 35](https://github.com/streamlit/streamlit/assets/3775781/751a43d1-7c6a-4642-8864-d08a5d286cb5) Since it uses the experimental fragment feature, it is exposed as experimental as well for now. ## GitHub Issue Link (if applicable) ## Testing Plan - Added Python and JavaScript unit tests - Added e2e playwright tests --- **Contribution License Agreement** By submitting this pull request you agree that all contributions to this project are made under the Apache 2.0 license.
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [streamlit](https://streamlit.io) ([source](https://togithub.com/streamlit/streamlit), [changelog](https://docs.streamlit.io/library/changelog)) | `1.25.0` -> `1.35.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/streamlit/1.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/streamlit/1.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/streamlit/1.25.0/1.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/streamlit/1.25.0/1.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>streamlit/streamlit (streamlit)</summary> ### [`v1.35.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.35.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.34.0...1.35.0) <!-- Release notes generated using configuration in .github/release.yml at 1.35.0 --> #### What's Changed ##### New Features 🎉 - Add support for selections to `st.plotly_chart` by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/8191](https://togithub.com/streamlit/streamlit/pull/8191) - feat: support set mysql connection query from secrets.toml by [@​LucianLiu6](https://togithub.com/LucianLiu6) in [https://github.com/streamlit/streamlit/pull/8581](https://togithub.com/streamlit/streamlit/pull/8581) - Feature: `st.logo` by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/8554](https://togithub.com/streamlit/streamlit/pull/8554) - Material icon for st.page_link by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/8593](https://togithub.com/streamlit/streamlit/pull/8593) - Add dataframe row and column selections by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8411](https://togithub.com/streamlit/streamlit/pull/8411) - Add support for selections to `st.altair_chart` & `st.vega_lite_chart` by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/8302](https://togithub.com/streamlit/streamlit/pull/8302) ##### Bug Fixes 🐛 - Fix standalone custom-component execution by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8620](https://togithub.com/streamlit/streamlit/pull/8620) - Clear stale elements when st.rerun() is used by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8599](https://togithub.com/streamlit/streamlit/pull/8599) - Focus chat input after the submit button is pressed by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8637](https://togithub.com/streamlit/streamlit/pull/8637) - fix: [#​8500](https://togithub.com/streamlit/streamlit/issues/8500) bypass StrEnum 'index' to make position-indexable by [@​97k](https://togithub.com/97k) in [https://github.com/streamlit/streamlit/pull/8622](https://togithub.com/streamlit/streamlit/pull/8622) - Update scroll-margin-top by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8641](https://togithub.com/streamlit/streamlit/pull/8641) - Fix cell error when data editor gets reconstructed by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8640](https://togithub.com/streamlit/streamlit/pull/8640) - Ensure that column config is cloned by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8677](https://togithub.com/streamlit/streamlit/pull/8677) - Add fallback method for CSV download by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8452](https://togithub.com/streamlit/streamlit/pull/8452) ##### Other Changes - Bump mheap/github-action-required-labels from 5.4.0 to 5.4.1 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/streamlit/streamlit/pull/8582](https://togithub.com/streamlit/streamlit/pull/8582) - Remove fullscreen button for `st.table` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8621](https://togithub.com/streamlit/streamlit/pull/8621) - Improve typing for query params `.update` and `.from_dict` by [@​Asaurus1](https://togithub.com/Asaurus1) in [https://github.com/streamlit/streamlit/pull/8614](https://togithub.com/streamlit/streamlit/pull/8614) - Improve anchor button visualization for titles and headings by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8587](https://togithub.com/streamlit/streamlit/pull/8587) - Allow protobuf v5 by [@​mark-thm](https://togithub.com/mark-thm) in [https://github.com/streamlit/streamlit/pull/8624](https://togithub.com/streamlit/streamlit/pull/8624) - Stabilize the vega-lite spec for altair-based charts by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8628](https://togithub.com/streamlit/streamlit/pull/8628) - Update address output in headless mode by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8647](https://togithub.com/streamlit/streamlit/pull/8647) - Revert "Allow protobuf v5" by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8701](https://togithub.com/streamlit/streamlit/pull/8701) #### New Contributors - [@​LucianLiu6](https://togithub.com/LucianLiu6) made their first contribution in [https://github.com/streamlit/streamlit/pull/8581](https://togithub.com/streamlit/streamlit/pull/8581) - [@​mark-thm](https://togithub.com/mark-thm) made their first contribution in [https://github.com/streamlit/streamlit/pull/8624](https://togithub.com/streamlit/streamlit/pull/8624) - [@​97k](https://togithub.com/97k) made their first contribution in [https://github.com/streamlit/streamlit/pull/8622](https://togithub.com/streamlit/streamlit/pull/8622) **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.34.0...1.35.0 ### [`v1.34.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.34.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.33.0...1.34.0) <!-- Release notes generated using configuration in .github/release.yml at 1.34.0 --> #### What's Changed ##### New Features 🎉 - Add st.experimental_dialog by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8040](https://togithub.com/streamlit/streamlit/pull/8040) - from_dict for query params by [@​Asaurus1](https://togithub.com/Asaurus1) in [https://github.com/streamlit/streamlit/pull/8470](https://togithub.com/streamlit/streamlit/pull/8470) - Improve period type support in `st.dataframe` and `st.data_editor` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7987](https://togithub.com/streamlit/streamlit/pull/7987) - Add ability to clear cache for specific function arguments by passing args to `<cached_func>.clear()` by [@​OscarSaharoy](https://togithub.com/OscarSaharoy) in [https://github.com/streamlit/streamlit/pull/8297](https://togithub.com/streamlit/streamlit/pull/8297) - Add support for autoplaying `st.audio` and `st.video` media by [@​snehankekre](https://togithub.com/snehankekre) in [https://github.com/streamlit/streamlit/pull/8481](https://togithub.com/streamlit/streamlit/pull/8481) - Support background colors for text by [@​snehankekre](https://togithub.com/snehankekre) in [https://github.com/streamlit/streamlit/pull/8435](https://togithub.com/streamlit/streamlit/pull/8435) - Non-emoji icons by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/8307](https://togithub.com/streamlit/streamlit/pull/8307) - Add support for Modin and Snowpark Pandas by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8506](https://togithub.com/streamlit/streamlit/pull/8506) - Enable the usage of the pydeck-carto package with st.pydeck_chart by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8422](https://togithub.com/streamlit/streamlit/pull/8422) ##### Bug Fixes 🐛 - Offset dates in vega if no timezone information is attached. by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8278](https://togithub.com/streamlit/streamlit/pull/8278) - Fix issues with fragments writing to containers and the sidebar by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8408](https://togithub.com/streamlit/streamlit/pull/8408) - Produce python error for slider min=max by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8413](https://togithub.com/streamlit/streamlit/pull/8413) - Make check for component ready dynamic by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8434](https://togithub.com/streamlit/streamlit/pull/8434) - Update Auto Theme after print dialog if necessary by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8469](https://togithub.com/streamlit/streamlit/pull/8469) - Reset widget state on page change by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8425](https://togithub.com/streamlit/streamlit/pull/8425) - Switch back to using undeprecated pillow constant by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8492](https://togithub.com/streamlit/streamlit/pull/8492) - Fix double script/callback run when replacing a file by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8493](https://togithub.com/streamlit/streamlit/pull/8493) - Handle Altair vconcat with use_container_width by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8498](https://togithub.com/streamlit/streamlit/pull/8498) - Fix empty state for `st.status` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8369](https://togithub.com/streamlit/streamlit/pull/8369) - Fix `st.multiselect` usage with empty sets or tuples by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8471](https://togithub.com/streamlit/streamlit/pull/8471) - Handle Altair resolve_scale by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8497](https://togithub.com/streamlit/streamlit/pull/8497) - Adjust default date for st.date_input if today's date is out of bounds by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8519](https://togithub.com/streamlit/streamlit/pull/8519) - Handle setting session state keys to None for supported widgets by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8529](https://togithub.com/streamlit/streamlit/pull/8529) - Fix empty generator usage with `st.write_stream` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8560](https://togithub.com/streamlit/streamlit/pull/8560) ##### Other Changes - Update modal styles by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8274](https://togithub.com/streamlit/streamlit/pull/8274) - Move toasts to top right and make them prettier by [@​sfc-gh-tteixeira](https://togithub.com/sfc-gh-tteixeira) in [https://github.com/streamlit/streamlit/pull/8433](https://togithub.com/streamlit/streamlit/pull/8433) - Fix escaping in docstrings by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8510](https://togithub.com/streamlit/streamlit/pull/8510) - Fix blank space print by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8502](https://togithub.com/streamlit/streamlit/pull/8502) - Remove snowflake extras python restriction by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8538](https://togithub.com/streamlit/streamlit/pull/8538) #### New Contributors - [@​Lundez](https://togithub.com/Lundez) made their first contribution in [https://github.com/streamlit/streamlit/pull/8520](https://togithub.com/streamlit/streamlit/pull/8520) - [@​OscarSaharoy](https://togithub.com/OscarSaharoy) made their first contribution in [https://github.com/streamlit/streamlit/pull/8297](https://togithub.com/streamlit/streamlit/pull/8297) **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.33.0...1.34.0 ### [`v1.33.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.33.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.32.2...1.33.0) <!-- Release notes generated using configuration in .github/release.yml at 1.33.0 --> #### What's Changed ##### Breaking Changes 🛠 - Require explicit suggestion of unsafe_allow_html in st.write by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8238](https://togithub.com/streamlit/streamlit/pull/8238) ##### New Features 🎉 - explicit update() method for query_params by [@​Asaurus1](https://togithub.com/Asaurus1) in [https://github.com/streamlit/streamlit/pull/8205](https://togithub.com/streamlit/streamlit/pull/8205) - Add `AreaChartColumn` to column config by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8237](https://togithub.com/streamlit/streamlit/pull/8237) - Associate label with input to make label click focus input by [@​filiptammergard](https://togithub.com/filiptammergard) in [https://github.com/streamlit/streamlit/pull/8155](https://togithub.com/streamlit/streamlit/pull/8155) - Media elements improvements by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/8203](https://togithub.com/streamlit/streamlit/pull/8203) - Page switching in AppTest by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8280](https://togithub.com/streamlit/streamlit/pull/8280) - Add ability to use timedelta and stings to `start_time` and `end_time`. by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/8348](https://togithub.com/streamlit/streamlit/pull/8348) - st.experimental_fragment decorator by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8343](https://togithub.com/streamlit/streamlit/pull/8343) - Feature: `st.html` by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/8366](https://togithub.com/streamlit/streamlit/pull/8366) ##### Bug Fixes 🐛 - AppTest format_func by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8189](https://togithub.com/streamlit/streamlit/pull/8189) - Url decode link column display values if regex is used by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8258](https://togithub.com/streamlit/streamlit/pull/8258) - Fix infinite loop when `rerun` and triggered widgets are used together in AppTest by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8264](https://togithub.com/streamlit/streamlit/pull/8264) - Use the button width as minimum for `st.popover` container by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8266](https://togithub.com/streamlit/streamlit/pull/8266) - Revert "Expire session storage cache on an async timer ([#​8083](https://togithub.com/streamlit/streamlit/issues/8083))" by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8281](https://togithub.com/streamlit/streamlit/pull/8281) - Allow custom themes to override embed options query parameter by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8021](https://togithub.com/streamlit/streamlit/pull/8021) - Fix issue with not correctly waiting for connections by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8294](https://togithub.com/streamlit/streamlit/pull/8294) - Fix initial iframe height for custom component by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8290](https://togithub.com/streamlit/streamlit/pull/8290) - Fullscreen Button Overflow Horizontally by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8279](https://togithub.com/streamlit/streamlit/pull/8279) - Fix white components backgrounds when OS is using dark theme by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8242](https://togithub.com/streamlit/streamlit/pull/8242) - Add simple fix to update container status after llm complete by [@​KedoKudo](https://togithub.com/KedoKudo) in [https://github.com/streamlit/streamlit/pull/8311](https://togithub.com/streamlit/streamlit/pull/8311) - Simplify toast message truncation to use character limit directly by [@​snehankekre](https://togithub.com/snehankekre) in [https://github.com/streamlit/streamlit/pull/8337](https://togithub.com/streamlit/streamlit/pull/8337) - resolve path when registering watcher for module paths by [@​zyxue](https://togithub.com/zyxue) in [https://github.com/streamlit/streamlit/pull/8372](https://togithub.com/streamlit/streamlit/pull/8372) - Readd mistakenly removed line and add explanatory comment by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8392](https://togithub.com/streamlit/streamlit/pull/8392) ##### Other Changes - Allow packaging 24.x by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8338](https://togithub.com/streamlit/streamlit/pull/8338) #### New Contributors - [@​filiptammergard](https://togithub.com/filiptammergard) made their first contribution in [https://github.com/streamlit/streamlit/pull/8155](https://togithub.com/streamlit/streamlit/pull/8155) - [@​KedoKudo](https://togithub.com/KedoKudo) made their first contribution in [https://github.com/streamlit/streamlit/pull/8311](https://togithub.com/streamlit/streamlit/pull/8311) - [@​zyxue](https://togithub.com/zyxue) made their first contribution in [https://github.com/streamlit/streamlit/pull/8372](https://togithub.com/streamlit/streamlit/pull/8372) **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.32.2...1.33.0 ### [`v1.32.2`](https://togithub.com/streamlit/streamlit/releases/tag/1.32.2) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.32.1...1.32.2) <!-- Release notes generated using configuration in .github/release.yml at 1.32.2 --> **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.32.1...1.32.2 ### [`v1.32.1`](https://togithub.com/streamlit/streamlit/releases/tag/1.32.1) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.32.0...1.32.1) <!-- Release notes generated using configuration in .github/release.yml at 1.32.1 --> **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.32.0...1.32.1 ### [`v1.32.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.32.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.31.1...1.32.0) <!-- Release notes generated using configuration in .github/release.yml at 1.32.0 --> #### What's Changed ##### New Features 🎉 - Support markdown links in`st.radio` options by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8028](https://togithub.com/streamlit/streamlit/pull/8028) - Improve error handling in `st.write_stream` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8036](https://togithub.com/streamlit/streamlit/pull/8036) - Add support for PIL images in `st.write` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8039](https://togithub.com/streamlit/streamlit/pull/8039) - add: Supprt for HTTP <Head> method to /healthz endpoint by [@​rahulmistri1997](https://togithub.com/rahulmistri1997) in [https://github.com/streamlit/streamlit/pull/8145](https://togithub.com/streamlit/streamlit/pull/8145) - Add support for AzureOpenAI chat stream by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8107](https://togithub.com/streamlit/streamlit/pull/8107) - Add `st.popover` layout container by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7908](https://togithub.com/streamlit/streamlit/pull/7908) - AppTest `from_function` args by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8183](https://togithub.com/streamlit/streamlit/pull/8183) - Subtitles changes for `st.video` by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/8057](https://togithub.com/streamlit/streamlit/pull/8057) - Expander and Status AppTest wrappers by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8187](https://togithub.com/streamlit/streamlit/pull/8187) ##### Bug Fixes 🐛 - Add support for converting `st.query_params` to string by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8030](https://togithub.com/streamlit/streamlit/pull/8030) - Fix custom dataframe scrollbars in Chrome by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8034](https://togithub.com/streamlit/streamlit/pull/8034) - Fix `time_input` menu colors in dark mode by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8056](https://togithub.com/streamlit/streamlit/pull/8056) - Make shallow copies of options returned from ensure_indexable by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8064](https://togithub.com/streamlit/streamlit/pull/8064) - Fix memory leak in runtime coroutine loop by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8068](https://togithub.com/streamlit/streamlit/pull/8068) - Prevent pandas keyerror when checking color column format in st.map by [@​awhazell](https://togithub.com/awhazell) in [https://github.com/streamlit/streamlit/pull/8079](https://togithub.com/streamlit/streamlit/pull/8079) - Fix [#​7954](https://togithub.com/streamlit/streamlit/issues/7954) by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/8054](https://togithub.com/streamlit/streamlit/pull/8054) - Fix issue using a local path with `st.image` on windows. by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8092](https://togithub.com/streamlit/streamlit/pull/8092) - Fix: `st.page_link` & `st.switch_page` handling / prefixed paths by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/8085](https://togithub.com/streamlit/streamlit/pull/8085) - Fix script runner stack overflow by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8100](https://togithub.com/streamlit/streamlit/pull/8100) - Normalize main script path in `st.switch_page` and `st.page_link` by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/8103](https://togithub.com/streamlit/streamlit/pull/8103) - Fix: `st.page_link` URL preview shows file path by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/8086](https://togithub.com/streamlit/streamlit/pull/8086) - Support multiple path characteristics for switch_page and page_link by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8127](https://togithub.com/streamlit/streamlit/pull/8127) - Fix chart exception where color-handling code expected DF index to start at 0 by [@​sfc-gh-tteixeira](https://togithub.com/sfc-gh-tteixeira) in [https://github.com/streamlit/streamlit/pull/8158](https://togithub.com/streamlit/streamlit/pull/8158) - Fix: Alert element overflow by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/8194](https://togithub.com/streamlit/streamlit/pull/8194) - Fully clear App State on page change by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8208](https://togithub.com/streamlit/streamlit/pull/8208) - Make st.help more resilient with conditional members by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/8228](https://togithub.com/streamlit/streamlit/pull/8228) ##### Other Changes - Expire session storage cache on an async timer by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/8083](https://togithub.com/streamlit/streamlit/pull/8083) - Lazy-load emoji module to improve performance by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8109](https://togithub.com/streamlit/streamlit/pull/8109) - Lazy-load pandas and pyarrow to improve performance by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8125](https://togithub.com/streamlit/streamlit/pull/8125) - Miscellaneous docstring edits and argument names by [@​sfc-gh-dmatthews](https://togithub.com/sfc-gh-dmatthews) in [https://github.com/streamlit/streamlit/pull/8118](https://togithub.com/streamlit/streamlit/pull/8118) - Deprecate the `deprecation.showPyplotGlobalUse` config option by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8133](https://togithub.com/streamlit/streamlit/pull/8133) - Use env variable to configure matplotlib backend by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8113](https://togithub.com/streamlit/streamlit/pull/8113) - Lazy-load numpy and pillow to improve performance by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8134](https://togithub.com/streamlit/streamlit/pull/8134) - Show a warning when server port `3000` is used by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8152](https://togithub.com/streamlit/streamlit/pull/8152) - Fixed typos in example documentation by [@​t1emp0](https://togithub.com/t1emp0) in [https://github.com/streamlit/streamlit/pull/8162](https://togithub.com/streamlit/streamlit/pull/8162) - Increase time until timeout warning is shown for a custom component by [@​raethlein](https://togithub.com/raethlein) in [https://github.com/streamlit/streamlit/pull/8179](https://togithub.com/streamlit/streamlit/pull/8179) - Update glide-data-grid to version 6.0.4 by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7779](https://togithub.com/streamlit/streamlit/pull/7779) #### New Contributors - [@​awhazell](https://togithub.com/awhazell) made their first contribution in [https://github.com/streamlit/streamlit/pull/8079](https://togithub.com/streamlit/streamlit/pull/8079) - [@​SidVer312](https://togithub.com/SidVer312) made their first contribution in [https://github.com/streamlit/streamlit/pull/8017](https://togithub.com/streamlit/streamlit/pull/8017) - [@​rahulmistri1997](https://togithub.com/rahulmistri1997) made their first contribution in [https://github.com/streamlit/streamlit/pull/8145](https://togithub.com/streamlit/streamlit/pull/8145) - [@​t1emp0](https://togithub.com/t1emp0) made their first contribution in [https://github.com/streamlit/streamlit/pull/8162](https://togithub.com/streamlit/streamlit/pull/8162) **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.31.1...1.32.0 ### [`v1.31.1`](https://togithub.com/streamlit/streamlit/releases/tag/1.31.1) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.31.0...1.31.1) <!-- Release notes generated using configuration in .github/release.yml at 1.31.1 --> **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.31.0...1.31.1 ### [`v1.31.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.31.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.30.0...1.31.0) <!-- Release notes generated using configuration in .github/release.yml at 1.31.0 --> #### What's Changed ##### New Features 🎉 - Allow inline usage of `st.chat_input` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7896](https://togithub.com/streamlit/streamlit/pull/7896) - Feature: `st.page_link` by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/7965](https://togithub.com/streamlit/streamlit/pull/7965) - Add `st.write_stream` command to handle generators or OpenAI output by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7906](https://togithub.com/streamlit/streamlit/pull/7906) ##### Bug Fixes 🐛 - Reuse style element for theme injection into custom components by [@​Tom-Julux](https://togithub.com/Tom-Julux) in [https://github.com/streamlit/streamlit/pull/7914](https://togithub.com/streamlit/streamlit/pull/7914) - Handle out of order blocks when parsing element tree by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7923](https://togithub.com/streamlit/streamlit/pull/7923) - Fix progress bar float input bug by [@​notiona](https://togithub.com/notiona) in [https://github.com/streamlit/streamlit/pull/7953](https://togithub.com/streamlit/streamlit/pull/7953) - Don't pass query parameters from parent page into iframes by [@​eric-skydio](https://togithub.com/eric-skydio) in [https://github.com/streamlit/streamlit/pull/7951](https://togithub.com/streamlit/streamlit/pull/7951) - Fix period type support for Pandas 2.2.0 by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7988](https://togithub.com/streamlit/streamlit/pull/7988) - Only ignore hiding required columns in dynamic mode by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7996](https://togithub.com/streamlit/streamlit/pull/7996) - Disable watchdog suggestion for `none` or `poll` watcher type by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/8024](https://togithub.com/streamlit/streamlit/pull/8024) ##### Other Changes - Support latest importlib-metadata v7 by [@​elgalu](https://togithub.com/elgalu) in [https://github.com/streamlit/streamlit/pull/7925](https://togithub.com/streamlit/streamlit/pull/7925) - Make Snowpark dependency truly optional for SnowflakeConnection by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7919](https://togithub.com/streamlit/streamlit/pull/7919) #### New Contributors - [@​Tom-Julux](https://togithub.com/Tom-Julux) made their first contribution in [https://github.com/streamlit/streamlit/pull/7914](https://togithub.com/streamlit/streamlit/pull/7914) - [@​elgalu](https://togithub.com/elgalu) made their first contribution in [https://github.com/streamlit/streamlit/pull/7925](https://togithub.com/streamlit/streamlit/pull/7925) - [@​notiona](https://togithub.com/notiona) made their first contribution in [https://github.com/streamlit/streamlit/pull/7953](https://togithub.com/streamlit/streamlit/pull/7953) **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.30.0...1.31.0 ### [`v1.30.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.30.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.29.0...1.30.0) <!-- Release notes generated using configuration in .github/release.yml at 1.30.0 --> #### What's Changed ##### New Features 🎉 - Add support for scroll container via the `height` parameter by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7697](https://togithub.com/streamlit/streamlit/pull/7697) - Add display_text to LinkColumn by [@​sfc-gh-bhay](https://togithub.com/sfc-gh-bhay) in [https://github.com/streamlit/streamlit/pull/7741](https://togithub.com/streamlit/streamlit/pull/7741) - st.query_params by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/7774](https://togithub.com/streamlit/streamlit/pull/7774) - Add Pandas styler support to `LinkColumn` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7784](https://togithub.com/streamlit/streamlit/pull/7784) - Config - MPA Sidebar Page Navigation by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/7852](https://togithub.com/streamlit/streamlit/pull/7852) - Feature - `st.switch_page` by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/7853](https://togithub.com/streamlit/streamlit/pull/7853) ##### Bug Fixes 🐛 - Fix handling of ordinal columns for builtin-charts by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7771](https://togithub.com/streamlit/streamlit/pull/7771) - Fix `st.toggle` background color by [@​sfc-gh-jgarcia](https://togithub.com/sfc-gh-jgarcia) in [https://github.com/streamlit/streamlit/pull/7788](https://togithub.com/streamlit/streamlit/pull/7788) - Don't send command used to start streamlit to frontend by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7787](https://togithub.com/streamlit/streamlit/pull/7787) - Fix iframe background for dark color scheme by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7821](https://togithub.com/streamlit/streamlit/pull/7821) - Prevent incompatible column config serialization by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7887](https://togithub.com/streamlit/streamlit/pull/7887) - Prevent hiding required editable columns by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7888](https://togithub.com/streamlit/streamlit/pull/7888) - Disable the ability to submit form if a submit button is disabled by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/7827](https://togithub.com/streamlit/streamlit/pull/7827) - Fix flickering effect when changing tabs by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7904](https://togithub.com/streamlit/streamlit/pull/7904) - Fix shrunk icon size in st.expander by [@​matiboux](https://togithub.com/matiboux) in [https://github.com/streamlit/streamlit/pull/7596](https://togithub.com/streamlit/streamlit/pull/7596) - Add check that individual elements are "python comparable" by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/7840](https://togithub.com/streamlit/streamlit/pull/7840) - Use commonpath rather than common prefix for more secure access by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/7901](https://togithub.com/streamlit/streamlit/pull/7901) - Don't disable tab on stale flag by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7905](https://togithub.com/streamlit/streamlit/pull/7905) - Fix embed params being dropped in page swaps by [@​sfc-gh-wihuang](https://togithub.com/sfc-gh-wihuang) in [https://github.com/streamlit/streamlit/pull/7918](https://togithub.com/streamlit/streamlit/pull/7918) ##### Other Changes - Fix parenthesis error messaging by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/7770](https://togithub.com/streamlit/streamlit/pull/7770) - Update SECURITY.md by [@​sfc-gh-hpathak](https://togithub.com/sfc-gh-hpathak) in [https://github.com/streamlit/streamlit/pull/7783](https://togithub.com/streamlit/streamlit/pull/7783) - Speed up plotly figures by 8x for users with "orjson" by [@​eric-skydio](https://togithub.com/eric-skydio) in [https://github.com/streamlit/streamlit/pull/7860](https://togithub.com/streamlit/streamlit/pull/7860) #### New Contributors - [@​sfc-gh-bhay](https://togithub.com/sfc-gh-bhay) made their first contribution in [https://github.com/streamlit/streamlit/pull/7741](https://togithub.com/streamlit/streamlit/pull/7741) - [@​sfc-gh-jkinkead](https://togithub.com/sfc-gh-jkinkead) made their first contribution in [https://github.com/streamlit/streamlit/pull/7843](https://togithub.com/streamlit/streamlit/pull/7843) - [@​sfc-gh-jdaly](https://togithub.com/sfc-gh-jdaly) made their first contribution in [https://github.com/streamlit/streamlit/pull/7842](https://togithub.com/streamlit/streamlit/pull/7842) - [@​matiboux](https://togithub.com/matiboux) made their first contribution in [https://github.com/streamlit/streamlit/pull/7596](https://togithub.com/streamlit/streamlit/pull/7596) **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.29.0...1.30.0 ### [`v1.29.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.29.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.28.2...1.29.0) <!-- Release notes generated using configuration in .github/release.yml at 1.29.0 --> #### What's Changed ##### Breaking Changes 🛠 - Remove old app test api by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7657](https://togithub.com/streamlit/streamlit/pull/7657) ##### New Features 🎉 - Add ability to add empty query params by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/7601](https://togithub.com/streamlit/streamlit/pull/7601) - Add Enum coercion to options elements, if input Enum classes "identical" but redefined on script run by [@​Asaurus1](https://togithub.com/Asaurus1) in [https://github.com/streamlit/streamlit/pull/7408](https://togithub.com/streamlit/streamlit/pull/7408) - Remove Recording Feature Menu Item when unsupported by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/7604](https://togithub.com/streamlit/streamlit/pull/7604) - Improved AppTest/ElementTree formatting by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7658](https://togithub.com/streamlit/streamlit/pull/7658) - Add support for timedelta type to `st.dataframe`, `st.data_editor` and `st.table`. by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7689](https://togithub.com/streamlit/streamlit/pull/7689) - Add border parameter to container and form by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7455](https://togithub.com/streamlit/streamlit/pull/7455) - Use "loading skeletons" throughout Streamlit by [@​sfc-gh-tteixeira](https://togithub.com/sfc-gh-tteixeira) in [https://github.com/streamlit/streamlit/pull/7598](https://togithub.com/streamlit/streamlit/pull/7598) ##### Bug Fixes 🐛 - Make the outline for expanders appear on focus-visible and not focus by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/7592](https://togithub.com/streamlit/streamlit/pull/7592) - Use `NoReturn` annotation for stop and rerun by [@​kongzii](https://togithub.com/kongzii) in [https://github.com/streamlit/streamlit/pull/7422](https://togithub.com/streamlit/streamlit/pull/7422) - Fix SVG scaling on fullscreen mode for `st.graphviz_chart` by [@​snehankekre](https://togithub.com/snehankekre) in [https://github.com/streamlit/streamlit/pull/7398](https://togithub.com/streamlit/streamlit/pull/7398) - Fix top padding when embedding an app with a sidebar by [@​sfc-gh-jgarcia](https://togithub.com/sfc-gh-jgarcia) in [https://github.com/streamlit/streamlit/pull/7630](https://togithub.com/streamlit/streamlit/pull/7630) - Fix app testing repr bug for `st.container` by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7644](https://togithub.com/streamlit/streamlit/pull/7644) - Ensure file_uploader doesn't trigger needless reruns by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7641](https://togithub.com/streamlit/streamlit/pull/7641) - Fix trigger value regression with `st.rerun` by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7643](https://togithub.com/streamlit/streamlit/pull/7643) - Fix: MPA Nav expand arrow by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/7634](https://togithub.com/streamlit/streamlit/pull/7634) - Greatly narrow errors that we retry in SnowflakeConnection by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7645](https://togithub.com/streamlit/streamlit/pull/7645) - Fix how connection is declared for typing purposes by [@​thezanke](https://togithub.com/thezanke) in [https://github.com/streamlit/streamlit/pull/7671](https://togithub.com/streamlit/streamlit/pull/7671) - Enforce pyarrow version for arrow-based custom components by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7695](https://togithub.com/streamlit/streamlit/pull/7695) - Allow to access external server IP via https. by [@​LarsHill](https://togithub.com/LarsHill) in [https://github.com/streamlit/streamlit/pull/7712](https://togithub.com/streamlit/streamlit/pull/7712) - Move dg_stack into a ContextVar to support with blocks in separate threads by [@​eric-skydio](https://togithub.com/eric-skydio) in [https://github.com/streamlit/streamlit/pull/7715](https://togithub.com/streamlit/streamlit/pull/7715) - Improve st.connection caching behavior by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/7730](https://togithub.com/streamlit/streamlit/pull/7730) - Don't use hash on floats in hashing.py by [@​BlackHC](https://togithub.com/BlackHC) in [https://github.com/streamlit/streamlit/pull/7754](https://togithub.com/streamlit/streamlit/pull/7754) ##### Other Changes - Deprecate unused config options by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7584](https://togithub.com/streamlit/streamlit/pull/7584) - Remove "Made by Streamlit" footer by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7583](https://togithub.com/streamlit/streamlit/pull/7583) - Tweak "forgot config" SnowflakeConnection error message by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7652](https://togithub.com/streamlit/streamlit/pull/7652) - Release Streamlit version 1.28.1 by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7666](https://togithub.com/streamlit/streamlit/pull/7666) - Poll for script completion much more often in AppTest by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7691](https://togithub.com/streamlit/streamlit/pull/7691) - Add Python 3.12 support by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/7663](https://togithub.com/streamlit/streamlit/pull/7663) - Release Streamlit version 1.28.2 by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7716](https://togithub.com/streamlit/streamlit/pull/7716) - fix: component dev url typo by [@​ObservedObserver](https://togithub.com/ObservedObserver) in [https://github.com/streamlit/streamlit/pull/7746](https://togithub.com/streamlit/streamlit/pull/7746) - Fix another url typo by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7764](https://togithub.com/streamlit/streamlit/pull/7764) #### New Contributors - [@​kongzii](https://togithub.com/kongzii) made their first contribution in [https://github.com/streamlit/streamlit/pull/7422](https://togithub.com/streamlit/streamlit/pull/7422) - [@​Asaurus1](https://togithub.com/Asaurus1) made their first contribution in [https://github.com/streamlit/streamlit/pull/7408](https://togithub.com/streamlit/streamlit/pull/7408) - [@​thezanke](https://togithub.com/thezanke) made their first contribution in [https://github.com/streamlit/streamlit/pull/7671](https://togithub.com/streamlit/streamlit/pull/7671) - [@​LarsHill](https://togithub.com/LarsHill) made their first contribution in [https://github.com/streamlit/streamlit/pull/7712](https://togithub.com/streamlit/streamlit/pull/7712) - [@​eric-skydio](https://togithub.com/eric-skydio) made their first contribution in [https://github.com/streamlit/streamlit/pull/7715](https://togithub.com/streamlit/streamlit/pull/7715) - [@​sfc-gh-pfinnigan](https://togithub.com/sfc-gh-pfinnigan) made their first contribution in [https://github.com/streamlit/streamlit/pull/7682](https://togithub.com/streamlit/streamlit/pull/7682) - [@​samueldg](https://togithub.com/samueldg) made their first contribution in [https://github.com/streamlit/streamlit/pull/7762](https://togithub.com/streamlit/streamlit/pull/7762) - [@​ObservedObserver](https://togithub.com/ObservedObserver) made their first contribution in [https://github.com/streamlit/streamlit/pull/7746](https://togithub.com/streamlit/streamlit/pull/7746) - [@​BlackHC](https://togithub.com/BlackHC) made their first contribution in [https://github.com/streamlit/streamlit/pull/7754](https://togithub.com/streamlit/streamlit/pull/7754) **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.28.2...1.29.0 ### [`v1.28.2`](https://togithub.com/streamlit/streamlit/releases/tag/1.28.2) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.28.1...1.28.2) <!-- Release notes generated using configuration in .github/release.yml at 1.28.2 --> **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.28.1...1.28.2 ### [`v1.28.1`](https://togithub.com/streamlit/streamlit/releases/tag/1.28.1) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.28.0...1.28.1) <!-- Release notes generated using configuration in .github/release.yml at 1.28.1 --> **Full Changelog**: https://github.com/streamlit/streamlit/compare/1.28.0...1.28.1 ### [`v1.28.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.28.0) [Compare Source](https://togithub.com/streamlit/streamlit/compare/1.27.2...1.28.0) <!-- Release notes generated using configuration in .github/release.yml at 1.28.0 --> #### What's Changed ##### Breaking Changes 🛠 - Remove legacy dataframe serialization by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7429](https://togithub.com/streamlit/streamlit/pull/7429) ##### New Features 🎉 - Add overrideable default timeout for script tests by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7327](https://togithub.com/streamlit/streamlit/pull/7327) - Fluent asserts and type narrowing for widgets in tests by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7325](https://togithub.com/streamlit/streamlit/pull/7325) - Teach st.write how to not set unsafe_allow_html when possible by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7432](https://togithub.com/streamlit/streamlit/pull/7432) - Add datetime index editing support for `st.data_editor` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7483](https://togithub.com/streamlit/streamlit/pull/7483) - Support Graphviz layout engines by [@​snehankekre](https://togithub.com/snehankekre) in [https://github.com/streamlit/streamlit/pull/7505](https://togithub.com/streamlit/streamlit/pull/7505) - Better input/output visibility in Langchain callback by [@​pokidyshev](https://togithub.com/pokidyshev) in [https://github.com/streamlit/streamlit/pull/7478](https://togithub.com/streamlit/streamlit/pull/7478) - New test framework api structure by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7413](https://togithub.com/streamlit/streamlit/pull/7413) - Arrow dataframe test wrapper by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7519](https://togithub.com/streamlit/streamlit/pull/7519) - Columns and tabs in script testing by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7524](https://togithub.com/streamlit/streamlit/pull/7524) - Chat input and messages for app testing by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7535](https://togithub.com/streamlit/streamlit/pull/7535) - Update `st.spinner` by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/7488](https://togithub.com/streamlit/streamlit/pull/7488) - Alert classes in app testing by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7542](https://togithub.com/streamlit/streamlit/pull/7542) - Query params and secrets in app tests by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7561](https://togithub.com/streamlit/streamlit/pull/7561) - De-experimentalize st.connection by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7536](https://togithub.com/streamlit/streamlit/pull/7536) - Minor st.connection tweaks by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7562](https://togithub.com/streamlit/streamlit/pull/7562) - Basic app test repr cleanup by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7573](https://togithub.com/streamlit/streamlit/pull/7573) - Add toolbar to `st.dataframe` and `st.data_editor` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7345](https://togithub.com/streamlit/streamlit/pull/7345) - Implement many remaining AppTest elements by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7576](https://togithub.com/streamlit/streamlit/pull/7576) ##### Bug Fixes 🐛 - Remove autosizer so we don't have weird flickering and weird layout issues by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/7281](https://togithub.com/streamlit/streamlit/pull/7281) - Better dataframe hashing by [@​kajarenc](https://togithub.com/kajarenc) in [https://github.com/streamlit/streamlit/pull/7331](https://togithub.com/streamlit/streamlit/pull/7331) - Fix bokeh slider by adding in side effects to package json by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/7441](https://togithub.com/streamlit/streamlit/pull/7441) - Fix vertical button regression in toolbar actions by [@​willhuang1997](https://togithub.com/willhuang1997) in [https://github.com/streamlit/streamlit/pull/7470](https://togithub.com/streamlit/streamlit/pull/7470) - Upgrade plotly.js version by [@​sfc-gh-wihuang](https://togithub.com/sfc-gh-wihuang) in [https://github.com/streamlit/streamlit/pull/7449](https://togithub.com/streamlit/streamlit/pull/7449) - Avoid confusion about file extensions: keep inner dots by [@​mo42](https://togithub.com/mo42) in [https://github.com/streamlit/streamlit/pull/7362](https://togithub.com/streamlit/streamlit/pull/7362) - Configure non-range indices as required for editing with `st.data_editor` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7481](https://togithub.com/streamlit/streamlit/pull/7481) - Widget style fixes by [@​sfc-gh-jgarcia](https://togithub.com/sfc-gh-jgarcia) in [https://github.com/streamlit/streamlit/pull/7486](https://togithub.com/streamlit/streamlit/pull/7486) - Support for non-string column names in `st.data_editor` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7485](https://togithub.com/streamlit/streamlit/pull/7485) - Add user-friendly exception if dataframe exceeds max config of Pandas Styler by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7497](https://togithub.com/streamlit/streamlit/pull/7497) - Only use get_active_session when running in SiS by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7502](https://togithub.com/streamlit/streamlit/pull/7502) - Call matplotlib crash fix for scripts run in tests by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7511](https://togithub.com/streamlit/streamlit/pull/7511) - Improve decimal type support for `st.dataframe` and `st.data_editor` by [@​LukasMasuch](https://togithub.com/LukasMasuch) in [https://github.com/streamlit/streamlit/pull/7475](https://togithub.com/streamlit/streamlit/pull/7475) - Fix: Foreign language anchors by [@​mayagbarnes](https://togithub.com/mayagbarnes) in [https://github.com/streamlit/streamlit/pull/7454](https://togithub.com/streamlit/streamlit/pull/7454) - Fix Chat Message container to align and manage the autosizer handling by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/7504](https://togithub.com/streamlit/streamlit/pull/7504) - Added permission to use Clipboard API in IFrame by [@​dilipthakkar](https://togithub.com/dilipthakkar) in [https://github.com/streamlit/streamlit/pull/7487](https://togithub.com/streamlit/streamlit/pull/7487) - Move label attribute to only widgets that have it by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7560](https://togithub.com/streamlit/streamlit/pull/7560) - Fix select slider value setting with non-strings by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7566](https://togithub.com/streamlit/streamlit/pull/7566) - Fix attr access of session state in app tests by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7543](https://togithub.com/streamlit/streamlit/pull/7543) - Added FIPS compliance by [@​DueViktor](https://togithub.com/DueViktor) in [https://github.com/streamlit/streamlit/pull/7527](https://togithub.com/streamlit/streamlit/pull/7527) - Enlarge sidebar left and right padding to match MPA spacing by [@​sfc-gh-jgarcia](https://togithub.com/sfc-gh-jgarcia) in [https://github.com/streamlit/streamlit/pull/7531](https://togithub.com/streamlit/streamlit/pull/7531) - Convert Expander to Details/Summary Element by [@​kmcgrady](https://togithub.com/kmcgrady) in [https://github.com/streamlit/streamlit/pull/7247](https://togithub.com/streamlit/streamlit/pull/7247) - Fix chat_input repr and add repr tests by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7574](https://togithub.com/streamlit/streamlit/pull/7574) ##### Other Changes - Release 1.27.0 by [@​vdonato](https://togithub.com/vdonato) in [https://github.com/streamlit/streamlit/pull/7402](https://togithub.com/streamlit/streamlit/pull/7402) - Allow pillow 10.0.1 by [@​AnOctopus](https://togithub.com/AnOctopus) in [https://github.com/streamlit/streamlit/pull/7442](https://togithub.com/streamlit/streamlit/pull/7442) - Release 1.27.1 by [@​kmcgrady](https://togithub.com/kmcgrady) in [https:/ </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on the first day of the month" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/sawyerh/highlights). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
st.experimental_fragment
is a decorator to turn a function into a Streamlit fragment whichcan run independently of the wider app. When a user interacts with an input widget created
inside a fragment, only the fragment reruns instead of rerunning the full app as usual.
You can also set a
run_every
interval, which causes the fragment to rerun automatically atthat interval (in addition to any user initiated reruns).
This PR is the big merge of the
feature/st.experimental_fragment
branch intodevelop
!Note that all of the code going into the feature branch has already been reviewed, but it'd
be worth giving this PR at least a brief read through rather than just rubber stamping it
because enough code is being changed that that it's worth being extra careful.
Enough stuff is going on in this PR that I won't try to describe the implementation in this PR
description -- details of how this feature was built can be found in the PR descriptions of
the multiple PRs into the feature branch linked below in the commit log.