Numba Runs in the Browser: 250x Speedup in JupyterLite
Numba in the Browser: Unlocking a New Scientific Python Stack in JupyterLite
JupyterLite brings a full scientific Python stack to the browser via WebAssembly, but Numba was missing. Now, QuantStack has made it work: Numba's JIT compiler pipeline—from Python bytecode to LLVM IR to WebAssembly—runs entirely client-side, delivering a 249x speedup over standard Python. This unlocks PyTensor, PyMC, and other Numba-dependent libraries in JupyterLite, with packages available via emscripten-forge.
The larger relative gain makes Numba especially compelling in the browser, where bypassing Python interpreter overhead can have an even greater impact.
- momojo
This is awesome! For those here not familiar with Numba, it helps bridge that performance vs ergonomics tradeoff that's always existed when you reach for python over a lower level but faster lang like C or C++.
Sure you could write Cython but then you have to have a build step and make wheels for every platform you and python version. Sure numpy has gotten faster over the years but you're still hampered by the GIL.
Numba is a little magic because you get to write stuff that feels like numpy, but get literal bytecode perf.
BUT there's a cost to this, which u learned the hard way when I imported a color map extension for matplotlib recently.
I thought i was going to be importing a couple megabytes at most. But Numba+llvmlite alone is almost 100MB!
This might be a drop in the bucket in some applications but for a color map library that has only two hot paths that need to be JITed, it's excessive.
Overall though, love this achievement, and i love what's being done for in-browser (aka local-first) scientific computing!
- rossant
Congrats for a serious engineering achievement!
I had experimented with a similar idea in an infinitely more primitive way more than ten years ago (https://cyrille.rossant.net/numpy-browser-llvm/). I'm glad to see so much progress since then.
- lmc
Are there some benchmarks of the browser vs non-browser version?
I.e., what are the absolute numbers behind
> Numba delivers a roughly 250× speedup in WebAssembly, compared with about 90× natively.