WLJS Notebook
Build interactive research notebooks and scientific tools with Wolfram Language
True 2D typeset input, live interactivity, local-first, Git-friendly, and powered by Wolfram Engine or Wolfram Kernel
Plot[1/x, {x,0,1}] 🪄 Everything you need to build amazing shareable notebooks
Feels like Mathematica and Jupyter
WLJS Notebook feels and works like Wolfram Mathematica (and it can open .nb files) and has a flat and minimal notebook structure like in Jupyter Lab.
Interactive & Powerful
Optimized for fast interactive computing and complex real-time visualizations, from high-level Manipulate interfaces to low-level graphics primitives.
Built for presentations
Create interactive, component-driven slides directly in your notebook — with 3D graphics and `Manipulate` widgets. Perfect for sharing live reports.
Git-friendly notebook format
A minimal, plain-text notebook format that is easy for people, machines, and LLMs to read, parse, diff, and version with Git.
Portable, embeddable, and web-friendly
Export and share your notebook as a mini app or embeddable .html or .mdx file — plots stay interactive, and sliders remain draggable.
Batteries included
More than 200 import/export formats and 3,000 functions from the Wolfram Engine standard library are ready for your computational work.
JavaScript sandbox
First-class support for JavaScript cells with a dedicated communication channel to the Wolfram kernel. Use web libraries to enhance your visualizations.
MCP & CLI ready
Expose your notebook through a streaming Model Context Protocol server and CLI, giving LLM agents access to notebooks and documentation.
Create dynamic 3D plots quickly
Manipulate[Plot3D[ Sin[n x] Cos[n y], {x, -1, 1}, {y, -1, 1}], {n, 1, 5, 0.3}, ContinuousAction -> True]Manipulate[Plot3D[ Sin[n x] Cos[n y], {x, -1, 1}, {y, -1, 1}], {n, 1, 5, 0.3}]begin using PlutoUI using PlotlyJSend@bind n Slider(1:0.3:5; default=1, show_value=true)begin xs = range(-1, 1; length=80) ys = range(-1, 1; length=80) zs = [sin(n * x) * cos(n * y) for y in ys, x in xs] Plot( surface(x=xs, y=ys, z=zs), Layout( height=700, scene=attr( xaxis_title="x", yaxis_title="y", zaxis_title="sin(n x) cos(n y)" ) ) )endimport numpy as npimport plotly.graph_objects as goimport ipywidgets as widgetsfrom IPython.display import displayimport plotly.io as piopio.renderers.default = "iframe_connected"x = np.linspace(-1, 1, 80)y = np.linspace(-1, 1, 80)X, Y = np.meshgrid(x, y)def plot_surface(n): Z = np.sin(n * X) * np.cos(n * Y) fig = go.Figure(data=[go.Surface(x=x, y=y, z=Z)]) fig.update_layout( height=700, margin=dict(l=0, r=0, b=0, t=30), scene=dict( xaxis_title="x", yaxis_title="y", zaxis_title="sin(n x) cos(n y)", ), ) display(fig)n_slider = widgets.FloatSlider( value=1, min=1, max=5, step=0.3, description="n", continuous_update=True, readout_format=".1f",)out = widgets.interactive_output(plot_surface, {"n": n_slider})display(widgets.VBox([n_slider, out]))import marimo as moimport numpy as npimport plotly.graph_objects as gon_slider = mo.ui.slider( start=1, stop=5, step=0.3, value=1, label="n", show_value=True, full_width=True,)n_slider_x = np.linspace(-1, 1, 80)_y = np.linspace(-1, 1, 80)_X, _Y = np.meshgrid(_x, _y)_Z = np.sin(n_slider.value * _X) * np.cos(n_slider.value * _Y)_fig = go.Figure(data=[go.Surface(x=_x, y=_y, z=_Z)])_fig.update_layout( height=700, margin=dict(l=0, r=0, b=0, t=30), scene=dict( xaxis_title="x", yaxis_title="y", zaxis_title="sin(n x) cos(n y)", ),)mo.ui.plotly(_fig)Digitally signed
Our releases are digitally signed and checked by SignPath Foundation and Apple.
Learn more about SignPath Foundation →
Help WLJS grow
Share WLJS, improve the docs, contribute code, or support independent development. Every contribution helps more people discover and trust the project.
Join the community
GitHub Discussions is our community home. Ask questions, share your notebooks, and help shape what we build next.
Licensing
WLJS Notebook is open-source software licensed under the AGPLv3.
While WLJS Notebook itself is licensed under AGPLv3, it requires Wolfram Engine to function. Wolfram Engine is a separate product with its own licensing terms. For the full WLJS Notebook license, visit our GitHub repository.
Are you a robot? Here is llms.txt index