Download uLisp

Releases 4.4 and 4.5

Release 4.4 has been restructured to make it easier to extend uLisp with your own functions. You can now include extra user functions in a separate file; the advantage of this is that you can extend uLisp without needing to edit the original uLisp source file, and you can update uLisp to a new release while keeping your same extensions file unaltered. For details see Adding your own functions.

In addition, Release 4.4 has the following new features:

  • The equal function compares strings and lists, in addition to the objects handled by eq.
  • The subseq function can now be used to create subsequences of lists as well as strings.
  • The search function lets you search for a pattern in string or list.
  • The apropos function lets you search for built-in and user-defined functions and symbols matching a specified substring.
  • The unwind-protect, ignore-errors, and error functions provide advanced error handling.
  • Improved support for several platforms.

The ARM version of uLisp Release 4.5 adds support for the two new Uno R4 boards from Arduino, which are based on the Renesas RA4M1 ARM Cortex M4 CPU.


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

AVR version

Download the AVR version of uLisp for the Arduino Mega 2560, ATmega1284, and AVR DA/DB-series platforms:

AVR Release 4.4b - 3rd April 2023

or get it from GitHub at

AVR-Nano version

Download the AVR-Nano version for the Arduino Uno, Arduino Nano, and Arduino Nano Every, which don't have enough program space for the AVR version:

AVR-Nano Release 4.4b - 3rd April 2023

or get it from GitHub at

ARM version

The ARM version of uLisp supports the Arduino Zero, Arduino MKRZero, Adafruit M0 boards, Adafruit M4 boards, Adafruit PyBadge/PyGamer, Adafruit nRF52840 boards, Adafruit Clue, BBC Micro Bit, Calliope mini, MAX32620FTHR, Teensy 4.0/4.1, RP2040-based boards, and Arduino Uno R4 boards:

ARM Release 4.5a - 16th January 2024

or get it from GitHub at

ESP version

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

ESP Release 4.4d - 30th June 2023

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 Release 4.4b - 3rd April 2023

or get it from GitHub at

Commented versions

Commented versions are available from the above GitHub links which are identical to the above source files, but include comments to explain the C functions.

Installing uLisp

The download is a single text file. To compile it in the Arduino 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. You can download the latest Arduino IDE from

Select the correct Board option for your platform on the Tools menu, select the USB port from the Port menu, and upload uLisp. You should then be able to select Serial Monitor from the Tools menu, and interact with uLisp.

The following pages give specific advice for installing uLisp on these platforms:

AVR DA and DB series boards

BBC Micro:bit and Calliope Mini

Calliope mini

Maxim MAX32620FTHR

RP2040 boards

Sipeed MAiX RISC-V boards

Teensy 4.0 and 4.1

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.
extensions **** disabled Includes Lisp functions defined in a separate extensions file.

* Only applicable to the integer-only versions: currently AVR and AVR-Nano.
** Only applicable to the versions with graphics extensions; currently ARM, ESP, and RISC-V.
*** Only applicable to versions with defcode; currently ARM, RISC-V, and AVR.
**** Not applicable to the AVR-Nano version.

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 Release 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 Release 3.0b - 11th January 2020

or get it from GitHub at

Older releases

See Older releases.

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 (AVR uLisp)

Test suite - 32-bit version (ARM, ESP, and RISC-V uLisp)

Test suite - Floating point (ARM, ESP, and RISC-V uLisp)