Download uLisp

Version 3.3

The 32-bit version of uLisp for ARM, ESP, and RISC-V microcontroller boards now extends its array support to include bit arrays.

Bit arrays will be particularly useful in the microcontroller-based applications that uLisp is aimed at as they can efficiently store the state of digital I/O lines, digital signals, or display pixels. You could use them as the basis for a data logger, low-speed logic analyzer, or other digital application.

uLisp's implementation supports bit arrays with an arbitrary number of dimensions, and packs bit arrays as efficiently as possible, so they take up a factor of 32 less storage than the equivalent-sized integer array.

Latest versions

There are currently four actively maintained versions of uLisp. Download the correct one for your platform:

AVR version

Download the latest AVR version of uLisp for the Arduino Uno, Arduino Mega 2560, ATmega1284, and ATmega4809 platforms here:

AVR Version 3.3 - 1st June 2020

or get it from GitHub at

ARM version

Download the latest ARM version of uLisp for the Arduino Zero, Arduino MKRZero, Adafruit M0 boards, Adafruit M4 boards, Adafruit PyBadge/PyGamer, Adafruit nRF52840 boards, BBC Micro Bit, Calliope mini, MAX32620FTHR, and Teensy 4.0/4.1 platforms here:

ARM Version 3.3a - 1st July 2020

or get it from GitHub at

ESP version

Download the latest ESP version of uLisp for the ESP8266 and ESP32 platforms here:

ESP Version 3.3 - 1st June 2020

or get it from GitHub at

RISC-V version

Download the latest RISC-V version of uLisp for the Sipeed Maixduino, MAiX One Dock, and MAiX BiT boards here:

RISC-V Version 3.3 - 1st June 2020

or get it from GitHub at

Other platforms

These versions are also available, but are not currently up to date with the newer features:

MSP430 version

Download the version of uLisp for the Energia MSP430 platforms here:

MSP430 Version 2.7c - 20th June 2019

or get it from GitHub at

STM32 version

Download the STM32 version of uLisp for the Maple Mini and Blue Pill platforms here:

STM32 Version 3.0b - 11th January 2020

or get it from GitHub at

Installing uLisp

This download is a single text file. To compile it in the Arduino or Energia IDE either save it as a text file and rename it to a .cpp file, or copy and paste the text into a new empty project file.

Download the latest Arduino IDE from, or the latest Energia IDE from

To install uLisp on the BBC Micro Bit see BBC Micro:bit.

If you're using uLisp with the Arduino IDE on Debian or OpenBSD see these threads on GitHub: and

Note that saved images are not generally compatible between different versions of uLisp.

Compile options

The uLisp sources provide the following compile options:

Option Default Description
checkoverflow * enabled Generates an error if underflow/overflow occurs in arithmetic operations.
resetautorun disabled Loads, and optionally runs, an image using load-image on reset.
printfreespace enabled Prints the number of free objects before the uLisp prompt.
printgcs disabled Prints the amount of space reclaimed after each garbage collection.
sdcardsupport disabled Provides SD card support using with-sd-card.
gfxsupport ** disabled Provides graphics extensions for use with a suitable display.
lisplibrary disabled Evaluates the Lisp definitions provided in the Lisp Library on reset.
assemblerlist *** enabled Generates an assembler listing from defcode.
lineeditor disabled Provides a line editor for use when using uLisp from a terminal.
vt100 disabled Provides parenthesis matching on VT100-compatible terminals.

* Not applicable to the versions with floating point.
** Only applicable to the versions with graphics extensions; currently ARM, ESP, and RISC-V.
*** Only applicable to versions with defcode; currently ARM and RISC-V. 

Older versions

See Older versions.

Test suites

The following files contains test suites I use for testing each release of uLisp. You may find these useful if you are porting uLisp to another platform:

Test suite - 8/16-bit version (ATmega and MSP430)

Test suite - 32-bit version (ARM and ESP8266)

Test suite - Floating point (ARM and ESP8266)