There also are low.js and Moddable:

https://www.neonious.com/lowjs/

https://www.moddable.com/

Low.js interprets the actual JS code stored on the embedded system which already contains the runtime. Moddable compiles JS to a byte code on the PC and builds an image to transfer to the embedded chip. The XS runtime of Moddable probably is closer to a full development pipeline, for people used to low-level embedded development.

Low.js was more high-level, when I tried it you did not need to know anything about embedded, just send JS code to the embedded system with low.js on it. Moddable required full knowledge of C and embedded development.

Moddable directly supports almost all of ES 2018.

Low.js uses Duktape with their own stuff added and last time I checked required transpilation of the JS code to ES5.

Moddable and Espruino have a slightly more restrictive license for when u want to maybe monetize your project.

Duktape and Jerryscript are way bigger open-source projects (on github at least). I used almost all of the interpreters to do a hello world on a microcontroller. They all work great! I found Duk to have a slightly cleaner API for bindings, for example writing to the serial port from JS land.

https://github.com/svaarala/duktape

https://github.com/jerryscript-project/jerryscript