Trigger Alert: The Scheme implementation described here was vibe coded (though strongly guided), so if the very idea of vibe coding disturbs you, you might want to move on to another post. This post, however, was written by a human.
Implementation Highlights
* R7RS-Small: Fully conforms to the R7RS-small standard.
* Tail Call Optimization (TCO): Proper tail recursion by the interpreter (though Interleaved JS and Scheme code may still cause stack overflow.)
* First-Class Continuations: Full support for call/cc.
* JavaScript Interop: Seamless calling between Scheme and JavaScript, including shared data representation and transparent boundary crossing. Scheme closures and continuations are first-class JavaScript functions. JavaScript global definitions are automatically visible in the Scheme global environment.
* Browser Scripting: Replace JavaScript in web apps with <script type="text/scheme"> tags. Direct evaluation of Scheme via a JavaScript function is also supported.
* Node.js REPL: Command line REPL with history and multiline support.
* Browser REPL: Browser-based REPL via a custom <scheme-repl> web component.
The GitHub repo is at https://github.com/mark-friedman/scheme-js. There is a version of the browser-based REPL that you can try at https://try.scheme-js.org.
There is also a blog post about it with some more details at https://furious-ideas.blogspot.com/2026/02/scheme-js-scheme-...
Right now it is about beta level. The language implementation is fairly solid, I think (and hope), but the REPLs are definitely a little wonky. Debugging features should be coming relatively soon. Please file bugs as you encounter them. Please be kind!