The Fennel Survey Results: 2022

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

Versions and Ecosystem #

What versions of Fennel do you use? #

1.2.0 (31) latest from git (16) 1.1.0 (15) 1.0.0 (4) 0.10.0 (1) 1.2.0: 31, latest from git: 16, 1.1.0: 15, 1.0.0: 4, 0.10.0: 1

This is one question where I expect things to have changed substantially since last year! Only one person is using a version of Fennel which even existed last year.

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

LuaJIT (39) PUC 5.4 (28) PUC 5.3 (13) PUC 5.1 (8) PUC 5.2 (2) fengari (1) gopher-lua (1) LuaJIT: 39, PUC 5.4: 28, PUC 5.3: 13, PUC 5.1: 8, PUC 5.2: 2, fengari: 1, gopher-lua: 1

Almost identical results here from last time, except PUC 5.1 has gone down a bit, which is good news as far as I'm concerned.

Do you use LuaRocks? #

No (36) Yes, to install applications/tools (luacheck, lua-repl) (19) Yes, to manage libraries in my codebase (12) No: 36, Yes, to install applications/tools (luacheck, lua-repl): 19, Yes, to manage libraries in my codebase: 12

Still a good chunk of people using LuaRocks, but the percentage has gone down a bit since last year.

What OS do you use? #

Linux-based (47) MacOS (18) Windows (not WSL) (6) Windows (with WSL) (5) Other BSD-based (2) Linux-based: 47, MacOS: 18, Windows (not WSL): 6, Windows (with WSL): 5, Other BSD-based: 2

Last year we didn't have WSL broken out from other Windows; you can't tell it from this graph because it doesn't show who selected both options, but slightly over half the Windows users (5/9) do use WSL. Meanwhile MacOS gained a little bit of ground.

What text editor do you use for Fennel? #

NeoVim (27) Emacs (23) VS Code (7) Vim (4) Kakoune (2) Vis (2) Lite (1) NeoVim: 27, Emacs: 23, VS Code: 7, Vim: 4, Kakoune: 2, Vis: 2, Lite: 1

Visual Studio Code leaps up to third place (it only had 3 users last time) but it has a very long way to go to beat Emacs, and NeoVim remains #1, but Emacs is catching up! Helix was mentioned a couple time in "other".

Do you use readline in your repl? #

Yes (22) No, the repl I use has readline features already (Emacs, etc) (17) No, I don't use the repl (9) No, I haven't bothered to get it installed (6) What is readline? (5) Yes: 22, No, the repl I use has readline features already (Emacs, etc): 17, No, I don't use the repl: 9, No, I haven't bothered to get it installed: 6, What is readline?: 5

Not much change here; glad to see a strong showing but might retire this question next year since it feels like we learned what we wanted to know from it.

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

What is your age? #

10-19 (3) 20-29 (16) 30-39 (19) 40-49 (8) 5 old (twins) (1) 50-59 (2) 10-19: 3, 20-29: 16, 30-39: 19, 40-49: 8, 5 old (twins): 1, 50-59: 2

Roughly the same breakdown as last year, but this year we have our first users in the single-digit age bracket with a pair of 5-year old twins; I love to see this! Coding Fennel as a family activity is so wholesome.

How many years have you been programming? #

00-09 (14) 10-19 (16) 11ish (1) 20 or so (1) 20-29 (7) 30-39 (7) 40-49 (2) A few months, with Dad (1) at least 5 (1) 00-09: 14, 10-19: 16, 11ish: 1, 20 or so: 1, 20-29: 7, 30-39: 7, 40-49: 2, A few months, with Dad: 1, at least 5: 1

I need to find a better way to visualize these results.

How many years have you used Fennel? #

0 (7) 1 (19) 2 (11) 3 (6) 4 (2) 5 (1) It's our first language! So, few months, with Dad (1) almost exactly 0.00022831 years (1) handful (1) less than one (1) since v0.20, so what 2019? (1) some? (1) 0: 7, 1: 19, 2: 11, 3: 6, 4: 2, 5: 1, It's our first language! So, few months, with Dad: 1, almost exactly 0.00022831 years: 1, handful: 1, less than one: 1, since v0.20, so what 2019?: 1, some?: 1

Roughly the same distribution as last year, except shifted up by one, with plenty of fresh-faced new arrivals, which is great to see.

What is your gender? (extra-optional) #

