All SmallJS project code has been reviewed by Claude AI,
resulting in lots of fixes and small improvements. Note: Some changes are breaking, so please re-check your existing projects.
Smalltalk library
NodeGui: Greatly expanded support for NodeGui JS classes.
Updated the NodeGui contribution app to show it off.
Release 2.3
18-OCT-2026
Compiler
Debugging: Enhanced debugging in SmallJS by allowing breakpoints in more places:
In assignments, constant statements and especially with blocks!
Step-into debugging is now disabled for common classes like Integer and String,
giving a nice, streamlined debugging experience.
Smalltalk library
Electron: Added full support for core Electron JS base classes.
Updated the Electron example app to show it off.
The example app NodeGui has been moved to contributions,
leaving NW.js and Electron as fully supported desktop options.
Browser: Added functionality and tests to classes:
Animation, FormData, History, Iframe, Permissions, Storage, WebWorker,
Canvas, DomMatrix, Geolocation, Clipboard, MediaQuery.
Node: Added functionality and tests to classes:
Fs, Fsp, NodeWorker, Buffer, NodeMessagePort.
Core: Added functionality and tests to classes:
Event types, File, streams.
AI: Expanded option support for Anthropic.
Tutorial
AI: Tutorial video to create a Tic-tac-toe game in SmallJS using Claude AI!
See the Tutorial home page for the link.
Claude writes all the SmallJS code, which is well structured and maintainable.
Disclaimer:
The code in this release was partially built with AI (Claude).
Great care was taken ensure that every generated line of code
conforms to the code quality standards of the existing project.
SmallJS release 2.2
6-AUG-2026
AI coding assistant
Now you can use an AI assistant to code in SmallJS!
See the Tutorial home page for setting it up.
Examples
Added example app RAG showing AI use with Retrieval-Augmented Generation.
Everything runs locally with models in Ollama, using SQLite or Postgres as vector stores.
Contributions
Added app React Counter to contributions, to show to use SmallJS in React projects.
Smalltalk library
Added embedding functionality to AI class Ollama.
Added doAwait: method to class Array to await iterating over an async block.
Made subsystems Database and AI more modular,
allowing projects to just install npm packages of implementations they use.
Build
All projects now support TypeScript 7 builds.
Made build scripts more modular for example projects.
Every project now has their own scripts for: install, build, update and clean.
Installed package updates must be at least 7 days old, for security.
SmallJS release 2.1
13-MAY-2026
Compiler
New keyword CLASSEXTENSION for adding methods to (system) classes
in separate source files. The tutorial page
Syntax
shows how to use it.
Smalltalk library
Database: Standardized SQL syntax for simpler database independent queries.
Examples
Added PWA example game: Emoji Memory :-).
Also added this example app to this website.
Website
New Tutorial section for making Node.js apps with SmallJS,
plus new Tutorial section for making desktop apps with SmallJS
using NW.js, Electron or NodeGui.
Reference page now supports searching classes and methods.
Added dark mode option, also for subsites Reference and Tutorial.
Updated Playground evaluator to current compiler.
SmallJS release 2.0
21-FEB-2026
Tutorial
This website has a new
Tutorial
page with tutorials on:
The Smalltalk language, the core libraries.
Tutorial examples can be done interactively in the
Playground.
Building a new browser app in SmallJS from scratch.
Reference
The website now also has a new SmallJS class
Reference
page,
showing all library classes and methods with their main comments,
in a sensible hierarchy.
Async, await, promises
SmallJS now fully embraces JavaScript promises,
using await for sync execution of async functions iso callbacks.
More info in GitHub
issue #70.
Note: SmallJS now requires at least
Node.js v25 to run.
Smalltalk library
Core: Promise: New convenience methods for creation.
Tests for async, await, then, catch and finally.
Smalltalk: Converted callbacks to promises for modules: Fetch, File, Database, Crypto
Core: Web Crypto API implemented with working examples in tests
for AES, RSA and ECDH. These work in both browsers and Node.
Compiler
Fixed code generation for await.
Using await outside an async method now gives an error, conforming to JS.
Website
Created a new Tutorial page to learn Smalltalk and SmallJS.
Created a new Reference page to look up class info.
SmallJS release 1.8
29-SEP-2025
This release is all about enhanced support for
Node.js features,
that are also usable from the desktop app option NW.js
Smalltalk library
Node: File system (Fs) and Path support fully implemented,
with sync and async (promises) operations.
Node: Operating system (Os) support fully implemented.
Node: Process support fully implemented.
Node: Environment variable handing now in new class: Environment.
Node: Renamed classes there where also in Browser,
so desktop frameworks like NW.js can compile them together now.
Example apps
NWjs: Added feature reading a text file using the Node Fs class.
NWjs: Added example feature using an imported npm package lpad.
NodeGui: NodeGui now works also on MacOS on ARM silicon!
SmallJS release 1.7
18-AUG-2025
Smalltalk library
NW.js framework
support for developing multi-platform desktop apps!
The GUI of these apps is made with familiar HTML and CSS.
They take up less memory than using Electron and are less complex to develop.
Core: Added full unit tests for class Fetch and consolidated it into Core.
Core: Implemented new JavaScript features since 2022.
In classes: JsObject, String, Error, Array,
Map, Set, Float16Array .
Examples
NW.js: New example app that shows off the features of the new framework.
AI: Updated UI, models selection, including GTP-5.
Build
Contributions: New section for 3rd party contributions.
Starting with CounterUsingMithril.
SmallJS release 1.6.1
25-MAY-2025
Smalltalk library
AI: Added support for local AI provider Ollama!
AI: Added support for conversation history for all AI providers.
Browser: HtmlSelectElement fully implemented with unit & GUI tests.
Examples
AI: Client: Now shows the conversation history
and sends it to AI providers to maintain the conversation context.
Shop: Shared the source code of these classes between client and server
Person, Product and Order.
Todo: Language selection now uses the nicer looking HtmlSelectElement .
Balls: The balls now have a nice shadow effect :-)
Compiler
Gives a compile error when a local variable duplicates an argument variable.
Build
The bash script install.sh now only installs npm packages for the core. installAll.sh installs npm packages for the examples too.
SmallJS release 1.6
18-APR-2025
This release is all about AI support for multiple providers,
with a new example application to show off the new capabilities.
Additionally, the compiler and build environment were improved.
Have fun!
Smalltalk library
Node & browser: AI support for OpenAI, Deepseek, Google AI and Anthropic!
With provider-neutral base class functionality.
Examples
New multi-provider AI example chat app!
New Counter example app using the Mithril library. (thanks @pdfernhout!)
Compiler
Inline assignment was fixed, e.g.: ^ ( a := 1 ) + 2 sets a to 1 and returns 3 .
Build
Build, clean and install scripts more modular.
Examples are now excluded from the default build.
Run buildAll.sh to include examples.
Global npm prerequisites removed, now using local packages and npx.
(thanks @pdfernhout !)
Documentation
SmallJS was presented an UK Smalltalk User Group (UKSTUG) meetup on 26-Feb-2025
The video of the presentation is here:
Richard Ronteltap - SmallJS
The presentation slides are here:
Why_SmallJS.pdf
SmallJS release 1.5
21-Jan-2025
This one is all about database support and multi-threading.
Smalltalk library
Database: SQLite database support added!
Database: Added async error handling to all supported databases.
Database: Added support for ST classes: Float, Date, Boolean, Uint8Array.
Node: Worker threads support added.
Enables development of multi-threaded Node.js apps.
Browser: Web Workers minimal support added, only to support the example app.
Examples
Web Workers example app added!
Electron: Split up Node and Browser compilation to prevent class name clashes.
Website
Added Web Workers example app to this site.
SmallJS release 1.4
8-Oct-2024
Examples
Electron example app added! Electron
enables development of multi-platform desktop GUI apps using web technologies.
NodeGui example app added! NodeGui
enables development of multi-platform desktop GUI apps
based on the QT library,
that are smaller, faster and easier to make than Electron apps.
Pharo Smalltalk server with SmallJS browser client added! Pharo
is an expansive, "traditional" Smalltalk with an active user base.
The SmallJS client uses a standard web API to communicate with the Pharo Zinc web
server.
Smalltalk library
Minimal Electron support added, only to support the example app.
Minimal NodeGui support added, only to support the example app.
If you want more complete support for these frameworks or if you want to contribute,
please open an issue in the SmallJS GitHub repo.
Website
The Playground now supports multiple statements and local variables.
Thanks to @aiksiongkoh for the suggestion.
SmallJS release 1.3
23-Aug-2024
Compiler
New Playground project that can evaluate any ST expression in realtime!
Signal error on duplicate local variables.
Signal error on newlines in string constants (like in JS).
Hide instance variables for class methods.
Smalltalk library
HTML Canvas 2D functionality fully implemented with supporting classes like: CanvasRenderingContext2d, Path2d, DomMatrix, DomPoint, ImageData, ImageBitmap.
Standardized 3D point operations on new class Point3d (iso DomPoint).
Enhanced reflexivity with canUnderstand: and respondsTo:.
Build
Improved ST debugging experience in Firefox (source mapping).
Browser project
Restructured all functionality and tests into separate components.
Only use HTML label elements when there's a for clause (less warnings).
New canvas component with visual tests for all canvas drawing methods.
Examples
New Balls example project with bouncing balls, using canvas functionality.
Website
Playground project added!
Bouncing balls example added.
Website is now mobile friendly.
SmallJS release 1.2
1-Feb-2024
Compiler
Implemented minimize to prevent generation library code not used by your app.
Stricter language syntax parsing.
Improved compile error handling.
Allow newlines in VARS and CLASSVARS declarations.
Build
Expanded detection of prerequisites.
Build scripts now exit on startup errors.
Added MacOS browser testing options.
Smalltalk library
Node: ST implementation of full fetch API..
Node: Consolidated Fetch and Streams classes form modules Node and Browser to Core.
Node: Added Linux default browser locations to .env.example files.
Examples
Shop: Implemented session management.
Todo: Made it working on Firefox on MacOS.
Todo: Added language selection option with 2 languages.
Shop Client SPA: Created new shop client app as a Single Page Application (SPA).
SmallJS release 1.1
25-Nov-2023
Examples
Added Counter example app. Can be used as a template for new apps.
Added Todo example app, with functionality for editing, adding, removing and sorting tasks.
Added Benchmark example app, comparing SmallJS performance to JavaScript.
Implemented full unit, API and GUI tests on all example apps on all supported browser.
Build
Various fixes and improvements for first time use, especially on MacOS.
Added build scripts to check dependencies and build the complete environment.
Made language extenion an official *.vsix package for deployment.
Compiler
Added -t and +t options to skip compiling unit tests on selected libraries.
SmallJS release 1.0
30-Aug-2023
Initial commit of SmallJS on GitHub supporting Smalltalk to JavaScript compilation for browsers and
Node.js.
For development in browsers, a workable part of the DOM is encapsulated in Smalltalk.
For Node.js, the Express server is embedded plus support for 3 databases: PostgreSQL, MariaDB and
MySQL.
It should run on Linux, MacOS and Windows.
It's configured for using the Visual Studio Code IDE by default.