├── README.md ├── contributing.md ├── gardening ├── ai-maintain ├── fetch-readme ├── fetch-repo-details └── prompt-maintain.txt └── more.md /README.md: -------------------------------------------------------------------------------- 1 | Mapping the constellation of [Clojure](https://en.wikipedia.org/wiki/Clojure)-like programming languages. 2 | 3 | [Contribute](./contributing.md). [More](./more.md). 4 | 5 | ## Official variants 6 | 7 | - [Clojure](https://clojure.org/) on the [JVM](https://en.wikipedia.org/wiki/Java_virtual_machine). 8 | - [Clojure CLR](https://clojure.org/about/clojureclr) on the [Common Language Runtime](https://en.wikipedia.org/wiki/Common_Language_Runtime). 9 | - [ClojureScript](https://github.com/clojure/clojurescript) in the browser. 10 | 11 | ## Clojure-likes 12 | 13 | ### [Carp](https://github.com/carp-lang/Carp) 14 | 15 | > A language that borrows syntax from Clojure, designed for interactive and performance sensitive use cases like games, sound synthesis and visualizations. 16 | 17 | - Clojure-like syntax with ML/Rust-inspired semantics and ownership-based memory management. 18 | - Static type system with inference, annotations, and pattern matching for safe data extraction. 19 | - Module system with interfaces and seamless C interoperability for system programming. 20 | - Lisp macros and interactive REPL with developer-friendly features like "hole" debugging. 21 | 22 | ### [Hy](https://hylang.org/) 23 | 24 | > Hy is a wonderful dialect of Lisp that's embedded in Python. 25 | 26 | - [Try it](https://hylang.org/try-hy). 27 | - [Source code](https://github.com/hylang/hy). 28 | - High level of interop with host language. 29 | - All Python tooling available. 30 | 31 | ### [Babashka](https://babashka.org/) 32 | 33 | > Fast native Clojure scripting runtime. Avoid switching between Clojure and bash scripts. Enjoy your parens on the command line. 34 | 35 | - [Source code](https://github.com/babashka/babashka). 36 | - [Documentation](https://book.babashka.org/). 37 | - Instant startup. 38 | - Batteries included. 39 | - Cross-platform. 40 | - Multi-threaded. 41 | - Task runner. 42 | - Libraries & "pods". 43 | 44 | ### [Janet](https://janet-lang.org/) 45 | 46 | > A functional and imperative programming language for scripting, embedding, and system programming with Lisp-like syntax. 47 | 48 | - [Source code](https://github.com/janet-lang/janet). 49 | - [Documentation](https://janet-lang.org/docs/index.html). 50 | - [Try it](https://janet-lang.org). 51 | - Lightweight and embeddable (single C file). 52 | - 600+ functions in core library. 53 | - PEG grammar engine for robust text processing. 54 | - First-class macros and closures. 55 | - Garbage collection. 56 | - Built-in networking, threading, and file system functions. 57 | - C FFI for native extensions. 58 | - Erlang-style supervision trees. 59 | 60 | ### [jank](https://jank-lang.org/) 61 | 62 | > jank is a native Clojure dialect hosted on LLVM with C++ interop. 63 | 64 | - [Source code](https://github.com/jank-lang/jank). 65 | - [Documentation](https://jank-lang.org/docs/). 66 | - Strong Clojure compatibility; if it's valid Clojure and ClojureScript, it'll be valid jank. 67 | - Built on an LLVM-based JIT. With AOT enabled, both statically and dynamically linked executables can be generated. 68 | - Use your favorite nREPL editor plugin. jank uses an LLVM-based JIT to compile machine code on the fly. 69 | - Utilize LLVM to link with your existing code or compile to WASM. 70 | - [Work in progress](https://jank-lang.org/progress/). 71 | 72 | ### [Fennel](https://fennel-lang.org) 73 | 74 | > Lua Lisp Language. 75 | 76 | - [Try it](https://fennel-lang.org/main). 77 | - [Source code](https://github.com/bakpakin/Fennel). 78 | - [Documentation](https://fennel-lang.org/reference). 79 | - [Learning Fennel from Clojure](https://fennel-lang.org/from-clojure). 80 | - Full Lua compatibility. 81 | - Zero overhead. 82 | - Compile-time macros. 83 | - Embeddable. 84 | - Quite popular in [game development](https://itch.io/games/tag-fennel). 85 | 86 | ### [Lux](https://github.com/LuxLang/lux) 87 | 88 | > A functional, statically-typed Lisp that will run on several platforms, such as the Java Virtual Machine and JavaScript interpreters. 89 | 90 | - Implemented in Clojure. 91 | - Inspired by Haskell, Clojure, ML. 92 | 93 | ### [Joker](https://joker-lang.org/) 94 | 95 | > Joker is a small interpreted dialect of Clojure written in Go. It is also a Clojure(Script) linter. 96 | 97 | - [Source code](https://github.com/candid82/joker). 98 | - [Documentation](https://joker-lang.org/docs/latest/). 99 | - Fast startup time. 100 | - Sane error messages and stacktraces. 101 | - Batteries included: send HTTP requests, read and parse JSON, work with file system, start external processes, etc. 102 | 103 | ### [Clojerl](https://clojerl.org/) 104 | 105 | > Clojure implemented on the Erlang VM. 106 | 107 | - [Try it](http://try.clojerl.online/). 108 | - [Source code](https://github.com/clojerl/clojerl). 109 | - Interoperability as smooth as possible, just like Clojure proper and ClojureScript do. 110 | - Provide most Clojure abstractions. 111 | - Provide all Erlang abstractions and toolset. 112 | - Include a default OTP library in Clojerl. 113 | 114 | ### [Small Clojure Interpreter (SCI)](https://github.com/babashka/sci) 115 | 116 | > A complete implementation of Clojure in Clojure for secure, sandboxed code evaluation. 117 | 118 | - A lightweight, portable Clojure/ClojureScript interpreter for evaluating untrusted code 119 | - Runs on JVM, GraalVM native, Node.js, and browsers (even with advanced compilation) 120 | - Provides a secure alternative to `eval` with fine-grained control over allowed operations 121 | - Supports most Clojure features: persistent data structures, macros, namespaces, dynamic vars 122 | - Powers many popular Clojure tools including Babashka, nbb, Clerk, and Portal 123 | - Mature, well-maintained project with extensive documentation and community adoption 124 | 125 | ### [nbb](https://github.com/babashka/nbb) 126 | 127 | > Ad-hoc CLJS scripting on Node.js. Nbb's main goal is to make it easy to get started with ad hoc CLJS scripting on Node.js. 128 | 129 | - Fast startup without relying on a custom version of Node.js. 130 | - Small artifact (on the order of ~2Mb). 131 | - First class macros. 132 | - Support building small TUI apps using Reagent. 133 | - Complement babashka with libraries from the Node.js ecosystem. 134 | 135 | ### [Cloture](https://github.com/ruricolist/cloture) 136 | 137 | > An implementation of Clojure in Common Lisp. 138 | 139 | - [Documentation](https://github.com/ruricolist/cloture/blob/master/README.md). 140 | - Designed for seamless interoperation with Common Lisp. 141 | - Clojure namespaces are implemented as Lisp packages. 142 | - Uses FSet for implementing Clojure vectors, maps, and sets. 143 | - Supports reader conditionals and Clojure's concurrency primitives. 144 | - Can load clojure.test and run tests written in Clojure. 145 | 146 | ### [Phel](https://phel-lang.org/) 147 | 148 | > A functional programming language that compiles to PHP. It is a dialect of Lisp inspired by Clojure and Janet. 149 | 150 | - [Source code](https://github.com/phel-lang/phel-lang). 151 | - [Documentation](https://phel-lang.org/documentation/). 152 | - Runs on PHP's ecosystem. 153 | - Implements persistent data structures (Lists, Vectors, Maps and Sets). 154 | - First-class macros and recursive functions. 155 | - Simple but powerful Lisp syntax with good error reporting. 156 | - REPL available via Docker container. 157 | - Created to enable functional programming on affordable/common PHP hosting. 158 | 159 | ### [Basilisp](https://github.com/basilisp-lang/basilisp) 160 | 161 | > A Lisp dialect with Clojure syntax for Python. 162 | 163 | - [Documentation](https://basilisp.readthedocs.io/). 164 | - Implementation of a Clojure-like language that targets Python 3.8+. 165 | - Seamless interoperability with Python modules and objects. 166 | - Provides familiar Clojure abstractions: persistent collections, protocols, namespaces, and macros. 167 | - REPL with syntax highlighting, autocomplete, and inline documentation. 168 | 169 | ### [Scittle](https://github.com/babashka/scittle) 170 | 171 | > The Small Clojure Interpreter (SCI) exposed for usage in script tags. 172 | 173 | - [Try it on CodePen](https://codepen.io/Prestance/pen/PoOdZQw). 174 | - [Documentation](https://babashka.org/scittle/). 175 | - Run Clojure(Script) directly in the browser without compilation. 176 | - Tiny footprint (on the order of ~15kb). 177 | - Support for popular CLJS libraries like reagent, re-frame, and promesa. 178 | - Ideal for adding scripting capabilities to web applications. 179 | - Example full stack web application available via [babashka-scittle-guestbook](https://github.com/kloimhardt/babashka-scittle-guestbook). 180 | 181 | ### [Calcit](http://calcit-lang.org/) 182 | 183 | > Heavily influenced by Clojure APIs, Macros, persistent data structure. Previously compiling to Clojure. 184 | 185 | - [Source code](https://github.com/calcit-lang/calcit). 186 | - Implemented in Rust. It was previously compiled to Clojure to run. 187 | - Builtin persistent data structure. Shares many functions/macros API designs from Clojure. 188 | - Designed like Lisp but prefers indentation based syntax or GUI code editor. 189 | 190 | ### [Toccata](https://github.com/Toccata-Lang/toccata) 191 | 192 | > A Clojure dialect that compiles to native executable using the Clang compiler. 193 | 194 | - Self hosted. 195 | 196 | ### [Lokke](https://github.com/lokke-org/lokke) 197 | 198 | > A full dialect of Clojure for Guile. 199 | 200 | - [Documentation](https://lokke.gitlab.io/lokke/). 201 | - Proper tail-recursion thanks to Guile. 202 | - Clojure namespaces are implemented as Guile modules. 203 | - Provides support for persistent data structures (vectors, hash-maps, hash-sets). 204 | - Includes support for atoms, refs, futures, regex, and more. 205 | - Experimental support for try/catch/finally with exception suppression. 206 | - GMP-backed numeric tower with arbitrary precision integers. 207 | 208 | ### [JO Clojure](https://github.com/Zelex/jo_clojure) 209 | 210 | > A fast, embeddable Clojure-like language implementation in C/C++. 211 | 212 | - Native implementation of most of the Clojure core library. 213 | - Extremely fast startup time compared to JVM Clojure. 214 | - Implementations of persistent collections (lists, vectors, hash-maps, hash-sets). 215 | - Software Transactional Memory (STM) that works seamlessly with atoms. 216 | 217 | ### [Convex Lisp](https://docs.convex.world/docs/tutorial/convex-lisp/convex-lisp) 218 | 219 | > A Clojure-inspired lisp for decentralised economic systems 220 | 221 | - [Try it]((https://docs.convex.world/docs/tools/convex-repl). 222 | - [Source code](https://github.com/Convex-Dev/convex). 223 | - [Community Discord](https://discord.com/invite/xfYGq4CT7v). 224 | - Core language and syntax is (almost) identical to Clojure. 225 | - Designed for development of smart contracts and digital assets. 226 | - Runs on the decentralised Convex Virtual Machine. 227 | - High perfomance, real-time economic transaction processing. 228 | - Content-addressable immutable data structures with orthogonal persistence and cryptographic verification. 229 | - Supported by the non-profit Convex Foundation 230 | 231 | ### [Pixie](https://github.com/pixie-lang/pixie) 232 | 233 | > A small, fast, native lisp with "magical" powers. 234 | 235 | - Implemented in RPython. 236 | - Runs on own VM. 237 | - Dormant project. 238 | 239 | ### [Ferret](https://nakkaya.com/2016/06/10/ferret-a-hard-real-time-clojure-for-lisp-machines/) 240 | 241 | > A Hard Real-Time Clojure for Lisp Machines. 242 | 243 | - [Source code](https://github.com/nakkaya/ferret). 244 | - Implemented in Clojure. 245 | - Compiles to ISO C++11. 246 | - Restricted subset of Clojure. 247 | - Embedded systems focus. 248 | 249 | ### [Wisp](https://github.com/wisp-lang/wisp) 250 | 251 | > A little Clojure-like Lisp in JavaScript. 252 | 253 | - [Try it](http://www.jeditoolkit.com/wisp/). 254 | - Native JavaScript types and function calls. 255 | - Dormant project. 256 | 257 | ### [timl](https://github.com/tpope/timl) 258 | 259 | > TimL is a Lisp dialect implemented in and compiling down to VimL, the scripting language provided by the Vim text editor. 260 | 261 | - Implemented in Vim's scripting language. 262 | - Dormant project. 263 | 264 | ### [Rhine](https://github.com/artagnon/rhine-ml) 265 | 266 | > An OCaml compiler for an untyped lisp. 267 | 268 | - Implemented in OCaml. 269 | - Runs on the LLVM JIT. 270 | - Dormant project. 271 | 272 | ### [Gherkin](https://github.com/alandipert/gherkin) 273 | 274 | > A functional programming language and interpreter written in GNU Bash 4. 275 | 276 | - Implemented in Bash 4. 277 | - Dormant project. 278 | 279 | ### [ki](http://ki-lang.org/) 280 | 281 | > A functional programming language that expands into JavaScript through a very thin layer of sweet.js macros. 282 | 283 | - [Source code](https://github.com/lantiga/ki). 284 | - Implemented in JavaScript. 285 | - Intermix Lisp code with JavaScript. 286 | - Dormant project. 287 | 288 | ### [CLClojure](https://github.com/joinr/clclojure) 289 | 290 | > An experimental port of Clojure to Common Lisp. 291 | 292 | - Implements Clojure's persistent data structures (vectors, maps, sets) in Common Lisp. 293 | - Provides Clojure-like protocols, lazy sequences, and loop/recur functionality. 294 | - Bridges Lisp-1/Lisp-2 differences with a unified lexical environment. 295 | - Custom reader macros for Clojure data literals. 296 | - Dormant project. 297 | 298 | ### [Clodiuno](https://nakkaya.com/clodiuno.html) 299 | 300 | > A Clojure API for Arduino that allows Clojure developers to interface with the physical world using Arduino hardware. 301 | 302 | - [Source code](https://github.com/nakkaya/clodiuno). 303 | - Control Arduino hardware using Clojure. 304 | - Supports two interfaces: USB via Firmata or WiFi via WiShield. 305 | - Libraries available via Clojars. 306 | - Includes examples for servo control, motor control, sensors, and more. 307 | - Dormant project. 308 | 309 | ### [Esprit](https://github.com/mfikes/esprit) 310 | 311 | > ClojureScript for ESP32 microcontrollers using Espruino. 312 | 313 | - Runs ClojureScript on ESP32 hardware. 314 | - Leverages Espruino as the JavaScript runtime. 315 | - Enables IoT and embedded development with ClojureScript. 316 | - Provides a way to use Clojure's functional programming paradigm on microcontrollers. 317 | - Dormant project. 318 | 319 | ### [Carbonate](https://github.com/7even/carbonate) 320 | 321 | > Clojure-inspired Lisp that transpiles to Ruby. 322 | 323 | - Implemented in Ruby. 324 | - Tries to cover Ruby's functionality with more concise code forms. 325 | - Dormant project. 326 | 327 | ### [slisp](https://github.com/bailesofhey/slisp) 328 | 329 | > Modern Lisp variant inspired by Python, Clojure & Arc. 330 | 331 | - Implemented in C++. 332 | - Modern, OO, both statically & dynamically typed. 333 | - Dormant project. 334 | 335 | ### [Apricot](https://github.com/apricot-lang/apricot) 336 | 337 | > Apricot is a programming language inspired by Clojure and Lisp that runs on the [Rubinius](http://rubini.us/) VM. 338 | 339 | - Implemented in Ruby. 340 | - Dormant project. 341 | 342 | # Mal [make-a-lisp](https://github.com/kanaka/mal) 343 | 344 | > Mal is a Clojure inspired Lisp interpreter. Mal is **implemented in >60 languages**. 345 | 346 | - [Try it](https://kanaka.github.io/mal/). 347 | 348 | Notable/usable implementations follow. 349 | 350 | ### [malc](https://github.com/dubek/malc) 351 | 352 | > Mal (Make A Lisp) compiler 353 | 354 | - Compiler for Mal, written in Mal itself. 355 | - Compiles a Mal program to LLVM assembly language (IR), and then uses the LLVM optimizer, assembler and gcc linker to produce a binary executable. 356 | 357 | ### [miniMAL](https://github.com/kanaka/miniMAL) 358 | 359 | > A Delightfully Diminutive Lisp. Implemented in < 1 KB of JavaScript with JSON source. 360 | 361 | - [Try it](https://kanaka.github.io/miniMAL/). 362 | - Uses JSON syntax. 363 | 364 | ### [mal/php](https://github.com/kanaka/mal/tree/master/php) 365 | 366 | - Implemented in PHP. 367 | - Interop with & runs where PHP does. 368 | 369 | ### [mal/ruby](https://github.com/kanaka/mal/tree/master/ruby) 370 | 371 | - Implements the #mal IRC bot. 372 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | Contributions welcome, please PR. \o/ 2 | 3 | ### Criteria for inclusion 4 | 5 | * It is a LISP. 6 | * The documentation states it is inspired by Clojure. 7 | 8 | Probably has one or more of the following properties: 9 | 10 | * Shares some syntactic shortcuts of Clojure (e.g. `[]`, `{}`, `#{}`, `#()`) 11 | * Preference for immutable datastructures (probably trie based). 12 | * Language uses builtin names that are closer to Clojure than to other LISPs. 13 | 14 | Basically if it looks and smells like Clojure then it's a candidate for inclusion. 15 | 16 | ### Submission template 17 | 18 | ## [Language name](http://link-to-language-site/) 19 | 20 | > Language tagline from website. 21 | 22 | * [Try it](http://link-to-online-repl/) 23 | * [Source code](http://github.com/source/page) 24 | * Notable point 1. 25 | * Notable point 2. 26 | ... 27 | * Project status if not actively maintained. 28 | 29 | Please submit a PR with a new entry in roughly GitHub-stars-count sorted order. 30 | -------------------------------------------------------------------------------- /gardening/ai-maintain: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | dir="$(realpath "$(dirname "$0")")" 4 | aider "$@" --read "${dir}/prompt-maintain.txt" --file "${dir}/../README.md" --read "${dir}/../contributing.md" 5 | -------------------------------------------------------------------------------- /gardening/fetch-readme: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ $# -ne 1 ]; then 4 | echo "Usage: $0 org/reponame" 5 | exit 1 6 | fi 7 | 8 | REPO=$1 9 | MAIN_URL="https://raw.githubusercontent.com/$REPO/main/README.md" 10 | MASTER_URL="https://raw.githubusercontent.com/$REPO/master/README.md" 11 | 12 | # Try main branch first 13 | HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$MAIN_URL") 14 | 15 | if [ "$HTTP_CODE" -eq 200 ]; then 16 | curl -s "$MAIN_URL" 17 | elif [ "$HTTP_CODE" -eq 404 ]; then 18 | # If main fails with 404, try master 19 | curl -s "$MASTER_URL" 20 | else 21 | echo "Error: Failed to fetch README (HTTP code: $HTTP_CODE)" >&2 22 | exit 1 23 | fi 24 | -------------------------------------------------------------------------------- /gardening/fetch-repo-details: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "Current date: $(date)" 4 | echo 5 | echo "GitHub Repository Star Counts:" 6 | echo "==============================" 7 | 8 | for repo in "$@" 9 | do 10 | echo "- ${repo}" 11 | curl -s "https://api.github.com/repos/${repo}" | jq '{"stars": .stargazers_count, "pushed": .pushed_at}' 12 | done 13 | -------------------------------------------------------------------------------- /gardening/prompt-maintain.txt: -------------------------------------------------------------------------------- 1 | Please help us maintain this list of awesome clojure-like languages. 2 | The main document is the README which lists the languages. 3 | Tasks: 4 | 5 | - Project descriptions should be up to date and concise but informational. 6 | - The maintainance status of each project should be noted in cases where a project is not receiving regular updates. 7 | - Projects should appear in the README with rough order of active projects at the start and higher popularity first. 8 | - Ignore the "Mal" section and any project which doesn't have a GitHub. 9 | 10 | Make sure you have the latest data before making changes. Don't just make changes based on your internal knowledge of a project. 11 | 12 | You can get current project READMEs with this script: `./gardening/fetch-readme org/repo`. 13 | 14 | You can get the latest data about projects using the script `gardening/fetch-repo-details org/repo org-2/repo-2 ...`. 15 | You can pass it multiple repos like this: 16 | 17 | $ ./gardening/fetch-repo-details "carp-lang/Carp" "hylang/hy" "babashka/babashka" 18 | Current date: Wed 19 Mar 12:01:25 AWST 2025 19 | 20 | GitHub Repository Star Counts: 21 | ============================== 22 | - carp-lang/Carp 23 | { 24 | "stars": ..., 25 | "pushed": ... 26 | } 27 | - hylang/hy 28 | { 29 | "stars": ..., 30 | "pushed": ... 31 | } 32 | - babashka/babashka 33 | { 34 | "stars": ..., 35 | "pushed":...l 36 | } 37 | 38 | Start by listing the org/repo name of the all projects in the README which have a GitHub repo. 39 | -------------------------------------------------------------------------------- /more.md: -------------------------------------------------------------------------------- 1 | Assorted other interesting Clojure inspired/related projects: 2 | 3 | * Swearjure: https://github.com/hyPiRion/swearjure (Turing complete Clojure subset, which prohibits alphanumeric characters) 4 | * https://github.com/pragmatrix/matter 5 | * https://github.com/mlanza/cloe 6 | * https://github.com/edw/skim 7 | * https://github.com/anacrolix/gasp 8 | * https://github.com/miviwi/glang 9 | * https://github.com/adamrmoss/Lithp 10 | * https://github.com/nicl/functional-php 11 | * https://github.com/maxcountryman/mage 12 | * https://github.com/nelsonsar/pojure 13 | * https://github.com/jedrz/slisp 14 | * https://github.com/EasonLiao/gofp 15 | * https://github.com/marad/eljure 16 | 17 | --------------------------------------------------------------------------------