Native and statically typed
Structs, arrays, maps, pointers, procedures, allocators, and ownership retain concrete native representation and predictable costs.
A practical Lisp for native software that compiles to Odin.
Kvist combines Clojure-inspired syntax, source macros, data-oriented programming, and interactive development with Odin’s native, statically typed execution model.
Ordinary values have Odin-like representation and ownership. Allocation and mutation remain explicit, generated programs need no VM or garbage collector, and Kvist and Odin source files can coexist in the same package.
When the shape itself is data, Kvist also provides immutable EDN-shaped maps, vectors, sets, lists, keywords, symbols, and tagged values.
(defstruct User [name: string, active?: bool])
(defn active-names [users: []User] -> [dynamic]string
(into [dynamic]string
(comp
(filter .active?)
(map .name))
users))
(active-names
[(User "bob")
(User "alice" true)])
;; => ["alice"]
Structs, arrays, maps, pointers, procedures, allocators, and ownership retain concrete native representation and predictable costs.
The native REPL keeps definitions, typed values, imports, macros, and recent results between submissions.
Kvist imports Odin packages directly and lowers to readable Odin. No wrapper ecosystem is required.
Immutable EDN-shaped values support destructuring, structural matching, persistent updates, validation, and data DSLs.
Lisp forms can be transformed at compile time without adding a dynamic runtime object model.
Collection pipelines compile to direct loops without lazy sequences or unnecessary intermediate collections.
Install the Odin compiler, clone the repository, and build the Kvist CLI from the repository root.
Kvist is tested on macOS and Linux. The core CLI and representative programs are also tested on Windows.
$ git clone https://github.com/kvist-lang/kvist.git
$ cd kvist
$ odin build src/cli/kvist
$ ./kvist run examples/language/hello.kvist