WLJS LogoWLJS Notebook

HTML File

Users don't need any app installed to view a WLJS notebook

Call Share from the top menu or click the icon and choose HTML File.

No internet connection required

Use cases

  • Share a notebook with a colleague (no WLJS app required)
  • Share your work on the internet
  • Lecture notes & offline presentations
  • Make a report on data analysis, experiment
  • Documentation
  • Cross-platform personal notes

Local images are embedded automatically, NotebookStore is preserved, and embedded files are included. You can open the HTML file locally or publish it as a webpage.

Importing

The original cell metadata is preserved, allowing an HTML notebook to be converted back to a normal WLJS notebook format when opened or using deep-links—click the icon in the exported HTML file:

Static Export Option

The most basic export option is Static:

Share
HTML File
Static

What it does:

  • Keeps all standard plots, images, 3D graphics, and 3rd-party JavaScript assets intact and interactive
  • Keeps all outputs of all cell types, including slides
  • Keeps all objects in NotebookStore (can be used when the document is reimported)
  • AnimatePlot and AnimateParametericPlot will still work (since they're based on precomputed states)

However:

  • Dynamic features provided by ManipulatePlot, InputRange, Offload, animations made using Animate, AnimationFrameListener, or SetInterval will not work and will display the latest captured state in your HTML document.

This option is ideal for creating reports, compact notes for long-term storage, basic presentations, and shipping as a standalone HTML file.

Interactive Export Option

This is a dynamic version of the HTML exporter designed to recreate the full (or partial) interactivity of normal notebooks.

There are two presets to choose from:

Automatic

Following the steps

Share
HTML File
Interactive
Automatic

you get the following

  • Everything that Static HTML export option provides
  • Manipulate
  • ManipulatePlot and related symbols Manipulate*, which produce interactive widgets
  • Animate

However:

  • Dynamic features provided by InputRange, Offload, animations made using AnimationFrameListener, or SetInterval will not work and will display the latest captured state in your HTML document.
  • Missing states are interpolated using a stairstep-like method.

This mode is easy and optimal for most use cases that involve interactivity.

Optimize the number of possible states by reducing the number of sliders and steps. For example, avoid 3 sliders with 100 steps each, as this results in 106 combinations, which is impossible to sample. Avoid manipulated raster images and JIT failures in Animate and Manipulate.

The result is a fully interactive widget that works offline without an internet connection or the Wolfram Kernel.

Manual sampling

Following the steps

Share
HTML File
Interactive
Manual sampling

you get the following

  • Everything that Static HTML export option provides
  • Dynamic features provided by Manipulate*, Animate, input elements like InputRange, anything with Offload, and animations made using AnimationFrameListener can be captured.
  • FrontSubmit calls caused by events can be captured.
  • Events generated by presentation slides can be captured.
  • The missing states are interpolated using IDW method.

However:

  • Dynamic features provided by SetInterval will not be captured.
  • The procedure requires manual sampling by dragging all sliders or activating other event-generating elements.

This method is the most comprehensive and the only way to keep your custom-made interactivity, animations like this one:

Your dynamic system must follow a call-and-response architecture. This means it must generate events (via user interaction or code) and produce a response (e.g., symbol mutation or FrontSubmit call).

How to use:

Prepare the notebook

Connect to the Wolfram Kernel and evaluate your expressions. Minimize the number of input elements and their states. Limit the number and complexity of dynamic symbols.

Run Export

Navigate to the export option and run it.

Sampling

For sliders/input elements

Move each slider/input element across its full range. This is necessary, as the sampling phase will only use values observed during sniffing.

For multiple inputs (2–3 sliders), move each one fully once. Cross-combinations are not needed—they will be resampled recursively and automatically.

For animations made with AnimationFrameListener Start the animation (evaluate) and wait for the desired number of frames to be captured.

For presentation events or anything related to FrontSubmit Go through slides or activate buttons/other event emitters.

Depending on what was sampled, a special sampling preset will be assigned automatically to process the gathered data. Here are a few examples of dynamic content for each:

Bundler features

Modules

To reduce the output file size, you can exclude certain modules from the final bundle. It can be done from the settings menu:

Settings
Export settings
Exclude from bundle

For example, if you do not use 3D graphics: exclude shared-threejs-*, graphics3d-*.

External images

Compress all external images and embed them inline to HTML file used on slides, WLX, HTML or Markdown cells:

Settings
Export settings
Include

Misc

You can enable automatic dark/light mode from the same page of the settings menu:

Settings
Export settings
General

On this page