A Neovim plugin that automatically compiles Fennel to Lua for configuration and plugins with zero runtime overhead.
nfnl is a Neovim plugin that enhances the Neovim experience by allowing developers to write configurations and plugins in Fennel, a Lisp dialect that compiles to Lua. It automatically compiles Fennel files to Lua on save, providing a seamless workflow without runtime overhead. The plugin ensures that the resulting Lua is standalone and doesn't require nfnl to run, making it ideal for version-controlled configurations and distributable plugins.
Neovim users and plugin developers who prefer writing configurations and plugins in Fennel for its Lisp syntax and macro capabilities, but need the resulting code to run as plain Lua in Neovim.
Developers choose nfnl because it offers a frictionless way to use Fennel in Neovim with automatic compilation, zero startup overhead, and a robust standard library, all while producing clean, dependency-free Lua output that works natively.
Enhance your Neovim with Fennel
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Compiles .fnl files to .lua automatically upon saving, streamlining the workflow without manual steps, as highlighted in the 'Automatic Compilation' feature.
Only loads when editing Fennel files in directories with .nfnl.fnl, ensuring no performance impact during normal Neovim startup, detailed in the 'Zero Overhead' section.
Handles macro modules (.fnlm files) and triggers recompilation of all dependent files for consistency, though it uses a full recompile approach instead of incremental analysis.
Protects against overwriting existing Lua files and displays compilation errors instantly via vim.notify, providing immediate feedback during development.
Requires a .nfnl.fnl configuration file in each project directory to function, adding setup complexity compared to plug-and-play alternatives.
The README admits Windows support is implemented but not thoroughly tested, potentially leading to platform-specific bugs or issues.
Macro modules cannot access globals like 'vim' by default without explicit compiler configuration, adding friction for common Neovim scripting tasks.
Changes to macro files trigger recompilation of all non-macro modules instead of using dependency analysis, which could be slow for large codebases.