Skip to main content

Tests py3.13 coverage Build demo site

xeus-badge pyodide-badge

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 in pyproject.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 urls lists the dashboard pages
  • Safe workspace reset: clean refuses 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 build that 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

Interactive Notebooks

The demo builds one notebook into both sites; it reports which kernel runs it.

  • xeus-python demo — jl_forge_demo mounted from source into the conda prefix.
  • Pyodide demo — jl_forge_demo installed from its wheel by the generated install.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:


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)

Source distribution for jl-forge 0.2.0
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)

Table of built distributions (wheels) for jl-forge 0.2.0
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page