The Fennel Survey Results: 2024

Here's what we got! Results are interspersed with commentary. Thanks for participating; see you next year!

Note that all multiple-choice questions allow any number of selections and thus totals do not add up to 100%. There were a total of 70 responses.

Last year the link to the survey made it to one of the big link-aggregator sites; this year it didn't. So the number of responses isn't as high as last time, but it still shows some growth if you ignore the one outlier year. I have included less commentary this time, because many of the results are the same as previous years.

Versions and Ecosystem #

What versions of Fennel do you use? #

1.5.0 (46) latest from git (17) 1.4.x (9) 1.3.x (6) 1.5.0: 46, latest from git: 17, 1.4.x: 9, 1.3.x: 6

People jump quickly to the latest version. The oldest version still in use is from a year and a half ago.

What versions of Lua do you use? (PUC is 'regular' Lua) #

LuaJIT (45) PUC 5.4 (35) PUC 5.3 (9) PUC 5.1 (7) PUC 5.2 (2) fengari (1) gopher-lua (1) LuaJIT: 45, PUC 5.4: 35, PUC 5.3: 9, PUC 5.1: 7, PUC 5.2: 2, fengari: 1, gopher-lua: 1

PUC 5.1 unfortunately just refuses to die; LuaJIT remains the undisputed king.

Do you use LuaRocks? #

No (39) Yes, to install applications/tools (luacheck, lua-repl) (20) Yes, to manage libraries in my codebase (15) No: 39, Yes, to install applications/tools (luacheck, lua-repl): 20, Yes, to manage libraries in my codebase: 15

What OS do you use? #

Linux-based (47) MacOS (22) Other BSD-based (7) Windows (not WSL) (5) Windows (with WSL) (3) Linux-based: 47, MacOS: 22, Other BSD-based: 7, Windows (not WSL): 5, Windows (with WSL): 3

What text editor do you use for Fennel? #

NeoVim (29) Emacs (25) VS Code (5) Vim (4) Kakoune (3) Helix (1) Lite (1) NeoVim: 29, Emacs: 25, VS Code: 5, Vim: 4, Kakoune: 3, Helix: 1, Lite: 1

Tell us a bit about yourself (remember, optional!) #

What is your age? #

10-19 (1) 20-29 (17) 30-39 (22) 40-49 (9) 50-59 (1) 60-69 (2) 10-19: 1, 20-29: 17, 30-39: 22, 40-49: 9, 50-59: 1, 60-69: 2

How many years have you been programming? #

00-09 (9) 10-19 (22) 20-29 (11) 30-39 (4) 40-49 (3) 6-7 (1) too many (1) 00-09: 9, 10-19: 22, 20-29: 11, 30-39: 4, 40-49: 3, 6-7: 1, too many: 1

How many years have you used Fennel? #

0 (7) 1 (11) 2 (7) 3 (8) 4 (7) 5 (4) 6 (5) I use it on and off, in total a few weeks (1) 0: 7, 1: 11, 2: 7, 3: 8, 4: 7, 5: 4, 6: 5, I use it on and off, in total a few weeks: 1

What is your gender? (extra-optional) #

male (32) Cis male (1) female (1) guy (1) hän (1) mail (1) non-binary (1) trans woman (1) transgender woman (1) male: 32, Cis male: 1, female: 1, guy: 1, hän: 1, mail: 1, non-binary: 1, trans woman: 1, transgender woman: 1

Well, yet again, this isn't good. =( I wish I knew what could make it better.

Other than Fennel, what languages do you use regularly? #

Python (28) Lua (25) Clojure (23) Emacs Lisp (23) Javascript (21) Go (19) C (18) Rust (16) Typescript (14) Scheme (12) Ruby (7) Common Lisp (6) Zig (6) C# (5) C++ (5) Haskell (5) Java (5) Forth (3) Racket (3) Kotlin (2) OCaml (2) PHP (2) Erlang (1) Julia (1) Scala (1) Swift (1) Python: 28, Lua: 25, Clojure: 23, Emacs Lisp: 23, Javascript: 21, Go: 19, C: 18, Rust: 16, Typescript: 14, Scheme: 12, Ruby: 7, Common Lisp: 6, Zig: 6, C#: 5, C++: 5, Haskell: 5, Java: 5, Forth: 3, Racket: 3, Kotlin: 2, OCaml: 2, PHP: 2, Erlang: 1, Julia: 1, Scala: 1, Swift: 1

Last year Lua leaped up to beat Python; now it's back in second place. I suspect this is because there were even more NeoVim users last year. Javascript and Typescript both took a significant dive. Rust dropped back to around the rank it was two years ago, meaning last year's jump was probably selection bias.

Where did you hear about Fennel? #

