Skip to main content

5 posts tagged with "webassembly"

View All Tags

Shipping Complex Qt Applications in the Browser with emscripten-forge

· 5 min read
Matthias Meschede
Scientific Software Engineer at QuantStack

Shipping software efficiently means not rebuilding everything from scratch every time. You want to ship your app as a package, rely on a distribution system to handle dependencies, and share the burden of maintaining your stack with other projects that depend on it. That is the vision behind emscripten-forge, a general-purpose software distribution for WebAssembly.

Whether you're building a scientific library, a compiler, or a desktop application, emscripten-forge can be used to:

  • ship your software as a package for a general-purpose package manager (like apt or conda),
  • leverage shared dependencies: no need to rebuild what's already available,
  • benefit from browser caching: shared objects stay cached, reducing load times and bandwidth.

Qt Applications in the Browser​

Emscripten-forge has been used extensively to ship the open-source scientific computing stack (Python, R, etc.) alongside JupyterLite, and is progressively expanding to compiler stacks and console applications.

Emscripten-forge can now build & host Qt applications that run entirely in the browser. A compatible Qt6 desktop app can be built once for WASM, published as an ordinary conda package, and launched directly from the package repository, client-side, with no additional server behind it.

This also unlocks libraries that link against Qt, a common pattern for libraries that are attached to GUIs but can also be used independently. Once compiled, these libraries can now run interactively in the browser, for example with notebook.link. See pygplates on notebook.link for a live example using pygplates, a Python wrapper of the C++ library underlying the popular plate tectonics desktop application GPlates, which uses Qt extensively. Such GUI-free use is stable, fast, and unlocks many interesting use cases.

Running full Qt applications in the browser, including GUIs, may require custom patches, as well as case-by-case examination for compatibility (e.g., not all Qt subpackages are available), stability, and performance. But it's now a conceivable path for anyone who wants to take proven desktop software and make it dramatically more accessible without rewriting it.

You can try the following examples by clicking the links below:

(These links require a recent browser with JSPI support: Safari 27+, Chrome 137+, Firefox 153+.)

The last mile of a long road: faster NumPy in the browser

· 27 min read
Julien Jerphanion
Scientific Software Engineer at QuantStack
Matthias Meschede
Scientific Software Engineer at QuantStack
Ian Thomas
Scientific Software Engineer at QuantStack

For a long time, running NumPy in the browser meant running it without an accelerated BLAS. Matrix multiplications fell back to plain loops (portable, but blind to cache and SIMD).

That just changed. The Emscripten-forge NumPy package now links OpenBLAS in WebAssembly, and at n = 1024 square np.matmul jumps to about 30.92× faster (float32) and 14.90× faster (float64). The next OpenBLAS release, already available as an experimental package on Emscripten-forge, with kernels contributed by QuantStack, pushes it further, and an optional Relaxed SIMD build adds another step on engines that support it.

Numba in the Browser: Unlocking a New Scientific Python Stack in JupyterLite

· 9 min read
Scientific Software Developer at QuantStack

A JIT compiler—and its ecosystem—running entirely in the Web browser​

Scientists, students, and engineers use Jupyter notebooks to explore ideas interactively: write a small piece of code, execute it, inspect the result, and continue from there. Traditionally, every such notebook requires a Python process running on a server or on the user's machine.

JupyterLite changes this model. Its kernels run locally in the Web browser through WebAssembly, so a static website can provide a complete computational environment without allocating a server to every user. This makes notebooks easier and cheaper to share at scale, whether they are used for documentation, education, or interactive demonstrations.

There has, however, been an important piece missing from the browser-based scientific Python ecosystem: Numba.

Today, we are excited to share the first working version of the Numba JIT compiler running entirely in the browser with JupyterLite and emscripten-forge!

Numba benchmark in JupyterLite

Numba in action in JupyterLite, showing a 249× speedup over standard Python.

In this example, Numba delivers a roughly 250× speedup in WebAssembly, compared with about 90× natively. The larger relative gain makes Numba especially compelling in the browser, where bypassing Python interpreter overhead can have an even greater impact.

This means that a Python function can be transformed into Numba's Intermediate Representation (IR), typed, lowered to LLVM IR, compiled into WebAssembly, dynamically linked, and executed—all without a remote Python server.

Try it here: Numba and its ecosystem in JupyterLite.

What Is Browser-Native Scientific Computing?

· 20 min read
Matthias Meschede
Scientific Software Engineer at QuantStack

Black Hole Fig above: Computation of a blackhole approach trajectory using EinsteinPy. This trajectory was computed fully in-browser relying on community Python code, demonstrating the power of WebAssembly for easily exploring advanced concepts or calculations.

TL;DR: Browser-native scientific computing means a full compute environment — Python, R, C++, or any language that compiles to WebAssembly — running inside your browser. It arrives as simple static files: no backend, no installation, no setup required. An entire environment can be handed over as a URL, and is highly accessible, secure, and reproducible because WebAssembly, a standardised web technology, was made for safe sharing across devices and time. Since compute happens on the user's own machine, serving one user or a hundred thousand costs about the same, opening up new possibilities — giving nationwide access to code for students, public data portals with embedded compute environments, runnable documentation, and executable blog posts or papers. The technology is used in production and available today.

Introducing Notebook.link

· 6 min read
QuantStack
Scientific Software Computing

Reimagining how you share, collaborate, and run Jupyter notebooks - all in your browser.​

Rocket

Sharing a Jupyter notebook has always been harder than it should be. You clone a repo, fight the environment, install conflicting dependencies, and hope the author didn't forget to pin their package versions. Half the time, you give up before the kernel even starts. Notebook.link fixes this. Open a link. Your notebook runs. That's it.

Built on JupyterLite, Notebook.link is more than just a notebook viewer: it’s a fully interactive, scalable, and language-agnostic computing environment that operates entirely in your browser. Whether you’re a data scientist, educator, researcher, or developer, Notebook.link eliminates the need for local installations or complex setups, allowing you to create, share, and execute notebooks effortlessly.