Spells[fn:1] is a collection of R6RS libraries intended to provide access to common (but non-standardized) features of Scheme implementations in a uniform way, hence easing the task of writing useful programs and libraries that work across several implementations1.

While you can use Spells "on its own" on a supported implementation, by creating appropriate symlinks so your implementation can find the library files, there is a companion project, called SPE, which makes this a bit easier[fn:3]. It's basically a shell script and a bit of Scheme code that handles the symlinking and environment-variable tweaking for you.


Spells has been tested on Ikarus and Ypsilon. It currently provides the following libraries, beyond ones that implement features readily coded using only R6RS functionality:

  • (spells filesys) — File system interface
  • (spells foreign) — Foreign function interface -- call C functions directly from Scheme, using an Ikarus-style, but implementation-independent FFI.
  • (spells process) — Operating-System processes


Spells works with Ikarus (from bzr) and Ypsilon (from SVN).

  • Ikarus — A recent bzr checkout (>= 1854) should work out of the box.
  • Ypsilon — The latest SVN checkout of Ypsilon should work out of the box.

You'll need the git and bzr revision control systems, as spells itself is managed with git, and depends on the SRFI collection, which is using bzr.

Additionally, if you want to use the (spells foreign) library, you'll need a the gcc C compiler, which is used during the build to figure out the size of the C types on your platform.


The recommended way to use spells is with SPE. Download SPE, and run the fetch-systems script, which will fetch spells and the SRFI collection, and then run the test suite (subsitute ypsilon below for your implementation):

 git clone git://github.com/rotty/spe.git
 cd spe
 ./scripts/fetch-systems ypsilon
 ./scripts/launch ypsilon test spells

If you do get errors, please drop me a mail.


[fn:1] "spells" can by read as an acronym: Spell's a Portability Environment Library for Lots of Schemes

[fn:2] Note that the R6RS version of Spells is a recent reincarnation, the old (R5RS) Spells has been abandoned.

[fn:3] Again, the old (R5RS) SPE, which created modules for the target implementations module system, has been abandoned.