Skip to content

feat(deps): upgrade the browser runtime to Pyodide 314.0.3 - #2094

Draft
whitphx wants to merge 4 commits into
mainfrom
claude/update-pyodide-version-sytj7f
Draft

feat(deps): upgrade the browser runtime to Pyodide 314.0.3#2094
whitphx wants to merge 4 commits into
mainfrom
claude/update-pyodide-version-sytj7f

Conversation

@whitphx

@whitphx whitphx commented Aug 6, 2026

Copy link
Copy Markdown
Owner

@stlite/browser and the desktop/CLI targets ran Pyodide 0.29.3 (Python 3.13), which is affected by the JSPI crash multipage apps hit after a large number of Python async calls (#1493).

This upgrades the browser runtime to Pyodide 314.0.3, moving apps to Python 3.14 and picking up pandas 3, NumPy 2.4, protobuf 7, matplotlib 3.10 and Pillow 12. Three things fall out of it:

  1. Pyodide now bundles protobuf 7.34.1, so the explicit protobuf>=7.34.1,<8 micropip pin in the browser worker is dropped and the bundled wheel is used again. The @stlite/cloudflare side keeps its pin — that runtime still gets protobuf 6.31.1.
  2. Pyodide 314 renamed pyodide.asm.js to pyodide.asm.mjs, so @stlite/app-packager's runtime-file list and packages/desktop/pyodide-files.txt are updated; both copy paths would otherwise fail on a missing file.
  3. @stlite/cloudflare stays on Pyodide's 0.29.x line (0.29.3 → 0.29.4). The wheels it vendors are ABI-tagged for the interpreter that runs them, and Cloudflare's stable Worker Python is 3.13 — workers-py exposes 3.14 only behind the experimental python_workers_20260610 flag. Because @stlite/app-packager is a symlinked workspace, declaring pyodide a peer dependency does not change what it resolves, so its vendoring entry points take an optional pyodideModule instead and @stlite/cloudflare passes its own.

uv.lock re-resolved broadly for Python 3.14 — rpds-py in particular had no cp314 wheel at the pinned version. It was resolved against PyPI and the URLs rewritten to the committed pypi.flatt.tech convention (identical hash paths and sha256s); worth re-running uv lock against the mirror directly if you'd rather not take that on faith.

Not verified in the authoring environment: egress policy there blocked pyodide.github.io and pypi.flatt.tech, so the Pyodide xbuildenv install, the Streamlit cp314 wheel build, and the Python and kernel test suites could not run. oxlint, oxfmt, cspell and tsc -b over common → app-packager → cloudflare pass. The pandas 2 → 3 move is the main thing E2E needs to speak to; Streamlit 1.57.0 declares pandas>=1.4.0,<4.


Generated by Claude Code

Pyodide 314.0.3 moves apps from Python 3.13 to 3.14 and brings pandas 3,
NumPy 2.4, protobuf 7, matplotlib 3.10 and Pillow 12. It also carries the
upstream fix for the JSPI-related crash multipage apps hit after many
Python async calls (#1493).

Pyodide bundling protobuf 7.34.1 makes the explicit `protobuf>=7.34.1,<8`
micropip pin in the browser worker unnecessary, so the bundled wheel is
used again.

@stlite/cloudflare stays on Pyodide's 0.29.x line: the wheels it vendors
are ABI-tagged for the interpreter that runs them, and Cloudflare's stable
Worker Python is 3.13. @stlite/app-packager's vendoring entry points now
accept a `pyodideModule` so the two lines can move independently.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GexQcCRF5yQnsADZXTnFTK
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 863372c8-ba2f-489b-9849-7efab53fb4c3

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@changeset-bot

changeset-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ce7ae35

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 9 packages
Name Type
@stlite/kernel Minor
@stlite/browser Minor
@stlite/react Minor
@stlite/desktop Minor
@stlite/cli Minor
@stlite/sharing Minor
@stlite/app-packager Patch
@stlite/cloudflare Patch
docs Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

The browser worker no longer pins protobuf — Pyodide 314.0.3 bundles
7.34.1 — so the note pointing at it as a matching case was stale. State
the condition that retires this pin instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GexQcCRF5yQnsADZXTnFTK

whitphx commented Aug 6, 2026

Copy link
Copy Markdown
Owner Author

⚠️ No CI has run on this branch, and I can't start it from here.

GET /actions/runs?branch=claude/update-pyodide-version-sytj7f returns total_count: 0 — not just Test and Build, but every workflow in the repo. The green CodeQL checks come from GitHub's managed default setup (there's no codeql.yml in .github/workflows/), which runs outside the normal Actions event path, so they aren't evidence that anything was built or tested.

The cause is that the branch push and the PR were both authored with a GitHub App installation token, and GitHub does not create workflow runs from events generated by those tokens. I pushed a second commit to emit pull_request: synchronize — the App-based bots on this PR re-ran against it, but no workflow run was created, which confirms it.

A push or a PR action from a human account will start them. workflow_dispatch isn't an option: test-build.yml only declares push (to main) and pull_request.

This matters more than usual here, because the parts of this change that most need CI are exactly the parts that couldn't be verified while authoring it — the Pyodide xbuildenv install, the Streamlit cp314 wheel build, and the Python/kernel suites were all unreachable in that environment too (blocked egress to pyodide.github.io and pypi.flatt.tech). What has been verified is oxlint, oxfmt, cspell, and tsc -b over common → app-packager → cloudflare. Please don't read the current check status as a passing build.


Generated by Claude Code

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GexQcCRF5yQnsADZXTnFTK
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 1 package(s) with unknown licenses.
See the Details below.

License Issues

uv.lock

PackageVersionLicenseIssue Type
narwhals2.24.0NullUnknown License

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
npm/pyodide 314.0.3 🟢 5.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/25 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 7binaries present in source code
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Packaging🟢 10packaging workflow detected
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
npm/pyodide 314.0.3 🟢 5.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/25 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 7binaries present in source code
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Packaging🟢 10packaging workflow detected
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
npm/pyodide 0.29.4 🟢 5.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/25 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 7binaries present in source code
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Packaging🟢 10packaging workflow detected
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
npm/pyodide 314.0.3 🟢 5.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/25 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 7binaries present in source code
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Packaging🟢 10packaging workflow detected
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
npm/pyodide 314.0.3 🟢 5.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/25 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 7binaries present in source code
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Packaging🟢 10packaging workflow detected
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
pip/altair 6.2.2 UnknownUnknown
pip/annotated-types 0.8.0 UnknownUnknown
pip/anyio 4.14.2 UnknownUnknown
pip/auditwheel-emscripten 0.2.5 UnknownUnknown
pip/black 26.5.1 UnknownUnknown
pip/build 1.5.0 UnknownUnknown
pip/certifi 2026.7.22 🟢 6.4
Details
CheckScoreReason
Binary-Artifacts🟢 10no binaries found in the repo
Maintained🟢 1013 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 3Found 1/3 approved changesets -- score normalized to 3
Security-Policy🟢 10security policy file detected
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Pinned-Dependencies🟢 5dependency not pinned by hash detected -- score normalized to 5
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
Signed-Releases⚠️ -1no releases found
License🟢 9license file detected
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/charset-normalizer 3.4.9 UnknownUnknown
pip/click 8.4.2 UnknownUnknown
pip/distlib 0.4.3 UnknownUnknown
pip/filelock 3.32.2 UnknownUnknown
pip/fonttools 4.63.0 🟢 5.9
Details
CheckScoreReason
Maintained🟢 1030 commit(s) and 8 issue activity found in the last 90 days -- score normalized to 10
Security-Policy🟢 10security policy file detected
Code-Review🟢 5Found 8/14 approved changesets -- score normalized to 5
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing⚠️ 0project is not fuzzed
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/h2 4.4.1 UnknownUnknown
pip/hpack 4.2.0 UnknownUnknown
pip/idna 3.18 UnknownUnknown
pip/jsonschema 4.26.0 UnknownUnknown
pip/markdown-it-py 4.2.0 UnknownUnknown
pip/markupsafe 3.0.3 UnknownUnknown
pip/matplotlib 3.11.1 UnknownUnknown
pip/narwhals 2.24.0 UnknownUnknown
pip/numpy 2.5.1 UnknownUnknown
pip/packaging 26.3 UnknownUnknown
pip/pandas 3.0.5 UnknownUnknown
pip/pandas-stubs 3.0.5.260730 UnknownUnknown
pip/pathspec 1.1.1 UnknownUnknown
pip/pip 26.2.1 UnknownUnknown
pip/platformdirs 4.11.0 UnknownUnknown
pip/pydantic 2.13.4 UnknownUnknown
pip/pydantic-core 2.46.4 🟢 6.7
Details
CheckScoreReason
Maintained🟢 1030 commit(s) and 11 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 4Found 11/23 approved changesets -- score normalized to 4
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies🟢 8dependency not pinned by hash detected -- score normalized to 8
License🟢 10license file detected
Fuzzing🟢 10project is fuzzed
Signed-Releases⚠️ -1no releases found
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/pydeck 0.9.3 🟢 6.3
Details
CheckScoreReason
Code-Review🟢 9Found 27/30 approved changesets -- score normalized to 9
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Security-Policy🟢 10security policy file detected
Packaging⚠️ -1packaging workflow not detected
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dependency-Update-Tool🟢 10update tool detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Pinned-Dependencies🟢 3dependency not pinned by hash detected -- score normalized to 3
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
License🟢 10license file detected
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Fuzzing⚠️ 0project is not fuzzed
Signed-Releases⚠️ -1no releases found
Vulnerabilities⚠️ 0169 existing vulnerabilities detected
CI-Tests🟢 1029 out of 29 merged PRs checked by a CI test -- score normalized to 10
Contributors🟢 10project has 38 contributing companies or organizations
pip/pyodide-build 0.37.0 UnknownUnknown
pip/pyodide-py 314.0.3 UnknownUnknown
pip/pyright 1.1.411 🟢 3.6
Details
CheckScoreReason
Maintained⚠️ 12 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1
Code-Review⚠️ 0Found 1/30 approved changesets -- score normalized to 0
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/pytest 9.1.1 UnknownUnknown
pip/pytest-asyncio 1.4.0 UnknownUnknown
pip/python-discovery 1.5.1 UnknownUnknown
pip/requests 2.34.2 UnknownUnknown
pip/rich 15.0.0 UnknownUnknown
pip/rpds-py 2026.6.3 UnknownUnknown
pip/streamlit 1.61.1 UnknownUnknown
pip/streamlit-folium 0.27.4 UnknownUnknown
pip/typing-extensions 4.16.0 UnknownUnknown
pip/tzdata 2026.3 🟢 7.1
Details
CheckScoreReason
Maintained🟢 79 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 7
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Code-Review🟢 8Found 17/20 approved changesets -- score normalized to 8
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies🟢 4dependency not pinned by hash detected -- score normalized to 4
Fuzzing⚠️ 0project is not fuzzed
License🟢 9license file detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/urllib3 2.7.0 UnknownUnknown
pip/uvicorn 0.52.1 UnknownUnknown
pip/virtualenv 21.7.1 UnknownUnknown
pip/websockets 16.1.1 UnknownUnknown
pip/wheel 0.47.0 UnknownUnknown
npm/pyodide 0.29.4 🟢 5.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/25 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 7binaries present in source code
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Packaging🟢 10packaging workflow detected
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
npm/pyodide 314.0.3 🟢 5.6
Details
CheckScoreReason
Code-Review⚠️ 2Found 6/25 approved changesets -- score normalized to 2
Maintained🟢 1030 commit(s) and 18 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 7binaries present in source code
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy⚠️ 0security policy file not detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 6dependency not pinned by hash detected -- score normalized to 6
Packaging🟢 10packaging workflow detected
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3

Scanned Files

  • packages/app-packager/package.json
  • packages/cli/package.json
  • packages/cloudflare/package.json
  • packages/desktop/package.json
  • packages/kernel/package.json
  • uv.lock
  • yarn.lock

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

CI Report for 9e65042

Package Stats

Diffs are from 859237b on main (workflow run: 30979544733)

stlite sharing editor

dist.tar: 14472 kiB (14472 kiB +0 kiB)

File Tree
.
└── dist
    ├── android-chrome-192x192.png
    ├── android-chrome-512x512.png
    ├── apple-touch-icon.png
    ├── assets
    │   ├── index-BiRT3IY_.js
    │   ├── index-BiRT3IY_.js.map
    │   ├── index-VdW3D9LT.css
    │   ├── web-vitals-HgvAyjw_.js
    │   └── web-vitals-HgvAyjw_.js.map
    ├── browserconfig.xml
    ├── favicon-16x16.png
    ├── favicon-32x32.png
    ├── favicon.ico
    ├── index.html
    ├── logo192.png
    ├── logo512.png
    ├── manifest.json
    ├── mstile-150x150.png
    ├── ogp.png
    ├── robots.txt
    ├── safari-pinned-tab.svg
    └── samples
        ├── 000_intro
        │   ├── data
        │   │   └── logo.png
        │   ├── pages
        │   │   └── 🎈_subpage.py
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 001_template
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 010_streamlit_hello
        │   ├── README.md
        │   ├── agri.csv.gz
        │   ├── animation_demo.py
        │   ├── dataframe_demo.py
        │   ├── hello.py
        │   ├── mapping_demo.py
        │   ├── plotting_demo.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   ├── streamlit_app.py
        │   └── utils.py
        ├── 011_component_gallery
        │   ├── data
        │   │   └── capitals.csv
        │   ├── pages
        │   │   ├── annotations-in-altair.py
        │   │   ├── cat-purr.mp3
        │   │   ├── charts.altair_chart.py
        │   │   ├── charts.altair_custom_colors.py
        │   │   ├── charts.altair_selections.py
        │   │   ├── charts.area_chart.py
        │   │   ├── charts.area_chart1.py
        │   │   ├── charts.area_chart2.py
        │   │   ├── charts.area_chart_steamgraph.py
        │   │   ├── charts.audio-purr.py
        │   │   ├── charts.audio.py
        │   │   ├── charts.bar_chart.py
        │   │   ├── charts.bar_chart1.py
        │   │   ├── charts.bar_chart2.py
        │   │   ├── charts.bar_chart_horizontal.py
        │   │   ├── charts.bar_chart_unstacked.py
        │   │   ├── charts.bokeh_chart.py
        │   │   ├── charts.graphviz_chart.py
        │   │   ├── charts.image.py
        │   │   ├── charts.line_chart.py
        │   │   ├── charts.line_chart1.py
        │   │   ├── charts.line_chart2.py
        │   │   ├── charts.map.py
        │   │   ├── charts.map_color.py
        │   │   ├── charts.plotly_chart.py
        │   │   ├── charts.plotly_chart_config.py
        │   │   ├── charts.plotly_chart_event_state.py
        │   │   ├── charts.plotly_chart_event_state_selections.py
        │   │   ├── charts.plotly_chart_theme.py
        │   │   ├── charts.plotly_custom_colors.py
        │   │   ├── charts.pydeck_chart.py
        │   │   ├── charts.pydeck_event_state_selections.py
        │   │   ├── charts.pyplot.py
        │   │   ├── charts.scatter_chart.py
        │   │   ├── charts.scatter_chart1.py
        │   │   ├── charts.scatter_chart2.py
        │   │   ├── charts.vega_lite_chart.py
        │   │   ├── charts.vega_lite_theme.py
        │   │   ├── charts.video.py
        │   │   ├── charts.video2.py
        │   │   ├── chat.echo.py
        │   │   ├── chat.input-file-uploader.py
        │   │   ├── chat.input-inline.py
        │   │   ├── chat.input.py
        │   │   ├── chat.input_audio.py
        │   │   ├── chat.input_set_value.py
        │   │   ├── chat.llm.py
        │   │   ├── chat.message.py
        │   │   ├── chat.message1.py
        │   │   ├── chat.simple.py
        │   │   ├── components.cleanup_function.py
        │   │   ├── components.custom_anchors.py
        │   │   ├── components.interactive_svg.py
        │   │   ├── components.markdown_links.py
        │   │   ├── components.tailwind.py
        │   │   ├── components.text_input.py
        │   │   ├── create-a-simple-grid.py
        │   │   ├── data.areachart_column.py
        │   │   ├── data.audio_column.py
        │   │   ├── data.barchart_column.py
        │   │   ├── data.checkbox_column.py
        │   │   ├── data.column.py
        │   │   ├── data.column_config.empty.py
        │   │   ├── data.column_config.py
        │   │   ├── data.data_editor.py
        │   │   ├── data.data_editor1.py
        │   │   ├── data.data_editor2.py
        │   │   ├── data.data_editor3.py
        │   │   ├── data.data_editor4.py
        │   │   ├── data.data_editor_config.py
        │   │   ├── data.dataframe.py
        │   │   ├── data.dataframe1.py
        │   │   ├── data.dataframe2.py
        │   │   ├── data.dataframe_config.py
        │   │   ├── data.dataframe_config_index.py
        │   │   ├── data.dataframe_event_state_selections.py
        │   │   ├── data.dataframe_programmatic_selections.py
        │   │   ├── data.date_column.py
        │   │   ├── data.datetime_column.py
        │   │   ├── data.image_column.py
        │   │   ├── data.json.py
        │   │   ├── data.json_column.py
        │   │   ├── data.linechart_column.py
        │   │   ├── data.link_column.py
        │   │   ├── data.list_column.py
        │   │   ├── data.multiselect_column_1.py
        │   │   ├── data.multiselect_column_2.py
        │   │   ├── data.number_column.py
        │   │   ├── data.progress_column.py
        │   │   ├── data.selectbox_column.py
        │   │   ├── data.table.py
        │   │   ├── data.table_auto_header.py
        │   │   ├── data.table_confusion.py
        │   │   ├── data.table_hide_header_and_index.py
        │   │   ├── data.table_horizontal_border.py
        │   │   ├── data.table_markdown.py
        │   │   ├── data.text_column.py
        │   │   ├── data.time_column.py
        │   │   ├── data.video_column.py
        │   │   ├── dataframe-row-selections.py
        │   │   ├── execution.dialog.py
        │   │   ├── execution.fragment-rerun.py
        │   │   ├── execution.fragment.py
        │   │   ├── execution.fragment_balloon.py
        │   │   ├── flower.png
        │   │   ├── forms.form1.py
        │   │   ├── forms.form2.py
        │   │   ├── forms.form_container.py
        │   │   ├── forms.form_default.py
        │   │   ├── forms.form_overview.py
        │   │   ├── forms.form_process1.py
        │   │   ├── forms.form_process2.py
        │   │   ├── forms.form_process3.py
        │   │   ├── images
        │   │   │   ├── horizontal_blue.png
        │   │   │   ├── horizontal_red.png
        │   │   │   ├── icon_blue.png
        │   │   │   └── icon_red.png
        │   │   ├── layout.columns1.py
        │   │   ├── layout.columns2.py
        │   │   ├── layout.columns_borders.py
        │   │   ├── layout.columns_bottom_widgets.py
        │   │   ├── layout.columns_vertical_alignment.py
        │   │   ├── layout.container1.py
        │   │   ├── layout.container2.py
        │   │   ├── layout.container3.py
        │   │   ├── layout.container4.py
        │   │   ├── layout.container5.py
        │   │   ├── layout.empty.py
        │   │   ├── layout.empty_placeholder.py
        │   │   ├── layout.expander-callback.py
        │   │   ├── layout.expander-conditional-outside.py
        │   │   ├── layout.expander-lazy-load.py
        │   │   ├── layout.expander.py
        │   │   ├── layout.popover-callback.py
        │   │   ├── layout.popover-conditional-outside.py
        │   │   ├── layout.popover-lazy-load.py
        │   │   ├── layout.popover.py
        │   │   ├── layout.popover2.py
        │   │   ├── layout.space_horizontal.py
        │   │   ├── layout.space_vertical.py
        │   │   ├── layout.tabs-callback.py
        │   │   ├── layout.tabs-conditional-outside.py
        │   │   ├── layout.tabs-lazy-load.py
        │   │   ├── layout.tabs1.py
        │   │   ├── layout.tabs2.py
        │   │   ├── layout.tabs3.py
        │   │   ├── layouts.container4.py
        │   │   ├── media.logo.py
        │   │   ├── metric.example1.py
        │   │   ├── metric.example2.py
        │   │   ├── metric.example3.py
        │   │   ├── metric.example4.py
        │   │   ├── metric.example5.py
        │   │   ├── status.exception.py
        │   │   ├── status.progress.py
        │   │   ├── status.spinner.py
        │   │   ├── status.status.py
        │   │   ├── status.status1.py
        │   │   ├── status.toast.py
        │   │   ├── status.toast1.py
        │   │   ├── status.toast2.py
        │   │   ├── tailwind_example.js
        │   │   ├── text.badge.py
        │   │   ├── text.caption.py
        │   │   ├── text.code-ascii.py
        │   │   ├── text.code.py
        │   │   ├── text.header.py
        │   │   ├── text.latex.py
        │   │   ├── text.markdown.py
        │   │   ├── text.markdown1.py
        │   │   ├── text.subheader.py
        │   │   ├── text.text.py
        │   │   ├── text.text_area.py
        │   │   ├── text.title.py
        │   │   ├── text.write1.py
        │   │   ├── text.write2.py
        │   │   ├── text.write3.py
        │   │   ├── text.write_stream.py
        │   │   ├── utilities.help.py
        │   │   ├── utilities.help1.py
        │   │   ├── utilities.help2.py
        │   │   ├── utilities.html.py
        │   │   ├── widget.audio_input.py
        │   │   ├── widget.button.py
        │   │   ├── widget.button_icons.py
        │   │   ├── widget.button_shortcut.py
        │   │   ├── widget.camera_input.py
        │   │   ├── widget.checkbox.py
        │   │   ├── widget.color_picker.py
        │   │   ├── widget.date_input.py
        │   │   ├── widget.date_input1.py
        │   │   ├── widget.date_input_empty.py
        │   │   ├── widget.datetime_input.py
        │   │   ├── widget.datetime_input_empty.py
        │   │   ├── widget.download_button.py
        │   │   ├── widget.download_button_csv.py
        │   │   ├── widget.download_button_deferred.py
        │   │   ├── widget.download_button_file.py
        │   │   ├── widget.download_button_text.py
        │   │   ├── widget.feedback_stars.py
        │   │   ├── widget.feedback_thumbs.py
        │   │   ├── widget.file_uploader.py
        │   │   ├── widget.file_uploader_directory.py
        │   │   ├── widget.link_button.py
        │   │   ├── widget.menu_button.py
        │   │   ├── widget.multiselect.py
        │   │   ├── widget.multiselect_accept_new_options.py
        │   │   ├── widget.number_input.py
        │   │   ├── widget.number_input_empty.py
        │   │   ├── widget.pills_multi.py
        │   │   ├── widget.pills_single.py
        │   │   ├── widget.radio.py
        │   │   ├── widget.radio1.py
        │   │   ├── widget.radio_empty.py
        │   │   ├── widget.segmented_control_multi.py
        │   │   ├── widget.segmented_control_single.py
        │   │   ├── widget.select_slider.py
        │   │   ├── widget.selectbox.py
        │   │   ├── widget.selectbox1.py
        │   │   ├── widget.selectbox_accept_new_options.py
        │   │   ├── widget.selectbox_empty.py
        │   │   ├── widget.slider.py
        │   │   ├── widget.text_area.py
        │   │   ├── widget.text_input.py
        │   │   ├── widget.text_input1.py
        │   │   ├── widget.time_input.py
        │   │   ├── widget.time_input_empty.py
        │   │   ├── widget.toggle.py
        │   │   ├── widgets.audio_input_high_rate.py
        │   │   ├── widgets.change_parameters.py
        │   │   ├── widgets.change_parameters_best.py
        │   │   └── widgets.form_callbacks.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 012_hello
        │   ├── agri.csv.gz
        │   ├── hello.py
        │   ├── requirements.txt
        │   └── stlite.json
        ├── 012_mpa-hello
        │   ├── 0_👋_Hello.py
        │   ├── agri.csv.gz
        │   ├── pages
        │   │   ├── 1_📈_Plotting_Demo.py
        │   │   ├── 2_🌍_Mapping_Demo.py
        │   │   ├── 3_📊_DataFrame_Demo.py
        │   │   └── 4_📷_Webcam_Demo.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── utils.py
        ├── 012_navigation.multipage_widgets
        │   ├── app.py
        │   └── stlite.json
        ├── 012_tutorials_custom-navigation
        │   ├── README.md
        │   ├── app.py
        │   ├── menu.py
        │   ├── pages
        │   │   ├── admin.py
        │   │   ├── super-admin.py
        │   │   └── user.py
        │   ├── requirements.txt
        │   └── stlite.json
        ├── 012_tutorials_dynamic-navigation
        │   ├── README.md
        │   ├── admin
        │   │   ├── admin_1.py
        │   │   └── admin_2.py
        │   ├── images
        │   │   ├── horizontal_blue.png
        │   │   └── icon_blue.png
        │   ├── request
        │   │   ├── request_1.py
        │   │   └── request_2.py
        │   ├── respond
        │   │   ├── respond_1.py
        │   │   └── respond_2.py
        │   ├── settings.py
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 012_tutorials_fragments
        │   ├── README.md
        │   ├── app.py
        │   ├── pages
        │   │   ├── tutorial-fragment-multiple-container.py
        │   │   ├── tutorial-fragment-rerun.py
        │   │   └── tutorial-fragment-streaming.py
        │   └── stlite.json
        ├── 012_utilities.switch_page
        │   ├── README.md
        │   ├── pages
        │   │   ├── page_1.py
        │   │   └── page_2.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── your_app.py
        ├── 012_widget.page_link
        │   ├── README.md
        │   ├── pages
        │   │   ├── page_1.py
        │   │   └── page_2.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── your_app.py
        ├── 020_custom_components
        │   ├── home.py
        │   ├── pages
        │   │   ├── aggrid.py
        │   │   ├── agraph.py
        │   │   ├── cropper.py
        │   │   ├── d3_demo.py
        │   │   ├── drawable_canvas.py
        │   │   ├── embedcode.py
        │   │   ├── folium.py
        │   │   ├── lottie.py
        │   │   ├── player.py
        │   │   └── stmol.py
        │   ├── requirements.txt
        │   └── stlite.json
        ├── 021_opencv
        │   ├── data
        │   │   └── logo.png
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 022_realtime_image_processing
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── streamlit_app.py
        └── 030_streamlit_e2e_tests
            ├── pages
            │   ├── empty_labels.py
            │   ├── iframe_resizer.py
            │   ├── redisplayed_widgets.py
            │   ├── session_state_frontend_sync.py
            │   ├── st_columns.py
            │   ├── st_disabled.py
            │   ├── st_disconnect.py
            │   ├── st_download_button.py
            │   ├── st_exception.py
            │   ├── st_experimental_get_query_params.py
            │   ├── st_experimental_set_query_params.py
            │   ├── st_form_column_association.py
            │   ├── st_image.py
            │   ├── st_image_replay.py
            │   ├── st_image_replay_old_image.py
            │   ├── st_image_svg_sizing.py
            │   ├── st_json.py
            │   ├── st_map.py
            │   ├── st_media_replay.py
            │   ├── st_pydeck_chart.py
            │   ├── st_pydeck_geo_layers.py
            │   ├── st_reuse_label.py
            │   ├── st_select_slider.py
            │   ├── st_session_state.py
            │   ├── st_set_page_config.py
            │   ├── st_sidebar.py
            │   ├── st_slider.py
            │   ├── st_tabs.py
            │   ├── st_tooltips.py
            │   ├── websocket_reconnects.py
            │   └── widget_state_heavy_usage.py
            ├── requirements.txt
            ├── stlite.json
            └── streamlit_app.py

37 directories, 380 files
File Sizes
       5946 ./dist/android-chrome-192x192.png
      18336 ./dist/android-chrome-512x512.png
       5553 ./dist/apple-touch-icon.png
-    383818 ./dist/assets/index-PryGXHX1.js
-  12450167 ./dist/assets/index-PryGXHX1.js.map
+    383908 ./dist/assets/index-BiRT3IY_.js
+  12450264 ./dist/assets/index-BiRT3IY_.js.map
      16682 ./dist/assets/index-VdW3D9LT.css
       5630 ./dist/assets/web-vitals-HgvAyjw_.js
      13402 ./dist/assets/web-vitals-HgvAyjw_.js.map
        246 ./dist/browserconfig.xml
       1028 ./dist/favicon-16x16.png
       1751 ./dist/favicon-32x32.png
      15086 ./dist/favicon.ico
       2263 ./dist/index.html
       4517 ./dist/logo192.png
      12188 ./dist/logo512.png
        714 ./dist/manifest.json
       3911 ./dist/mstile-150x150.png
      43307 ./dist/ogp.png
         67 ./dist/robots.txt
       8806 ./dist/safari-pinned-tab.svg
       4517 ./dist/samples/000_intro/data/logo.png
        311 ./dist/samples/000_intro/pages/🎈_subpage.py
         66 ./dist/samples/000_intro/stlite.json
       3392 ./dist/samples/000_intro/streamlit_app.py
         68 ./dist/samples/001_template/stlite.json
         49 ./dist/samples/001_template/streamlit_app.py
       1536 ./dist/samples/010_streamlit_hello/README.md
      36065 ./dist/samples/010_streamlit_hello/agri.csv.gz
       3290 ./dist/samples/010_streamlit_hello/animation_demo.py
       2529 ./dist/samples/010_streamlit_hello/dataframe_demo.py
       1491 ./dist/samples/010_streamlit_hello/hello.py
       3744 ./dist/samples/010_streamlit_hello/mapping_demo.py
       1772 ./dist/samples/010_streamlit_hello/plotting_demo.py
          7 ./dist/samples/010_streamlit_hello/requirements.txt
         69 ./dist/samples/010_streamlit_hello/stlite.json
       1820 ./dist/samples/010_streamlit_hello/streamlit_app.py
       1053 ./dist/samples/010_streamlit_hello/utils.py
       2530 ./dist/samples/011_component_gallery/data/capitals.csv
       1776 ./dist/samples/011_component_gallery/pages/annotations-in-altair.py
     184083 ./dist/samples/011_component_gallery/pages/cat-purr.mp3
        828 ./dist/samples/011_component_gallery/pages/charts.altair_chart.py
       2169 ./dist/samples/011_component_gallery/pages/charts.altair_custom_colors.py
        704 ./dist/samples/011_component_gallery/pages/charts.altair_selections.py
        183 ./dist/samples/011_component_gallery/pages/charts.area_chart.py
        309 ./dist/samples/011_component_gallery/pages/charts.area_chart1.py
        344 ./dist/samples/011_component_gallery/pages/charts.area_chart2.py
        170 ./dist/samples/011_component_gallery/pages/charts.area_chart_steamgraph.py
         87 ./dist/samples/011_component_gallery/pages/charts.audio-purr.py
       1773 ./dist/samples/011_component_gallery/pages/charts.audio.py
        182 ./dist/samples/011_component_gallery/pages/charts.bar_chart.py
        308 ./dist/samples/011_component_gallery/pages/charts.bar_chart1.py
        339 ./dist/samples/011_component_gallery/pages/charts.bar_chart2.py
        155 ./dist/samples/011_component_gallery/pages/charts.bar_chart_horizontal.py
        148 ./dist/samples/011_component_gallery/pages/charts.bar_chart_unstacked.py
        245 ./dist/samples/011_component_gallery/pages/charts.bokeh_chart.py
        650 ./dist/samples/011_component_gallery/pages/charts.graphviz_chart.py
        461 ./dist/samples/011_component_gallery/pages/charts.image.py
        183 ./dist/samples/011_component_gallery/pages/charts.line_chart.py
        309 ./dist/samples/011_component_gallery/pages/charts.line_chart1.py
        253 ./dist/samples/011_component_gallery/pages/charts.line_chart2.py
        217 ./dist/samples/011_component_gallery/pages/charts.map.py
        426 ./dist/samples/011_component_gallery/pages/charts.map_color.py
        375 ./dist/samples/011_component_gallery/pages/charts.plotly_chart.py
        222 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_config.py
        196 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_event_state.py
        299 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_event_state_selections.py
        733 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_theme.py
        759 ./dist/samples/011_component_gallery/pages/charts.plotly_custom_colors.py
       1040 ./dist/samples/011_component_gallery/pages/charts.pydeck_chart.py
        895 ./dist/samples/011_component_gallery/pages/charts.pydeck_event_state_selections.py
        199 ./dist/samples/011_component_gallery/pages/charts.pyplot.py
        186 ./dist/samples/011_component_gallery/pages/charts.scatter_chart.py
        319 ./dist/samples/011_component_gallery/pages/charts.scatter_chart1.py
        305 ./dist/samples/011_component_gallery/pages/charts.scatter_chart2.py
        529 ./dist/samples/011_component_gallery/pages/charts.vega_lite_chart.py
       1016 ./dist/samples/011_component_gallery/pages/charts.vega_lite_theme.py
        388 ./dist/samples/011_component_gallery/pages/charts.video.py
        527 ./dist/samples/011_component_gallery/pages/charts.video2.py
        887 ./dist/samples/011_component_gallery/pages/chat.echo.py
        274 ./dist/samples/011_component_gallery/pages/chat.input-file-uploader.py
        250 ./dist/samples/011_component_gallery/pages/chat.input-inline.py
        137 ./dist/samples/011_component_gallery/pages/chat.input.py
        268 ./dist/samples/011_component_gallery/pages/chat.input_audio.py
        192 ./dist/samples/011_component_gallery/pages/chat.input_set_value.py
       2645 ./dist/samples/011_component_gallery/pages/chat.llm.py
        142 ./dist/samples/011_component_gallery/pages/chat.message.py
        153 ./dist/samples/011_component_gallery/pages/chat.message1.py
       1277 ./dist/samples/011_component_gallery/pages/chat.simple.py
       1218 ./dist/samples/011_component_gallery/pages/components.cleanup_function.py
       1072 ./dist/samples/011_component_gallery/pages/components.custom_anchors.py
       1121 ./dist/samples/011_component_gallery/pages/components.interactive_svg.py
        641 ./dist/samples/011_component_gallery/pages/components.markdown_links.py
        800 ./dist/samples/011_component_gallery/pages/components.tailwind.py
       1658 ./dist/samples/011_component_gallery/pages/components.text_input.py
        651 ./dist/samples/011_component_gallery/pages/create-a-simple-grid.py
        670 ./dist/samples/011_component_gallery/pages/data.areachart_column.py
       1228 ./dist/samples/011_component_gallery/pages/data.audio_column.py
        640 ./dist/samples/011_component_gallery/pages/data.barchart_column.py
        572 ./dist/samples/011_component_gallery/pages/data.checkbox_column.py
        542 ./dist/samples/011_component_gallery/pages/data.column.py
        580 ./dist/samples/011_component_gallery/pages/data.column_config.empty.py
       3119 ./dist/samples/011_component_gallery/pages/data.column_config.py
        460 ./dist/samples/011_component_gallery/pages/data.data_editor.py
        480 ./dist/samples/011_component_gallery/pages/data.data_editor1.py
        410 ./dist/samples/011_component_gallery/pages/data.data_editor2.py
        903 ./dist/samples/011_component_gallery/pages/data.data_editor3.py
        814 ./dist/samples/011_component_gallery/pages/data.data_editor4.py
        874 ./dist/samples/011_component_gallery/pages/data.data_editor_config.py
        207 ./dist/samples/011_component_gallery/pages/data.dataframe.py
        235 ./dist/samples/011_component_gallery/pages/data.dataframe1.py
        614 ./dist/samples/011_component_gallery/pages/data.dataframe2.py
        900 ./dist/samples/011_component_gallery/pages/data.dataframe_config.py
        432 ./dist/samples/011_component_gallery/pages/data.dataframe_config_index.py
        332 ./dist/samples/011_component_gallery/pages/data.dataframe_event_state_selections.py
        643 ./dist/samples/011_component_gallery/pages/data.dataframe_programmatic_selections.py
        654 ./dist/samples/011_component_gallery/pages/data.date_column.py
        735 ./dist/samples/011_component_gallery/pages/data.datetime_column.py
       1019 ./dist/samples/011_component_gallery/pages/data.image_column.py
        239 ./dist/samples/011_component_gallery/pages/data.json.py
        485 ./dist/samples/011_component_gallery/pages/data.json_column.py
        669 ./dist/samples/011_component_gallery/pages/data.linechart_column.py
        975 ./dist/samples/011_component_gallery/pages/data.link_column.py
        668 ./dist/samples/011_component_gallery/pages/data.list_column.py
        657 ./dist/samples/011_component_gallery/pages/data.multiselect_column_1.py
        522 ./dist/samples/011_component_gallery/pages/data.multiselect_column_2.py
        513 ./dist/samples/011_component_gallery/pages/data.number_column.py
        487 ./dist/samples/011_component_gallery/pages/data.progress_column.py
        766 ./dist/samples/011_component_gallery/pages/data.selectbox_column.py
        206 ./dist/samples/011_component_gallery/pages/data.table.py
        523 ./dist/samples/011_component_gallery/pages/data.table_auto_header.py
        351 ./dist/samples/011_component_gallery/pages/data.table_confusion.py
        155 ./dist/samples/011_component_gallery/pages/data.table_hide_header_and_index.py
        444 ./dist/samples/011_component_gallery/pages/data.table_horizontal_border.py
        443 ./dist/samples/011_component_gallery/pages/data.table_markdown.py
        549 ./dist/samples/011_component_gallery/pages/data.text_column.py
        636 ./dist/samples/011_component_gallery/pages/data.time_column.py
        503 ./dist/samples/011_component_gallery/pages/data.video_column.py
       2555 ./dist/samples/011_component_gallery/pages/dataframe-row-selections.py
        528 ./dist/samples/011_component_gallery/pages/execution.dialog.py
        461 ./dist/samples/011_component_gallery/pages/execution.fragment-rerun.py
        543 ./dist/samples/011_component_gallery/pages/execution.fragment.py
        296 ./dist/samples/011_component_gallery/pages/execution.fragment_balloon.py
     411449 ./dist/samples/011_component_gallery/pages/flower.png
        377 ./dist/samples/011_component_gallery/pages/forms.form1.py
        185 ./dist/samples/011_component_gallery/pages/forms.form2.py
        606 ./dist/samples/011_component_gallery/pages/forms.form_container.py
        347 ./dist/samples/011_component_gallery/pages/forms.form_default.py
       1442 ./dist/samples/011_component_gallery/pages/forms.form_overview.py
        243 ./dist/samples/011_component_gallery/pages/forms.form_process1.py
        468 ./dist/samples/011_component_gallery/pages/forms.form_process2.py
        637 ./dist/samples/011_component_gallery/pages/forms.form_process3.py
      39446 ./dist/samples/011_component_gallery/pages/images/horizontal_blue.png
      32992 ./dist/samples/011_component_gallery/pages/images/horizontal_red.png
       4241 ./dist/samples/011_component_gallery/pages/images/icon_blue.png
       3763 ./dist/samples/011_component_gallery/pages/images/icon_red.png
        577 ./dist/samples/011_component_gallery/pages/layout.columns1.py
        267 ./dist/samples/011_component_gallery/pages/layout.columns2.py
        176 ./dist/samples/011_component_gallery/pages/layout.columns_borders.py
        203 ./dist/samples/011_component_gallery/pages/layout.columns_bottom_widgets.py
        606 ./dist/samples/011_component_gallery/pages/layout.columns_vertical_alignment.py
        284 ./dist/samples/011_component_gallery/pages/layout.container1.py
        191 ./dist/samples/011_component_gallery/pages/layout.container2.py
        169 ./dist/samples/011_component_gallery/pages/layout.container3.py
        118 ./dist/samples/011_component_gallery/pages/layout.container4.py
        152 ./dist/samples/011_component_gallery/pages/layout.container5.py
        229 ./dist/samples/011_component_gallery/pages/layout.empty.py
        586 ./dist/samples/011_component_gallery/pages/layout.empty_placeholder.py
        444 ./dist/samples/011_component_gallery/pages/layout.expander-callback.py
        216 ./dist/samples/011_component_gallery/pages/layout.expander-conditional-outside.py
        237 ./dist/samples/011_component_gallery/pages/layout.expander-lazy-load.py
        452 ./dist/samples/011_component_gallery/pages/layout.expander.py
        484 ./dist/samples/011_component_gallery/pages/layout.popover-callback.py
        234 ./dist/samples/011_component_gallery/pages/layout.popover-conditional-outside.py
        237 ./dist/samples/011_component_gallery/pages/layout.popover-lazy-load.py
        169 ./dist/samples/011_component_gallery/pages/layout.popover.py
        263 ./dist/samples/011_component_gallery/pages/layout.popover2.py
        129 ./dist/samples/011_component_gallery/pages/layout.space_horizontal.py
        220 ./dist/samples/011_component_gallery/pages/layout.space_vertical.py
        658 ./dist/samples/011_component_gallery/pages/layout.tabs-callback.py
        605 ./dist/samples/011_component_gallery/pages/layout.tabs-conditional-outside.py
        499 ./dist/samples/011_component_gallery/pages/layout.tabs-lazy-load.py
        395 ./dist/samples/011_component_gallery/pages/layout.tabs1.py
        268 ./dist/samples/011_component_gallery/pages/layout.tabs2.py
        447 ./dist/samples/011_component_gallery/pages/layout.tabs3.py
        118 ./dist/samples/011_component_gallery/pages/layouts.container4.py
        476 ./dist/samples/011_component_gallery/pages/media.logo.py
        110 ./dist/samples/011_component_gallery/pages/metric.example1.py
        178 ./dist/samples/011_component_gallery/pages/metric.example2.py
        175 ./dist/samples/011_component_gallery/pages/metric.example3.py
        277 ./dist/samples/011_component_gallery/pages/metric.example4.py
        502 ./dist/samples/011_component_gallery/pages/metric.example5.py
        102 ./dist/samples/011_component_gallery/pages/status.exception.py
        303 ./dist/samples/011_component_gallery/pages/status.progress.py
        144 ./dist/samples/011_component_gallery/pages/status.spinner.py
        250 ./dist/samples/011_component_gallery/pages/status.status.py
        355 ./dist/samples/011_component_gallery/pages/status.status1.py
        105 ./dist/samples/011_component_gallery/pages/status.toast.py
        185 ./dist/samples/011_component_gallery/pages/status.toast1.py
        262 ./dist/samples/011_component_gallery/pages/status.toast2.py
     437557 ./dist/samples/011_component_gallery/pages/tailwind_example.js
        221 ./dist/samples/011_component_gallery/pages/text.badge.py
         56 ./dist/samples/011_component_gallery/pages/text.caption.py
        566 ./dist/samples/011_component_gallery/pages/text.code-ascii.py
        114 ./dist/samples/011_component_gallery/pages/text.code.py
        329 ./dist/samples/011_component_gallery/pages/text.header.py
        170 ./dist/samples/011_component_gallery/pages/text.latex.py
        552 ./dist/samples/011_component_gallery/pages/text.markdown.py
        240 ./dist/samples/011_component_gallery/pages/text.markdown1.py
        356 ./dist/samples/011_component_gallery/pages/text.subheader.py
         94 ./dist/samples/011_component_gallery/pages/text.text.py
        444 ./dist/samples/011_component_gallery/pages/text.text_area.py
        104 ./dist/samples/011_component_gallery/pages/text.title.py
         65 ./dist/samples/011_component_gallery/pages/text.write1.py
        155 ./dist/samples/011_component_gallery/pages/text.write2.py
        332 ./dist/samples/011_component_gallery/pages/text.write3.py
        733 ./dist/samples/011_component_gallery/pages/text.write_stream.py
         64 ./dist/samples/011_component_gallery/pages/utilities.help.py
        245 ./dist/samples/011_component_gallery/pages/utilities.help1.py
        123 ./dist/samples/011_component_gallery/pages/utilities.help2.py
        111 ./dist/samples/011_component_gallery/pages/utilities.html.py
        122 ./dist/samples/011_component_gallery/pages/widget.audio_input.py
        210 ./dist/samples/011_component_gallery/pages/widget.button.py
        409 ./dist/samples/011_component_gallery/pages/widget.button_icons.py
        336 ./dist/samples/011_component_gallery/pages/widget.button_shortcut.py
        162 ./dist/samples/011_component_gallery/pages/widget.camera_input.py
         88 ./dist/samples/011_component_gallery/pages/widget.checkbox.py
        115 ./dist/samples/011_component_gallery/pages/widget.color_picker.py
        143 ./dist/samples/011_component_gallery/pages/widget.date_input.py
        341 ./dist/samples/011_component_gallery/pages/widget.date_input1.py
        127 ./dist/samples/011_component_gallery/pages/widget.date_input_empty.py
        190 ./dist/samples/011_component_gallery/pages/widget.datetime_input.py
        150 ./dist/samples/011_component_gallery/pages/widget.datetime_input_empty.py
        917 ./dist/samples/011_component_gallery/pages/widget.download_button.py
        490 ./dist/samples/011_component_gallery/pages/widget.download_button_csv.py
        247 ./dist/samples/011_component_gallery/pages/widget.download_button_deferred.py
        208 ./dist/samples/011_component_gallery/pages/widget.download_button_file.py
        338 ./dist/samples/011_component_gallery/pages/widget.download_button_text.py
        213 ./dist/samples/011_component_gallery/pages/widget.feedback_stars.py
        215 ./dist/samples/011_component_gallery/pages/widget.feedback_thumbs.py
        230 ./dist/samples/011_component_gallery/pages/widget.file_uploader.py
        202 ./dist/samples/011_component_gallery/pages/widget.file_uploader_directory.py
         88 ./dist/samples/011_component_gallery/pages/widget.link_button.py
        264 ./dist/samples/011_component_gallery/pages/widget.menu_button.py
        196 ./dist/samples/011_component_gallery/pages/widget.multiselect.py
        235 ./dist/samples/011_component_gallery/pages/widget.multiselect_accept_new_options.py
        111 ./dist/samples/011_component_gallery/pages/widget.number_input.py
        155 ./dist/samples/011_component_gallery/pages/widget.number_input_empty.py
        203 ./dist/samples/011_component_gallery/pages/widget.pills_multi.py
        409 ./dist/samples/011_component_gallery/pages/widget.pills_single.py
        351 ./dist/samples/011_component_gallery/pages/widget.radio.py
        693 ./dist/samples/011_component_gallery/pages/widget.radio1.py
        205 ./dist/samples/011_component_gallery/pages/widget.radio_empty.py
        215 ./dist/samples/011_component_gallery/pages/widget.segmented_control_multi.py
        421 ./dist/samples/011_component_gallery/pages/widget.segmented_control_single.py
        478 ./dist/samples/011_component_gallery/pages/widget.select_slider.py
        167 ./dist/samples/011_component_gallery/pages/widget.selectbox.py
        685 ./dist/samples/011_component_gallery/pages/widget.selectbox1.py
        272 ./dist/samples/011_component_gallery/pages/widget.selectbox_accept_new_options.py
        232 ./dist/samples/011_component_gallery/pages/widget.selectbox_empty.py
        657 ./dist/samples/011_component_gallery/pages/widget.slider.py
        503 ./dist/samples/011_component_gallery/pages/widget.text_area.py
        124 ./dist/samples/011_component_gallery/pages/widget.text_input.py
        884 ./dist/samples/011_component_gallery/pages/widget.text_input1.py
        132 ./dist/samples/011_component_gallery/pages/widget.time_input.py
        122 ./dist/samples/011_component_gallery/pages/widget.time_input_empty.py
        102 ./dist/samples/011_component_gallery/pages/widget.toggle.py
        144 ./dist/samples/011_component_gallery/pages/widgets.audio_input_high_rate.py
        307 ./dist/samples/011_component_gallery/pages/widgets.change_parameters.py
        558 ./dist/samples/011_component_gallery/pages/widgets.change_parameters_best.py
        468 ./dist/samples/011_component_gallery/pages/widgets.form_callbacks.py
        259 ./dist/samples/011_component_gallery/requirements.txt
         71 ./dist/samples/011_component_gallery/stlite.json
       1901 ./dist/samples/011_component_gallery/streamlit_app.py
      36065 ./dist/samples/012_hello/agri.csv.gz
       7239 ./dist/samples/012_hello/hello.py
         45 ./dist/samples/012_hello/requirements.txt
         51 ./dist/samples/012_hello/stlite.json
       1637 ./dist/samples/012_mpa-hello/0_👋_Hello.py
      36065 ./dist/samples/012_mpa-hello/agri.csv.gz
       1691 ./dist/samples/012_mpa-hello/pages/1_📈_Plotting_Demo.py
       3775 ./dist/samples/012_mpa-hello/pages/2_🌍_Mapping_Demo.py
       2522 ./dist/samples/012_mpa-hello/pages/3_📊_DataFrame_Demo.py
       1674 ./dist/samples/012_mpa-hello/pages/4_📷_Webcam_Demo.py
         59 ./dist/samples/012_mpa-hello/requirements.txt
         68 ./dist/samples/012_mpa-hello/stlite.json
        957 ./dist/samples/012_mpa-hello/utils.py
        295 ./dist/samples/012_navigation.multipage_widgets/app.py
         60 ./dist/samples/012_navigation.multipage_widgets/stlite.json
        495 ./dist/samples/012_tutorials_custom-navigation/README.md
        649 ./dist/samples/012_tutorials_custom-navigation/app.py
       1172 ./dist/samples/012_tutorials_custom-navigation/menu.py
        504 ./dist/samples/012_tutorials_custom-navigation/pages/admin.py
        497 ./dist/samples/012_tutorials_custom-navigation/pages/super-admin.py
        341 ./dist/samples/012_tutorials_custom-navigation/pages/user.py
         18 ./dist/samples/012_tutorials_custom-navigation/requirements.txt
         71 ./dist/samples/012_tutorials_custom-navigation/stlite.json
        496 ./dist/samples/012_tutorials_dynamic-navigation/README.md
        104 ./dist/samples/012_tutorials_dynamic-navigation/admin/admin_1.py
        104 ./dist/samples/012_tutorials_dynamic-navigation/admin/admin_2.py
      39446 ./dist/samples/012_tutorials_dynamic-navigation/images/horizontal_blue.png
       4241 ./dist/samples/012_tutorials_dynamic-navigation/images/icon_blue.png
        106 ./dist/samples/012_tutorials_dynamic-navigation/request/request_1.py
        106 ./dist/samples/012_tutorials_dynamic-navigation/request/request_2.py
        106 ./dist/samples/012_tutorials_dynamic-navigation/respond/respond_1.py
        106 ./dist/samples/012_tutorials_dynamic-navigation/respond/respond_2.py
        105 ./dist/samples/012_tutorials_dynamic-navigation/settings.py
         82 ./dist/samples/012_tutorials_dynamic-navigation/stlite.json
       1940 ./dist/samples/012_tutorials_dynamic-navigation/streamlit_app.py
        529 ./dist/samples/012_tutorials_fragments/README.md
          0 ./dist/samples/012_tutorials_fragments/app.py
       1294 ./dist/samples/012_tutorials_fragments/pages/tutorial-fragment-multiple-container.py
       2897 ./dist/samples/012_tutorials_fragments/pages/tutorial-fragment-rerun.py
       1748 ./dist/samples/012_tutorials_fragments/pages/tutorial-fragment-streaming.py
         63 ./dist/samples/012_tutorials_fragments/stlite.json
        489 ./dist/samples/012_utilities.switch_page/README.md
        204 ./dist/samples/012_utilities.switch_page/pages/page_1.py
        204 ./dist/samples/012_utilities.switch_page/pages/page_2.py
         18 ./dist/samples/012_utilities.switch_page/requirements.txt
         68 ./dist/samples/012_utilities.switch_page/stlite.json
        204 ./dist/samples/012_utilities.switch_page/your_app.py
        484 ./dist/samples/012_widget.page_link/README.md
        289 ./dist/samples/012_widget.page_link/pages/page_1.py
        289 ./dist/samples/012_widget.page_link/pages/page_2.py
         18 ./dist/samples/012_widget.page_link/requirements.txt
         65 ./dist/samples/012_widget.page_link/stlite.json
        289 ./dist/samples/012_widget.page_link/your_app.py
        332 ./dist/samples/020_custom_components/home.py
        649 ./dist/samples/020_custom_components/pages/aggrid.py
       1086 ./dist/samples/020_custom_components/pages/agraph.py
       1260 ./dist/samples/020_custom_components/pages/cropper.py
        344 ./dist/samples/020_custom_components/pages/d3_demo.py
       1740 ./dist/samples/020_custom_components/pages/drawable_canvas.py
        251 ./dist/samples/020_custom_components/pages/embedcode.py
       5270 ./dist/samples/020_custom_components/pages/folium.py
       1022 ./dist/samples/020_custom_components/pages/lottie.py
        285 ./dist/samples/020_custom_components/pages/player.py
        343 ./dist/samples/020_custom_components/pages/stmol.py
        187 ./dist/samples/020_custom_components/requirements.txt
         62 ./dist/samples/020_custom_components/stlite.json
       4517 ./dist/samples/021_opencv/data/logo.png
         14 ./dist/samples/021_opencv/requirements.txt
         60 ./dist/samples/021_opencv/stlite.json
       1092 ./dist/samples/021_opencv/streamlit_app.py
         30 ./dist/samples/022_realtime_image_processing/requirements.txt
         79 ./dist/samples/022_realtime_image_processing/stlite.json
       2568 ./dist/samples/022_realtime_image_processing/streamlit_app.py
        724 ./dist/samples/030_streamlit_e2e_tests/pages/empty_labels.py
        733 ./dist/samples/030_streamlit_e2e_tests/pages/iframe_resizer.py
        876 ./dist/samples/030_streamlit_e2e_tests/pages/redisplayed_widgets.py
       1225 ./dist/samples/030_streamlit_e2e_tests/pages/session_state_frontend_sync.py
       1400 ./dist/samples/030_streamlit_e2e_tests/pages/st_columns.py
       1140 ./dist/samples/030_streamlit_e2e_tests/pages/st_disabled.py
        616 ./dist/samples/030_streamlit_e2e_tests/pages/st_disconnect.py
       1681 ./dist/samples/030_streamlit_e2e_tests/pages/st_download_button.py
       2475 ./dist/samples/030_streamlit_e2e_tests/pages/st_exception.py
        747 ./dist/samples/030_streamlit_e2e_tests/pages/st_experimental_get_query_params.py
        856 ./dist/samples/030_streamlit_e2e_tests/pages/st_experimental_set_query_params.py
       2405 ./dist/samples/030_streamlit_e2e_tests/pages/st_form_column_association.py
       3329 ./dist/samples/030_streamlit_e2e_tests/pages/st_image.py
       2160 ./dist/samples/030_streamlit_e2e_tests/pages/st_image_replay.py
        810 ./dist/samples/030_streamlit_e2e_tests/pages/st_image_replay_old_image.py
       1705 ./dist/samples/030_streamlit_e2e_tests/pages/st_image_svg_sizing.py
        762 ./dist/samples/030_streamlit_e2e_tests/pages/st_json.py
       1484 ./dist/samples/030_streamlit_e2e_tests/pages/st_map.py
        969 ./dist/samples/030_streamlit_e2e_tests/pages/st_media_replay.py
       2141 ./dist/samples/030_streamlit_e2e_tests/pages/st_pydeck_chart.py
       1524 ./dist/samples/030_streamlit_e2e_tests/pages/st_pydeck_geo_layers.py
       1263 ./dist/samples/030_streamlit_e2e_tests/pages/st_reuse_label.py
       2551 ./dist/samples/030_streamlit_e2e_tests/pages/st_select_slider.py
       1592 ./dist/samples/030_streamlit_e2e_tests/pages/st_session_state.py
       1592 ./dist/samples/030_streamlit_e2e_tests/pages/st_set_page_config.py
       1087 ./dist/samples/030_streamlit_e2e_tests/pages/st_sidebar.py
       2458 ./dist/samples/030_streamlit_e2e_tests/pages/st_slider.py
       1149 ./dist/samples/030_streamlit_e2e_tests/pages/st_tabs.py
       2732 ./dist/samples/030_streamlit_e2e_tests/pages/st_tooltips.py
       1108 ./dist/samples/030_streamlit_e2e_tests/pages/websocket_reconnects.py
        730 ./dist/samples/030_streamlit_e2e_tests/pages/widget_state_heavy_usage.py
         27 ./dist/samples/030_streamlit_e2e_tests/requirements.txt
         75 ./dist/samples/030_streamlit_e2e_tests/stlite.json
        117 ./dist/samples/030_streamlit_e2e_tests/streamlit_app.py

…e float

The Pyodide 314 upgrade left three CI failures:

- `.python-version` said 3.14.0 while pyodide-build 0.37.0 ships Python
  3.14.2, so the Makefile's version-match guard aborted the Streamlit
  wheel build.
- Re-resolving `uv.lock` for Python 3.14 floated ruff 0.15.9 -> 0.16.1
  under the `>=0.6.9` constraint, and the new release flags pre-existing
  code across stlite-lib and the CLI. That churn belongs in its own
  change, so the lock entry goes back to 0.15.9.
- cspell did not know `JSPI`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GexQcCRF5yQnsADZXTnFTK
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

CI Report for ce7ae35

Package Stats

Diffs are from 859237b on main (workflow run: 30979544733)

@stlite/cli

package.tgz: 124 kiB (124 kiB +0 kiB)

File Tree
.
└── package
    ├── CHANGELOG.md
    ├── README.md
    ├── dist
    │   └── cli.js
    └── package.json

3 directories, 4 files
File Sizes
       3777 ./package/CHANGELOG.md
       2870 ./package/README.md
-    583122 ./package/dist/cli.js
-      1243 ./package/package.json+    583433 ./package/dist/cli.js
+      1244 ./package/package.json

stlite sharing editor

dist.tar: 14472 kiB (14472 kiB +0 kiB)

File Tree
.
└── dist
    ├── android-chrome-192x192.png
    ├── android-chrome-512x512.png
    ├── apple-touch-icon.png
    ├── assets
    │   ├── index-BucfDZxH.js
    │   ├── index-BucfDZxH.js.map
    │   ├── index-VdW3D9LT.css
    │   ├── web-vitals-HgvAyjw_.js
    │   └── web-vitals-HgvAyjw_.js.map
    ├── browserconfig.xml
    ├── favicon-16x16.png
    ├── favicon-32x32.png
    ├── favicon.ico
    ├── index.html
    ├── logo192.png
    ├── logo512.png
    ├── manifest.json
    ├── mstile-150x150.png
    ├── ogp.png
    ├── robots.txt
    ├── safari-pinned-tab.svg
    └── samples
        ├── 000_intro
        │   ├── data
        │   │   └── logo.png
        │   ├── pages
        │   │   └── 🎈_subpage.py
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 001_template
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 010_streamlit_hello
        │   ├── README.md
        │   ├── agri.csv.gz
        │   ├── animation_demo.py
        │   ├── dataframe_demo.py
        │   ├── hello.py
        │   ├── mapping_demo.py
        │   ├── plotting_demo.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   ├── streamlit_app.py
        │   └── utils.py
        ├── 011_component_gallery
        │   ├── data
        │   │   └── capitals.csv
        │   ├── pages
        │   │   ├── annotations-in-altair.py
        │   │   ├── cat-purr.mp3
        │   │   ├── charts.altair_chart.py
        │   │   ├── charts.altair_custom_colors.py
        │   │   ├── charts.altair_selections.py
        │   │   ├── charts.area_chart.py
        │   │   ├── charts.area_chart1.py
        │   │   ├── charts.area_chart2.py
        │   │   ├── charts.area_chart_steamgraph.py
        │   │   ├── charts.audio-purr.py
        │   │   ├── charts.audio.py
        │   │   ├── charts.bar_chart.py
        │   │   ├── charts.bar_chart1.py
        │   │   ├── charts.bar_chart2.py
        │   │   ├── charts.bar_chart_horizontal.py
        │   │   ├── charts.bar_chart_unstacked.py
        │   │   ├── charts.bokeh_chart.py
        │   │   ├── charts.graphviz_chart.py
        │   │   ├── charts.image.py
        │   │   ├── charts.line_chart.py
        │   │   ├── charts.line_chart1.py
        │   │   ├── charts.line_chart2.py
        │   │   ├── charts.map.py
        │   │   ├── charts.map_color.py
        │   │   ├── charts.plotly_chart.py
        │   │   ├── charts.plotly_chart_config.py
        │   │   ├── charts.plotly_chart_event_state.py
        │   │   ├── charts.plotly_chart_event_state_selections.py
        │   │   ├── charts.plotly_chart_theme.py
        │   │   ├── charts.plotly_custom_colors.py
        │   │   ├── charts.pydeck_chart.py
        │   │   ├── charts.pydeck_event_state_selections.py
        │   │   ├── charts.pyplot.py
        │   │   ├── charts.scatter_chart.py
        │   │   ├── charts.scatter_chart1.py
        │   │   ├── charts.scatter_chart2.py
        │   │   ├── charts.vega_lite_chart.py
        │   │   ├── charts.vega_lite_theme.py
        │   │   ├── charts.video.py
        │   │   ├── charts.video2.py
        │   │   ├── chat.echo.py
        │   │   ├── chat.input-file-uploader.py
        │   │   ├── chat.input-inline.py
        │   │   ├── chat.input.py
        │   │   ├── chat.input_audio.py
        │   │   ├── chat.input_set_value.py
        │   │   ├── chat.llm.py
        │   │   ├── chat.message.py
        │   │   ├── chat.message1.py
        │   │   ├── chat.simple.py
        │   │   ├── components.cleanup_function.py
        │   │   ├── components.custom_anchors.py
        │   │   ├── components.interactive_svg.py
        │   │   ├── components.markdown_links.py
        │   │   ├── components.tailwind.py
        │   │   ├── components.text_input.py
        │   │   ├── create-a-simple-grid.py
        │   │   ├── data.areachart_column.py
        │   │   ├── data.audio_column.py
        │   │   ├── data.barchart_column.py
        │   │   ├── data.checkbox_column.py
        │   │   ├── data.column.py
        │   │   ├── data.column_config.empty.py
        │   │   ├── data.column_config.py
        │   │   ├── data.data_editor.py
        │   │   ├── data.data_editor1.py
        │   │   ├── data.data_editor2.py
        │   │   ├── data.data_editor3.py
        │   │   ├── data.data_editor4.py
        │   │   ├── data.data_editor_config.py
        │   │   ├── data.dataframe.py
        │   │   ├── data.dataframe1.py
        │   │   ├── data.dataframe2.py
        │   │   ├── data.dataframe_config.py
        │   │   ├── data.dataframe_config_index.py
        │   │   ├── data.dataframe_event_state_selections.py
        │   │   ├── data.dataframe_programmatic_selections.py
        │   │   ├── data.date_column.py
        │   │   ├── data.datetime_column.py
        │   │   ├── data.image_column.py
        │   │   ├── data.json.py
        │   │   ├── data.json_column.py
        │   │   ├── data.linechart_column.py
        │   │   ├── data.link_column.py
        │   │   ├── data.list_column.py
        │   │   ├── data.multiselect_column_1.py
        │   │   ├── data.multiselect_column_2.py
        │   │   ├── data.number_column.py
        │   │   ├── data.progress_column.py
        │   │   ├── data.selectbox_column.py
        │   │   ├── data.table.py
        │   │   ├── data.table_auto_header.py
        │   │   ├── data.table_confusion.py
        │   │   ├── data.table_hide_header_and_index.py
        │   │   ├── data.table_horizontal_border.py
        │   │   ├── data.table_markdown.py
        │   │   ├── data.text_column.py
        │   │   ├── data.time_column.py
        │   │   ├── data.video_column.py
        │   │   ├── dataframe-row-selections.py
        │   │   ├── execution.dialog.py
        │   │   ├── execution.fragment-rerun.py
        │   │   ├── execution.fragment.py
        │   │   ├── execution.fragment_balloon.py
        │   │   ├── flower.png
        │   │   ├── forms.form1.py
        │   │   ├── forms.form2.py
        │   │   ├── forms.form_container.py
        │   │   ├── forms.form_default.py
        │   │   ├── forms.form_overview.py
        │   │   ├── forms.form_process1.py
        │   │   ├── forms.form_process2.py
        │   │   ├── forms.form_process3.py
        │   │   ├── images
        │   │   │   ├── horizontal_blue.png
        │   │   │   ├── horizontal_red.png
        │   │   │   ├── icon_blue.png
        │   │   │   └── icon_red.png
        │   │   ├── layout.columns1.py
        │   │   ├── layout.columns2.py
        │   │   ├── layout.columns_borders.py
        │   │   ├── layout.columns_bottom_widgets.py
        │   │   ├── layout.columns_vertical_alignment.py
        │   │   ├── layout.container1.py
        │   │   ├── layout.container2.py
        │   │   ├── layout.container3.py
        │   │   ├── layout.container4.py
        │   │   ├── layout.container5.py
        │   │   ├── layout.empty.py
        │   │   ├── layout.empty_placeholder.py
        │   │   ├── layout.expander-callback.py
        │   │   ├── layout.expander-conditional-outside.py
        │   │   ├── layout.expander-lazy-load.py
        │   │   ├── layout.expander.py
        │   │   ├── layout.popover-callback.py
        │   │   ├── layout.popover-conditional-outside.py
        │   │   ├── layout.popover-lazy-load.py
        │   │   ├── layout.popover.py
        │   │   ├── layout.popover2.py
        │   │   ├── layout.space_horizontal.py
        │   │   ├── layout.space_vertical.py
        │   │   ├── layout.tabs-callback.py
        │   │   ├── layout.tabs-conditional-outside.py
        │   │   ├── layout.tabs-lazy-load.py
        │   │   ├── layout.tabs1.py
        │   │   ├── layout.tabs2.py
        │   │   ├── layout.tabs3.py
        │   │   ├── layouts.container4.py
        │   │   ├── media.logo.py
        │   │   ├── metric.example1.py
        │   │   ├── metric.example2.py
        │   │   ├── metric.example3.py
        │   │   ├── metric.example4.py
        │   │   ├── metric.example5.py
        │   │   ├── status.exception.py
        │   │   ├── status.progress.py
        │   │   ├── status.spinner.py
        │   │   ├── status.status.py
        │   │   ├── status.status1.py
        │   │   ├── status.toast.py
        │   │   ├── status.toast1.py
        │   │   ├── status.toast2.py
        │   │   ├── tailwind_example.js
        │   │   ├── text.badge.py
        │   │   ├── text.caption.py
        │   │   ├── text.code-ascii.py
        │   │   ├── text.code.py
        │   │   ├── text.header.py
        │   │   ├── text.latex.py
        │   │   ├── text.markdown.py
        │   │   ├── text.markdown1.py
        │   │   ├── text.subheader.py
        │   │   ├── text.text.py
        │   │   ├── text.text_area.py
        │   │   ├── text.title.py
        │   │   ├── text.write1.py
        │   │   ├── text.write2.py
        │   │   ├── text.write3.py
        │   │   ├── text.write_stream.py
        │   │   ├── utilities.help.py
        │   │   ├── utilities.help1.py
        │   │   ├── utilities.help2.py
        │   │   ├── utilities.html.py
        │   │   ├── widget.audio_input.py
        │   │   ├── widget.button.py
        │   │   ├── widget.button_icons.py
        │   │   ├── widget.button_shortcut.py
        │   │   ├── widget.camera_input.py
        │   │   ├── widget.checkbox.py
        │   │   ├── widget.color_picker.py
        │   │   ├── widget.date_input.py
        │   │   ├── widget.date_input1.py
        │   │   ├── widget.date_input_empty.py
        │   │   ├── widget.datetime_input.py
        │   │   ├── widget.datetime_input_empty.py
        │   │   ├── widget.download_button.py
        │   │   ├── widget.download_button_csv.py
        │   │   ├── widget.download_button_deferred.py
        │   │   ├── widget.download_button_file.py
        │   │   ├── widget.download_button_text.py
        │   │   ├── widget.feedback_stars.py
        │   │   ├── widget.feedback_thumbs.py
        │   │   ├── widget.file_uploader.py
        │   │   ├── widget.file_uploader_directory.py
        │   │   ├── widget.link_button.py
        │   │   ├── widget.menu_button.py
        │   │   ├── widget.multiselect.py
        │   │   ├── widget.multiselect_accept_new_options.py
        │   │   ├── widget.number_input.py
        │   │   ├── widget.number_input_empty.py
        │   │   ├── widget.pills_multi.py
        │   │   ├── widget.pills_single.py
        │   │   ├── widget.radio.py
        │   │   ├── widget.radio1.py
        │   │   ├── widget.radio_empty.py
        │   │   ├── widget.segmented_control_multi.py
        │   │   ├── widget.segmented_control_single.py
        │   │   ├── widget.select_slider.py
        │   │   ├── widget.selectbox.py
        │   │   ├── widget.selectbox1.py
        │   │   ├── widget.selectbox_accept_new_options.py
        │   │   ├── widget.selectbox_empty.py
        │   │   ├── widget.slider.py
        │   │   ├── widget.text_area.py
        │   │   ├── widget.text_input.py
        │   │   ├── widget.text_input1.py
        │   │   ├── widget.time_input.py
        │   │   ├── widget.time_input_empty.py
        │   │   ├── widget.toggle.py
        │   │   ├── widgets.audio_input_high_rate.py
        │   │   ├── widgets.change_parameters.py
        │   │   ├── widgets.change_parameters_best.py
        │   │   └── widgets.form_callbacks.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 012_hello
        │   ├── agri.csv.gz
        │   ├── hello.py
        │   ├── requirements.txt
        │   └── stlite.json
        ├── 012_mpa-hello
        │   ├── 0_👋_Hello.py
        │   ├── agri.csv.gz
        │   ├── pages
        │   │   ├── 1_📈_Plotting_Demo.py
        │   │   ├── 2_🌍_Mapping_Demo.py
        │   │   ├── 3_📊_DataFrame_Demo.py
        │   │   └── 4_📷_Webcam_Demo.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── utils.py
        ├── 012_navigation.multipage_widgets
        │   ├── app.py
        │   └── stlite.json
        ├── 012_tutorials_custom-navigation
        │   ├── README.md
        │   ├── app.py
        │   ├── menu.py
        │   ├── pages
        │   │   ├── admin.py
        │   │   ├── super-admin.py
        │   │   └── user.py
        │   ├── requirements.txt
        │   └── stlite.json
        ├── 012_tutorials_dynamic-navigation
        │   ├── README.md
        │   ├── admin
        │   │   ├── admin_1.py
        │   │   └── admin_2.py
        │   ├── images
        │   │   ├── horizontal_blue.png
        │   │   └── icon_blue.png
        │   ├── request
        │   │   ├── request_1.py
        │   │   └── request_2.py
        │   ├── respond
        │   │   ├── respond_1.py
        │   │   └── respond_2.py
        │   ├── settings.py
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 012_tutorials_fragments
        │   ├── README.md
        │   ├── app.py
        │   ├── pages
        │   │   ├── tutorial-fragment-multiple-container.py
        │   │   ├── tutorial-fragment-rerun.py
        │   │   └── tutorial-fragment-streaming.py
        │   └── stlite.json
        ├── 012_utilities.switch_page
        │   ├── README.md
        │   ├── pages
        │   │   ├── page_1.py
        │   │   └── page_2.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── your_app.py
        ├── 012_widget.page_link
        │   ├── README.md
        │   ├── pages
        │   │   ├── page_1.py
        │   │   └── page_2.py
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── your_app.py
        ├── 020_custom_components
        │   ├── home.py
        │   ├── pages
        │   │   ├── aggrid.py
        │   │   ├── agraph.py
        │   │   ├── cropper.py
        │   │   ├── d3_demo.py
        │   │   ├── drawable_canvas.py
        │   │   ├── embedcode.py
        │   │   ├── folium.py
        │   │   ├── lottie.py
        │   │   ├── player.py
        │   │   └── stmol.py
        │   ├── requirements.txt
        │   └── stlite.json
        ├── 021_opencv
        │   ├── data
        │   │   └── logo.png
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── streamlit_app.py
        ├── 022_realtime_image_processing
        │   ├── requirements.txt
        │   ├── stlite.json
        │   └── streamlit_app.py
        └── 030_streamlit_e2e_tests
            ├── pages
            │   ├── empty_labels.py
            │   ├── iframe_resizer.py
            │   ├── redisplayed_widgets.py
            │   ├── session_state_frontend_sync.py
            │   ├── st_columns.py
            │   ├── st_disabled.py
            │   ├── st_disconnect.py
            │   ├── st_download_button.py
            │   ├── st_exception.py
            │   ├── st_experimental_get_query_params.py
            │   ├── st_experimental_set_query_params.py
            │   ├── st_form_column_association.py
            │   ├── st_image.py
            │   ├── st_image_replay.py
            │   ├── st_image_replay_old_image.py
            │   ├── st_image_svg_sizing.py
            │   ├── st_json.py
            │   ├── st_map.py
            │   ├── st_media_replay.py
            │   ├── st_pydeck_chart.py
            │   ├── st_pydeck_geo_layers.py
            │   ├── st_reuse_label.py
            │   ├── st_select_slider.py
            │   ├── st_session_state.py
            │   ├── st_set_page_config.py
            │   ├── st_sidebar.py
            │   ├── st_slider.py
            │   ├── st_tabs.py
            │   ├── st_tooltips.py
            │   ├── websocket_reconnects.py
            │   └── widget_state_heavy_usage.py
            ├── requirements.txt
            ├── stlite.json
            └── streamlit_app.py

37 directories, 380 files
File Sizes
       5946 ./dist/android-chrome-192x192.png
      18336 ./dist/android-chrome-512x512.png
       5553 ./dist/apple-touch-icon.png
-    383818 ./dist/assets/index-PryGXHX1.js
-  12450167 ./dist/assets/index-PryGXHX1.js.map
+    383908 ./dist/assets/index-BucfDZxH.js
+  12450264 ./dist/assets/index-BucfDZxH.js.map
      16682 ./dist/assets/index-VdW3D9LT.css
       5630 ./dist/assets/web-vitals-HgvAyjw_.js
      13402 ./dist/assets/web-vitals-HgvAyjw_.js.map
        246 ./dist/browserconfig.xml
       1028 ./dist/favicon-16x16.png
       1751 ./dist/favicon-32x32.png
      15086 ./dist/favicon.ico
       2263 ./dist/index.html
       4517 ./dist/logo192.png
      12188 ./dist/logo512.png
        714 ./dist/manifest.json
       3911 ./dist/mstile-150x150.png
      43307 ./dist/ogp.png
         67 ./dist/robots.txt
       8806 ./dist/safari-pinned-tab.svg
       4517 ./dist/samples/000_intro/data/logo.png
        311 ./dist/samples/000_intro/pages/🎈_subpage.py
         66 ./dist/samples/000_intro/stlite.json
       3392 ./dist/samples/000_intro/streamlit_app.py
         68 ./dist/samples/001_template/stlite.json
         49 ./dist/samples/001_template/streamlit_app.py
       1536 ./dist/samples/010_streamlit_hello/README.md
      36065 ./dist/samples/010_streamlit_hello/agri.csv.gz
       3290 ./dist/samples/010_streamlit_hello/animation_demo.py
       2529 ./dist/samples/010_streamlit_hello/dataframe_demo.py
       1491 ./dist/samples/010_streamlit_hello/hello.py
       3744 ./dist/samples/010_streamlit_hello/mapping_demo.py
       1772 ./dist/samples/010_streamlit_hello/plotting_demo.py
          7 ./dist/samples/010_streamlit_hello/requirements.txt
         69 ./dist/samples/010_streamlit_hello/stlite.json
       1820 ./dist/samples/010_streamlit_hello/streamlit_app.py
       1053 ./dist/samples/010_streamlit_hello/utils.py
       2530 ./dist/samples/011_component_gallery/data/capitals.csv
       1776 ./dist/samples/011_component_gallery/pages/annotations-in-altair.py
     184083 ./dist/samples/011_component_gallery/pages/cat-purr.mp3
        828 ./dist/samples/011_component_gallery/pages/charts.altair_chart.py
       2169 ./dist/samples/011_component_gallery/pages/charts.altair_custom_colors.py
        704 ./dist/samples/011_component_gallery/pages/charts.altair_selections.py
        183 ./dist/samples/011_component_gallery/pages/charts.area_chart.py
        309 ./dist/samples/011_component_gallery/pages/charts.area_chart1.py
        344 ./dist/samples/011_component_gallery/pages/charts.area_chart2.py
        170 ./dist/samples/011_component_gallery/pages/charts.area_chart_steamgraph.py
         87 ./dist/samples/011_component_gallery/pages/charts.audio-purr.py
       1773 ./dist/samples/011_component_gallery/pages/charts.audio.py
        182 ./dist/samples/011_component_gallery/pages/charts.bar_chart.py
        308 ./dist/samples/011_component_gallery/pages/charts.bar_chart1.py
        339 ./dist/samples/011_component_gallery/pages/charts.bar_chart2.py
        155 ./dist/samples/011_component_gallery/pages/charts.bar_chart_horizontal.py
        148 ./dist/samples/011_component_gallery/pages/charts.bar_chart_unstacked.py
        245 ./dist/samples/011_component_gallery/pages/charts.bokeh_chart.py
        650 ./dist/samples/011_component_gallery/pages/charts.graphviz_chart.py
        461 ./dist/samples/011_component_gallery/pages/charts.image.py
        183 ./dist/samples/011_component_gallery/pages/charts.line_chart.py
        309 ./dist/samples/011_component_gallery/pages/charts.line_chart1.py
        253 ./dist/samples/011_component_gallery/pages/charts.line_chart2.py
        217 ./dist/samples/011_component_gallery/pages/charts.map.py
        426 ./dist/samples/011_component_gallery/pages/charts.map_color.py
        375 ./dist/samples/011_component_gallery/pages/charts.plotly_chart.py
        222 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_config.py
        196 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_event_state.py
        299 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_event_state_selections.py
        733 ./dist/samples/011_component_gallery/pages/charts.plotly_chart_theme.py
        759 ./dist/samples/011_component_gallery/pages/charts.plotly_custom_colors.py
       1040 ./dist/samples/011_component_gallery/pages/charts.pydeck_chart.py
        895 ./dist/samples/011_component_gallery/pages/charts.pydeck_event_state_selections.py
        199 ./dist/samples/011_component_gallery/pages/charts.pyplot.py
        186 ./dist/samples/011_component_gallery/pages/charts.scatter_chart.py
        319 ./dist/samples/011_component_gallery/pages/charts.scatter_chart1.py
        305 ./dist/samples/011_component_gallery/pages/charts.scatter_chart2.py
        529 ./dist/samples/011_component_gallery/pages/charts.vega_lite_chart.py
       1016 ./dist/samples/011_component_gallery/pages/charts.vega_lite_theme.py
        388 ./dist/samples/011_component_gallery/pages/charts.video.py
        527 ./dist/samples/011_component_gallery/pages/charts.video2.py
        887 ./dist/samples/011_component_gallery/pages/chat.echo.py
        274 ./dist/samples/011_component_gallery/pages/chat.input-file-uploader.py
        250 ./dist/samples/011_component_gallery/pages/chat.input-inline.py
        137 ./dist/samples/011_component_gallery/pages/chat.input.py
        268 ./dist/samples/011_component_gallery/pages/chat.input_audio.py
        192 ./dist/samples/011_component_gallery/pages/chat.input_set_value.py
       2645 ./dist/samples/011_component_gallery/pages/chat.llm.py
        142 ./dist/samples/011_component_gallery/pages/chat.message.py
        153 ./dist/samples/011_component_gallery/pages/chat.message1.py
       1277 ./dist/samples/011_component_gallery/pages/chat.simple.py
       1218 ./dist/samples/011_component_gallery/pages/components.cleanup_function.py
       1072 ./dist/samples/011_component_gallery/pages/components.custom_anchors.py
       1121 ./dist/samples/011_component_gallery/pages/components.interactive_svg.py
        641 ./dist/samples/011_component_gallery/pages/components.markdown_links.py
        800 ./dist/samples/011_component_gallery/pages/components.tailwind.py
       1658 ./dist/samples/011_component_gallery/pages/components.text_input.py
        651 ./dist/samples/011_component_gallery/pages/create-a-simple-grid.py
        670 ./dist/samples/011_component_gallery/pages/data.areachart_column.py
       1228 ./dist/samples/011_component_gallery/pages/data.audio_column.py
        640 ./dist/samples/011_component_gallery/pages/data.barchart_column.py
        572 ./dist/samples/011_component_gallery/pages/data.checkbox_column.py
        542 ./dist/samples/011_component_gallery/pages/data.column.py
        580 ./dist/samples/011_component_gallery/pages/data.column_config.empty.py
       3119 ./dist/samples/011_component_gallery/pages/data.column_config.py
        460 ./dist/samples/011_component_gallery/pages/data.data_editor.py
        480 ./dist/samples/011_component_gallery/pages/data.data_editor1.py
        410 ./dist/samples/011_component_gallery/pages/data.data_editor2.py
        903 ./dist/samples/011_component_gallery/pages/data.data_editor3.py
        814 ./dist/samples/011_component_gallery/pages/data.data_editor4.py
        874 ./dist/samples/011_component_gallery/pages/data.data_editor_config.py
        207 ./dist/samples/011_component_gallery/pages/data.dataframe.py
        235 ./dist/samples/011_component_gallery/pages/data.dataframe1.py
        614 ./dist/samples/011_component_gallery/pages/data.dataframe2.py
        900 ./dist/samples/011_component_gallery/pages/data.dataframe_config.py
        432 ./dist/samples/011_component_gallery/pages/data.dataframe_config_index.py
        332 ./dist/samples/011_component_gallery/pages/data.dataframe_event_state_selections.py
        643 ./dist/samples/011_component_gallery/pages/data.dataframe_programmatic_selections.py
        654 ./dist/samples/011_component_gallery/pages/data.date_column.py
        735 ./dist/samples/011_component_gallery/pages/data.datetime_column.py
       1019 ./dist/samples/011_component_gallery/pages/data.image_column.py
        239 ./dist/samples/011_component_gallery/pages/data.json.py
        485 ./dist/samples/011_component_gallery/pages/data.json_column.py
        669 ./dist/samples/011_component_gallery/pages/data.linechart_column.py
        975 ./dist/samples/011_component_gallery/pages/data.link_column.py
        668 ./dist/samples/011_component_gallery/pages/data.list_column.py
        657 ./dist/samples/011_component_gallery/pages/data.multiselect_column_1.py
        522 ./dist/samples/011_component_gallery/pages/data.multiselect_column_2.py
        513 ./dist/samples/011_component_gallery/pages/data.number_column.py
        487 ./dist/samples/011_component_gallery/pages/data.progress_column.py
        766 ./dist/samples/011_component_gallery/pages/data.selectbox_column.py
        206 ./dist/samples/011_component_gallery/pages/data.table.py
        523 ./dist/samples/011_component_gallery/pages/data.table_auto_header.py
        351 ./dist/samples/011_component_gallery/pages/data.table_confusion.py
        155 ./dist/samples/011_component_gallery/pages/data.table_hide_header_and_index.py
        444 ./dist/samples/011_component_gallery/pages/data.table_horizontal_border.py
        443 ./dist/samples/011_component_gallery/pages/data.table_markdown.py
        549 ./dist/samples/011_component_gallery/pages/data.text_column.py
        636 ./dist/samples/011_component_gallery/pages/data.time_column.py
        503 ./dist/samples/011_component_gallery/pages/data.video_column.py
       2555 ./dist/samples/011_component_gallery/pages/dataframe-row-selections.py
        528 ./dist/samples/011_component_gallery/pages/execution.dialog.py
        461 ./dist/samples/011_component_gallery/pages/execution.fragment-rerun.py
        543 ./dist/samples/011_component_gallery/pages/execution.fragment.py
        296 ./dist/samples/011_component_gallery/pages/execution.fragment_balloon.py
     411449 ./dist/samples/011_component_gallery/pages/flower.png
        377 ./dist/samples/011_component_gallery/pages/forms.form1.py
        185 ./dist/samples/011_component_gallery/pages/forms.form2.py
        606 ./dist/samples/011_component_gallery/pages/forms.form_container.py
        347 ./dist/samples/011_component_gallery/pages/forms.form_default.py
       1442 ./dist/samples/011_component_gallery/pages/forms.form_overview.py
        243 ./dist/samples/011_component_gallery/pages/forms.form_process1.py
        468 ./dist/samples/011_component_gallery/pages/forms.form_process2.py
        637 ./dist/samples/011_component_gallery/pages/forms.form_process3.py
      39446 ./dist/samples/011_component_gallery/pages/images/horizontal_blue.png
      32992 ./dist/samples/011_component_gallery/pages/images/horizontal_red.png
       4241 ./dist/samples/011_component_gallery/pages/images/icon_blue.png
       3763 ./dist/samples/011_component_gallery/pages/images/icon_red.png
        577 ./dist/samples/011_component_gallery/pages/layout.columns1.py
        267 ./dist/samples/011_component_gallery/pages/layout.columns2.py
        176 ./dist/samples/011_component_gallery/pages/layout.columns_borders.py
        203 ./dist/samples/011_component_gallery/pages/layout.columns_bottom_widgets.py
        606 ./dist/samples/011_component_gallery/pages/layout.columns_vertical_alignment.py
        284 ./dist/samples/011_component_gallery/pages/layout.container1.py
        191 ./dist/samples/011_component_gallery/pages/layout.container2.py
        169 ./dist/samples/011_component_gallery/pages/layout.container3.py
        118 ./dist/samples/011_component_gallery/pages/layout.container4.py
        152 ./dist/samples/011_component_gallery/pages/layout.container5.py
        229 ./dist/samples/011_component_gallery/pages/layout.empty.py
        586 ./dist/samples/011_component_gallery/pages/layout.empty_placeholder.py
        444 ./dist/samples/011_component_gallery/pages/layout.expander-callback.py
        216 ./dist/samples/011_component_gallery/pages/layout.expander-conditional-outside.py
        237 ./dist/samples/011_component_gallery/pages/layout.expander-lazy-load.py
        452 ./dist/samples/011_component_gallery/pages/layout.expander.py
        484 ./dist/samples/011_component_gallery/pages/layout.popover-callback.py
        234 ./dist/samples/011_component_gallery/pages/layout.popover-conditional-outside.py
        237 ./dist/samples/011_component_gallery/pages/layout.popover-lazy-load.py
        169 ./dist/samples/011_component_gallery/pages/layout.popover.py
        263 ./dist/samples/011_component_gallery/pages/layout.popover2.py
        129 ./dist/samples/011_component_gallery/pages/layout.space_horizontal.py
        220 ./dist/samples/011_component_gallery/pages/layout.space_vertical.py
        658 ./dist/samples/011_component_gallery/pages/layout.tabs-callback.py
        605 ./dist/samples/011_component_gallery/pages/layout.tabs-conditional-outside.py
        499 ./dist/samples/011_component_gallery/pages/layout.tabs-lazy-load.py
        395 ./dist/samples/011_component_gallery/pages/layout.tabs1.py
        268 ./dist/samples/011_component_gallery/pages/layout.tabs2.py
        447 ./dist/samples/011_component_gallery/pages/layout.tabs3.py
        118 ./dist/samples/011_component_gallery/pages/layouts.container4.py
        476 ./dist/samples/011_component_gallery/pages/media.logo.py
        110 ./dist/samples/011_component_gallery/pages/metric.example1.py
        178 ./dist/samples/011_component_gallery/pages/metric.example2.py
        175 ./dist/samples/011_component_gallery/pages/metric.example3.py
        277 ./dist/samples/011_component_gallery/pages/metric.example4.py
        502 ./dist/samples/011_component_gallery/pages/metric.example5.py
        102 ./dist/samples/011_component_gallery/pages/status.exception.py
        303 ./dist/samples/011_component_gallery/pages/status.progress.py
        144 ./dist/samples/011_component_gallery/pages/status.spinner.py
        250 ./dist/samples/011_component_gallery/pages/status.status.py
        355 ./dist/samples/011_component_gallery/pages/status.status1.py
        105 ./dist/samples/011_component_gallery/pages/status.toast.py
        185 ./dist/samples/011_component_gallery/pages/status.toast1.py
        262 ./dist/samples/011_component_gallery/pages/status.toast2.py
     437557 ./dist/samples/011_component_gallery/pages/tailwind_example.js
        221 ./dist/samples/011_component_gallery/pages/text.badge.py
         56 ./dist/samples/011_component_gallery/pages/text.caption.py
        566 ./dist/samples/011_component_gallery/pages/text.code-ascii.py
        114 ./dist/samples/011_component_gallery/pages/text.code.py
        329 ./dist/samples/011_component_gallery/pages/text.header.py
        170 ./dist/samples/011_component_gallery/pages/text.latex.py
        552 ./dist/samples/011_component_gallery/pages/text.markdown.py
        240 ./dist/samples/011_component_gallery/pages/text.markdown1.py
        356 ./dist/samples/011_component_gallery/pages/text.subheader.py
         94 ./dist/samples/011_component_gallery/pages/text.text.py
        444 ./dist/samples/011_component_gallery/pages/text.text_area.py
        104 ./dist/samples/011_component_gallery/pages/text.title.py
         65 ./dist/samples/011_component_gallery/pages/text.write1.py
        155 ./dist/samples/011_component_gallery/pages/text.write2.py
        332 ./dist/samples/011_component_gallery/pages/text.write3.py
        733 ./dist/samples/011_component_gallery/pages/text.write_stream.py
         64 ./dist/samples/011_component_gallery/pages/utilities.help.py
        245 ./dist/samples/011_component_gallery/pages/utilities.help1.py
        123 ./dist/samples/011_component_gallery/pages/utilities.help2.py
        111 ./dist/samples/011_component_gallery/pages/utilities.html.py
        122 ./dist/samples/011_component_gallery/pages/widget.audio_input.py
        210 ./dist/samples/011_component_gallery/pages/widget.button.py
        409 ./dist/samples/011_component_gallery/pages/widget.button_icons.py
        336 ./dist/samples/011_component_gallery/pages/widget.button_shortcut.py
        162 ./dist/samples/011_component_gallery/pages/widget.camera_input.py
         88 ./dist/samples/011_component_gallery/pages/widget.checkbox.py
        115 ./dist/samples/011_component_gallery/pages/widget.color_picker.py
        143 ./dist/samples/011_component_gallery/pages/widget.date_input.py
        341 ./dist/samples/011_component_gallery/pages/widget.date_input1.py
        127 ./dist/samples/011_component_gallery/pages/widget.date_input_empty.py
        190 ./dist/samples/011_component_gallery/pages/widget.datetime_input.py
        150 ./dist/samples/011_component_gallery/pages/widget.datetime_input_empty.py
        917 ./dist/samples/011_component_gallery/pages/widget.download_button.py
        490 ./dist/samples/011_component_gallery/pages/widget.download_button_csv.py
        247 ./dist/samples/011_component_gallery/pages/widget.download_button_deferred.py
        208 ./dist/samples/011_component_gallery/pages/widget.download_button_file.py
        338 ./dist/samples/011_component_gallery/pages/widget.download_button_text.py
        213 ./dist/samples/011_component_gallery/pages/widget.feedback_stars.py
        215 ./dist/samples/011_component_gallery/pages/widget.feedback_thumbs.py
        230 ./dist/samples/011_component_gallery/pages/widget.file_uploader.py
        202 ./dist/samples/011_component_gallery/pages/widget.file_uploader_directory.py
         88 ./dist/samples/011_component_gallery/pages/widget.link_button.py
        264 ./dist/samples/011_component_gallery/pages/widget.menu_button.py
        196 ./dist/samples/011_component_gallery/pages/widget.multiselect.py
        235 ./dist/samples/011_component_gallery/pages/widget.multiselect_accept_new_options.py
        111 ./dist/samples/011_component_gallery/pages/widget.number_input.py
        155 ./dist/samples/011_component_gallery/pages/widget.number_input_empty.py
        203 ./dist/samples/011_component_gallery/pages/widget.pills_multi.py
        409 ./dist/samples/011_component_gallery/pages/widget.pills_single.py
        351 ./dist/samples/011_component_gallery/pages/widget.radio.py
        693 ./dist/samples/011_component_gallery/pages/widget.radio1.py
        205 ./dist/samples/011_component_gallery/pages/widget.radio_empty.py
        215 ./dist/samples/011_component_gallery/pages/widget.segmented_control_multi.py
        421 ./dist/samples/011_component_gallery/pages/widget.segmented_control_single.py
        478 ./dist/samples/011_component_gallery/pages/widget.select_slider.py
        167 ./dist/samples/011_component_gallery/pages/widget.selectbox.py
        685 ./dist/samples/011_component_gallery/pages/widget.selectbox1.py
        272 ./dist/samples/011_component_gallery/pages/widget.selectbox_accept_new_options.py
        232 ./dist/samples/011_component_gallery/pages/widget.selectbox_empty.py
        657 ./dist/samples/011_component_gallery/pages/widget.slider.py
        503 ./dist/samples/011_component_gallery/pages/widget.text_area.py
        124 ./dist/samples/011_component_gallery/pages/widget.text_input.py
        884 ./dist/samples/011_component_gallery/pages/widget.text_input1.py
        132 ./dist/samples/011_component_gallery/pages/widget.time_input.py
        122 ./dist/samples/011_component_gallery/pages/widget.time_input_empty.py
        102 ./dist/samples/011_component_gallery/pages/widget.toggle.py
        144 ./dist/samples/011_component_gallery/pages/widgets.audio_input_high_rate.py
        307 ./dist/samples/011_component_gallery/pages/widgets.change_parameters.py
        558 ./dist/samples/011_component_gallery/pages/widgets.change_parameters_best.py
        468 ./dist/samples/011_component_gallery/pages/widgets.form_callbacks.py
        259 ./dist/samples/011_component_gallery/requirements.txt
         71 ./dist/samples/011_component_gallery/stlite.json
       1901 ./dist/samples/011_component_gallery/streamlit_app.py
      36065 ./dist/samples/012_hello/agri.csv.gz
       7239 ./dist/samples/012_hello/hello.py
         45 ./dist/samples/012_hello/requirements.txt
         51 ./dist/samples/012_hello/stlite.json
       1637 ./dist/samples/012_mpa-hello/0_👋_Hello.py
      36065 ./dist/samples/012_mpa-hello/agri.csv.gz
       1691 ./dist/samples/012_mpa-hello/pages/1_📈_Plotting_Demo.py
       3775 ./dist/samples/012_mpa-hello/pages/2_🌍_Mapping_Demo.py
       2522 ./dist/samples/012_mpa-hello/pages/3_📊_DataFrame_Demo.py
       1674 ./dist/samples/012_mpa-hello/pages/4_📷_Webcam_Demo.py
         59 ./dist/samples/012_mpa-hello/requirements.txt
         68 ./dist/samples/012_mpa-hello/stlite.json
        957 ./dist/samples/012_mpa-hello/utils.py
        295 ./dist/samples/012_navigation.multipage_widgets/app.py
         60 ./dist/samples/012_navigation.multipage_widgets/stlite.json
        495 ./dist/samples/012_tutorials_custom-navigation/README.md
        649 ./dist/samples/012_tutorials_custom-navigation/app.py
       1172 ./dist/samples/012_tutorials_custom-navigation/menu.py
        504 ./dist/samples/012_tutorials_custom-navigation/pages/admin.py
        497 ./dist/samples/012_tutorials_custom-navigation/pages/super-admin.py
        341 ./dist/samples/012_tutorials_custom-navigation/pages/user.py
         18 ./dist/samples/012_tutorials_custom-navigation/requirements.txt
         71 ./dist/samples/012_tutorials_custom-navigation/stlite.json
        496 ./dist/samples/012_tutorials_dynamic-navigation/README.md
        104 ./dist/samples/012_tutorials_dynamic-navigation/admin/admin_1.py
        104 ./dist/samples/012_tutorials_dynamic-navigation/admin/admin_2.py
      39446 ./dist/samples/012_tutorials_dynamic-navigation/images/horizontal_blue.png
       4241 ./dist/samples/012_tutorials_dynamic-navigation/images/icon_blue.png
        106 ./dist/samples/012_tutorials_dynamic-navigation/request/request_1.py
        106 ./dist/samples/012_tutorials_dynamic-navigation/request/request_2.py
        106 ./dist/samples/012_tutorials_dynamic-navigation/respond/respond_1.py
        106 ./dist/samples/012_tutorials_dynamic-navigation/respond/respond_2.py
        105 ./dist/samples/012_tutorials_dynamic-navigation/settings.py
         82 ./dist/samples/012_tutorials_dynamic-navigation/stlite.json
       1940 ./dist/samples/012_tutorials_dynamic-navigation/streamlit_app.py
        529 ./dist/samples/012_tutorials_fragments/README.md
          0 ./dist/samples/012_tutorials_fragments/app.py
       1294 ./dist/samples/012_tutorials_fragments/pages/tutorial-fragment-multiple-container.py
       2897 ./dist/samples/012_tutorials_fragments/pages/tutorial-fragment-rerun.py
       1748 ./dist/samples/012_tutorials_fragments/pages/tutorial-fragment-streaming.py
         63 ./dist/samples/012_tutorials_fragments/stlite.json
        489 ./dist/samples/012_utilities.switch_page/README.md
        204 ./dist/samples/012_utilities.switch_page/pages/page_1.py
        204 ./dist/samples/012_utilities.switch_page/pages/page_2.py
         18 ./dist/samples/012_utilities.switch_page/requirements.txt
         68 ./dist/samples/012_utilities.switch_page/stlite.json
        204 ./dist/samples/012_utilities.switch_page/your_app.py
        484 ./dist/samples/012_widget.page_link/README.md
        289 ./dist/samples/012_widget.page_link/pages/page_1.py
        289 ./dist/samples/012_widget.page_link/pages/page_2.py
         18 ./dist/samples/012_widget.page_link/requirements.txt
         65 ./dist/samples/012_widget.page_link/stlite.json
        289 ./dist/samples/012_widget.page_link/your_app.py
        332 ./dist/samples/020_custom_components/home.py
        649 ./dist/samples/020_custom_components/pages/aggrid.py
       1086 ./dist/samples/020_custom_components/pages/agraph.py
       1260 ./dist/samples/020_custom_components/pages/cropper.py
        344 ./dist/samples/020_custom_components/pages/d3_demo.py
       1740 ./dist/samples/020_custom_components/pages/drawable_canvas.py
        251 ./dist/samples/020_custom_components/pages/embedcode.py
       5270 ./dist/samples/020_custom_components/pages/folium.py
       1022 ./dist/samples/020_custom_components/pages/lottie.py
        285 ./dist/samples/020_custom_components/pages/player.py
        343 ./dist/samples/020_custom_components/pages/stmol.py
        187 ./dist/samples/020_custom_components/requirements.txt
         62 ./dist/samples/020_custom_components/stlite.json
       4517 ./dist/samples/021_opencv/data/logo.png
         14 ./dist/samples/021_opencv/requirements.txt
         60 ./dist/samples/021_opencv/stlite.json
       1092 ./dist/samples/021_opencv/streamlit_app.py
         30 ./dist/samples/022_realtime_image_processing/requirements.txt
         79 ./dist/samples/022_realtime_image_processing/stlite.json
       2568 ./dist/samples/022_realtime_image_processing/streamlit_app.py
        724 ./dist/samples/030_streamlit_e2e_tests/pages/empty_labels.py
        733 ./dist/samples/030_streamlit_e2e_tests/pages/iframe_resizer.py
        876 ./dist/samples/030_streamlit_e2e_tests/pages/redisplayed_widgets.py
       1225 ./dist/samples/030_streamlit_e2e_tests/pages/session_state_frontend_sync.py
       1400 ./dist/samples/030_streamlit_e2e_tests/pages/st_columns.py
       1140 ./dist/samples/030_streamlit_e2e_tests/pages/st_disabled.py
        616 ./dist/samples/030_streamlit_e2e_tests/pages/st_disconnect.py
       1681 ./dist/samples/030_streamlit_e2e_tests/pages/st_download_button.py
       2475 ./dist/samples/030_streamlit_e2e_tests/pages/st_exception.py
        747 ./dist/samples/030_streamlit_e2e_tests/pages/st_experimental_get_query_params.py
        856 ./dist/samples/030_streamlit_e2e_tests/pages/st_experimental_set_query_params.py
       2405 ./dist/samples/030_streamlit_e2e_tests/pages/st_form_column_association.py
       3329 ./dist/samples/030_streamlit_e2e_tests/pages/st_image.py
       2160 ./dist/samples/030_streamlit_e2e_tests/pages/st_image_replay.py
        810 ./dist/samples/030_streamlit_e2e_tests/pages/st_image_replay_old_image.py
       1705 ./dist/samples/030_streamlit_e2e_tests/pages/st_image_svg_sizing.py
        762 ./dist/samples/030_streamlit_e2e_tests/pages/st_json.py
       1484 ./dist/samples/030_streamlit_e2e_tests/pages/st_map.py
        969 ./dist/samples/030_streamlit_e2e_tests/pages/st_media_replay.py
       2141 ./dist/samples/030_streamlit_e2e_tests/pages/st_pydeck_chart.py
       1524 ./dist/samples/030_streamlit_e2e_tests/pages/st_pydeck_geo_layers.py
       1263 ./dist/samples/030_streamlit_e2e_tests/pages/st_reuse_label.py
       2551 ./dist/samples/030_streamlit_e2e_tests/pages/st_select_slider.py
       1592 ./dist/samples/030_streamlit_e2e_tests/pages/st_session_state.py
       1592 ./dist/samples/030_streamlit_e2e_tests/pages/st_set_page_config.py
       1087 ./dist/samples/030_streamlit_e2e_tests/pages/st_sidebar.py
       2458 ./dist/samples/030_streamlit_e2e_tests/pages/st_slider.py
       1149 ./dist/samples/030_streamlit_e2e_tests/pages/st_tabs.py
       2732 ./dist/samples/030_streamlit_e2e_tests/pages/st_tooltips.py
       1108 ./dist/samples/030_streamlit_e2e_tests/pages/websocket_reconnects.py
        730 ./dist/samples/030_streamlit_e2e_tests/pages/widget_state_heavy_usage.py
         27 ./dist/samples/030_streamlit_e2e_tests/requirements.txt
         75 ./dist/samples/030_streamlit_e2e_tests/stlite.json
        117 ./dist/samples/030_streamlit_e2e_tests/streamlit_app.py

whitphx commented Aug 7, 2026

Copy link
Copy Markdown
Owner Author

Correction, and the real blocker

First, retracting my earlier comment. It claimed no workflow could ever run on this branch because the push and PR were authored with a GitHub App installation token. That was wrong. The cause was the GitHub Actions outage. An empty commit (9e65042) pushed with the same token created all four workflow runs immediately. Please disregard that comment — the "can't start CI from here" conclusion and the reasoning behind it were both incorrect.

CI has now run properly, and it found real problems.

Fixed in ce7ae35

Check Cause Fix
test-kernel .python-version was 3.14.0; pyodide-build 0.37.0 ships Python 3.14.2, so the Makefile's version-match guard aborted before the Streamlit wheel build pinned 3.14.2
test-stlite-lib, test-cli re-resolving uv.lock for Python 3.14 floated ruff 0.15.90.16.1 under the >=0.6.9 constraint, and the new release flags ~30 pre-existing findings across stlite-lib and the CLI restored the 0.15.9 lock entry, keeping that churn out of this PR
spellcheck JSPI not in the dictionary added to cspell.json

All three are green, along with test-cloudflare, test-cloudflare-windows, test-desktop (both runners), build-cli, build-sharing-editor, build-docs, changeset-check and dependency-review.

Remaining blocker: fastparquet is gone from Pyodide 314

test-kernel still fails, and this one is substantive rather than mechanical:

ValueError: Can't find a pure Python 3 wheel for: 'thriftpy2==0.6.0', 'numba'

It fires while installing the two local wheels with an empty user requirement list, so it is our own dependency graph, not an app's. The chain is streamlit (fork) → fastparquetnumba, thriftpy2. The fastparquet dependency is the stlite-specific one added for #509, backing _pyarrow_shim.py's Parquet path.

Comparing the two pyodide-lock.json files in the tree:

Package Pyodide 0.29.4 (@stlite/cloudflare) Pyodide 314.0.3
fastparquet 2024.11.0 not bundled
cramjam 2.10.0rc1 not bundled
pyarrow 22.0.0 22.0.0

Pyodide 314 dropped fastparquet and cramjam from its package set, so micropip falls back to PyPI, where fastparquet's dependencies have no pure-Python wheels. 13 worker-runtime.test.ts failures trace directly to this. The five kernel.test.ts / kernel.abort.test.ts 60s timeouts don't log the install error themselves, so I've assumed but not proven they're the same boot failure surfacing as a hang.

Worth noting for whichever direction you pick: pyarrow 22.0.0 is bundled in both lines, so the shim is no longer working around an unavailable package.

I'm not picking a direction here, since the options differ a lot in scope and consequence — using the bundled pyarrow and dropping the shim would diverge the browser runtime from @stlite/cloudflare (still on 0.29.x, still shimming) and change the app download size, while keeping fastparquet means building cramjam (a Rust extension) for Emscripten/cp314 ourselves. Happy to take either on, or to dig into the size and upstream-intent questions first.

Everything above was reproduced from CI logs and the committed lockfiles. As previously noted, egress to pyodide.github.io and pypi.flatt.tech is blocked in the authoring environment, so uv lock could not be re-run — the ruff lock entry was restored by hand from main's exact URLs and hashes.


Generated by Claude Code

whitphx commented Aug 7, 2026

Copy link
Copy Markdown
Owner Author

The fastparquet drop is an upstream regression, not a removal

Follow-up to the blocker above — I traced why Pyodide 314 stopped shipping it. pyodide-recipes still carries both recipes on main, but packages/cramjam/meta.yaml is switched off:

package:
  name: cramjam
  version: 2.11.0
  _disabled: true  # TypeError: exceptions must derive from BaseException

fastparquet's recipe is untouched and still lists cramjam under requirements.run, so it drops out with it. Neither appears in pyodide-lock.json for 314.0.3 or 314.0.4. The 0.29.4 line shipped cramjam 2.10.0rc1, so the breakage arrived with the 2.11.0 bump rather than with the Python 3.14 move.

That reframes the options I listed:

  • Nothing about fastparquet is deliberately deprecated. The Parquet path isn't being pushed off Pyodide; one dependency's recipe is red. It plausibly comes back on its own.
  • Dropping _pyarrow_shim.py for the bundled pyarrow is still available — pyarrow 22.0.0 is in both lines — but it would be a permanent architectural change made to route around a temporary upstream failure, and it would un-fork a lot of dataframe_util.py in one go.
  • Building the wheels ourselves is narrower than I implied: the blocker is one Rust package at one version, and 2.10.0rc1 built fine. Still means Rust + Emscripten in CI and somewhere to host the artifacts.
  • Parking 314 is now the cheapest option, since waiting has a concrete thing to wait for. I haven't confirmed whether 0.29.4 alone carries the JSPI fix for @stlite/browser multipage apps crash with pyodide error on PC #1493 that motivated this PR — if it doesn't, parking means the upgrade's whole purpose waits too.

I'd lean toward parking unless #1493 is urgent, but it's your call and I'll take on whichever you prefer.

I could not read the recipe's commit history — pyodide/pyodide-recipes isn't in this session's GitHub scope, so the version timeline above is inferred from the two committed lockfiles plus the current recipe, not from the upstream log. Worth a glance at the actual commit before acting on it.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants