The Fennel Survey Results: 2023

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 109 responses.

Since the survey was featured on some bigger news sites, we got a lot more responses this year than last year when there were only a little over half this year's. Many of the answer distributions look the same even when the overall counts were much higher, but a few things have changed.

Versions and Ecosystem #

What versions of Fennel do you use? #

1.3.x (72) latest from git (29) 1.2.0 (10) 1.1.0 (2) 0.10.0 (1) 0.9.x (1) 1.0.0 (1) older (1) 1.3.x: 72, latest from git: 29, 1.2.0: 10, 1.1.0: 2, 0.10.0: 1, 0.9.x: 1, 1.0.0: 1, older: 1

Looks like people are still staying on the cutting edge. 1.2.0 was released a year ago almost to the day, and everything older is a rounding error.

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

LuaJIT (67) PUC 5.4 (60) PUC 5.3 (15) PUC 5.1 (11) PUC 5.2 (7) fengari (2) gopher-lua (1) luaj/Cobalt (1) moonsharp (1) LuaJIT: 67, PUC 5.4: 60, PUC 5.3: 15, PUC 5.1: 11, PUC 5.2: 7, fengari: 2, gopher-lua: 1, luaj/Cobalt: 1, moonsharp: 1

LuaJIT remains the champion, but 5.4 is giving it a run for its money, up significantly from last year. LuaJIT is used by LÖVE and NeoVim, which are the two most popular applications of Fennel.

Do you use LuaRocks? #

No (73) Yes, to install applications/tools (luacheck, lua-repl) (24) Yes, to manage libraries in my codebase (17) No: 73, Yes, to install applications/tools (luacheck, lua-repl): 24, Yes, to manage libraries in my codebase: 17

We've got a lot more non-luarocks users than last time, but there's still a sizable minority.

What OS do you use? #

Linux-based (78) MacOS (34) Other BSD-based (10) Windows (with WSL) (8) Windows (not WSL) (6) Linux-based: 78, MacOS: 34, Other BSD-based: 10, Windows (with WSL): 8, Windows (not WSL): 6

Windows now has more WSL users than non-WSL, and BSD overtook WSL.

What text editor do you use for Fennel? #

NeoVim (50) Emacs (35) VS Code (13) Vim (13) Helix (10) Vis (2) Kakoune (1) Lite (1) NeoVim: 50, Emacs: 35, VS Code: 13, Vim: 13, Helix: 10, Vis: 2, Kakoune: 1, Lite: 1

Helix went from one response last year to placing just under Vim and VS Code, quite the sudden rise. VS Code has kind of a chicken and egg problem because there aren't a lot of Fennel users that use it, which means fewer people able to contribute and improve its Fennel support, which is currently rather poor. If you'd like to help out, come by the chat or mailing list!

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

What is your age? #

10-19 (2) 20-29 (26) 30-39 (35) 40-49 (13) 50-59 (4) 10-19: 2, 20-29: 26, 30-39: 35, 40-49: 13, 50-59: 4

How many years have you been programming? #

00-09 (17) 10-19 (31) 20-29 (20) 30-39 (9) 40-49 (2) 6-7 (1) 7 profesh, 25 hobbiest (1) 8-ish professionally. ~15 including tinkering (1) >20 (1) 00-09: 17, 10-19: 31, 20-29: 20, 30-39: 9, 40-49: 2, 6-7: 1, 7 profesh, 25 hobbiest: 1, 8-ish professionally. ~15 including tinkering: 1, >20: 1

How many years have you used Fennel? #

0 (9) 1 (27) 2 (25) 3 (12) 4 (6) 5 (2) 6 (2) a couple (1) less than a year (1) several (1) 0: 9, 1: 27, 2: 25, 3: 12, 4: 6, 5: 2, 6: 2, a couple: 1, less than a year: 1, several: 1

What is your gender? (extra-optional) #

male (45) female (3) Feminine (1) dude (1) he/him (1) manish (1) non-binary (1) queer (1) smash bros mele (1) trans woman (1) male: 45, female: 3, Feminine: 1, dude: 1, he/him: 1, manish: 1, non-binary: 1, queer: 1, smash bros mele: 1, trans woman: 1

This unfortunately hasn't improved since last year and has gotten a bit worse. As before, it's hard to tell whether men feel more comfortable revealing their gender than others, or whether men feel more comfortable using Fennel overall while others avoid the language; if it's the latter that's a big problem. But how to tell the difference?

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

Lua (52) Python (48) Rust (40) C (34) Javascript (34) Typescript (34) Emacs Lisp (31) Clojure (23) Go (19) Scheme (19) C# (16) Zig (14) C++ (12) Common Lisp (11) Haskell (10) OCaml (8) Forth (7) Java (6) PHP (6) Racket (6) Ruby (6) Elixir (5) Kotlin (5) Scala (5) Julia (3) Erlang (2) Lua: 52, Python: 48, Rust: 40, C: 34, Javascript: 34, Typescript: 34, Emacs Lisp: 31, Clojure: 23, Go: 19, Scheme: 19, C#: 16, Zig: 14, C++: 12, Common Lisp: 11, Haskell: 10, OCaml: 8, Forth: 7, Java: 6, PHP: 6, Racket: 6, Ruby: 6, Elixir: 5, Kotlin: 5, Scala: 5, Julia: 3, Erlang: 2

Lua has overtaken Python, and Javascript has dropped down a few notches while Typescript has shot up. Rust went from seventh place to third! Swift showed up a fair bit in Other.

Where did you hear about Fennel? #

The most common answer here was the NeoVim community, which continues to be a strong use case for Fennel. When I took a train last month, I was working on Fennel in the observation car and ran into a NeoVim user who had heard of Fennel thru that community. Hacker News and Lobsters are also brought in a lot of people, and a number of people called out specific friends or other programmers who introduced them.

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

