Skip to content
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

Introduce st.navigation and st.Page #8744

Merged
merged 21 commits into from
May 31, 2024
Merged

Introduce st.navigation and st.Page #8744

merged 21 commits into from
May 31, 2024

Conversation

kmcgrady
Copy link
Collaborator

@kmcgrady kmcgrady commented May 23, 2024

Describe your changes

This PR is the culmination of all of the work associated with Multipage apps V2. Specifically this PR includes:

  • abstractions on the frontend and backend for navigation and page management respectively.
  • command for st.navigation and st.Page

GitHub issues

closes #8759

Testing Plan

  • JS and Python End to End tests are included
  • E2E Tests are included for the MPA v2 features

Contribution License Agreement

By submitting this pull request you agree that all contributions to this project are made under the Apache 2.0 license.

## Describe your changes

Combine all logic of the navigation (page url updates, mpa management),
and put it in a class (V1AppNavigation). We create a layer above it that
essentially pulls from the V1AppNavigation as an overengineering effort
to set up for AppNavigation V2

## Testing Plan

- Original tests should pass
- unit tests for AppNavigation.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

Migrates pages are primarily managed in the `source_util` module to a
`PagesManager` class. Because V2 can have a dynamic set of pages per
session, the Pages Manager instance will live on the `AppSession`. For
V1, we will leverage static variables/methods for page watching.

## Testing Plan

- Original Unit tests are applied (with patches adjusted)
- Unit tests are applied for the PagesManager component

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

From #8639, @raethlein made a good claim about the lock as well as some
types to make things clear, so I addressed those here.

## Testing Plan

- Type checks should pass
- Existing tests should pass with lock behavior (we don't usually manage
concurrency testing at the moment)

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

MPA v2 will introduce the concept of an active script hash where the
active script is the current script running. This change does the
following:

