The Nujel Programming Language

Nujel is a Lisp dialect intended to be small, fast and easy to embed in existing codebases.

Nujel is small

Currently (2022-09-02) a static Linux binary using the musl libc is about 312KB in size. Dynamically linked ones are about 276KB and using UPX on that one yields a 92KB binary.

Nujel is fast

Nujel is already quite fast, at least compared to other tiny/embedded lisps/schemes. It will get quite a bit faster in the future as well since right now there are still lots of obvious optimizations available.

Nujel is embeddable

To make embedding easier Nujel is written mostly in Nujel itself, only requiring a small VM which is written in C99 that needs no external dependencies apart from the libc. You can also generate a single header file for Nujel using the make nujel.h command which you can then use like most stb libraries.

Nujel is portable

Because of the embeddable nature of Nujel it should be quite portable, since the existing codebase might be targeting something other than *nix/amd64. To make sure that Nujel stays portable we make extensive use of the CI to test on various platforms, as well as manual testing of less common configurations. The following Platforms are supported/tested:

μArch OS Toolchain Status
amd64 Windows Server 2019 | 2022 mingw32 | mingw64 | ucrt64 | clang64 GitHub CI
amd64 MacOS 11 | 12 clang GitHub CI
amd64 Ubuntu 20.04 | 22.04 gcc | clang GitHub CI
amd64 Arch Linux gcc | clang | tcc-git | bmake+gcc SourceHut CI
aarch64 Debian Sid gcc SourceHut CI
amd64 Guix | Rocky Linux | Alpine Linux gcc SourceHut CI
amd64 FreeBSD | OpenBSD | NetBSD system default SourceHut CI
armv7 | aarch64 RaspberryPI OS gcc Semi-regular manual testing
amd64 DragonflyBSD | HaikuOS system default Irregular manual testing
WASM Modern Browsers Emscripten Irregular manual testing
macppc (big endian) OpenBSD gcc Irregular manual testing
amd64 Windows 10 Visual Studio Irregular manual testing (still not quite stable)