Nowhere =( (48) Fediverse (21) Libera Chat (IRC) (21) Matrix (17) Hacker News (13) The official mailing list (9) Other chat platforms (7) Twitter (6) Reddit (4) Nowhere =(: 48, Fediverse: 21, Libera Chat (IRC): 21, Matrix: 17, Hacker News: 13, The official mailing list: 9, Other chat platforms: 7, Twitter: 6, Reddit: 4

Those of you who said "Nowhere", come on in and join the chat! Whether you prefer IRC or Matrix, there's an active and fun community discussing All Things Fennel. It's also great to see the Fediverse shooting up to be one of the top choices.

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 (70) I use it for config/dotfiles (42) I use it to make games (31) I use it for other hobby projects (30) I use it for sysadmin tasks (16) I use it at work (secretly) (12) I use it for web applications (7) I use it at work (openly) (4) I use it to make music (3) I use it for personal code that I haven't shared with others: 70, I use it for config/dotfiles: 42, I use it to make games: 31, I use it for other hobby projects: 30, I use it for sysadmin tasks: 16, I use it at work (secretly): 12, I use it for web applications: 7, I use it at work (openly): 4, I use it to make music: 3

The "personal code that I haven't shared with others" choice was SO popular that it overflowed past the edge of the screen, so that says a a lot! Games remain strong. Good luck to all of you using Fennel secretly at work—I won't tell!

What does your use of Fennel look like? #

I compile my Fennel code to Lua, which I then embed (43) I embed the whole Fennel compiler in larger programs (37) I compile standalone programs as scripts (31) I use programs which have first-class Fennel support (21) I compile standalone binaries (14) I compile my Fennel code to Lua, which I then embed: 43, I embed the whole Fennel compiler in larger programs: 37, I compile standalone programs as scripts: 31, I use programs which have first-class Fennel support: 21, I compile standalone binaries: 14

What programs do you use Fennel with? #

NeoVim (45) LÖVE (love2d) (29) TIC-80 (16) awesome-wm (11) mpv (11) nginx/OpenResty (8) hammerspoon/spacehammer (6) Minetest (5) Pandoc (4) NeoMutt (3) luvit (1) NeoVim: 45, LÖVE (love2d): 29, TIC-80: 16, awesome-wm: 11, mpv: 11, nginx/OpenResty: 8, hammerspoon/spacehammer: 6, Minetest: 5, Pandoc: 4, NeoMutt: 3, luvit: 1

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

Consistent and regular syntax (81) Simple semantics (46) Access to Lua libraries (45) Interactive development/repl (45) Access to applications with Lua (44) Small size, low memory usage (44) Pattern matching (41) Macros (36) Speed (21) Strict global checking (19) Community (15) Readable compiler output (15) Nil-argument checks (12) Coroutines (9) Modules (8) Require-as-include (6) Metatables (5) Consistent and regular syntax: 81, Simple semantics: 46, Access to Lua libraries: 45, Interactive development/repl: 45, Access to applications with Lua: 44, Small size, low memory usage: 44, Pattern matching: 41, Macros: 36, Speed: 21, Strict global checking: 19, Community: 15, Readable compiler output: 15, Nil-argument checks: 12, Coroutines: 9, Modules: 8, Require-as-include: 6, Metatables: 5

A clear pattern here is that the fact that Fennel is hosted on the Lua runtime matters a lot. #2, #3, #5, and #6 are all things we get for free just by virtue of the VM we target.

Of the things unique to Fennel, syntax and the repl are the real gems. Clear and consistent syntax has always been the #1 choice here, but its lead grows more every year.

One of the "Other" options listed was antifennel, which seems to be a popular learning tool!

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

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

Tooling support keeps climbing the list every year, and now it's at the top. We hear you loud and clear. Luckily there has been fantastic progress over the past year on the Language Server Protocol (LSP) front with fennel-ls: https://git.sr.ht/~xerool/fennel-ls If you haven't given this a try yet, you're in for a treat; it really feels much smoother getting instant feedback for compiler errors and warnings, and it helps with code navigation too. Of course there's still more to do here; maybe you can help!

Hostedness here is a double-edged sword as many of these top problems (library ecosystem, no immutable data structures, dynamic tooling support, and unfamiliarity with Lua) are things we also inherit from the runtime.

I'm surprised that reluctance to introduce new languages to your team has ranked so low; I wonder if this means that Fennel has been around long enough that it feels more mature and less of a risk? No one thinks compile time performance is too slow, and no one listed unpleasant community interactions either.

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

I haven't found the time but I hope to in the future (31) It already does everything I want (30) I'm intimidated by compilers (27) I have hacked on the compiler (10) I tried but I couldn't understand it (4) I haven't found the time but I hope to in the future: 31, It already does everything I want: 30, I'm intimidated by compilers: 27, I have hacked on the compiler: 10, I tried but I couldn't understand it: 4

Wrapping up #

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

Many of the more thoughtful answers here echoed the tension that's at the heart of Fennel; we want more things, but adding more things would sacrifice the simplicity that makes Fennel so appealing.

Many people mentioned that the compiler output is often weird; in order to ensure we don't double-evaluate certain forms, the compiler sometimes uses what's called an IIFE or immediately-invoked function expression. Often these get optimized away by LuaJIT, but it makes the Lua output harder to read and sometimes it does prevent the JIT from optimizing. We often apply this technique without first checking to see whether it's needed, so that's definitely somewhere we could improve things.

First class source maps are another thing a few different people mentioned. You can usually get better stack traces by running fennel.traceback instead of debug.traceback, but you aren't always in control of how the exceptions get printed.

Lots of people want static types. I admit I have a lot of research I'd need to do before I'd be able to design a type system that wasn't awful. Trust me when I say that you don't want to use the static type system that I'm capable of designing today!

Some people said that they want to see more changes in the Fennel ecosystem and less in Fennel itself.

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

Some selections of interesting codebases:

Transducers from Clojure in Fennel: https://git.sr.ht/~fosskers/transducers.fnl

A little toy love2d synthesizer: https://git.sr.ht/~evn/birmp/

A unique take on roguelikes: https://aliasing.itch.io/super-rogue

But my favorite answer was "MY CODE GOES WITH ME TO THE GRAVE"

Any other comments? #

This is my favorite section where everyone just talks about how much they enjoy coding in Fennel. I can't include everything because I'd be here all day but:

Keep up the great work!

wonderful little lisp, thank you so much for developing it!

Fennel is a delightful language, and the (limited) community interactions I've had have been positive. Thanks to all the maintainers and contributors for their work :)

fennel is awesome and the community is even awesomer!

I really love fennel, I'm always telling people about it and calling it my favourite language right now.

Thanks for all the work! I don't envy Emacs users anymore :)

It's encouraging to see how much people like it, so thanks for your support and thanks for continuing to make the Fennel community a pleasure to be a part of.