Fennel
Fennel is a programming language that brings together the simplicity, speed, and reach of Lua with the flexibility of a lisp syntax and macro system.
- Full Lua compatibility: Easily call any Lua function or library from Fennel and vice-versa.
- Zero overhead: Compiled code should be just as efficient as hand-written Lua.
- Compile-time macros: Ship compiled code with no runtime dependency on Fennel.
- Embeddable: Fennel is a one-file library as well as an executable. Embed it in other programs to support runtime extensibility and interactive development.
Anywhere you can run Lua code, you can run Fennel code.
;; Sample: read the state of the keyboard and move the player accordingly (local dirs {:up [0 -1] :down [0 1] :left [-1 0] :right [1 0]}) (each [key [dx dy] (pairs dirs)] (when (love.keyboard.isDown key) (let [[px py] player x (+ px (* dx player.speed dt)) y (+ py (* dy player.speed dt))] (world:move player x y))))
See the install instructions in the setup guide.
That's too much work!
Fine, you can use Fennel right here without installing anything:
Curious about how a piece of code compiles? See for yourself with a side-by-side view how Fennel turns into Lua and vice-versa.
Documentation
- The Setup guide will help you install things.
- The Tutorial teaches you the basics of the language.
- The Rationale explains the reasoning why Fennel was created.
- The Lua primer will catch you up if you don't already know Lua.
- The Reference lists out all built-in forms and what they're for.
- The Fennel from Clojure guide helps if you have a background in Clojure.
- The Style Guide advises on how to write clear and consise code.
- The Macro Guide explains metaprogramming with macros.
- The API listing explains how to embed Fennel into a Lua program.
- The Changelog describes how Fennel has evolved with time.
- The wiki has all kinds of things in it.
Looking for other versions? Docs are generated for:
- v1.5.1
- v1.5.0
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.1
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.0
- v1.0.0
- v0.10.0
- v0.9.2
- v0.9.1
- v0.9.0
- v0.8.1
- v0.8.0
- v0.7.0
- v0.6.0
- v0.5.0
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.1
- v0.1.0
Community
Fennel's repository is on Sourcehut, and discussion occurs on the mailing list and the #fennel channel on Libera.Chat and on Matrix . There is a read-only mirror of the repository on GitHub for those who prefer it.
Come meet the Fennel community and make friends at any of our community events. Community interactions are subject to the code of conduct. We periodically run surveys of the community.
Bug reports are tracked in Sourcehut or Github. See the security page for details about security issues.
There is also a wiki for collecting ideas. Take a look at the list of codebases written in Fennel if you want to get a feel for how larger projects look. The cookbook has smaller self-contained examples.