upvote
After Self, the short lineage is Self (~1992, Smith & Maloney) -> Squeak port (Maloney & Ingalls, Etoys/Scratch 1) -> two independent JavaScript reimplementations, plus Squeak-in-the-browser via SqueakJS. I dug into this same question a decade ago and posted a longer treatment -- my email exchange with Alan Kay on MVC vs Morphic vs watchers, plus replies on Self's "soup of objects" UI. Good philosophical complement to the architectural links below:

https://news.ycombinator.com/item?id=8841428

Self Morphic is not a classical class hierarchy. The handbook describes parallel traits objects (shared behavior) and prototypes (structure), with instances delegating via parent* slots and "copy-down" differential prototypes. Bottom-up: morph copy, tweak, factor shared behavior into a traits object. Worth reading section 7.3 alongside pjmlp's links.

https://handbook.selflanguage.org/2017.1/morphic.html

The Squeak port is single-inheritance Smalltalk classes -- closer to what most people mean by "OOP UI toolkit." Etoys is Morphic. Full Squeak Morphic in a browser, no install:

https://try.squeak.org/

Squeak 6.1 release notes (Objectland, tree morph overhaul):

https://squeak.org/release_notes/6.1/

In JavaScript there are two Morphic implementations people often conflate. Same family, not the same code.

Dan Ingalls's Lively Kernel / Lively Web (~2008, Sun) is the full live system: modular core/lively/morphic/ (Halos, Serialization, Scrubbing, Connectors, constraints), plus IDE, parts bin, world persistence. JSConf 2012 demo:

https://github.com/LivelyKernel/LivelyKernel

https://github.com/LivelyKernel/LivelyKernel/tree/master/cor...

http://youtu.be/QTJRwKOFddc

Jens Monig's morphic.js (~2010, BYOB4/Snap!) is a separate codebase: single-file Canvas kernel (~13k lines), World/Hand/stepping/dirty rects, template peel-off, ScrollFrame inertial pan. Jens names Ingalls's LK as the gold standard but says it is not a direct port -- though fullCopy() was ported almost literally from Squeak, comments included. Snap bundled it from day one (2013-03-16). Standalone extract:

https://github.com/jmoenig/Snap/blob/master/src/morphic.js

https://github.com/jmoenig/Snap/blob/master/docs/morphic.txt

https://github.com/jmoenig/morphic.js

https://wiki.squeak.org/squeak/6550

https://en.wikipedia.org/wiki/Morphic_(software)

On multiple inheritance: neither JS port uses it, and Self Morphic didn't really either. LK cheats with an explicit Trait composition layer (Object.subclass plus Trait(...) mixins). Snap cheats with Squeak-style copying (fullCopy, isTemplate peel-off). The live feel comes from copyable morph trees and shared behavior, not MI.

If you want one more readable architecture tour beyond sin-ack's intro, the Self handbook chapter 7 is still the root document; everything else is commentary on it.

reply
I had vouched for your comment but it did not have any effect. Please email Dang, it seems to be a false positive of some sort.

Love your long comments.

> Oh I've posted much longer than that (see the one I linked) without getting flagged

Those were simpler times

reply
I vouched as well, but it's [flagged][dead] not just [dead] which is usually the result of user moderation, not the mods or auto moderation (which typically will just render as [dead] in either case). Which was odd because it was [flagged][dead] by the time it was 4 minutes old (maybe earlier, that's just when I saw it).
reply
I am just hoping and praying somebody will post something about Bakelite. Hold my beer!

Oh shit, I just missed a Bakelite discussion 17 days ago!

https://news.ycombinator.com/item?id=49026992

But there's a comment from 9 days ago that's still replyable. ;)

reply