NeoVim's community continues to be where the most people hear of Fennel, with IRC coming right behind it. XMPP and other chat systems were mentioned as well. Game jams draw in a good number too of course. News aggregator sites were mentioned a handful of times, but not as much as previous years.

Where do you discuss Fennel or interact with other Fennel developers? #

Libera Chat (IRC) (24) Fediverse (22) Nowhere =( (13) Matrix (11) The official mailing list (10) Hacker News (1) Other chat platforms (1) Reddit (1) Libera Chat (IRC): 24, Fediverse: 22, Nowhere =(: 13, Matrix: 11, The official mailing list: 10, Hacker News: 1, Other chat platforms: 1, Reddit: 1

I'm sure this is just selection bias too, but it's nice to see that "Nowhere" dropped from first place to third. IRC and Fediverse are strong of course; Matrix is still widely used, but only about half as much as IRC. The loss of the official IRC/Matrix bridge has taken its toll, tho thanks to help from the community we now have an unofficial bridge.

How do you use Fennel #

How would you characterize your use of Fennel? #

I use it for personal code that I haven't shared with others (43) I use it to make games (27) I use it for other hobby projects (26) I use it for config/dotfiles (22) I use it for web applications (8) I use it at work (secretly) (5) I use it for sysadmin tasks (5) I use it at work (openly) (2) I use it to make music (2) I use it for personal code that I haven't shared with others: 43, I use it to make games: 27, I use it for other hobby projects: 26, I use it for config/dotfiles: 22, I use it for web applications: 8, I use it at work (secretly): 5, I use it for sysadmin tasks: 5, I use it at work (openly): 2, I use it to make music: 2

What does your use of Fennel look like? #

I compile my Fennel code to Lua, which I then embed (44) I embed the whole Fennel compiler in larger programs (24) I compile standalone programs as scripts (20) I compile standalone binaries (9) I use programs which have first-class Fennel support (8) I compile my Fennel code to Lua, which I then embed: 44, I embed the whole Fennel compiler in larger programs: 24, I compile standalone programs as scripts: 20, I compile standalone binaries: 9, I use programs which have first-class Fennel support: 8

What programs do you use Fennel with? #

LÖVE (love2d) (31) NeoVim (19) TIC-80 (9) wezterm (8) nginx/OpenResty (7) awesome-wm (6) hammerspoon/spacehammer (4) Minetest (2) NeoMutt (1) luvit (1) LÖVE (love2d): 31, NeoVim: 19, TIC-80: 9, wezterm: 8, nginx/OpenResty: 7, awesome-wm: 6, hammerspoon/spacehammer: 4, Minetest: 2, NeoMutt: 1, luvit: 1

Love2D and NeoVim have always been going back and forth for first place, but this year Love2D's lead was fairly significant. We didn't even have wezterm on the list last year, but now it's right behind TIC-80, probably due to unpopular LLM changes in iTerm this last year.

What are your favorite features of Fennel? (pick up to 5) #

Consistent and regular syntax (44) Simple semantics (37) Interactive development/repl (33) Pattern matching (28) Macros (23) Small size, low memory usage (23) Access to applications with Lua (19) Access to Lua libraries (18) Community (17) Strict global checking (10) Speed (9) Antifennel/See Fennel (5) Coroutines (5) Modules (5) Readable compiler output (5) Metatables (4) Nil-argument checks (4) Require-as-include (4) Consistent and regular syntax: 44, Simple semantics: 37, Interactive development/repl: 33, Pattern matching: 28, Macros: 23, Small size, low memory usage: 23, Access to applications with Lua: 19, Access to Lua libraries: 18, Community: 17, Strict global checking: 10, Speed: 9, Antifennel/See Fennel: 5, Coroutines: 5, Modules: 5, Readable compiler output: 5, Metatables: 4, Nil-argument checks: 4, Require-as-include: 4

What are the biggest problems you have using Fennel? (pick up to 5) #

Lack of static types (19) Need better tooling support (static analysis) (16) Lua library ecosystem is relatively small (13) Need better dynamic tooling support (debuggers, profilers, etc) (13) Lack of immutable data structures (11) Unfamiliarity with Lua (9) Confusing error messages (runtime) (8) Difficulty incorporating libraries into your build (7) Need editors to improve existing support (7) No runtime functions (need lume/luafun/penlight for common operations) (7) Unclear how to build applications and libraries (7) Reluctance to introduce new languages to projects with collaborators (6) No early returns (5) Need support for more editors (3) Non-first-class operators (3) Unclear language documentation (3) Confusing error messages (compile-time) (2) Portability across Lua versions (1) Too slow (compile time performance) (1) Too slow (runtime performance) (1) Lack of static types: 19, Need better tooling support (static analysis): 16, Lua library ecosystem is relatively small: 13, Need better dynamic tooling support (debuggers, profilers, etc): 13, Lack of immutable data structures: 11, Unfamiliarity with Lua: 9, Confusing error messages (runtime): 8, Difficulty incorporating libraries into your build: 7, Need editors to improve existing support: 7, No runtime functions (need lume/luafun/penlight for common operations): 7, Unclear how to build applications and libraries: 7, Reluctance to introduce new languages to projects with collaborators: 6, No early returns: 5, Need support for more editors: 3, Non-first-class operators: 3, Unclear language documentation: 3, Confusing error messages (compile-time): 2, Portability across Lua versions: 1, Too slow (compile time performance): 1, Too slow (runtime performance): 1

Finally static analysis tooling is no longer the top of the list; probably because of fennel-ls making great strides. Dynamic tools like debuggers and profilers still definitely have plenty of room for improvement too, and of course the small library ecosystem shared with Lua causes problems when compared to more mainstream languages. Very few people consider the language documentation, compiler error messages, or compilation speed to be problems.

If you haven't hacked on Fennel itself, why not? #

I haven't found the time but I hope to in the future (22) It already does everything I want (22) I'm intimidated by compilers (9) I have hacked on the compiler (6) I tried but I couldn't understand it (1) I haven't found the time but I hope to in the future: 22, It already does everything I want: 22, I'm intimidated by compilers: 9, I have hacked on the compiler: 6, I tried but I couldn't understand it: 1

Wrapping up #

What would you most like to see in a future version of Fennel? #

I think we've got to change the wording on this question because a lot of the answers were not really specific enough to be actionable.

A lot of the responses were about third-party tools like a stepping debugger, code coverage tool, and type checker.

A few different people talked about stack traces. I'm not sure how well-understood this is, but Fennel does have source maps that allow traces to be mapped from the Lua lines to the original source; you have to call fennel.traceback instead of debug.traceback. There are two problems: first you have to know that fennel.traceback exists, and secondly that sometimes you don't control the code that calls debug.traceback. For the latter you can use "correlate" that tries to make the Lua line numbers inherently match the Fennel line numbers, but that's not always reliable.

Another thing a couple people mentioned was the tension between macro modules vs inline macros. Currently macros defined in regular modules cannot be called from other modules; you have to make a whole separate macro module if you want to reuse macros. We have a proof-of-concept for extracting macros from normal modules to allow them to be re-used but it still needs work; perhaps you can help us get it across the line: https://wiki.fennel-lang.org/Roadmap#single-file-macroruntime-extract-macros

One person wants "a package manager similar to Cargo" which, I'm sorry to let you down, but is never going to happen. If we build or endorse a package manager, it will be a content-addressable one, not one with lockfiles! Making such a package manager that just works for Fennel and Lua is not that hard, but unfortunately as soon as you touch C code, you encounter nearly insurmountable difficulty due to C library builds being ad-hoc and lacking any consistency.

One person has a wish for "capitalism, racism, and war wiped out either by accident or an intentional push of a new method that proved all things people do which are harmful to others are just plain not worth doing" and I'd just like to say... yes please.

Do you have any code you've written in Fennel you would like to share? #

A NeoVim repl using coroutines: https://github.com/gpanders/fennel-repl.nvim

Static site generator: https://codeberg.org/sarna/loving-quest/src/branch/main/ume.fnl

Nine men's Morris in the terminal: https://git.tilde.town/dozens/9mm

Someone has a gradual typing system but didn't share a URL so that will have to be left to your imagination!

Any other comments? #

It's really heart-warming to hear about how everyone loves and appreciates Fennel.

Fennel has been my introduction to Lisp and I appreciate its consistency and minimalism. I've only been writing both Fennel and Lua for a few months, but I already feel confident that as long as I have Fennel within reach, I'll always pick it over writing Lua directly.

I work with a legacy-ish codebase in Scheme at work and there is a lot about the simplicity of Scheme that I love, but it often drives me nuts with how verbose and archaic it can be. Fennel takes everything I love about the simplicity of Lua's semantics plus the syntactic simplicity of Lisp dialects, and comes in a package that is much lighter weight and more versatile than Clojure.

Fennel + lgi ( https://github.com/lgi-devs/lgi ) is (IMO) a nice low-overhead way to write Gtk desktop apps/utilities for Linux without fighting object-orientation-in-C or having to use Python. I imagine it's sort of like the alternate future where Gnome hadn't dropped Guile as a first-class language back in 199x

We also got to hear about an amazing creative application of Fennel repurposing discarded old hardware:

fennel is one of the tools i use to explore an old smartphone that turned into a super energy efficient server on https://compost.party. i rewrote a service that i started with deno out of habit, and i was super happy to see memory usage drop from > 100MB to 10MB. it's not even a heavily resource-constrained environment, but fennel composts really well!

Thanks for being a great community and see you next year!