Skip to content


Fennel Language logo

Lua is the defacto language for Neovim plugin development and configuration.

Fennel can be used to write Neovim packages and configuration, using nfnl to generate the equivalent Lua code that Neovim runs.

Although Neovim fully supports Vimscript, Practicalli encourages Fennel or Lua, as Vimscript is a niche language with quite complex syntax.


Fennel is a programming language that brings together the speed, simplicity, 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.

Translate Lua to Fennel

See Fennel is an online antifennel tool to convert Lua to Fennel or Fennel to Lua.

practicalli/neovim-config-redux configuration provides helper functions to minimise the translation required.

Fennel Packagesλ︎

The Conjure package which provides the Clojure REPL (and much more) is written in Fennel.


nfnl generates Lua code from Fennel code. Neovim runs the generated Lua code.

nfnl loads only when working in directories containing a .nfnl.fnl configuration file, so has zero overhead when not working with fennel.

*.fnl files are automatically compiled to *.lua when changes are saved, showing any compilation errors to provide an effective feedback loop.

nfnl standard library

nfnl plugin example

Development toolingλ︎

Neovim support

  • Anti-fennel - convert from Lua code to Fennel code.
  • nfnl - write plugins or configuration for Neovim with great runtime performance
  • hotpot - seamless Fennel inside Neovim

See Fennel is an online antifennel tool to convert between Lua and Fennel.

Guide to plugin development with fennel

Emacs support:

Playing Gamesλ︎

TIC-80 is a simulated computer environment to to write code, design art, compose music and retro style game games.

LÖVE is a framework for making games with the Lua programming language, allows import from external resources and can use any resolution or memory resources required.

TIC-80 and LÖVE provide cross-platform support across Windows, Mac and Linux systems. TIC-80 games can also be played in the browser.