Common Lisp implementation on .NET. Lisp source is compiled to CIL (Common Intermediate Language) and runs on the .NET JIT — so the same Lisp image runs on Windows, macOS, and Linux across x86-64 and ARM64 without per-platform porting work.
Broadly conforms to the ANSI Common Lisp standard — verified against the ansi-test suite.
- Embedding Common Lisp in .NET applications.
dotcl.runtimeis a regular .NET library; you load it from any C# / F# / VB.NET project, evaluate Lisp code, and call back and forth. - Writing .NET code in Lisp. The
dotnet:package gives direct access to .NET types:(dotnet:new "System.Text.StringBuilder"),(dotnet:invoke sb "Append" "x"),(dotnet:static "System.Math" "Sin" 1.0). You can subclass .NET types from Lisp viadotnet:define-class— the compiler emits real .NET classes, so frameworks like MAUI, ASP.NET Core, and MonoGame just see them as ordinary subclasses. - Cross-platform CL with NuGet ecosystem access. Any NuGet package is reachable from Lisp; any Quicklisp library that doesn't rely on SBCL-only internals tends to work too (asdf, alexandria, etc. are routinely loaded).
# One-time bootstrap: cross-compile dotcl's compiler with Roswell/SBCL.
make cross-compile
# Install as a `dotnet tool`-style global command.
make install
# REPL
dotcl repl
# Evaluate a form
dotcl --eval "(format t \"hello, ~a~%\" (lisp-implementation-type))"
# Run a file
dotcl --load my-program.lispAfter the first cross-compile, dotcl can self-host: DOTCL_LISP=dotcl make cross-compile rebuilds the compiler using dotcl itself.
- .NET SDK 10+ — see install table below
- Roswell (only for the initial cross-compile bootstrap — once dotcl is built it can rebuild itself)
Working integrations in samples/:
- MauiLispDemo — a .NET MAUI app (Windows + Android) where
Application/ContentPage/ view model are all defined in Lisp viadotnet:define-class. - AspNetLispDemo — ASP.NET Core controller written in Lisp, with attribute routing.
- MonoGameLispDemo —
Gamesubclass in Lisp; theDrawoverride runs on the MonoGame frame loop and animates the background colour. - McpServerDemo — Model Context Protocol server exposing a Lisp REPL to MCP clients (Claude Desktop, etc.).
Each sample's README.md walks through the boot pattern.
- Compiler (
compiler/, written in Lisp): transforms S-expressions into a flat list of CIL instructions (SIL). - Runtime (
runtime/, written in C#): object representation, reader, CIL assembler (PersistedAssemblyBuilder-based for.fasloutput andReflection.Emitfor in-memory codegen), and the standard library functions that aren't expressible in pure Lisp. - Bootstrap is by cross-compile: a Roswell SBCL runs
compiler/cil-compile.lispto emitcompiler/cil-out.sil, which the .NET runtime loads to bring up the Lisp environment. From that point dotcl can rebuild itself.
Architectural detail and design history are in
DESIGN.md. Per-change rationale is recorded under
docs/decisions/.
- Windows: see
docs/windows.mdfor installation, encoding (UTF-8 stdin/stdout always), pathname conventions, and Windows-side .NET interop (Registry / WMI / WinForms / MAUI / COM).
MIT. See LICENSE.