Soluna is a Lisp dialect interpreted in OCaml.
It does not aim to be perfect, to be accurate, to be easy to use. It aims to be my own Alchemy lab to invoke Gods and Space creatures.
Originaly made as a challenge in a challenge. I wanted to do a Lisp dialect in which I would then solve at least one AoC (2025) problem.
The documentation can be found here
- lambda and function: functions is basically syntactic sugar for lambdas
- do: let you do multiple operations and yet return only the last expression ! (trust me it's useful)
- list: let you create a list
- if: simple if else block
- map: apply a function to a list to get a new list
- filter: apply a function that returns a boolean and create a function only with elements that output as true.
- macros: let you create code template to extend language capacities
- ...: other stuff can be found in the Language Reference
You need to build the missing tools by yourself, that's the fun part.
You can use the builtin REPL called Oracle when starting Soluna without argument.
The code for Oracle is present here
Also protips, use rlwrap to expand the capabilities of Oracle.
Soluna is equipped with a bundler. The way it works is simply by injecting your source code inside Soluna's one, then compile everything.
The executable is in fact the Soluna interpreter running only your source code. It's far from perfect but will do the trick to add some portability.
For the bundler to work you need to have OCaml tools installed (look at the "Build and run" section to know how to install everything).
Soluna have some options that let you handle a project in a more structured way. To learn more about that look here.
I don't really know exactly what I'll want and what I'll do. Here is a list that I will follow (or not):
- Fix the slow 'cons' function
- More high order functions (fold, ...)
- Sexp runtime reading functions
- Step by step debugger
Again, most of this will never be made since it doesn't feel necessary to me.
I built a Neovim plugin to help you do more faster using Soluna. Take a look here
I made a tree-sitter parser for Soluna, it's available here.
You'll need to install it manually for now. The project isn't mature enough and I don't feel confortable to do a pull request on the nvim-treesitter repo.
Yep, might be dirty. I'm not the best in this language, but it works really nice.
I might want to clean the code, at some point. For now it works nice and I want to add some more stuff before.
You need to install OCaml and Dune. Look at the official website to know how to install all this.
You can then do :
- build:
dune build - run:
dune exec soluna - install:
dune install
After a dune install, you'll be able to use soluna <filename>.
Binary file will be present in the _build directory.
There is some code example. File extension is luna. Good luck and have fun.

