let-go is a Clojure-like lisp, running on a small Go-built VM instead of the JVM, so it boots fast and fits in a pocket. Your programs compile to standalone binaries.
brew tap nooga/let-go https://github.com/nooga/let-go
brew install let-go
go install github.com/nooga/let-go@latest
One lg
binary covers the lifecycle: open a REPL, bundle a script into a
standalone executable, or build a self-contained WASM page.
lg
lg -n
starts an nREPL server on port 2137 for Calva, CIDER, etc.
lg -b myprog main.lg
produces a standalone binary.
lg -w ./out main.lg
a static directory with html, wasm, and runtime.
let-go embeds in any Go program as a library. Define Go values and functions on the runtime, evaluate Clojure source against them. Channels, structs, and slices cross the boundary in both directions.
// go get github.com/nooga/let-go import "github.com/nooga/let-go/pkg/api" lg, _ := api.NewLetGo("user") lg.Def("x", 42) lg.Def("mul", func(a, b int) int { return a * b }) v, _ := lg.Run("(mul x 2)") // => 84