jl-forge
Package version: 0.2.0
Build steps for JupyterLite sites — turn a Python project and its notebooks into xeus-python and Pyodide sites, ready for GitHub Pages.
Quick Start
Try the demo online (no installation required):
Basic usage, from a project's own build script:
jl-forge clean workspace # rm -rf, refused outside the cwd
jl-forge notebooks workspace/content --strip # clear code cell outputs
# xeus-python kernel (needs micromamba)
jl-forge xeus-env --micromamba --root-prefix workspace/xeus --pyproject pyproject.toml
jupyter lite build --contents workspace/content \
--XeusAddon.prefix=workspace/xeus/envs/xeus-kernels \
--XeusAddon.mounts="$(jl-forge xeus-mount src/mypkg --prefix workspace/xeus/envs/xeus-kernels)"
# Pyodide kernel: install the project wheel via piplite
jl-forge pyodide-install --pyproject pyproject.toml --package-name mypkg --wheel-dir workspace/content
jl-forge notebooks workspace/content --pyodide-install
# after jupyter lite build: serve command and notebook URLs
jl-forge urls workspace/public
Features
- Both kernels: xeus-python (conda prefix, source mount) and Pyodide (wheel + piplite
install.py) - One dependency list: kernel packages come from
[project.dependencies]and extras inpyproject.toml - Correct dependency handling: names normalized, duplicate constraints intersected, markers evaluated for emscripten
- Notebook preparation: strip outputs of code cells only; idempotent install line for Pyodide
- No hard-coded Python version: xeus mount paths follow the Python installed in the prefix
- Voici dashboards: demo and docs for both kernels;
jl-forge urlslists the dashboard pages - Safe workspace reset:
cleanrefuses directories outside the project or that look like a project
What is jl-forge?
jl-forge is a small library and CLI extracted from the JupyterLite builds of several projects. It provides:
- The steps around
jupyter lite buildthat each project used to script by hand - A Python API (
jl_forge.dependencies,notebooks,xeus,pyodide) behind the CLI
jl-forge is not a replacement for JupyterLite's build system. Your build script still calls jupyter lite build, chooses the apps, and handles application-specific assets.
Best suited for: projects publishing a Python package with notebooks as a static JupyterLite site.
Note: jl-forge runs on the build machine (macOS or Linux). It installs nothing in the browser itself; see docs/RUNTIME.md.
Feedback and Contributions
jl-forge is an early-stage project. Feedback is particularly welcome on:
- Build steps worth sharing that are still scripted per project.
- JupyterLite, jupyterlite-xeus or Pyodide kernel changes that break the build.
- Support for other apps (Voici, Notebook) and hosting targets.
Please share suggestions, bug reports, and use cases through GitHub Issues.
AI-Assisted Development
Parts of this project were developed with the assistance of generative AI tools. The maintainer is responsible for the architecture, review, testing, and published code.
AI-assisted contributions are welcome, provided contributors understand, review, and test their changes and take responsibility for their submissions.
Documentation
- Getting Started - Development setup, testing, demo build and release
- Usage Guide - CLI reference, Python API and a complete build script
- Apps, Kernels & Version Constraints - Lab, Notebook and Voici on xeus-python and Pyodide: what works, pinned versions and why
- Runtime & Integration - What runs where, and integration boundaries
- Glossary - Key concepts and terminology
Interactive Notebooks
The demo builds one notebook into both sites; it reports which kernel runs it.
- xeus-python demo —
jl_forge_demomounted from source into the conda prefix. - Pyodide demo —
jl_forge_demoinstalled from its wheel by the generatedinstall.py. - Voici dashboards — the same notebook as an app: xeus-python, Pyodide.
How It Works
┌───────────────────────────────────────────┐
│ pyproject.toml notebooks/*.ipynb │
└──────┬──────────────────────────┬─────────┘
│ jl-forge │ jl-forge notebooks
┌──────▼────────────────┐ ┌───────▼──────────────────┐
│ xeus-env / xeus-mount │ │ pyodide-install │
│ conda prefix (wasm) │ │ wheel + install.py │
└──────┬────────────────┘ └───────┬──────────────────┘
│ jupyter lite build │ jupyter lite build
┌──────▼────────────────┐ ┌───────▼──────────────────┐
│ public/xeus/ │ │ public/pyodide/ │
└───────────────────────┘ └──────────────────────────┘
static site → GitHub Pages
License
Apache License 2.0. See LICENSE and NOTICE for details.
Citation
@software{jlforge2026,
author = {Decitre, Emmanuel},
title = {jl-forge: Build tooling for JupyterLite sites},
year = {2026},
url = {https://github.com/decitre/jl-forge}
}
Acknowledgements
jl-forge builds on several open-source projects:
- JupyterLite — the browser-based Jupyter environment.
- xeus-python, jupyterlite-xeus and emscripten-forge — Python kernels and packages for the browser.
- Pyodide and jupyterlite-pyodide-kernel.
Metadata
Release files for jl-forge 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| jl_forge-0.2.0.tar.gz | 14.9 kB | With provenance | Details for jl_forge-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| jl_forge-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for jl_forge-0.2.0-py3-none-any.whl |
Total release size: 30.2 kB
Release files / jl_forge-0.2.0.tar.gz
| Download URL | jl_forge-0.2.0.tar.gz |
|---|---|
| Size | 14.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1fc20c74ae117e3b99669f58dcce6dd79e632ef9ba13ec72c4c10e0289071a13
|
|
BLAKE2b-256 checksum How to use checksums |
8dbf35a7a6106d33ce19a49360e1d09d548e918c91c98afa8e1e507372057f4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logRelease files / jl_forge-0.2.0-py3-none-any.whl
| Download URL | jl_forge-0.2.0-py3-none-any.whl |
|---|---|
| Size | 15.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
54f4cd0ef99575d5330ce08626fa1aa9f91deecd1c57ea632885575cc450d14b
|
|
BLAKE2b-256 checksum How to use checksums |
313317d872826a2165f117dec15c88802541f14e064e7eb10076ca091b6e11cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logSecurity for jl-forge 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for jl_forge-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 31, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.