LIPS Logo: Scheme (lisp dialect) in JavaScript

Powerful Scheme lisp in JavaScript


LIPS is poweful Scheme based lisp interpreter written in JavaScript. The name is recursive acronym which stands for LIPS Is Pretty Simple. The interpreter have very good integration with JavaScript.

Key features of the interpreter:

1.0.0 Beta Demo

Check Everything you need to know about Scheme and try the interpreter while you will read the document.

You can also look at Doumentation for 1.0.0 (WIP).


When you're learning Scheme language, you can run the REPL directly on any page that have Scheme tutorial you're learning from. It even work with PDF files and new empty tab (at least in Chrome). Drag this link LIPS REPL to your bookmarks. When you click on the bookmark it will run the interpreter.

The bookmark can also be used to add REPL to your LIPS Web application.

NOTE: it will not work on this page, because it already have terminal on it and because it have not compatible LIPS version included.

It may also not work no sites that are protected with Content Security Policy


When using LIPS interpreter in browser you need to include the main script file.

If you want to use Webpack see wiki page for details.

<script src=""></script>

or jsDelivr that is somewhat faster:

<script src=""></script>

You can put LIPS code directly in script tag:

<script type="text/x-scheme" bootstrap>
(let ((what "world")
      (greet "hello"))
   (display (string-append "hello" " " what)))

NOTE: If you want to load started library, you should use boostrap attribute that will load it for you. You can optionaly specify the location of the files.

You can also use src attribute to link to source file.

<script type="text/x-scheme" src="example.lips"><script>


Terminal with LIPS Scheme interprer

npm install -g @jcubic/lips@beta

## if installed as global just use
lips foo.lips
## you can also run code as string
lips -e '(print "hello world")'

You can also write scripts using LIPS with shebang

Crete file foo.scm

#!/usr/bin/env lips
(let ((what "World"))
  (print (string-append "Hello " what)))

Then run

chmod a+x foo.scm
./foo.scm # or just foo.lips depend on your $PATH

Direct API

You can also run execute LIPS programaticaly (in Node.js/Webpack).

var lips = require('@jcubic/lips');
// or
import lips from '@jcubic/lips';

Then use it like this:

lips.exec('(let ((a 10) (b 20)) (* a b))').then(result => {
    results.forEach(function(result) {
        if (typeof result !== 'undefined') {