Release notes *2.9.1*
docker run -it \
-v ~/wljs:"/home/wljs/WLJS Notebooks" \
-v ~/wljs/Licensing:/home/wljs/.WolframEngine/Licensing \
-e PUID=$(id -u) \
-e PGID=$(id -g) \
-p 8000:3000 \
--name wljs \
ghcr.io/wljsteam/wljs-notebook:mainbrew install --cask wljs-notebookImproved Export to PDF
We have reworked our exporter once more to make it possible to print large notebooks or render expressions within a bulky notebook. Now, our renderer won't try to rasterize hidden elements and waste resources on them.
New Cell Group Feature
You can now split the notebook into two using this feature starting from the focused cell:
Also, large imported Mathematica notebooks will be automatically split to avoid performance issues with a large number of cells.
Improved GUI of Manipulate
We have improved the layout, as well as added Copy Expression and Copy Parameters options to assist

Minor formatting improvements
AlgebraicNumber
ToNumberField[(*SqB[*)Sqrt[2](*]SqB*), (*SpB[*)Power[2(*|*),(*|*)1/4](*]SpB*)] (*VB[*)(AlgebraicNumber[Root[-2 + #1^4 & , 2, 0], {0, 0, 1, 0}])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KWlMIB4vkAjLTC13SU3OL0osyS8KBskH5eeXFJ2xrk+bt+CbPQCNIhCc"*)(*]VB*) New command palette tools!
including Code Beautifier and String Escaper
(* try to apply on this one *)
(* place your cursor here and run Beautify from the command palette *)
f[ω_, eps_, list_List] := eps + Total @ Table[((Power[i[[2]],2])/(Power[i[[1]],2] - Power[ω,2] + I i[[3]] ω)), {i, list}]
n[ω_, params__] := Sqrt[f[ω, params]]
r[ω_, L_, params__] :=With[{np = n[ω, params]},Power[Abs[((np - 1)/(np + 1))],2]] Try Bull Running btw 😉
Tabular support
- is one of new features in Wolfram in a long time, that significantly improves dataset workflow.
We added the corresponding representation to WLJS Notebook with lazy loading and progressive rendering:
Tabular[{{1, 2, 3}, {4, 5, 6}}] (*VB[*)(tabular158)(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJycbGaQapKboJianpOiaGBuk6lomp1rqGiYlJZqYW6QZWxqaAQCbIRZd"*)(*]VB*) Here is another example
Tabular[{{1, x, Today}, {4, y, Tomorrow}}, {"col1", "col2", "col3"}] (*VB[*)(tabular164)(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKp5qYJRknmyXrGiVamumapKUk61qYWRroJhomGSYnWpqYpxgZAgCLaxXR"*)(*]VB*) EntityValue[
EntityClass["Book", "DuneBooks"], {"FirstPublished", "Author",
"Image"}, "Tabular"] (*VB[*)(tabular33)(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJ5kbmqUmJhnomhslJumaGBlY6CYZmyXpmpkZWBibm1taWqSZAACBthUb"*)(*]VB*) InputTerminal
We added a new I/O element to our GUI building blocks
t = InputTerminal[] (*VB[*)(EventObject[<|"StandardInput" -> OutputStream["/private/var/folders/fs/ch7ddlhn7jz5vyg5k8bbrxyh0000gn/T/m000050493621", 7], "StandardError" -> OutputStream["/private/var/folders/fs/ch7ddlhn7jz5vyg5k8bbrxyh0000gn/T/m000051493621", 8], "Id" -> "08892486-275c-4c18-9dbf-3af499c66145", "View" -> "35618a69-6e0e-48b2-9e96-39a440007831"|>])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKG5uaGVokmlnqmqUapOqaWCQZ6VqmWprpGlsmmpgYGBiYWxgbAgB0mhSP"*)(*]VB*) It uses the same EventObject interface as most GUI element, but allows to interact with default streams
WriteString[t["StandardOutput"], "Hi There!"]; WriteString[t["StandardError"], Sqrt[1/2]]; Here is a basic echo handler you can make using events interface:
EventHandler[t, {"Command" -> Function[c, c]}]; Evaluate All Cells Button
As many (3) people requested, we added a new button to the top menu
Improved Information
We switched back to our own implementation of the output of Information, have a look:
?Plot (*VB[*)(FrontEndRef["af697218-bd9d-44c2-9e9c-a6c9c47457aa"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJ6aZWZobGVroJqVYpuiamCQb6VqmWibrJpolWyabmJuYmicmAgCIbRXo"*)(*]VB*) Or multiple symbols
?Log* (*VB[*)(FrontEndRef["dac104f9-0b73-4eed-adf6-e3826bb8258d"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKpyQmGxqYpFnqGiSZG+uapKam6CampJnpphpbGJklJVkYmVqkAACR4hY1"*)(*]VB*) OpenerView
We implemented OpenerView aka spoiler element
OpenerView[{"Show me a plot", Plot[x, {x,0,1}]}, False] (*VB[*)(Null)(*,*)(*"1:eJwljsEKwjAQRKvoUQ9+QQSvgZYkkN5t8SYY6X3b7qIQu5Km1M831csbZmCYObZ8o1WWZeMm4cK+p+3idgnNE+czdhwgcnDrlFwbt0/iHjyLFwoQb8/xXz8k1IGHWA199cFuitB6dKcUW9CkcqNkXiiQGkwpLZKRJZGyVvctqWJcVmvwI/6O3MOEX1ESJm4="*)(*]VB*)