fennel - Man Page

a lisp programming language that runs on Lua


fennel [--repl] | [--compile filename] | [--eval source] | [filename] [args ...]


This manual page documents briefly the fennel command.

fennel is the main entry point for Fennel, a lisp programming language that runs on Lua runtimes. With no options or arguments, it runs an interactive Read-Eval-Print loop (REPL).

Given a filename as its first argument, it runs that file and passes it the subsequent arguments. Ahead-of-time compilation can be invoked with the --compile flag, while short snippets can be evaluated with the --eval argument.


A summary of options is included below.


Start an interactive repl session. This is the default when given no arguments.

--compile filename

Perform ahead-of-time compilation on the provided file and write the Lua output to standard out.

--eval source

Evaluate a given piece of source code and print the result.


When running a repl or a file, fennel.searcher is installed by default so that the require function can load Fennel files in addition to Lua files. This flag disables that behavior. Has no effect for ahead-of-time compilation.

--add-package-path path

Add the given path to package.path so that the require function will know to look there when searching for Lua modules.

--add-fennel-path path

Same as above, but for Fennel's path used when searching for Fennel modules.

--globals VAR1[,VAR2...]

Allow VAR1, VAR2, etc as globals in addition to the standard set of globals. This enables strict global checking even in ahead-of-time compilation where it otherwise would be disabled. Use "*" to disable globals checking.

--globals-only VAR1[,VAR2...]

Same as above, but without the inclusion of the standard set of globals.


Instead of loading required modules at runtime, compile them inline into the main file being compiled. Only useful during ahead-of-time compilation.


Calls to the built-in function assert from Fennel will be replaced with calls to assert-repl so that when the assertion fails, a REPL will be started in which you can interactively debug.


Compile bitwise operations to use LuaJIT's bitop library instead of Lua 5.3+ bitwise operators.

--load FILE

Load the specified file before any command is run.

--compile-binary FILE OUT LUA_LIB LUA_DIR

Compile FILE to a standalone binary OUT using LUA_LIB and the Lua header files in LUA_DIR. See --compile-binary --help for details.


Do not limit compiler environment (used in macros) to minimal sandbox.

-h,  --help

Print a help message and exit

-v,  --version

Print the version number and exit

Use the NO_COLOR environment variable to disable escape codes in error messages.


See https://fennel-lang.org/tutorial and https://fennel-lang.org/reference for documentation on Fennel. The syntax is based on the lisp family of languages while the semantics are very close to Lua, so Lua's reference manual is also helpful.


The mailing list is at https://lists.sr.ht/~technomancy/fennel while the issue tracker is at https://todo.sr.ht/~technomancy/fennel. Most discussion happens on the #fennel channel of Libera chat.


Calvin Rose and Phil Hagelberg and contributors: https://github.com/bakpakin/Fennel/graphs/contributors


Copyright © 2016-2023, Released under the MIT/X11 license