Skip to main content

Fortitudo

Fortitudo is a browser-only C/C++ compiler explorer for JupyterLab, JupyterLite, and a standalone Lumino application. All three hosts use the same workbench and compiler worker. No kernel or remote compiler is needed.

Edit a function, choose a language, target, and optimization level, then select Compile or press Ctrl/Cmd+Enter. Inspect assembly and compiler messages; select a diagnostic to jump to its source location. Compilation runs in a worker, so editing remains available. Cancel terminates that worker; the next compile loads a fresh one.

The defaults are C++23, WebAssembly, and O2. C23 and O0–O3 are available. The packaged LLVM runtime reports WebAssembly, x86-64, and AArch64 backends. Native targets produce assembly with Clang built-in headers only; the packaged C/C++ system headers are for WebAssembly.

Source, options, and docked pane layout are saved by the host. Jupyter also keeps a browser copy scoped to the current workspace, protecting recent edits while its workspace writes are deferred. Reopening restores editing state without compiling. Output is explicitly marked out of date when source or options change. Invalid saved state opens a usable default session with feedback.

Running locally

The prebuilt extension requires JupyterLab 4.6 or later. Once the release is published, install it with:

python -m pip install fortitudo

Restart JupyterLab and select Open Fortitudo in the launcher or command palette. The wheel includes the compiler; installing it does not require Node or a compiler build. The npm package also includes the runtime and exports the shared workbench for applications that supply their own Lumino host.

See CONTRIBUTING.md for the complete Pixi setup and build sequence. The compiler is a separate heavyweight build; frontend builds require its generated assets and verify their hashes.

For an already built checkout:

pixi run --as-is jupyter lab
pixi run --as-is jlpm serve
pixi run --as-is jlpm serve:standalone

In JupyterLab or JupyterLite, select Open Fortitudo in the launcher or command palette. The Lite testbed is served on port 8080; the standalone preview prints its local address. These commands run in separate terminals.

Built standalone and Lite directories can be served below a URL prefix. Keep each site's compiler assets at their generated relative location. Serve .js as JavaScript, .wasm as application/wasm, and .data as application/octet-stream. Compilation works offline after initialization; offline page reload is a separate feature.

Architecture

  • Pure model, request construction, and diagnostic parsing.
  • One instance-owned store outside React.
  • Lumino commands orchestrate semantic changes and compiler effects.
  • Functional React views, with explicit store and CodeMirror bridges.
  • A shared Lumino workbench owns layout, workers, and view lifecycles.
  • Thin Jupyter and standalone adapters supply shell and persistence.

The shared package entry exports these contracts. Only src/jupyter/ imports JupyterLab packages; the plugin retains fortitudo:plugin.

Runtime and limits

The runtime is reproduced from WasmBolt with LLVM 23.1.0 and Emscripten 4.0.9. runtime/README.md records its origin, pins, licenses, and build details. Generated compiler/manifest.json records asset sizes and SHA-256 hashes. Browser test attachments record timings and Wasm memory observations.

The current compiler is large and reserves 256 MiB of initial Wasm memory, with memory growth enabled and a 32 MiB stack. Browser memory limits still apply. Cancellation releases the worker; a later compile must initialize another. Initialization and runtime failures offer a retry path. Ordinary compiler errors retain diagnostics and raw output.

This implementation produces assembly. IR/AST views, MLIR tools, graphs, execution, a terminal, sharing, arbitrary flags, automatic compilation, and automatic timeouts are deferred. The optional upstream MLIR driver remains packaged to preserve the runtime build, but is not downloaded eagerly.

License

Fortitudo is BSD-3-Clause licensed. The compiler incorporates WasmBolt and other separately licensed software. Required notices are included in runtime/licenses/ and copied into each distribution.

Metadata

Release files for fortitudo 0.1.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 fortitudo 0.1.0
File Size Uploaded
fortitudo-0.1.0.tar.gz 62.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for fortitudo 0.1.0
File Interpreter ABI Platform
fortitudo-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 125.5 MB

Release files / fortitudo-0.1.0.tar.gz

Download URL fortitudo-0.1.0.tar.gz
Size 62.7 MB
Tags Source
SHA-256 checksum
How to use checksums
9554eef2cd5c92ffcedc8e3b93550a5c26ef75e4e02167be5cb38a7c0155de56
BLAKE2b-256 checksum
How to use checksums
e4de162a17b28be7f52668c52e059a17959a817b058a608879356e94a2cea303
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 14, 2026.

Transparency log

Release files / fortitudo-0.1.0-py3-none-any.whl

Download URL fortitudo-0.1.0-py3-none-any.whl
Size 62.8 MB
Tags Python 3
SHA-256 checksum
How to use checksums
45ef9478692444f3290172cc81a0f9149311a82c82a7cf1e727139f7818ea89b
BLAKE2b-256 checksum
How to use checksums
77e24d10083657cb0f5743865dc6e0fecdac5a39b1d50ae6661d115754250ba1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 14, 2026.

Transparency log

Release history Release notifications | RSS feed

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

This release

0.1.0 This release

2 release files

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