Releases: JerryI/wolfram-js-frontend
Major update 🎓
Since the total bundle size (app + docs + libs) has exceeded 300 MB, we have decided to provide you with two options:
-
WLJS Notebook Minimal: Requires an internet connection for installation and accessing documentation.
-
WLJS Notebook Full: Includes offline documentation and the latest libraries.
Bug Fixes & Features Implemented
Plotting & Graphics
- Fixed
PlotLabel
issue. - Implemented
Graph
functionality. DatePlot
now correctly converts UNIX time scale into human-readable dates.- Added
BezierCurve
support. - Utilized
GraphicsComplex
for 2D graphics performance enhancements.
Boxes
- Introduced a Framework for dynamic boxes.
- Included new examples showcasing decorations.
Dynamics
- Demonstrated creation and destruction of dynamic objects.
- Added new examples highlighting dynamics and interaction.
- Introduced a new input element, InputJoystick.
- Supported the use of Beep[].
UI & App
- Resolved issues with Windows server mode.
- Enabled haptic feedback for MacOS devices and sliders.
- Implemented layout improvements.
Minor update 2
Bug fixes & changes
-
Full control over a sidebar
Now it can be hidden on shown by just clicking the button -
Windows 10/11 title bar fix
-
Updates channel
You can specify a Github repo used for updates -
Improved AI
Now 3500 tokens of our documentation is sent to OpenAI for each chat session, which improves the quality of answers drastically. -
Better support for
Image
objects
Before it was quite buggy -
Missing boxes
SometimesBoxes.wl
was not loaded properly to an evaluation kernel. We changed the way how it loads. -
New examples
Animation, realtime raster processing is added. -
Scientific tools
A new section with useful widgets is added to the examples folder
New snippets
- Format text
A small toolbar to change the font-size, color used in any cell (quite experimental)
- Take a picture
Captures a photo using your active web-camera and sends to Wolfram Kernel
Minor update
Some fancy features were added
Highlights
AI Assistant 🪄
A deep integration with OpenAI. Now there is a separate chat-window and AI has an read/write access to the cells in the notebook. It can help you to fix errors, print new cells and so on...
We still haven't tried all possible cases.
SummaryBox partial support 🎁
It appears in many Wolfram's expressions. For example
Bugs and dev features
- minor layout fixes
- camera and microphone permissions fix
NumericArray
support on WLJS Interpreter for best performance- RevealJS slides markdown directives support (change background and etc)
PointLight
works properly- new events from slides window (
Slide
,Left
,Mount
,Destroy
) ImageSize
andMagnification
options forImage
- reset dynamic symbols, when the connection to kernel was lost
- an option to disable acrylic material on Windows 11 machines
- an option to enable JIT Tailwind compiler to use any Tailwind classes in notebook cells (slows down the frontend when enabled)
Code signed release
Major update 🍎
Much wider support of 2D and 3D graphics
Updated primitives and transformations Polygon
, Disk
, Arrow
, Cylinder
, GraphicsComplex
, Rotate
, GeometricTransformation
and many more. See Reference
WebGL accelerated GraphicsComplex
dynamics
ManipulatePlot
An easy dynamic version of Plot
built on-top of a default dynamics
New features
- AnimationFrameListener triggers events to match refresh rate of a screen
- ZoomAt programmatically zoom into graph
- TransitionType, TransitionDuration allows to control the interpolation between different states of graphics primitives.
- Emissive new material parameter
- MeshMaterial support for different materials (3D graphics)
- ReadClipboard
PlotlyJS full integration
It allows to fully utilize an official Plotly library using WL. It mimics 1:1 an original API and also supports animations, 3D graphics, diagrams and so on
Preview
trace1 = <|
"x" -> {1, 2, 3, 4},
"y" -> {10, 15, 13, 17},
"type" -> "line"
|>;
Plotly[trace1]
or some other examples
data = <|
"z" -> Table[x y, {x,-10,10}, {y,-10,10}],
"type" -> "heatmap"
|>;
Plotly[data]
or fast realtime animations
Bidirectional export to HTML
- embed external images from Markdown and Slide cells
- unicode support
- auto-convert from HTML back to a normal notebook format (.WLN)
- embed NotebookStore raw data
UI
Open in browser
feature, that reopens a window using a system internet browser- Offline docs
- icons update
Documentation
- Both offline / online. Click to
Misc
or locate from the top-menu - All implemented expressions are finally documented!
- More examples and tutorials
WLJS Notebook 2.0 is out 🚀
It's been a long time, since the last release came out. WLJS Notebook and all supplementary plugins were rewritten from scratch in order to enforce modularity, to make maintainable code-base and more user-friendly UI.
Apple Silicons users
There might be some troubles with installation. Please see the guide if it is the case
There are some breaking changes in some APIs, which will be reflected soon in our documentation.
Major update 🍪
Client app
- Wolfram Kernel troubleshooting assistant
- Automatic authorization and activation using Wolfram ID and password provided
Frontend
- Improved cursor movement between cells (can jump into the hidden input cell).
- More snippets: code formatting, file uploader.
- More examples.
- More features for editable decorations (try
Bra[2]
orKet[-2]
, for example).
Binaries
- added M1 architecture
The immortal edition 🔌 (minor update)
This covers the case, when there is no internet connection possible (see #57 )
The binaries comes with all packages and plugins necessary for functioning properly. However, if there is internet connection to github.com (where all packages are stored), it will anyway download the latest version.
Other changes
Math input
Now it uses a different way of representing syntax sugar for math input and other decorations
is represented as
(*FB[*)((1)(*,*)/(*,*)((*SqB[*)Sqrt[2](*]SqB*)))(*]FB*)
if you remove comments, it will look like
(1)/(Sqrt[2])
which is safe for using it anywhere keeping the actual code unchanged.
Just to remind the shortcuts
Ctrl+/
on the selection - make a fractionCtrl+2
make a square rootCtrl+6
make a superscriptCtrl+-
make a subscript
CellPrint
This comes handy when making progress bars and other temporal messages. Please see the reference.
Please also see new examples located from the main menu
Major update ⚗️
Plotting Functions
Finally, BarPlot
, BubbleChart
, and other similar types of diagrams are supported by wljs-graphics-d3.
If PlotRange
is not provided, it attempts to autoscale the axes while maintaining an equal aspect ratio.
DensityPlot
works since we implemented GraphicsComplex
with the VerticesColor
option.
Unfortunately, only flat-shading is supported, meaning it does not interpolate a color between vertices of a single triangle. This is a bit tricky in SVG. Probably, we would need to move to canvas
and use JavaScript raster graphics for this purpose.
Editor
- Autocomplete user-defined symbols. The frontend communicates with the Wolfram Kernel every time a new symbol is created. This does have some drawbacks in terms of performance because any internal Wolfram Package brings a lot (~10^4) of new symbols in a private context, which have to be filtered out on the fly. We use
$NewSymbol
internal handler to manage this.
UI Update
- Acrylic material is now supported under Windows 11 & OSX.
- Extended CSS customization and custom HTML header support (directly from the settings menu).
Wolfram Expressions
- Mathematica's
Boxes
improvements. Now everything is a box, and one can also use the nativeMakeBoxes
approach to construct decorations for Wolfram Expressions. Please refer to the Docs.
ByteArray
,Now
, andRGBColor
show an expected placeholder.
- Very powerful components
EditorView
andInputTable
were added.
Miscellaneous
-
Unicode support (Можно писать 何でも). This was done in a somewhat unconventional way, by running over all text strings with a JavaScript RegExp, since Wolfram Language does not provide a clear way to export expressions as a
Text
+JSON
string. Hopefully, it will not introduce any performance issues. -
More built-in examples (see File -> Open Examples).
-
A standalone client/server mode of the app was added. Since our desktop app is basically a Chromium wrapper over the
wolframscript
web-server, it allows you to run the server independently. A standalone client app provides a bit more functions compared to if it were opened in a browser, such as: context menu, a top-bar menu, hot-keys...Menu
->Reopen as server/client
.
Documentation
There are still many empty pages in Reference
; however, some of the sections have been finished.
Troubleshooting
Please have a look at this page if you face any issues.
Acknowledgements
@MitsuhaMiyamizu for being the first and only sponsor of this project! ❤️
Devs
Preview (major update 6)
-
Unix/Windows sockets update developed by @KirillBelovTest in pure C, performance and stability improvements. The peak transfer speed is around 170 Megabytes/sec 🚂 (native Mathematica’s socket library gives only 2 Megabytes/sec and passes away on a bigger file). We faced some troubles on Unix platforms, therefore for them we rewrote some parts of it using libuv, which is so far is the most stable candidate for Linux/MacOS (we did not manage to compile it under Windows using LibraryLink, btw debugging is a bloody hell there). Both implementation are async and non-blocking.
-
cell2window projection feature was improved🪟
-
log window was replaced by a normal terminal (you can send commands to wolframscript directly) 👾
-
Kernel startup issues (sometimes it did not attach to a notebook)
-
TemplateBox feature partial support (RGBColor and some other syntax sugar from mathematica are supported )
-
a lot of improvements with 2D graphics 🎨
-
reference section was finally added to docs 📃 and slowly are populated with a material
-
search bar added to docs
As one of the maintainers (@JerryI), WLJS Frontend has transformed for me from being a side project into an essential tool I use daily for processing a significant amount of experimental data (replacing OriginLab and RefFIT), preparing figures for papers in PRB Journals, modeling THz signals, and serving as a sandbox for theoretical calculations.
I hope it can prove to be beneficial for others as well. If you encounter any issues, please submit them to the GitHub repository. For more complex matters, don't hesitate to join the WLJS Support group chat on Telegram.