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?