A practical Scheme interpreter written in JavaScript

Usage no npm install needed!

<script type="module">
  import acransacBiwascheme from 'https://cdn.skypack.dev/@acransac/biwascheme';



This is a fork. All credits go to the original author Yutaka Hara and the maintainers. Copyright (c) Yutaka Hara

See the license file in the repository or distributed with the npm package

biwascheme logo

BiwaScheme is a Scheme interpreter written in JavaScript.

Works with web browsers (including mobile devices) and Node.js.

This fork aims to adapt the upstream BiwaScheme for Node.js to web workers and Node's worker threads. Also, the system APIs (sockets, filesystem, imports...) are neutralized, expecting Scheme programs running in threads to be closed systems.


see http://www.biwascheme.org/


(Or you can just copy the file from ./release.)

How to use

Just load biwascheme.js (or biwascheme-min.js) and write Scheme code.

<!DOCTYPE html>

<div id="bs-console"></div>

<script src="biwascheme.js"></script>
<script type="text/biwascheme">
(display "hello, world!")


How to use with node.js to run a biwa script

  1. $ npm install biwascheme

  2. create a file a.scm:

    (display "Hello, world!") (newline)

  3. $ biwas a.scm

How to use from inside node.js as a module

  1. $ npm install biwascheme

  2. create a file a.js:

    var BiwaScheme = require("biwascheme"); BiwaScheme.run("(+ 1 2)"); // or BiwaScheme.run_file("a.scm");

  3. $ node a.js


BiwaScheme implements most of the features of R7RS small, including first-class continuation and tail call optimization.

Major lacking features are:

  • syntax-rules
  • Exceptions
  • Library system

There are two limitations that arise from JavaScript. These will not be fixed (it's technically possible to fix but will be very inefficient).

  • Strings are immutable
  • Integers are not distinguished from float

Building biwascheme.js

See doc/dev/build.md




BiwaScheme logo by @jcubic: Creative Commons Attribution 3.0




Yutaka HARA (yhara) yutaka.hara.gmail.com http://twitter.com/yhara_en