# What is clj-commons

**URL:** https://clojureverse.org/t/what-is-clj-commons/3162
**Category:** Community Building
**Created:** [November 11, 2018, 10:10pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162 "2018-11-11T22:10:50Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![slipset](https://clojureverse.org/user_avatar/clojureverse.org/slipset/32/1127_2.png) [@slipset](https://clojureverse.org/u/slipset)
#### Post date: [November 11, 2018, 10:10pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/1 "2018-11-11T22:10:51Z")

</div>

So I’ve gone ahead and created this github organization called clj-commons.

Most of the inspiration for doing so has come from discussions  
with Daniel Compton over a longer period of time.

I created it as a place to help support libs/projects that are done or  
abandoned, but clearly such a project can be so much more.

The question is then how much more should it be, who should it be, and  
for whom should it exist?

To answer the second question first. I would like clj-commons to be a  
thing run by the Clojure community with a bus-factor quite a bit  
greater than one. I’d also like it to be a place where it’s easy to  
find a project to maintain, if that’s what you’re after, and also a  
place where it’s safe and easy to leave your project if that’s what  
you want.

But clj-commons could also be a place with opinions about which  
libraries to choose and clear recommendations on tooling.

It could be a place like Clojure-contrib, but with libraries that were  
activly maintained and recommended by clj-commons.

It could be a place where documentation not suitable for [clojure.org](http://clojure.org)  
was hosted, curated, and maintained.

clj-commons could be all this, some of it or even something else.

My goal of “coming out” with clj-commons was to start with something  
where I felt I could make a difference, which is maintaining old  
software. I’d be more than happy to incorporate other things as well.

And, as a final note. clj-commons is not about me. I’d be more than  
happy to give all of it away (not that it’s much) to the community and  
have it be run by the community if that is of interest.

---

<div class="post-metadata">

### Author: ![royalaid](https://clojureverse.org/user_avatar/clojureverse.org/royalaid/32/668_2.png) [@royalaid](https://clojureverse.org/u/royalaid)
#### Post date: [November 11, 2018, 10:21pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/2 "2018-11-11T22:21:00Z")

</div>

I love this idea. It is important to consider what happens if a project comes back from not being maintained like what recently happened with http-kit?

---

<div class="post-metadata">

### Author: ![slipset](https://clojureverse.org/user_avatar/clojureverse.org/slipset/32/1127_2.png) [@slipset](https://clojureverse.org/u/slipset)
#### Post date: [November 11, 2018, 10:23pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/3 "2018-11-11T22:23:53Z")

</div>

I could imagine two scenarios

1. The maintainer continues to maintain the project under the clj-commons umbrella
2. clj-commons transfers the project back to the maintainer.

My hope would be that 1) was chosen, as that creates less back and forth, transferring of repos and such. I have no problem with people joining clj-commons in order to maintain a specific project that is maintained by clj-commons

---

<div class="post-metadata">

### Author: ![seancorfield](https://clojureverse.org/user_avatar/clojureverse.org/seancorfield/32/195_2.png) [@seancorfield](https://clojureverse.org/u/seancorfield)
#### Post date: [November 12, 2018, 9:43pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/4 "2018-11-12T21:43:49Z")

</div>

This would seem like an excellent candidate: [https://github.com/Raynes/fs](https://github.com/Raynes/fs)

`akvo` seems to have the most recent fork but it’s not clear that they are actively _maintaining_ it so having a more “official” master version of `fs` would be great!

---

<div class="post-metadata">

### Author: ![borkdude](https://clojureverse.org/user_avatar/clojureverse.org/borkdude/32/306_2.png) [@borkdude](https://clojureverse.org/u/borkdude)
#### Post date: [November 13, 2018, 12:33pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/5 "2018-11-13T12:33:52Z")

</div>

lumo might be suitable for this as well, as Antonio has made it known to seek for maintainers

---

<div class="post-metadata">

### Author: ![jwhitlark](https://clojureverse.org/user_avatar/clojureverse.org/jwhitlark/32/1064_2.png) [@jwhitlark](https://clojureverse.org/u/jwhitlark)
#### Post date: [November 13, 2018, 7:03pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/6 "2018-11-13T19:03:22Z")

</div>

I think this is an excellent idea. I would like to help!

A few ideas:  
An annual review, bump versions, and make a “this is still being maintained” commit, for the selected projects.

Maintain minimal documentation along with the project?

I’ve _frequently_ wished for very minimal Clojure wrappers around external JVM projects. Kafka comes to mind, in that there have been several libraries that tried to do a lot, and were frequently very impressive, but never got to 1.0 and maintained. Having a minimal compatibility layer, that didn’t completely compromise the original projects docs, but smoothed out common pain points, would have been much preferable.

---

<div class="post-metadata">

### Author: ![jwhitlark](https://clojureverse.org/user_avatar/clojureverse.org/jwhitlark/32/1064_2.png) [@jwhitlark](https://clojureverse.org/u/jwhitlark)
#### Post date: [November 13, 2018, 7:23pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/7 "2018-11-13T19:23:05Z")

</div>

I agree. The number of times I’ve almost used fs, but backed off since it was un-maintained, is considerable. I wouldn’t mind to a bit of work on it if it were to be adopted.

---

<div class="post-metadata">

### Author: ![seancorfield](https://clojureverse.org/user_avatar/clojureverse.org/seancorfield/32/195_2.png) [@seancorfield](https://clojureverse.org/u/seancorfield)
#### Post date: [November 13, 2018, 7:45pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/8 "2018-11-13T19:45:38Z")

</div>

> [@jwhitlark](#):
>
> I’ve _frequently_ wished for very minimal Clojure wrappers around external JVM projects.

I used to feel that way but over the years I’ve mostly become disenchanted with wrapper libraries – unless you truly brought a much more idiomatic, “Clojure-y” feel to things – and prefer direct Java interop in a lot of cases. As co-maintainer of `clj-time` I’ve often felt that direct interop with Joda Time would have been a preferable way to go – wrappers often have to cover a huge API with simple delegation functions and unless you cover _everything_, people are always going to keep asking you to add things.

---

<div class="post-metadata">

### Author: ![seancorfield](https://clojureverse.org/user_avatar/clojureverse.org/seancorfield/32/195_2.png) [@seancorfield](https://clojureverse.org/u/seancorfield)
#### Post date: [November 13, 2018, 7:47pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/9 "2018-11-13T19:47:15Z")

</div>

> [@jwhitlark](#):
>
> The number of times I’ve almost used fs, but backed off since it was un-maintained, is considerable. I wouldn’t mind to a bit of work on it if it were to be adopted.

We are using `fs` at work so I would have an incentive to contribute to its maintenance if it were part of a centralized community organization (and, yes, I had previously chosen not to use it because it lost its maintainer).

---

<div class="post-metadata">

### Author: ![slipset](https://clojureverse.org/user_avatar/clojureverse.org/slipset/32/1127_2.png) [@slipset](https://clojureverse.org/u/slipset)
#### Post date: [November 13, 2018, 8:01pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/10 "2018-11-13T20:01:26Z")

</div>

I’ll reach out to akvo and check if they’d like to transfer ownership to clj-commons.

---

<div class="post-metadata">

### Author: ![jwhitlark](https://clojureverse.org/user_avatar/clojureverse.org/jwhitlark/32/1064_2.png) [@jwhitlark](https://clojureverse.org/u/jwhitlark)
#### Post date: [November 13, 2018, 8:18pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/11 "2018-11-13T20:18:50Z")

</div>

Hmm… Yea, I see your point. Thinking about it some more, it might be less about “wrapping” and more about (optional) assisted tools and usage examples. I’ll have to take a look at my kafka code and see what I really want…

---

<div class="post-metadata">

### Author: ![jwhitlark](https://clojureverse.org/user_avatar/clojureverse.org/jwhitlark/32/1064_2.png) [@jwhitlark](https://clojureverse.org/u/jwhitlark)
#### Post date: [November 13, 2018, 8:22pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/12 "2018-11-13T20:22:59Z")

</div>

Can I ask what version you’re using? I’d throw it back into the mix with just a touch of encouragement that I’m not all alone on it. The only thing that bothered me about fs is I would have liked to see “!” at the end of mutating operations.

Which brings up two questions about clj-commons: Where do we keep track of nominated projects, and how do we get more involved.

---

<div class="post-metadata">

### Author: ![slipset](https://clojureverse.org/user_avatar/clojureverse.org/slipset/32/1127_2.png) [@slipset](https://clojureverse.org/u/slipset)
#### Post date: [November 13, 2018, 8:34pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/13 "2018-11-13T20:34:02Z")

</div>

As for recommending repos, I’ll set up meta repo to file issues which would be requests/ideas for repos to seek maintainership of.

As to getting involved, as for now, ping me here or at erik at assum dot net until we’ve set up  
a better system.

---

<div class="post-metadata">

### Author: ![slipset](https://clojureverse.org/user_avatar/clojureverse.org/slipset/32/1127_2.png) [@slipset](https://clojureverse.org/u/slipset)
#### Post date: [November 13, 2018, 9:15pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/14 "2018-11-13T21:15:37Z")

</div>

And so I end up replying to myself.  
Here’s your wish list 🙂 [https://github.com/clj-commons/wishlist](https://github.com/clj-commons/wishlist)

---

<div class="post-metadata">

### Author: ![seancorfield](https://clojureverse.org/user_avatar/clojureverse.org/seancorfield/32/195_2.png) [@seancorfield](https://clojureverse.org/u/seancorfield)
#### Post date: [November 13, 2018, 10:33pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/15 "2018-11-13T22:33:33Z")

</div>

> [@jwhitlark](#):
>
> Can I ask what version you’re using?

1.4.6 which seems to be the most recent. Right now we’re only using the compression stuff but we’d probably use more of it if it was being actively maintained. There are certainly open issues and open PRs on `fs` that we’d want to see “done” before we’d use it more heavily.

I sort of agree on the `!` but there’s an implicit agreement/assumption that all file I/O is potentially unsafe for use in transaction functions (which is what `!` is really supposed to indicate).

---

<div class="post-metadata">

### Author: ![danlebrero](https://clojureverse.org/user_avatar/clojureverse.org/danlebrero/32/1617_2.png) [@danlebrero](https://clojureverse.org/u/danlebrero)
#### Post date: [November 14, 2018, 5:05pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/16 "2018-11-14T17:05:54Z")

</div>

Hi!

I work for Akvo and we would love to see `Raynes/fs` transferred to clj-commons.

We own the latest branch, but we just patched a security vulnerability. The branch that actually seems to have had some maintenance is [https://github.com/funcool/fs](https://github.com/funcool/fs), but our PR ([https://github.com/funcool/fs/pull/2](https://github.com/funcool/fs/pull/2)) was never accepted.

In any case, let me know how can we help.

Regards,

Dan

---

<div class="post-metadata">

### Author: ![slipset](https://clojureverse.org/user_avatar/clojureverse.org/slipset/32/1127_2.png) [@slipset](https://clojureverse.org/u/slipset)
#### Post date: [November 14, 2018, 5:29pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/17 "2018-11-14T17:29:59Z")

</div>

Hi Dan,

That’s great news. I’ve added you as an admin to clj-commons so you’re free to transfer fs to us.

Ping me here or on the clojurians slack @slipset if you have questions

Erik.

---

<div class="post-metadata">

### Author: ![danlebrero](https://clojureverse.org/user_avatar/clojureverse.org/danlebrero/32/1617_2.png) [@danlebrero](https://clojureverse.org/u/danlebrero)
#### Post date: [November 14, 2018, 6:29pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/18 "2018-11-14T18:29:46Z")

</div>

Done and dusted.

Let me know if you need other help.

---

<div class="post-metadata">

### Author: ![bcambel](https://clojureverse.org/user_avatar/clojureverse.org/bcambel/32/103_2.png) [@bcambel](https://clojureverse.org/u/bcambel)
#### Post date: [November 17, 2018, 10:16pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/19 "2018-11-17T22:16:29Z")

</div>

such a good initiative!

---

<div class="post-metadata">

### Author: ![royalaid](https://clojureverse.org/user_avatar/clojureverse.org/royalaid/32/668_2.png) [@royalaid](https://clojureverse.org/u/royalaid)
#### Post date: [November 21, 2018, 8:22pm UTC](https://clojureverse.org/t/what-is-clj-commons/3162/20 "2018-11-21T20:22:54Z")

</div>

I have started a stream for clj-commons on the clojurians Zulip:

> **[The world's most productive team chat](https://clojurians.zulipchat.com/login/)**
>
> Zulip combines the immediacy of real-time chat with an email threading model. With Zulip, you can catch up on important conversations while ignoring irrelevant ones.

[Next page](https://clojureverse.org/t/what-is-clj-commons/3162.md?page=2)
