Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
641d268
ENH: Add JupyterLite sphinx integration and CI/CD infrastructure
natinew77-creator Jun 26, 2026
e37acb3
FIX: Patch MNE internals for Pyodide/emscripten compatibility
natinew77-creator Jun 26, 2026
9e6e288
FIX: Guard interactive Qt plots and unavailable datasets for the browser
natinew77-creator Jun 26, 2026
c1afed2
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 26, 2026
d2d22b0
FIX: Guard browser-incompatible code in all intro tutorials for Jupyt…
natinew77-creator Jun 26, 2026
c4de862
Merge remote-tracking branch 'upstream/main' into jupyterlite-gh-actions
natinew77-creator Jun 26, 2026
724f80b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 26, 2026
9566839
STY: shorten lzma comment in conf.py to fix E501
natinew77-creator Jun 26, 2026
f666208
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 26, 2026
9f3272e
FIX: pre-create MNE config file to suppress setup warnings in Jupyter…
natinew77-creator Jun 26, 2026
825740e
download sample data in conf.py if missing so CI artifacts work
natinew77-creator Jun 27, 2026
60fcc7f
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 27, 2026
4d0586d
Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks"
natinew77-creator Jun 27, 2026
f7a9aa9
Revert "download sample data in conf.py if missing so CI artifacts work"
natinew77-creator Jun 27, 2026
41d26c4
DBG: log JupyterLite data copy steps in conf.py to diagnose CI artifa…
natinew77-creator Jun 27, 2026
43dca98
DBG: print drive/mne_data filesystem state in JupyterLite setup cell
natinew77-creator Jun 28, 2026
2aebf89
STY: fix E501 in JupyterLite setup cell diagnostics
natinew77-creator Jun 28, 2026
714de06
FIX: patch mne.datasets.sample.data_path in JupyterLite to bypass poo…
natinew77-creator Jun 28, 2026
06ad00c
FIX: fetch MNE sample data via HTTP in JupyterLite setup cell
natinew77-creator Jun 28, 2026
149b267
FIX: use js.location instead of js.window for worker-based Pyodide
natinew77-creator Jun 28, 2026
ccf2523
FIX: return Path from patched data_path so tutorials can use / operator
natinew77-creator Jun 28, 2026
c04d8f3
DBG: check HTTP status and detect HTML responses when fetching data
natinew77-creator Jun 28, 2026
553011e
FIX: serve JupyterLite sample data via html_extra_path so CI artifact…
natinew77-creator Jun 28, 2026
41e7c14
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 28, 2026
8dd7507
re-trigger CI
natinew77-creator Jun 28, 2026
64cab44
FIX: silence FigureCanvasAgg warning and clean up JupyterLite setup c…
natinew77-creator Jun 28, 2026
ae61f78
FIX: no-op Figure.show to silence FigureCanvasAgg warning at its source
natinew77-creator Jun 28, 2026
7e17322
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 28, 2026
059c147
FIX: fetch sample_audvis_raw.fif in JupyterLite so unfiltered-raw tut…
natinew77-creator Jun 28, 2026
6c6c935
TEST: un-guard raw.plot() in 15_inplace to check if it renders in Pyo…
natinew77-creator Jun 28, 2026
f448617
FIX: install dev MNE wheel via piplite, render reports inline, un-gua…
natinew77-creator Jun 29, 2026
5b6033e
FIX: use mkdtemp instead of deprecated mktemp in report preview
natinew77-creator Jun 29, 2026
6844236
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 29, 2026
58eefe2
FIX: bundle dev MNE wheel via doc/pypi so JupyterLite runs the dev ve…
natinew77-creator Jun 29, 2026
e33a2c5
FIX: avoid deprecated Pyodide as_object_map() in threadpoolctl during…
natinew77-creator Jun 29, 2026
0e07c6e
FIX: install pandas for to_data_frame tutorials; note threadpoolctl p…
natinew77-creator Jun 29, 2026
54d8451
FIX: bundle ecg-proj and filt eve files for epochs tutorials 20 and 50
natinew77-creator Jun 29, 2026
55107a3
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 29, 2026
55e140d
ENH: bundle kiloword and erp_core data so epochs tutorials 30 and 40 …
natinew77-creator Jun 29, 2026
2fd972f
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 29, 2026
8ed2c81
FIX: no-op MNE ProgressBar thread so permutation cluster tests run in…
natinew77-creator Jun 29, 2026
64338b6
FIX: disable tqdm monitor thread to suppress TqdmMonitorWarning in Ju…
natinew77-creator Jun 30, 2026
732c615
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 30, 2026
034d722
ENH: bundle mtrf and eegbci data so decoding examples run in JupyterLite
natinew77-creator Jun 30, 2026
6d75c15
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 30, 2026
e0755e0
DOC: explain JupyterLite sys.platform guards across tutorials and exa…
natinew77-creator Jun 30, 2026
873a96c
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jun 30, 2026
0ec3af3
ENH: fix tutorials/simulation 70_point_spread and 80_dics for Jupyter…
natinew77-creator Jun 30, 2026
4c78263
ENH: bundle nibabel + label/white-surface data for tutorials/simulati…
natinew77-creator Jul 1, 2026
ecc2de1
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jul 1, 2026
e2bfbfc
ENH: experimental 3D via pyvista-js for stc.plot in JupyterLite
natinew77-creator Jul 1, 2026
c6711c4
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jul 1, 2026
6393186
FIX: color the pyvista-js brain render (gray base + activation overlays)
natinew77-creator Jul 1, 2026
05ab6a8
Merge remote-tracking branch 'origin/jupyterlite-gh-actions' into jup…
natinew77-creator Jul 1, 2026
d2faa25
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jul 2, 2026
ee50ec9
ENH: match the pyvista-js brain render to MNE's real Brain look
natinew77-creator Jul 2, 2026
4d2f949
ENH: render simulation 70_point_spread and 80_dics 3D in JupyterLite
natinew77-creator Jul 2, 2026
3b98457
FIX: keep brain background gray for sparse point-source stc plots
natinew77-creator Jul 2, 2026
3ad4052
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jul 2, 2026
5034ab3
FIX: render single-vertex stc sources as visible blobs
natinew77-creator Jul 2, 2026
66d0f6b
Merge remote-tracking branch 'origin/jupyterlite-gh-actions' into jup…
natinew77-creator Jul 2, 2026
e397336
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jul 3, 2026
803c480
MAINT: address review - restore version line and extension order
natinew77-creator Jul 3, 2026
4b070a7
Merge branch 'main' into jupyterlite-gh-actions
natinew77-creator Jul 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,21 @@ jobs:
cp junit-results.xml doc/_build/test-results/test-doc/junit.xml;
cp coverage.xml doc/_build/test-results/test-doc/coverage.xml;
fi;
# Ensure the datasets the JupyterLite notebooks need are on disk so
# conf.py can copy the required subset for the build. circleci_download.sh
# only fetches them when the changed files reference them, so a cache miss
# on a PR that touches only doc/conf.py would leave them absent and the
# notebooks would fail at runtime with FileNotFoundError. kiloword and
# erp_core back the Epochs metadata tutorials (30 & 40); mtrf and eegbci
# back the decoding examples (receptive_field_mtrf, decoding_csp_*).
- run:
name: Ensure MNE data for JupyterLite
command: |
python -c "import mne; mne.datasets.sample.data_path(update_path=True)"
python -c "import mne; mne.datasets.kiloword.data_path(update_path=True)"
python -c "import mne; mne.datasets.erp_core.data_path(update_path=True)"
python -c "import mne; mne.datasets.mtrf.data_path(update_path=True)"
python -c "import mne; mne.datasets.eegbci.load_data(1, [6, 10, 14], update_path=True)"
# Build docs
- run:
name: make html
Expand Down
46 changes: 46 additions & 0 deletions .github/workflows/jupyterlite.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Build JupyterLite

