Back to Releases

Release notes *3.0.3*

April 4, 2026
docker run -it \
  -v ~/wljs:"/home/wljs/WLJS Notebooks" \
  -v ~/wljs/Licensing:/home/wljs/.WolframEngine/Licensing \
  -v ~/wljs/tmp:/tmp \
  -p 8000:3000 \
  --name wljs \
  ghcr.io/wljsteam/wljs-notebook:main
brew install --cask wljs-notebook

Window Throttling

We fixed unintended window throttling on some machines when the window is unfocused or hidden. This is crucial for long-lived applications such as lab monitors, where some data must be updated continuously for hours or days.

More tools for window management

We added WindowEventListener, similar to SlideEventListener, for capturing global window events. For example:

ev = EventObject[];
WindowEventListener[ev]
log = {};
Refresh[log, 1]
EventHandler[ev, {
  ev_ :> Function[Null,
    AppendTo[log, ev];
  ]
}];

It can capture the following events from the window in which it is placed:

  • "Mounted" - when the component or window has loaded
  • "Closed" - when a window is closed
  • "Blur" - when a user removes focus from a window
  • "Focus" - when a user focuses a window

This component works in regular cells as well as in WLX. It takes up no space and renders nothing.

Texture support for 3D

We finally added texture mapping support for Graphics3D and some of its primitives:

Plot3D[Sin[x y], {x, 0, 3}, {y, 0, 3}, 
 PlotStyle -> Texture[(*VB[*)(FrontEndRef["2841e783-90f8-4002-b0e7-8605dafe8f25"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKG1mYGKaaWxjrWhqkWeiaGBgY6SYZpJrrWpgZmKYkpqVapBmZAgByGRUc"*)(*]VB*)], 
 TextureCoordinateFunction -> ({#1, #2} &)]
(*VB[*)(FrontEndRef["571fc922-1e00-49ce-b0bf-aa38561a695a"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKm5obpiVbGhnpGqYaGOiaWCan6iYZJKXpJiYaW5iaGSaaWZomAgCBExWa"*)(*]VB*)

ComplexPlot3D now also works:

ComplexPlot3D[(*FB[*)(((*SpB[*)Power[z(*|*),(*|*)2](*]SpB*)+1)(*,*)/(*,*)((*SpB[*)Power[z(*|*),(*|*)2](*]SpB*)-1))(*]FB*), {z, -2 - 2 I, 2 + 2 I}]
(*VB[*)(FrontEndRef["0418b066-5344-4d17-bd4a-275fe42475c0"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKG5gYWiQZmJnpmhqbmOiapBia6yalmCTqGpmbpqWaGJmYmyYbAABwwBTb"*)(*]VB*)

GPUArray symbols

We added support for a recent WL feature: GPU arrays. They effectively store a reference to data on the GPU, which can be used for cross-platform GPU computing, although support is still limited for now:

arr = Table[BitXor[i,j]//N, {i,127}, {j,127}];
g = GPUArray[arr]
%28%2AVB%5B%2A%29BoxForm%60temporalStorage%24331093%28%2A%2C%2A%29%28%2A%221%3AeJxdkUmPolAAhJktmcyvmOmT0p2wo0wyh4eCCig0CqidPvAWZGtkU4RfPzrHuVSqKnX66hc8u9EXiqKaH3fRcNKeaz8h3Tb6RFELxwN1HfZvI9pX3%2BjxzxH9Qo9H9BP3mxg99jTO6ljwuoOerofF8lRhuQdKR7pYbKZhEqilwVkbiLlVgIvInGRwcxXQhwanl6SMloRxblKqFWE%2F1MXWNbp4qdYIF7UHfF5O3Xhf7RdTpCHhhs8WcSRFstpO9zf4aAqcKS2v83VmAzMl9WoWC2xR9YHduGQHxcPVbZE7Ac4il6t15F3mftwht4bW8bZ5lth5nTSYjZyDwtsKnxDRkpDkmIuZXKqemb0abNNpGZqiY2Cf%2BI%2F1zIv3dqsL3JBGHRlKftgF%2BozpA4aH6VyOjozuZhWMT4NjMjfQpKtTW4Jrf5jklmGCVgCKrD7jWASsfUCl%2BOfpwfHdV%2Bnxe%2FT5gf%2FrXdxLTrbfH4aE2C7y%2Fl%2B7qy%2Fkv83jqy3JCWpDmJPm2z3qYd6QvwvvjD8%3D%22%2A%29%28%2A%5DVB%2A%29

Perform a math operation and plot the result:

Not all operations are supported on the GPU. Some may fall back to the CPU version.

g g - g // ArrayPlot 
(*VB[*)(FrontEndRef["ba444fb3-7f1e-4836-9025-b54f4dee96af"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJyWamJikJRnrmqcZpuqaWBib6VoaGJnqJpmapJmkpKZamiWmAQCFYxXe"*)(*]VB*)

Copy cells as plain text

We added an option to copy a group of cells as InputForm. It automatically strips off all syntax sugar and marks input and output cells.

For example:

Series[Sin[x], {x,0,2}]
(*VB[*)(SeriesData[x, 0, {1}, 1, 3, 1])(*,*)(*"1:eJwlT11PwjAAXIwPxl8xedrKEocERN9alX0YUdbRZiM8TCmzcaVlbLEb8X/58xyYXC53l3u4u3qX0ebMMIz9ZUdPa17JknD2jX87q/sWIGgJbAuzkrP9Y1ZlS+2YrmMefhxzeMJgZVvA6TqgN7hnoY7jF/mGxYwnHpSjPMAlF2m4KaZJKtTow9/Nn8ce2T6gxS2m6RfqM6qiyr9zo6zxiLyhKh8nM5g2ifQbquT8GmsY7HI3bGkCJ1EQL1rdTmqFgtqbhlTAHEH9KVjvuGFFELD/D513FNUFwxdHwbL167ZoTmlc1uwPHtBIXA=="*)(*]VB*)

Copied expression:

(* ::: Input ::: *)
Series[Sin[x], {x,0,2}]

(* ::: Output ::: *)
(SeriesData[x, 0, {1}, 1, 3, 1])

Misc

  • Various bug fixes related to compressed entities such as images and large plots
  • Fixed Graphics3D pan and rotation on custom WLX components; added "Controls" option to disable/enable rotation