male (23) female (6) cis-male (2) Boy & Girl (twins) (1) Male-identifying (1) about 65% a dude (1) hemophobic mosquito (1) male-ish (1) no thank you, i have plenty (1) tough question (1) trans woman (1) male: 23, female: 6, cis-male: 2, Boy & Girl (twins): 1, Male-identifying: 1, about 65% a dude : 1, hemophobic mosquito: 1, male-ish: 1, no thank you, i have plenty: 1, tough question: 1, trans woman: 1

As imbalanced as these results are, they're at least shifting in the right direction from last year. It's great to see more diversity, but we still have a long way to go.

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

Python (24) Javascript (23) Lua (23) Clojure (20) Emacs Lisp (19) C (14) Rust (14) Scheme (13) C++ (10) Go (10) Common Lisp (9) Racket (8) Forth (6) Ruby (6) Haskell (5) Zig (4) C# (3) Java (3) Erlang (2) Julia (2) OCaml (1) PHP (1) Scala (1) Python: 24, Javascript: 23, Lua: 23, Clojure: 20, Emacs Lisp: 19, C: 14, Rust: 14, Scheme: 13, C++: 10, Go: 10, Common Lisp: 9, Racket: 8, Forth: 6, Ruby: 6, Haskell: 5, Zig: 4, C#: 3, Java: 3, Erlang: 2, Julia: 2, OCaml: 1, PHP: 1, Scala: 1

Python has jumped up to beat out Javascript, which has fallen to a position tied with Lua. I forgot to add Rust on last year's survey, but it got a couple mentions in "others", and now it's tied with C. Clojure remains strong which is unsurprising given the connection with Fennel's roots.

Where did you hear about Fennel? #

Again the answers here are all over the place, but the most common answer was from the Fediverse/Mastodon. Second place was from the NeoVim community, which continues to be very active in its Fennel usage. Link aggregator sites like Lobsters, Hacker News, and Reddit were also a common theme. Unlike last time, no one mentioned coming from any Lua-specific communities other than TIC-80.

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

