SmallJS: Smalltalk-80 that compiles to JavaScript
18 comments
·August 24, 2025bradrn
See also: https://www.amber-lang.net/
anilakar
I wanted to try Smalltalk earlier and discovered Pharo, but I found it to be just one huge antipattern as everything involved a single combined toolchain/IDE/runtime virtual machine image. Amber's documentation seems to have screenshots of the very same object inspector.
If I want to build a wooden chair, I don't want to start by learning to use a steel metal punch to create a panel saw first...
zelphirkalt
What exactly is the anti-pattern? Just that it is image based? There is Iceberg for exporting to git afaik. Haven't used it in depth though.
scotty79
I think long lived state is the problem.
In Pharo your entire project along with its runtime, code, data and IDE is one long lived intertwined and dispersed state. I was never really sure if this is necessarily a problem or not.
But today I had an interesting idea. Pharo is Factorio of programming. You are evolving living, functioning system using itself. And we know most of Factorio games end up as ad-hoc tangled mess, where new things are added rather on the side than old things being properly refactored. So if your Factorio factories are always pristine examples of order you should be fine with Pharo. If not, you might be better off with something like PHP or Fermyon Spin which have app state living no longer than a single request-response. With long lived state neatly and separately held in the database and source files.
bowsamic
That’s the core of the smalltalk-80 design: that everything in the environment is an object you can send messages to, and the OS “doesn’t exist”
cess11
Having GUI tooling to inspect, debug and develop integrated in the execution environment is kind of Smalltalk's thing. It's like a Common Lisp with more clicking in that regard.
It's rather neat, and means you can extend your development environment in the same way you develop your applications. If you want to extend the inspector for a particular type of object you can do that. Compared to writing plugins for Eclipse or IntelliJ it's a trivial exercise.
GT does it too, though explicitly aimed at tool development rather than application development: https://gtoolkit.com/
In a sense it's the original vibe coding environment.
theknarf
I mean, there is a reason people don't write Smalltalk anymore xD
dontlaugh
Looks cool.
Why the Romanian flag?
amszmidt
Its not the Romanian flag (order of color is different).
Hasnep
On the original smalltalk balloon the red, yellow and blue are in the same order as the Romanian (and Chadian) flag, so maybe the question should have been why is it not the Romanian flag?
amszmidt
Dan Ingalls answer is much more interesting than anything I could explain ...
From https://lists.squeakfoundation.org/pipermail/squeak-dev/1998...
Ralph -
Many times I have browsed past your article "About the Smalltalk
Balloon" and been tempted to add to the little bit of history that you
have there. While your link is entitled "Why a hot-air balloon is the
symbol of Smalltalk," you never really answer the question. The time
has come to tie up that loose end. Return with us now to those
thrilling days of yesteryear, and
The Real Story About the Smalltalk Balloon
Everyone in our group wanted to challenge the ivory tower image in
Byte's special issue on Pascal, because in fact we were all working
intensely to get Smalltalk-80 out the door from Xerox at the time.
The cover of that issue depicted the "land of Smalltalk" as a remote
island, and that triggered a connection for me out of which was born
the fanstasy of liberating Smalltalk from the ivory tower by balloon
ascent.
Here is the connection...
My favorite book from youth was The Mysterious Island, by Jules Verne.
It is the story of an engineer, Cyrus Harding, who gets blown far
afield in a storm during a balloon surveillance mission in the 1860's.
He ends up stranded on an island but, through ingenuity and a bit of
luck, he manages to recreate most of the accomplishments and comforts
of civilization on his own (with a little help from an amiable
orangutan ;-). Cyrus Harding became my childhood standard for
resourcefulness and the conviction that anything can be accomplished
if you are clever and persistent.
The fantasy of a balloon as the vehicle for Smalltalk's release stuck
with me from then on. When the opportunity came to design the cover
for the Byte issue on Smalltalk, I made the suggestion of the balloon
lifting off from the island shown on the Pascal cover, and everyone
picked up on it. Robert Tinney executed the wonderful graphic that we
know so well, and the rest is history.
- Dan
P.S. There is a further coincidence in this particular literary
allusion: It is revealed at the end of The Mysterious Island that the
island is actually the base of operations for a more well-known Verne
character, and that character happens also to be the childhood hero of
a more well-known figure in the history of Smalltalk.
habedi0
This is pretty cool!
Unirely01
[dead]
revskill
Js is the best.
Nice, a new update. I remember playing with both small-js and Amber a longtime ago. Very cool projects but I am not a JavaScript developer so I always had friction using both projects so I settled on Pharo. Off topic: if you like long running image based development you can also get that with some lisps, for example, SBCL with frequently writing a new core image file - easy to do and good for applications where you have a massive amount of in-memory persistent data you work with.