Back to Releases

Release notes *3.0.2*

March 21, 2026
docker run -it \
  -v ~/wljs:"/home/wljs/WLJS Notebooks" \
  -v ~/wljs/Licensing:/home/wljs/.WolframEngine/Licensing \
  -v ~/wljs/tmp:/tmp \
  -e PUID=$(id -u) \
  -e PGID=$(id -g) \
  -p 8000:3000 \
  --name wljs \
  ghcr.io/wljsteam/wljs-notebook:main
brew install --cask wljs-notebook

TeXView

We added a shorthand symbol for rendering expressions as LaTeX\LaTeX:

TeXView[1/2]

or directly on LaTeX string:

TeXView["\\frac{1}{2}"]

It works on slides, markdown and in a normal Wolfram output cells.

Tooltip

A multitool for labelling data on plots or any other expressions:

Tooltip[x, Graphics[Disk[], ImageSize->100]]

A tooltip can be used on graphics primitives as well

Plot[{Tooltip[Sin[x], "This is sine"], Tooltip[Cos[x], "This is cosine"]}, {x,0,2Pi}]
(*VB[*)(FrontEndRef["4b105372-9957-40d5-b600-e8ca55b969a5"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKmyQZGpgamxvpWlqamuuaGKSY6iaZGRjoplokJ5qaJlmaWSaaAgBwARTp"*)(*]VB*)

Read our documentation for more information and use cases

Documentation window fix

You should no longer have any troubles when copying code blocks from docs pages.

ListAnimate

We implemented a new member of Animate/Manipulate family of symbols:

ListAnimate[Table[Graphics[Disk[{0,0}, RandomReal[100]]], {50}]]

Raster

We improve the performance of Raster, which shows up in many 2D plots. For example:

Show[AudioAmplify[(*VB[*)(Audio[FrontEndRef["96178de7-c6db-41a1-a233-5b82bf4d5545"], "SignedInteger16", SampleRate->22050])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKGxsmGhmYGyXqGpilmOmapCaa6lommxjqmqYlpaYap5kaGRsZAwB86RVj"*)(*]VB*), 100]//Spectrogram, Frame->True]
(*VB[*)(FrontEndRef["b7c42a82-f1c8-4441-869f-a5fad948ec29"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJ5knmxglWhjpphkmW+iamJgY6lqYWabpJpqmJaZYmlikJhtZAgCDthW1"*)(*]VB*)

Moreover it supports Offload, that means you can make it dynamic manually or automatically:

Animate[ArrayPlot[
  SeedRandom[123];
  Table[Evaluate[Sum[Sin[RandomReal[10, 2] . {x, y} + t], {5}]], {x, 0, 
   5, .1}, {y, 0, 5, .1}], ImagePadding->None], {t,0,8Pi, 0.1}, RefreshRate->60]

Here is another example:

rasterDensityPlotAnim[f_, {xs_, xmin_, xmax_}, {ys_, ymin_, ymax_}, {ts_, tmin_, tmax_}, OptionsPattern[]] := 
 With[{
   time = Unique[], buffer = Unique[], 
   cf = With[{c=ColorData[OptionValue[ColorFunction]]}, (List@@c[#])&], 
   pts = OptionValue[PlotPoints]//N,
   dt = (tmax-tmin)/OptionValue[PlotPoints]//N
  },
  {
   raw := Table[
    f /. {xs -> j, ys -> i, ts -> time} // N, {i, ymin, 
     ymax, (ymax - ymin)/(pts - 1)}, {j, xmin, 
     xmax, (xmax - xmin)/(pts - 1)}]
  },
  
  time = tmin;
   
  buffer = Map[cf, raw // Rescale, {2}];
  
  Graphics[{
    Raster[buffer//Offload, {{xmin, xmax}, {ymin, ymax}}],
    EventHandler[AnimationFrameListener[buffer//Offload], Function[Null,
      buffer = Map[cf, raw // Rescale, {2}];
      time = If[time >= tmax, tmin, time + dt];
    ]]
  }, Frame->True]
]

Options[rasterDensityPlotAnim] = {ColorFunction->"AvocadoColors", PlotPoints->100};
rasterDensityPlotAnim[x Sin[y+t], {x, -5, 5}, {y, 0, 10}, {t, 0, 2Pi}, PlotPoints->50]

Better setup intructions

We updated our documentation and added new section on how to set up WLJS Notebook on a server and tunnel HTTP traffic over SSH.

Minor bug-fixes

  • Incorrect cell content update, when a cell was morphed from output to input
  • Incorrect rendering of Row inside ticks and other labels of Graphics
  • NeuralNet package invalid format values
  • Global styling of slide cells content (CSS issue)
  • Instabillity of sockets interface hash map