- Adds the concept of Active Script Hash to the Pages Manager. By
default, it returns the current page hash and doesn't set anything.
- All widgets will leverage the Active Script Hash in calculating their
id. We do this so that widgets can be associated with the script (and
avoid duplicate issues where possible).
- We will provide the active script hash as part of the forward message
metadata. That way, we can associate the active script hash with every
call (this is especially important for `Delta` messages.
- Frontend will store the active script hash in the nodes

## Testing Plan

- Added a python unit test for the active script hash setting in the
forward message.
- Open to ideas on how to test the widget id updates, but I think it's
not quite feasible.
- Frontend tests storage of active script hash in nodes

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

MPA v2 requires to understand which code is associated with the main
script (or common script) or not. We can send the main script hash in
the NewSession

## Testing Plan

- Updated unit tests to include the main script hash
- Added a test that verifies the main script hash is set correctly

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

Confirmed that the properties associated with the `updateReport` call
are not needed.

## Testing Plan

- Added a unit test to ensure the value is sent on new session

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
#8658)

## Describe your changes

MPA v2 will present different implementations from previous versions. We
will adopt a strategy design pattern in order to separate implementation
from MPA v1 or v2.

## Testing Plan

- Original unit tests from this feature branch should still apply

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

This change includes `st.Page` and `st.navigation` commands bringing us
closer to the finish point for MPA v2.

## Testing Plan

- Added associated unit tests
- E2E Tests will be needed to test MPA end-to-end, but they will not be
included in this PR to the feature branch.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

There was a good recommendation to move position to an enum. Let's move
it before committing the feature.

## Testing Plan

- Updated Unit 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.
## Describe your changes

Others (Notebooks) uses `AppRoot.empty()`. To make things easier, I make
the `mainScriptHash` keyword only.

## Testing Plan

- Existing tests should be fine enough

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

Title says it all. Ensure `st.Page` is an argument to `switch_page` and
`page_link`

## Testing Plan

- Unit Tests for `page_link`
- E2E Tests will be added for `switch_page`

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

If `st.set_page_config` is called, we should disregard the page
information in the navigation call.

## Testing Plan

- JS Unit 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.
## Describe your changes

We have found flaky situations where pages are set via `st.navigation`
before the NewSession call is sent. This causes the NewSession message
to retrieve pages it should not be expecting from the PagesManager. The
easy solution here is to send the pages on the Script Started Event so
that the NewSession has the pages at the time of the event.

I believe there's a larger discussion on how we should be managing this.
Likely, we should ensure information is happening at the right moment.

## Testing Plan

- Python unit test updated. This is difficult to reproduce and therefore
difficult to test.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

Page Changes in MPAv2 are done via the `st.navigation` call. Informing
of Pages Change is not helpful for the UI display. We also came to the
conclusion that the concept of cache pages did not matter for
PagesManager as well. So I moved everything back to source_util to
produce a cleaner system.

In testing this, I noticed some inconsistencies due to the fact that the
default strategy of the PagesManager is not resetting. So I did the
following:

1. I moved the DefaultStrategy reset to be set on every every test to
make things easy.
2. I then found out that when MPA switches from V1->V2 the initial
script information (page hash and page name) got lost, which suggested
this should be in the root PagesManager and not tied to just the V2
strategy.
3. I found a better name than "initial" I would describe it better as
the "intent", which is to indicate to the PagesManager a page is being
requested.

## Testing Plan

- Python Tests for both strategies

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
## Describe your changes

These changes allow SidebarNav to display NavSections.

<img width="380" alt="image"
src="https://github.com/streamlit/streamlit/assets/69432/39f7a879-931b-49e8-8e47-f9a4dc1015fe">

- The key difference in the screenshots is the absence of the x
- There's some very minor margin changes


## Testing Plan

- JS unit tests are provided
- E2E Tests are updated to reflect the new images for MPA v1 mainly.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
@kmcgrady kmcgrady requested a review from a team as a code owner May 23, 2024 01:17
frontend/app/src/App.tsx Outdated Show resolved Hide resolved
frontend/app/src/App.tsx Show resolved Hide resolved
frontend/app/src/App.tsx Outdated Show resolved Hide resolved
frontend/app/src/App.tsx Show resolved Hide resolved
lib/streamlit/commands/navigation.py Outdated Show resolved Hide resolved
lib/streamlit/commands/navigation.py Outdated Show resolved Hide resolved
lib/streamlit/commands/navigation.py Outdated Show resolved Hide resolved
lib/streamlit/runtime/pages_manager.py Fixed Show resolved Hide resolved
@raethlein
Copy link
Collaborator

raethlein commented May 23, 2024

I am excited to see MPAv2 landing!
I think for future reference it would be great if you could link all PRs that went into this PR here in the description; this can help to find conversations etc. if we need to revisit anything again.
Also, since this is the official PR going into develop, it might make sense to add a little bit more details about the feature and new commands etc. to the description.

@kmcgrady kmcgrady added the QA-Needed QA is Required label May 24, 2024
Copy link
Collaborator

@vdonato vdonato left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly giving this a rubber stamp after skimming the code to sanity check it since most of the effort to review this code was already done in PRs into the feature branch, but this LGTM

Copy link
Collaborator

@lukasmasuch lukasmasuch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍 I added a couple of nits, but I quickly skipped through a couple of parts of the PR.

It might be good to deactivate the hello_app_test temporarily until someone has rewritten the hello app to use MPA v2. Always having them rerun once doesn't feel like a great state and slows down our CI job. Probably just renaming it to hello_app_test_deactivated.py would ignore it from running.

As a follow-up after the MPA v2 release, I still think it would be doable to remove V1 and "simulate" the old behavior with the v2 implementation.

e2e_playwright/multipage_apps_v2/mpa_v2_basics_test.py Outdated Show resolved Hide resolved
lib/streamlit/elements/widgets/button.py Outdated Show resolved Hide resolved
lib/streamlit/commands/navigation.py Outdated Show resolved Hide resolved
lib/streamlit/web/server/routes.py Outdated Show resolved Hide resolved
lib/streamlit/web/server/routes.py Outdated Show resolved Hide resolved
lib/streamlit/web/server/routes.py Show resolved Hide resolved
lib/streamlit/runtime/pages_manager.py Fixed Show resolved Hide resolved
## Describe your changes

Feedback has beens received on #8744, and instead of issuing a commit, I
created a PR with the changes associated. Changes include:

- Additional comments for clarity
- Renaming of tests/comments for clarity
- Making fields internal for `st.Page` and exposing as properties for
read-only access.
- Not sending the full title but the page name in host communication
(avoids double "Streamlit" being added
- Fixing an (v1 -> v2) edge case that requires the system to know MPA
v2.
- Ensure pages are watched after every successful run.

## Testing Plan

- Unit tests/E2E tests are updated and should pass.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
@kmcgrady kmcgrady removed the QA-Needed QA is Required label May 29, 2024
## Describe your changes

Adds `url_path` as a feature of `st.Page`. This change does three
things:
1. Offers the ability to specify the `url_path` (it will strip any
preceding slashes).
2. If not specified, the `url_path` will be inferred first from the file
or function name, then from the title
3. The script hash is based on the url_path, which simplifies
everything. Note: I intentionally kept the default page as defined
rather than a hash of "" to avoid any potential issues.

## Testing Plan

- Unit Tests and E2E Tests are updated and include tests for the
url_path.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
…runs (#8802)

## Describe your changes

Fragments do not maintain context of the active script hash. This leads
to widget state loss. This change adds the active script hash to the
fragment implementation on initialization, and runs the same fragment.

## Testing Plan

- Added Unit tests to show the run_with_active_script_hash is called
correctly.
- Added an E2E test to show widget state is not lost.

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
@kmcgrady
Copy link
Collaborator Author

The hello_app test is failing the changed files test due to the hacky approach of setting up the hello files. The changed files does not retry, and so the test is a little flaky. This does succeed in the full playwright suite. We will address the hello app next, but going to merge here.

@kmcgrady kmcgrady merged commit 9d662eb into develop May 31, 2024
35 of 36 checks passed
@kmcgrady kmcgrady deleted the feature/mpa-v2 branch May 31, 2024 17:43
@onewesong
Copy link

With this pull request getting merged, when can we expect this feature to become available for production use?

@sfc-gh-jcarroll
Copy link
Contributor

@onewesong we're planning a full release next week which will include it. You can use via streamlit-nightly now (although nightly is not fully certified for production use)

sawyerh pushed a commit to sawyerh/highlights that referenced this pull request Sep 2, 2024
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/develop/quick-reference/changelog))
| `1.35.0` -> `1.38.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/streamlit/1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/streamlit/1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/streamlit/1.35.0/1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/streamlit/1.35.0/1.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>streamlit/streamlit (streamlit)</summary>

###
[`v1.38.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.38.0)