on: # yamllint disable-line rule:truthy
push:
branches:
- jupyterlite-gh-actions

permissions:
contents: read

jobs:
build:
name: Build JupyterLite Site
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install JupyterLite & Build Tools
run: |
python -m pip install --upgrade pip
pip install jupyterlite-core jupyterlite-pyodide-kernel build jupyter-server

- name: Build MNE-Python Wheel
run: |
python -m build --wheel
mkdir -p lite-wheels
cp dist/*.whl lite-wheels/

- name: Build JupyterLite Site
# We pass the local wheel to JupyterLite so the browser environment uses the exact code from this branch!
run: |
jupyter lite build --contents examples/ --output-dir dist_lite/ --piplite-wheel lite-wheels/*.whl

- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: jupyterlite-build
path: dist_lite/
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ mne/viz/_brain/tests/.ipynb_checkpoints

dist/
doc/_build/
doc/pypi/
doc/generated/
doc/auto_examples/
doc/auto_tutorials/
Expand Down Expand Up @@ -103,3 +104,5 @@ venv/
.hypothesis/
.ruff_cache/
.ipynb_checkpoints/
jupyterlite_contents/auto_tutorials
jupyterlite_contents/mne_data
1 change: 1 addition & 0 deletions doc/changes/dev/13925.newfeature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added a JupyterLite GitHub Actions workflow to automatically build a Wasm-compatible interactive documentation site by Natneal Belete.
Loading
Loading