Libera Chat (IRC) (21) Matrix (15) Nowhere =( (15) Fediverse (12) The official mailing list (10) Other chat platforms (4) Reddit (4) Hacker News (3) Twitter (1) Libera Chat (IRC): 21, Matrix: 15, Nowhere =(: 15, Fediverse: 12, The official mailing list: 10, Other chat platforms: 4, Reddit: 4, Hacker News: 3, Twitter: 1

Great to see Libera IRC still at the top of this list. Matrix has jumped up and is now pretty close to IRC. (These are bridged together so it really feels like one place with two different ways to access it.) The Fediverse jumped up higher as well. If you picked "nowhere", check out one of these options; the community is active and lively! The "other" responses included a few different discords but not really any overlap between them.

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 (32) I use it for other hobby projects (26) I use it to make games (24) I use it for config/dotfiles (23) I use it for sysadmin tasks (9) I use it for web applications (5) I use it at work (secretly) (4) I use it at work (openly) (2) I use it at school (1) I use it to make music (1) I use it for personal code that I haven't shared with others: 32, I use it for other hobby projects: 26, I use it to make games: 24, I use it for config/dotfiles: 23, I use it for sysadmin tasks: 9, I use it for web applications: 5, I use it at work (secretly): 4, I use it at work (openly): 2, I use it at school: 1, I use it to make music: 1

The config/dotfiles option is new this year, and it sure got a lot of responses.

Other than that, we've got a few more people using it at work, which I'm super curious to know more about, but most people are doing so secretly, so I guess we won't be hearing too much about them. But it's still a very small percent of the overall responses.

What does your use of Fennel look like? #

I compile my Fennel code to Lua, which I then embed (23) I use programs which have first-class Fennel support (20) I embed the whole Fennel compiler in larger programs (17) I compile standalone programs as scripts (16) I compile standalone binaries (10) I compile my Fennel code to Lua, which I then embed: 23, I use programs which have first-class Fennel support: 20, I embed the whole Fennel compiler in larger programs: 17, I compile standalone programs as scripts: 16, I compile standalone binaries: 10

Programs which have first-class Fennel support has leaped up here from near the bottom to second place, so that's an exciting development. Interesting that AOT-compiling is still in first place. This could be because for a proper release, this approach gives you the fastest startup time, or it could be because people run into difficulties trying to embed the compiler. Maybe these can be split into different options next time.

What programs do you use Fennel with? #

NeoVim (25) LÖVE (love2d) (21) TIC-80 (15) awesome-wm (6) nginx/OpenResty (6) hammerspoon/spacehammer (4) LOVR (2) Minetest (2) mpv (1) NeoVim: 25, LÖVE (love2d): 21, TIC-80: 15, awesome-wm: 6, nginx/OpenResty: 6, hammerspoon/spacehammer: 4, LOVR: 2, Minetest: 2, mpv: 1

NeoVim has unseated the long-time champion of LÖVE; very impressive!

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

Consistent and regular syntax (45) Interactive development/repl (33) Pattern matching (26) Simple semantics (26) Access to Lua libraries (25) Access to applications with Lua (21) Small size, low memory usage (21) Community (16) Macros (16) Speed (11) Strict global checking (9) Coroutines (8) Readable compiler output (6) Require-as-include (4) Modules (3) Nil-argument checks (3) Metatables (2) Consistent and regular syntax: 45, Interactive development/repl: 33, Pattern matching: 26, Simple semantics: 26, Access to Lua libraries: 25, Access to applications with Lua: 21, Small size, low memory usage: 21, Community: 16, Macros: 16, Speed: 11, Strict global checking: 9, Coroutines: 8, Readable compiler output: 6, Require-as-include: 4, Modules: 3, Nil-argument checks: 3, Metatables: 2

Everybody loves simplicity, consistency, and regularity; real crowd-pleasers here! The repl has jumped up to second place, which is great.

Last year we had "access to Lua ecosystem" which was a little vague; this year it was split out into one option for Lua libraries and one for applications that have Lua support in them. It turns out that the libraries one is a little higher than the applications, but applications still score quite high.

I also love that people value community so much that it's tied here with macros. It really is one of the highlights of working with Fennel.

Overall what I'm seeing here is a strong showing of appreciation for features we inherit directly from Lua, but an even stronger appreciation of the features Lua lacks that Fennel adds on top, such as simpler syntax, a powerful repl, and pattern matching.

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

Need better editor support (16) Lack of immutable data structures (15) Lua library ecosystem is relatively small (14) Need better tooling support (14) No runtime functions (need lume/luafun/penlight for common operations) (11) Unfamiliarity with Lua (11) Lack of static types (10) Reluctance to introduce new languages to projects with teammates (10) Unclear how to build applications and libraries (9) Unclear how to incorporate libraries into your build (8) Confusing error messages (runtime) (5) Portability across Lua versions (5) No early returns (4) Unclear documentation (4) Non-first-class arithmetic operators (2) Confusing error messages (compile-time) (1) Need better editor support: 16, Lack of immutable data structures: 15, Lua library ecosystem is relatively small: 14, Need better tooling support: 14, No runtime functions (need lume/luafun/penlight for common operations): 11, Unfamiliarity with Lua: 11, Lack of static types: 10, Reluctance to introduce new languages to projects with teammates: 10, Unclear how to build applications and libraries: 9, Unclear how to incorporate libraries into your build: 8, Confusing error messages (runtime): 5, Portability across Lua versions: 5, No early returns: 4, Unclear documentation: 4, Non-first-class arithmetic operators: 2, Confusing error messages (compile-time): 1

Whew; OK here we go.

The #1 problem is better editor support, and only two votes behind we have better tooling support. Does this mean people using NeoVim and Emacs (the top-scoring editors) want better support, or does it mean that people want support for a wider variety of editors? The good news here is that the past few months have seen a flurry of development on fennel-ls, an implementation of the Language Server Protocol for Fennel: https://git.sr.ht/~xerool/fennel-ls This actually should help address both of the above: it improves the features available in Emacs and NeoVim, and it also makes those features usable from a broader variety of editors. Give it a try!

It's interesting that the Lua library ecosystem comes out as #3 here when lots of people count the Lua library ecosystem as one of their favorite features of Fennel. I'm guessing this means Fennel has a big lead over small lisps which aren't hosted on an existing platform, but still lags far behind Clojure when it comes to libraries.

We split out confusing errors from last year into runtime vs compile-time. The good news is the compile-time errors (the ones we can actually control) came in last, so those seem to be working great!

Unclear documentation scored very low too, which is encouraging. It looks like the main documentation thing people are having trouble with is Lua itself firstly, and then how to build applications and libraries secondly. So that's useful direction when it comes to improving the docs.

Reluctance to introduce a new language to teammates shot way up this year, which tells me that a lot more people are thinking about using Fennel at work, but can't quite get to the point of justifying it yet. We'll see how this develops over time but I think we'll probably start to see the number of people using it work rise substantially in future years.

One person wrote about getting tripped up from differences with other lisps. Fennel is closest to Clojure, so there's a guide for those with a Clojure background at https://fennel-lang.org/from-clojure but perhaps we'd benefit from a similar guide for folks coming from Scheme or CL?

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

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

Looking forward to getting these compiler contributions!

Wrapping up #

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

Answers in the free-form section were all over the place, but the top recurring theme was LSP support, so as mentioned above, we're on the right track with that!

The next thing was to improve the compiler output. There are two different classes of problems here. The biggest one is to change how functions are compiled; right now they can never be compiled to an anonymous value but always get bound to a local before they can be used. This is due to a specific assumption about how the compiler output is stored which is baked in pretty deep, and it would be a lot of work to change: https://github.com/bakpakin/Fennel/issues/384

The other problem is easier to address; there are several places in the code where we assume whatever code is being compiled could do basically anything, so we have to take somewhat extreme measures. For instance, naively compiling (= (x) (y) (z)) into Lua where operators are all binary would be something like (x() == y()) and (y() == z()) which calls y twice; this is real bad! So we use an inline function to avoid this. But the compiler could detect that in other cases like (= a b c) that there's no need; the naive expansion is fine in that case. We just don't do enough analysis at this point to tell the difference, and we err on the side of caution. If you're interested in contributing to the compiler, this would be a great place to start.

Some people really want Fennel to have a standard library. I get where this is coming from; I really do. But it's really hard to imagine how we could do a better job than existing libraries like Lume or LuaFun. The whole point of Fennel is that the interop with Lua is completely seamless. Different situations call for different things, and making everyone pay the runtime cost of bringing along a bunch of functions they don't need really doesn't feel like the right answer here, especially when the alternative of "cp ../lume/lume.lua lib" doesn't really have any downsides.

Reinforcing the above, another common thread here was that Fennel's simplicity is its greatest strength, and people don't want it to change in a way that makes it more complex. "Fennel is a lang that fits in my head. I hope it stays that way." I hope so too.

Finally we had a couple people who were on Windows and wished for a smoother install process on there. I'm afraid that's not something we can do with the expertise we have among the current Fennel contributors, but if some Windows users want to step up and help with that, it would be appreciated.

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

Here are a few of the neat things shared!

A small repl for neovim: https://git.sr.ht/~szgy/dotfiles/tree/main/item/.config/nvim/fnl/repl.fnl , an IRC client library: https://git.sr.ht/~szgy/fnlirc , A terminal IRC client: https://git.sr.ht/~szgy/maguey

The most recent thing I wrote in Fennel was a web server that sends SMS (text messages). https://gti.telent.net/dan/grafana-sms-alert

https://git.sr.ht/~nasser/8fl [a music tracker composition tool]

I used this to generate my homepage for the longest time: https://git.m455.casa/wg :)

This is about the only thing I've published https://github.com/harrygallagher4/nvim-parinfer-rust/

I have a bunch of private tools, but I do have one public project in Fennel which might be interesting to others: https://git.madhouse-project.org/algernon/synodic-period It's a monitoring system. Quite opinionated, and closely tailored to my own needs. It's main purpose is to feed data into Riemann, upon which I can build a personal, private dashboard

Any other comments? #

We got an outpouring of support and good vibes here.

I tried to give helpful feedback here but I'm extremely satisfied with Fennel and very rarely run into an actual problem. Thanks for the great project!

Keep up the awesome community and welcoming environment :)

This project is great and already delivers a great deal, so thank you!

stay cozy, fennel community <3

Keep up the great work! Fennel is tons of fun to write, and has consistently been an enjoyable language to build with. The community is filled with wonderfully kind and talented folks who deserve as much praise as possible!

This puts into words something I've felt for a while:

fennel is what I wished to find in scheme: a language that uses few data structures (like clojure), with simple & powerful semantics and not much magic under the hood (unlike clojure). thank you for making it real :) hope it can be what clojure became: a power amplifier for small teams and individuals.

This is also something that comes up every so often:

Prefix < is still somewhat counterintuitive sometimes. Would be nice to have built-in positive?, zero?, negative? like Racket

I used to have this problem too! When you think of < as "greater than" it's confusing because you're accustomed to infix notation where the big end points to the bigger number. In prefix notation, there can be any number of arguments! So rather than calling it "greater than", it's more intuitive to call it "increasing?"; that is, are all the arguments to this in increasing order, or not? Once I started thinking this way, I found it to be a lot less error-prone.

Thanks to everyone for their input, and see you next time! Drop by the chat and/or mailing list if you'd like to discuss anything here further.