[Compare
Source](https://togithub.com/streamlit/streamlit/compare/1.37.1...1.38.0)

<!-- Release notes generated using configuration in .github/release.yml
at 1.38.0 -->

#### What's Changed

##### Breaking Changes 🛠

- Remove pydantic fix in bootstrap by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9257
- Remove experimental cached widget replay logic by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9305

##### New Features 🎉

- \[RFC] Only rerun script on reconnect if a script run was interrupted
by [@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#9083
- Add syntax highlighting for diff by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9172
- Support `to_pandas` method to return a Pandas Series by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9175
- Add support for Kubernetes / directory with mounted file style secrets
by [@&#8203;sfc-gh-mochen](https://togithub.com/sfc-gh-mochen) in
[streamlit/streamlit#9078
- Extend dataframe-handling support for collection-like types by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9205
- Add support for Snowpark Pandas Index by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9222
- Add data handling support for Polars by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9230
- Add data handling support for xarray by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9235
- Add data handling support for Dask by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9240
- Add data handling support for Ray by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9256
- Type-hint improvements for
[#&#8203;8717](https://togithub.com/streamlit/streamlit/issues/8717) and
[#&#8203;7801](https://togithub.com/streamlit/streamlit/issues/7801) by
[@&#8203;Asaurus1](https://togithub.com/Asaurus1) in
[streamlit/streamlit#9048
- Allow configurable expansion depth for `st.json` by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#8984
- Add data handling support for DB API 2.0 by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9274
- Add data handling support for Pydantic instances by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9290
- Add support for dataframe interchange protocol by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9289
- Add line wrapping to st code by
[@&#8203;sfc-gh-tteixeira](https://togithub.com/sfc-gh-tteixeira) in
[streamlit/streamlit#8558

##### Bug Fixes 🐛

- Make the magic support for-else, while-else, try-else, try-except\*,
and match by [@&#8203;whitphx](https://togithub.com/whitphx) in
[streamlit/streamlit#9110
- Fix copy-buttons in dialogs by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9130
- Support theming in embed better by
[@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#9103
- Fix
[#&#8203;8638](https://togithub.com/streamlit/streamlit/issues/8638) by
[@&#8203;kajarenc](https://togithub.com/kajarenc) in
[streamlit/streamlit#9101
- Bugfix: Multiple Stale Maps by
[@&#8203;sfc-gh-nbellante](https://togithub.com/sfc-gh-nbellante) in
[streamlit/streamlit#9092
- Bugfix: Upgrade plotly.js to resolve hover tooltip bug by
[@&#8203;sfc-gh-nbellante](https://togithub.com/sfc-gh-nbellante) in
[streamlit/streamlit#9144
- Make ScriptControlException inherit from BaseException again by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9167
- Print deprecation warnings when dialog/fragment functions are called
by [@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#9170
- Revert "Remove fragment_ids_this_run from script run context
([#&#8203;8953](https://togithub.com/streamlit/streamlit/issues/8953))"
and tweaks some types by [@&#8203;vdonato](https://togithub.com/vdonato)
in
[streamlit/streamlit#9178
- Allow adding Plotly toolbar buttons by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9190
- Ignore all headings in markdown labels by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9189
- Don't raise FragmentStorageKeyError for auto_rerun fragments by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9183
- Fix ghost tabs issue in fragments by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9186
- Fix empty anchor scrolling by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9206
- Only clear up fragment-related stale widgets by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9215
- Fix issue with empty Azure OpenAI chunk by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9234
- Fix grey-out for selectbox index columns by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9231
- Fix options support for `dict.items()` by
[@&#8203;lukasmasuch](https://togithub.com/lukasmasuch) in
[streamlit/streamlit#9241
- When clearing forward queue add a stopped for rerun message by
[@&#8203;dannyopts](https://togithub.com/dannyopts) in
[streamlit/streamlit#9187
- Do not preserve children of a block if the block type changes by
[@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#9276
- Unstale just updated fragments by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9285
- Fix logo + sidebar sizing interaction by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#9298

##### Other Changes

- Print bottom container always at the end of the app content by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9129
- Remove a type ignore by
[@&#8203;wyattscarpenter](https://togithub.com/wyattscarpenter) in
[streamlit/streamlit#9149
- Use material icons in streamlit hello page nav and favicons by
[@&#8203;snehankekre](https://togithub.com/snehankekre) in
[streamlit/streamlit#9225
- Fix nested fragment stale elements by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9246
- Use overloads to make the return types of st.feedback more precise.
(with type tests) by
[@&#8203;wyattscarpenter](https://togithub.com/wyattscarpenter) in
[streamlit/streamlit#9216

#### New Contributors

- [@&#8203;wyattscarpenter](https://togithub.com/wyattscarpenter) made
their first contribution in
[streamlit/streamlit#9149
- [@&#8203;sfc-gh-mochen](https://togithub.com/sfc-gh-mochen) made their
first contribution in
[streamlit/streamlit#9078
- [@&#8203;dannyopts](https://togithub.com/dannyopts) made their first
contribution in
[streamlit/streamlit#9187

**Full Changelog**:
streamlit/streamlit@1.37.1...1.38.0

###
[`v1.37.1`](https://togithub.com/streamlit/streamlit/releases/tag/1.37.1)

[Compare
Source](https://togithub.com/streamlit/streamlit/compare/1.37.0...1.37.1)

<!-- Release notes generated using configuration in .github/release.yml
at 1.37.1 -->

**Full Changelog**:
streamlit/streamlit@1.37.0...1.37.1

###
[`v1.37.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.37.0)

[Compare
Source](https://togithub.com/streamlit/streamlit/compare/1.36.0...1.37.0)

<!-- Release notes generated using configuration in .github/release.yml
at 1.37.0 -->

#### What's Changed

##### New Features 🎉

- Stacking options - `st.bar_chart` by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#8945
- Support `graphviz.sources.Source` object for `st.graphviz_chart` by
[@&#8203;sfc-gh-kbregula](https://togithub.com/sfc-gh-kbregula) in
[streamlit/streamlit#8993
- Add support for material icons in markdown by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8889
- Fix lag when closing dialog by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9023
- Stacking options - `st.area_chart` by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#8992
- Add feedback widget by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8915
- READ only headers and cookies by
[@&#8203;kajarenc](https://togithub.com/kajarenc) in
[streamlit/streamlit#8976
- De-experimentalize st.fragment by
[@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#9019
- De-experimentalize st.dialog by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9020

##### Bug Fixes 🐛

- Show fragment errors in fragment-path for main app runs by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8868
- Fix st.rerun fragment thread reuse issue by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8798
- Support non-unix style paths for MPA loading by
[@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8988
- Set theme hash properly on load if a custom theme is active to start
by [@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8989
- Don't remove session refs on fragment runs by
[@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#9010
- Improvements to NumberInput formatting by
[@&#8203;sfc-gh-nbellante](https://togithub.com/sfc-gh-nbellante) in
[streamlit/streamlit#9035
- Hide all Particles upon printing by
[@&#8203;sfc-gh-nbellante](https://togithub.com/sfc-gh-nbellante) in
[streamlit/streamlit#9053
- Fix: MPA support of custom themes by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#8994
- `st.switch_page` clears non-embed query params by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#9059
- Fix secrets.toml Windows Path Bug by
[@&#8203;sfc-gh-nbellante](https://togithub.com/sfc-gh-nbellante) in
[streamlit/streamlit#9061
- Bugfix: Fixes two st.map width bugs by
[@&#8203;sfc-gh-nbellante](https://togithub.com/sfc-gh-nbellante) in
[streamlit/streamlit#9070
- Validate the path using Tornado before performing checks by
[@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8990
- Reset ctx.current_fragment_id to last ID instead of None by
[@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#9114

##### Other Changes

- Update emojis used for validation by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8923
- Add support for numpy 2.x by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8940
- Remove a bunch of deprecated experimental features by
[@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#8943
- Migrate custom icons from material outlined to rounded by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8998
- Remove old config options - part 1 by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#9005
- Remove old config options - part 2 by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#9013
- Remove `deprecation.showPyplotGlobalUse` config option by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#9018
- Fix broken `st.navigation` docstring by
[@&#8203;mahotd](https://togithub.com/mahotd) in
[streamlit/streamlit#9027
- Update the feedback widget design by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#9094

#### New Contributors

- [@&#8203;Dev-iL](https://togithub.com/Dev-iL) made their first
contribution in
[streamlit/streamlit#8947
- [@&#8203;quant12345](https://togithub.com/quant12345) made their first
contribution in
[streamlit/streamlit#8968
- [@&#8203;mahotd](https://togithub.com/mahotd) made their first
contribution in
[streamlit/streamlit#9027

**Full Changelog**:
streamlit/streamlit@1.36.0...1.37.0

###
[`v1.36.0`](https://togithub.com/streamlit/streamlit/releases/tag/1.36.0)

[Compare
Source](https://togithub.com/streamlit/streamlit/compare/1.35.0...1.36.0)

<!-- Release notes generated using configuration in .github/release.yml
at 1.36.0 -->

#### What's Changed

##### Breaking Changes 🛠

- Remove legacy caching logic by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8737
- Deprecate the `experimental_allow_widgets` caching parameter by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8817

##### New Features 🎉

- Allow passing on_change_callback for CustomComponents by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8633
- Use raw number for number column overlay and copy by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8708
- Introduce st.navigation and st.Page by
[@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8744
- Make st.write call st.json to display Streamlit secrets object by
[@&#8203;snehankekre](https://togithub.com/snehankekre) in
[streamlit/streamlit#8659
- Streamlit Charts: Customizable Axis Labels by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#8846
- Add vertical alignment parameter to `st.columns` by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8568
- Add `icon` parameter to st.expander by
[@&#8203;snehankekre](https://togithub.com/snehankekre) in
[streamlit/streamlit#8716
- Use the default widget height for non-stacked checkbox & toggle
widgets by [@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8835
- Horizontal `st.bar_chart` by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#8877

##### Bug Fixes 🐛

- Remove non-existent kwargs in ast.Call() call by
[@&#8203;JelleZijlstra](https://togithub.com/JelleZijlstra) in
[streamlit/streamlit#8711
- Don't instantiate the LocalSourcesWatcher if file watching is disabled
by [@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#8741
- Make the session state writes disallowed message more generic by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8720
- Ensure SessionInfo is set before performing an action by
[@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8779
- Unify the minimum height of most element by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8797
- Don't allow writing widgets outside the fragment by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8756
- Fix element replay regression for plotly charts by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8770
- Improve exception text when selectbox index larger than options by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8775
- Prevent images in markdown to go beyond the container width by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8794
- Ensure current page script hash and active script hash is correct at
script start by [@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8830
- Revert "Handle Altair resolve_scale
([#&#8203;8497](https://togithub.com/streamlit/streamlit/issues/8497))"
by [@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8845
- Update custom-components import paths and tests by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8666
- Raise exception if st.Page is given an invalid path by
[@&#8203;vdonato](https://togithub.com/vdonato) in
[streamlit/streamlit#8878

##### Other Changes

- Explicitly export experimental_dialog by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8728
- Remove default value for title of dialog_decorator by
[@&#8203;raethlein](https://togithub.com/raethlein) in
[streamlit/streamlit#8729
- Docstrings for 1.35.0 (and type consistency for charts) by
[@&#8203;sfc-gh-dmatthews](https://togithub.com/sfc-gh-dmatthews) in
[streamlit/streamlit#8740
- Migrate streamlit hello to MPAv2 by
[@&#8203;kmcgrady](https://togithub.com/kmcgrady) in
[streamlit/streamlit#8806
- Fix `use_container_width` docstring when default is `True` by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8809
- Allow protobuf v5 as dependency by
[@&#8203;LukasMasuch](https://togithub.com/LukasMasuch) in
[streamlit/streamlit#8627
- Fix: Remove title appending · Streamlit by
[@&#8203;mayagbarnes](https://togithub.com/mayagbarnes) in
[streamlit/streamlit#8900

#### New Contributors

- [@&#8203;JelleZijlstra](https://togithub.com/JelleZijlstra) made their
first contribution in
[streamlit/streamlit#8711

**Full Changelog**:
streamlit/streamlit@1.35.0...1.36.0

</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 was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/sawyerh/highlights).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM4LjU2LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
sfc-gh-pchiu pushed a commit to sfc-gh-pchiu/streamlit that referenced this pull request Sep 3, 2024
## Describe your changes

This PR is the culmination of all of the work associated with Multipage
apps V2. Specifically this PR includes:

- abstractions on the frontend and backend for navigation and page
management respectively.
- command for st.navigation and st.Page

## GitHub issues
closes streamlit#8759

## Testing Plan

- JS and Python End to End tests are included
- E2E Tests are included for the MPA v2 features

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
sfc-gh-pchiu pushed a commit to sfc-gh-pchiu/streamlit that referenced this pull request Sep 3, 2024
## Describe your changes

This PR is the culmination of all of the work associated with Multipage
apps V2. Specifically this PR includes:

- abstractions on the frontend and backend for navigation and page
management respectively.
- command for st.navigation and st.Page

## GitHub issues
closes streamlit#8759

## Testing Plan

- JS and Python End to End tests are included
- E2E Tests are included for the MPA v2 features

---

**Contribution License Agreement**

By submitting this pull request you agree that all contributions to this
project are made under the Apache 2.0 license.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Pages clipped off bottom of sidebar in streamlit 1.35.0
7 participants