The Kvist logo

Kvist

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.

Kvist
(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"]

Language overview

Native and statically typed

Structs, arrays, maps, pointers, procedures, allocators, and ownership retain concrete native representation and predictable costs.

Interactive development

The native REPL keeps definitions, typed values, imports, macros, and recent results between submissions.

Odin interoperability

Kvist imports Odin packages directly and lowers to readable Odin. No wrapper ecosystem is required.

Data-oriented programming

Immutable EDN-shaped values support destructuring, structural matching, persistent updates, validation, and data DSLs.

Source macros

Lisp forms can be transformed at compile time without adding a dynamic runtime object model.

Transforms and iterators

Collection pipelines compile to direct loops without lazy sequences or unnecessary intermediate collections.

Getting started

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.

Read the complete quickstart

$ git clone https://github.com/kvist-lang/kvist.git
$ cd kvist
$ odin build src/cli/kvist
$ ./kvist run examples/language/hello.kvist

Documentation