(My daughter tried to use Scratch, but it's too difficult to cut&paste and move blocks of code, she preferred a text based programming language, so YMMV.)
I'm not a huge fan of scratch (for obvious reasons I'm not the target audience!), but my 10 year old can't get enough of it.
Recently we started digging into some of the more "advanced" concepts (basically arrays and functions) and I was surprised how far you could actually get with the system.
I'm trying to move him off scratch on to something text based, but imo for a kid it's hard to go wrong starting with Scratch.
I upgraded my son from Scratch to Snap! (https://snap.berkeley.edu/). Snap has a much higher ceiling, including collections, first-class code pieces, higher-order functions etc. It pretty openly describes itself as a "Scheme disguised as Scratch" :-)
A pragmatic pedagogical thing I love with Snap! is the ease of creating custom blocks, including macros / custom "C-shaped" control structures. If you have some time, this allows you to "scaffold" helpers that will allow him to create interesting stuff while focusing on things you want him to learn and hiding issues you don't.
* Example: I wanted to teach rendering a custom costume with e.g. health bar or text label. My son is already familiar with Snap!'s turtle-drawing primitives that can render lines & text but there was an impedance mismatch — you draw on the screen, and it does support snapshotting all current drawings to create a costume, but using that involves some careful save-and-restore of much global state (e.g. pen color). I built him a "draw costume" block that takes a body of turtle-drawing commands and affects only current character's costume.
If you ask me, Snap! should have had similar API built-in; but what's more important it was easy for me to add one that looks and feels as-if it was builtin. This way I can decide what I want to teach ("you can compute how you appear") and what is incidental complexity.
The social angle of sharing ones games with friends and getting likes etc. and the ability to quickly play it off a link are huge factors that keep motivation high for kids.
This is underappreciated. I've been teaching my son JS but his main gripe is that he doesn't have an easy way to share his stuff in a quickly playable format.
Time to teach him nextjs and get him deploying to vercel!! (Or at least set up a template for him!)
Also, out of curiosity, have you been teaching him JS or TS? I feel like it is a sin to not use TS these days, but not sure if it makes it easier or harder for a new young programmer to learn.
I'll check that out. I'm not really sure about a narrow js framework. They're so abstracted away from most of the skills that are transferable between languages and technologies that i don't think they're useful as teaching tools.
There are also a number of similar (block-based) tools that let you create your own custom blocks and see the code behind them - e.g. Blockly (https://developers.google.com/blockly)
For example:
* https://news.ycombinator.com/item?id=23892698
* https://news.ycombinator.com/item?id=26050913
(My daughter tried to use Scratch, but it's too difficult to cut&paste and move blocks of code, she preferred a text based programming language, so YMMV.)