HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
jmoenig
Snap
JavaScript2019–2026
jmoenig / Snap

Snap

a visual programming language inspired by Scratch

4Distinct people
6Mentions
0Explicit recommenders
1.6KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

a visual programming language inspired by Scratch

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year6 dated mentions

Observed mentions: 2019-01-03 06:37:10 UTC to 2026-09-12 01:54:37 UTC.

012342019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC202
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC000
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC000
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC000
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC000
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC000
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC000
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC404

What Hacker News says

6 sources
When I looked at Scratch six months ago, its lists were deliberately handicapped in function. They could only contain text or numbers; they could not contain other lists. Nor could they be passed as parameters to functions (!!), which really made me say "Nope, this is not what I'm going to use to teach programming to kids". I looked at Logo, and was drawing up lesson plans when I noticed Brian Harvey (the primary designer of Berkeley Logo which I was planning to use) had a lot of activity on this other repo. What in the world is https://github.com/jmoenig/Snap/ and why is Brian Harvey contributing to it so much? (Looks it up). Oh. OH. And so I taught my class using Snap!, because it has: - Lists that are proper first-class types, and can contain anything, including other lists, and also blocks - Blocks (functions) that are also proper fir
Read the rest
st-class types, and can take anything as parameters, including lists and blocks. - Blocks that can create and return other blocks, thereby enabling functional programming - All the standard list-handling primitives you would expect, like `filter` and `map` All of which was missing from Scratch when I looked at it six months ago. Scratch is a toy language, with a deliberate ceiling that you can't get past because of the language's design. Snap! is a real programming language with no ceiling, with the visual appearance of a toy. It takes longer to do anything in Snap! than in a professional language like Lisp or C# or Go or ... well, all of them, because dragging blocks together is a lot slower than typing. But you can do anything you need to in Snap!. There is no artificial limit that blocks you from going farther, the way Scratch has. P.S. Saying that Scratch is artificially limited is not meant as a dig against the language. It's a deliberate design choice, and it's a fine choice if your intent is to teach people the very basics and then graduate them to another language. It's a choice I disagree with, because I prefer the way Snap! has implemented the same pedagogical choice (you can create tutorials with a limited set of blocks, to avoid presenting complete beginners with an overwhelming array of choices). But it's a defensible choice in many cases (many kids taking a programming class will not have the aptitude — and those who do turn out to have the knack for it can be graduated to Snap! really easily and not have to relearn everything).
In λ Snap – An inviting programming language for kids and adults for CS study
Fair that your path worked differently for you. But "no connection to the real world" is hard to sustain once you look at what people actually build with Snap!/Scratch. The ecosystem is full of bridges to physical stuff: Cameras, microphones, audio, pen plotters, 3D (BeetleBlocks). Snap! 12.1 (video from a few days ago) adds body-language recognition, Bauhaus-style shape compositions, first-class Processes, translation updates: https://www.youtube.com/watch?v=ID7wYxzHUAc Arduino / micro:bit / boards (Snap4Arduino, MicroBlocks, many hardware libraries): https://www.youtube.com/watch?v=Ltzlzk_zkys&list=PL5OeDsbY1E... Robots (Finch, Hummingbird, Lego NXT, drones): https://www.youtube.com/watch?v=6_0EqIbTlkk Sewing machines (TurtleStitch -- embroidery from blocks; one of my favorites): https://www.youtube.com/watch?v=K6ra5ThxkrE Web APIs and
Read the rest
IoT: https://www.youtube.com/watch?v=l_P7MoBG250 ML/AI and digital fabrication (Ken Kahn's eCraft2Learn): https://project.ecraft2learn.eu/ The "what's this? how do I make a thing like this?" curiosity you describe is exactly how a lot of people get pulled in -- making something move, blink, sing, or stitch on a machine they can see, rather than learning abstract syntax first. Blocks are the on-ramp; the project is the motivation. Different audience than yours, maybe. But "just a toy walled off from reality" undersells what this community has been doing for decades. Snap! also teaches real computer science at college level while staying accessible to kids -- not a stripped-down kiddie language. Brian Harvey: "Snap! is Scheme disguised as Scratch" (though he notes the original intent was closer to Logo disguised as Scratch): https://forum.snap.berkeley.edu/t/hygienic-macros/3258/6 Re alanbernstein's point about keyboard vs GUI: Snap! is not keyboard-hostile. It has a keyboard editor for scripts -- build and edit whole scripts without the mouse, block search from the keyboard, infix arithmetic expressions typed left-to-right. Manual chapter: https://docs.snap.berkeley.edu/user-interface-elements/#sec-... Demo (typing formulas from the keyboard): https://www.youtube.com/watch?v=ahHAl3p3gEU Full IDE accessibility (screen readers etc.) is still a work in progress; Jens and Brian document what's there now: https://github.com/jmoenig/Snap/issues/1498
In λ Snap – An inviting programming language for kids and adults for CS study
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.
Read the rest
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.
In Squeak 6.1
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.
Read the rest
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.
In Squeak 6.1
I also like the fact that snap is Free software - I'm still not able to find out from the scratch 3.0 website if scratch can be easily self-hosted, modified etc? Snap is on github: https://github.com/jmoenig/Snap It also is based around js, and can import scratch 2.0 sketches (not sure how well that works in practice) - I wonder if there's any collaboration with MIT scratch moving off of flash to js - or if they did everything from, well, scratch ?
In Scratch 3.0

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.