Clojure Library Discovery

I find library discovery difficult in Clojure.

This is both for libraries I think I need, and interesting libraries that I didn’t know existed.

The Clojure Libraries page on clojure.org is fairly sparse, and links to a few resources including The Clojure Toolbox and Clojars. I’ve also found awesome-clojure, which can be handy. I also find libraries through articles and web searches.

The best resource I’ve found for libraries that I didn’t imagine I needed is Clojurists Together. Any one of the Projects they’ve sponsored is worth your time to look at.

When I’m looking for libraries, I generally want to use something that is:

  • Popular
  • Maintained
  • Doesn’t have too many big unresolved problems
  • Uses a syntax and an approach that I’m ok with

Generally that means going through some of the list pages looking for suitable candidates, clicking through to see their github stars, number and severity of issues, last commit date, and looking at clojars for their download stats. This is all rather time consuming and doesn’t promote organic discovery.

I recognise that sometimes Clojure libraries are super stable, and that things like last commit date aren’t necessarily a sign that a library isn’t maintained, but if you look at all the different pieces you can usually work out that something is stable enough to consider.

For example, clj-commons/camel-snake-kebab: A Clojure[Script] library for word case conversions is a library I often use. At the time of this writing it has:

  • 409 stars on GitHub
  • 16 open and 26 closed Issues
  • Last commit was on 13 Dec 2020 (5 months ago)
  • 3,361,482 downloads with 90,540 of this version on Clojars

All of this indicates to me that this is a library that is useful, is being used, can be updated if need be, and that I should feel comfortable using it. Unfortunately it’s quite a bit of work to find all this out.

In my professional life I program in C# and use NuGet packages. When you search for things on NuGet.org the download statistics and last update dates are right there in the search results. You can also look at NuGet Must Haves as a more purpose specific way of finding things. It puts a lot of the data I need to make decisions about library selection within reach in a way that doesn’t seem to exist in Clojure.

Is this an issue that other people have?
Are there alternative tools for library selection that I’m not using?
Is there hope of better library selection tools coming to the Clojure community?

7 Likes

A lot of the time there is only one library that does what you want, so whether it is updated frequently is a moot point in any case.

When there is more than one library solving a specific problem that I’m having, I generally just start investigating the latest one (the idea being that if someone developed an alternative then they might have found something lacking with the existing one).

To evaluate the library I just check that their api is good (I much prefer non-macro apis where possible, pure functions as much as possible, no global state), then play around with it in the repl. If it solves my need then I don’t care too much about whether it is frequently updated (in fact I prefer that it stays stable). Most of the time it is pretty easy to fix any issues that come up myself.

I don’t think stars or download statistics add a lot of value except for popularity, which is not that useful when there is only a small amount of alternatives.

2 Likes

Great points! We could certainly do something to make this easier…

One thing missing from your list is the #find-my-lib channel in the Clojurians Slack.

2 Likes