feat(deps): upgrade the browser runtime to Pyodide 314.0.3 - #2094
feat(deps): upgrade the browser runtime to Pyodide 314.0.3#2094whitphx wants to merge 4 commits into
Conversation
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
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
🦋 Changeset detectedLatest commit: ce7ae35 The changes in this PR will be included in the next version bump. This PR includes changesets to release 9 packages
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
|
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 A push or a PR action from a human account will start them. 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 Generated by Claude Code |
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GexQcCRF5yQnsADZXTnFTK
Dependency ReviewThe following issues were found:
License Issuesuv.lock
OpenSSF ScorecardScorecard details
Scanned Files
|
CI Report for 9e65042Package StatsDiffs are from stlite sharing editor
File TreeFile 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
CI Report for ce7ae35Package StatsDiffs are from @stlite/cli
File TreeFile 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.jsonstlite sharing editor
File TreeFile 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 |
Correction, and the real blockerFirst, 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 ( CI has now run properly, and it found real problems. Fixed in
|
| 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.9 → 0.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) → fastparquet → numba, 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
The
|
@stlite/browserand 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:
protobuf>=7.34.1,<8micropip pin in the browser worker is dropped and the bundled wheel is used again. The@stlite/cloudflareside keeps its pin — that runtime still gets protobuf 6.31.1.pyodide.asm.jstopyodide.asm.mjs, so@stlite/app-packager's runtime-file list andpackages/desktop/pyodide-files.txtare updated; both copy paths would otherwise fail on a missing file.@stlite/cloudflarestays 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-pyexposes 3.14 only behind the experimentalpython_workers_20260610flag. Because@stlite/app-packageris a symlinked workspace, declaringpyodidea peer dependency does not change what it resolves, so its vendoring entry points take an optionalpyodideModuleinstead and@stlite/cloudflarepasses its own.uv.lockre-resolved broadly for Python 3.14 —rpds-pyin particular had no cp314 wheel at the pinned version. It was resolved against PyPI and the URLs rewritten to the committedpypi.flatt.techconvention (identical hash paths and sha256s); worth re-runninguv lockagainst the mirror directly if you'd rather not take that on faith.Not verified in the authoring environment: egress policy there blocked
pyodide.github.ioandpypi.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 andtsc -bover common → app-packager → cloudflare pass. The pandas 2 → 3 move is the main thing E2E needs to speak to; Streamlit 1.57.0 declarespandas>=1.4.0,<4.Generated by Claude Code