Shen for Common Lisp
Common Lisp Makefile
Switch branches/tags
Clone or download
Latest commit a0ff8d7 Jun 16, 2018
Failed to load latest commit information.
.travis.yml Updated changelog for v2.3 Jun 1, 2018
boot.lsp Reimplement lisp. prefixed native calls in the compiler May 15, 2018

Shen Version Build Status

Shen for Common Lisp

Shen for Common Lisp by Mark Tarver, with contributions by the Shen Language Open Source Community.

This codebase currently supports the following implementations:

This port acts as the standard implementation of the Shen language. It is also the fastest known port, running the standard test suite in 4-8 seconds on SBCL, depending on hardware.

Bug reports, fixes and enhancements are welcome. If you intend to port Shen to another variety of Common Lisp, consider doing so as a pull request to this repo.


shen-cl supports calling underlying Common Lisp functions by prefixing them with lisp..

(lisp.sin 6.28)

Common Lisp code can also be injected inline using the (lisp. "COMMON LISP SYNTAX") syntax. The lisp. form takes a single string as its argument. Also keep in mind that shen-cl puts Common Lisp into case-sensitive mode where CL functions and symbols are upper-case so they don't conflict with symbols defined for Shen.

(lisp. "(SIN 6.28)")

(lisp. "(sin 6.28)")
The function COMMON-LISP-USER::sin is undefined.

The function shen-cl.exit is included, which takes a single integer argument, terminates the process, returning the argument as the exit code.


See for information on what tools you will need installed to build and work on shen-cl.


The Makefile automates all build and test operations.

Target Operation
fetch Download and extract Shen sources.
build-X Build executable.
test-X Run test suite.
X Build and run test suite.
run-X Start Shen REPL.
release Creates archive of compiled binaries.

X can be clisp, ccl, ecl, sbcl or it can be all, which will run the command for all of the preceding.


An executable is generated for each platform in its platform-specific output directory under bin/ (e.g. bin/sbcl/shen.exe). Per typical naming conventions, it is named shen.exe on Windows systems and just shen on Unix-based systems.

Startup scripts can be specified on the command line by preceding them with a -l flag. If any startup scripts are specified this way, they will be loaded in order and then (shen-cl.exit 0) will be called. If none are, the Shen REPL will start as usual. Either way, all command line arguments will be accessible with (value *argv*).

When starting Shen via make, command line arguments can be passed through like this: make run-sbcl Args="-l bootstrap.shen -flag".


Archives of pre-built binaries are created using the make release command. They will appear under release/, named with the operating system and current git tag or short commit hash.

Currently, only the license file and the SBCL build are included (named shen[.exe]).

Each tagged release on the project downloads page should have a set of pre-built archives. Be sure to archive the build of that specific commit, like this:

make pure
git checkout v1.2.3
make fetch
make sbcl
make release