# \[Idea\] A tool for helping developers get started using Clojure CLI tools and deps.edn

**URL:** https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270
**Category:** Community Building
**Tags:** clojure, documentation
**Created:** [May 17, 2019, 10:31pm UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270 "2019-05-17T22:31:57Z")
**Posts on this page:** 12
**Page:** 2

<div class="post-metadata">

### Author: ![didibus](https://clojureverse.org/user_avatar/clojureverse.org/didibus/32/951_2.png) [@didibus](https://clojureverse.org/u/didibus)
#### Post date: [May 23, 2019, 4:45am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/21 "2019-05-23T04:45:43Z")

</div>

Hum… that aka thing seems a lot like what I was thinking. The pack.edn doesn’t seem to be documented, and where to host it as well.

But my thoughts were that you’d have a new edn format, like say package.edn. And that you could do something like:

```auto
plum install bla/foo/package.edn

```

And based on that package.edn file, the correct alias would be added, and shell launcher created and added to your path for it. And then you could do a `plum update` and it would update all your packages.

Maybe there could even be a hosted repo of package.edn files. Or maybe github could be the repo, so you’d just have to host the package.edn file on github either by itself or at the root of the actual project repo and then you could do

```auto
plum install foo/bar

```

Where foo/bar is a github repo. And it would look for that package.edn file in it. Having a custom hosted repo would allow listing and searching for packages which could be nice though.

Now the trick would be for what data goes into package.edn. You probably want some metadata along with the alias. And off course, creating the CLI for it. As well as handling the installation, it could get tricky, like what if there are name clashes on the path, how to support windows, what about installing GUI or daemon apps? Etc.

But the potential is there.

---

<div class="post-metadata">

### Author: ![Olical](https://clojureverse.org/user_avatar/clojureverse.org/olical/32/505_2.png) [@Olical](https://clojureverse.org/u/Olical)
#### Post date: [May 23, 2019, 8:19am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/22 "2019-05-23T08:19:49Z")

</div>

FWIW, this was very close to the original vision I had for depot [https://github.com/Olical/depot](https://github.com/Olical/depot)

I never went through with it and just stopped at the outdated checking (hence the specific namespace name to make room for others). This sort of tool could be really powerful in the community, especially since it’s entirely optional and is built on top of common tools.

---

<div class="post-metadata">

### Author: ![plexus](https://clojureverse.org/user_avatar/clojureverse.org/plexus/32/6_2.png) [@plexus](https://clojureverse.org/u/plexus)
#### Post date: [May 23, 2019, 9:37am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/23 "2019-05-23T09:37:14Z")

</div>

> [@martinklepsch](#):
>
> I think [kaocha](https://github.com/lambdaisland/kaocha) implements a similar system but @plexus will be more knowledgeable about that.

The main thing I did with Kaocha is designing an API namespace, and having the CLI be a thin layer over that. This is something I can highly recommend, think from the start about how people might call your tool programmatically, and consume that API layer yourself.

---

<div class="post-metadata">

### Author: ![lilactown](https://clojureverse.org/user_avatar/clojureverse.org/lilactown/32/1221_2.png) [@lilactown](https://clojureverse.org/u/lilactown)
#### Post date: [May 23, 2019, 3:12pm UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/24 "2019-05-23T15:12:52Z")

</div>

I’ve updated `plum add` to support git deps and local roots as well. 🎉

I think the next hard thing to tackle will be figuring out a packaging/building command: I know there are a few aliases out there for doing this.

I’ve created an issue over at [https://github.com/Lokeh/plum/issues/4](https://github.com/Lokeh/plum/issues/4). Please provide recommendations and comments!

---

<div class="post-metadata">

### Author: ![lilactown](https://clojureverse.org/user_avatar/clojureverse.org/lilactown/32/1221_2.png) [@lilactown](https://clojureverse.org/u/lilactown)
#### Post date: [May 23, 2019, 8:51pm UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/25 "2019-05-23T20:51:54Z")

</div>

I’ve also started a site explaining what plum does and how to install it: [https://laughing-banach-af1115.netlify.com/](https://laughing-banach-af1115.netlify.com/)

---

<div class="post-metadata">

### Author: ![colinfleming](https://clojureverse.org/user_avatar/clojureverse.org/colinfleming/32/64_2.png) [@colinfleming](https://clojureverse.org/u/colinfleming)
#### Post date: [May 24, 2019, 1:36am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/26 "2019-05-24T01:36:48Z")

</div>

> [@plexus](#):
>
> This is something I can highly recommend, think from the start about how people might call your tool programmatically, and consume that API layer yourself.

+1 to this as a general principle.

---

<div class="post-metadata">

### Author: ![DeepSymmetry](https://clojureverse.org/user_avatar/clojureverse.org/deepsymmetry/32/1305_2.png) [@DeepSymmetry](https://clojureverse.org/u/DeepSymmetry)
#### Post date: [May 29, 2019, 12:52am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/27 "2019-05-29T00:52:56Z")

</div>

This is all very promising, and I think there are a ton of great ideas here! I would just caution you to be careful about where you draw the line in terms of packaging boundaries for a while because that is a vast task itself. For example, this talk about GUI and daemon apps opens many huge cans of worms, such as application-native icons, dock integration, code signing and installer building on the Mac… it would take a big team a long time to get right, and it would probably be better to just wait for the OpenJDK project to finish the jpackage tool and leverage that to turn your überjar into a well-behaved native application launcher or installer: [https://bugs.openjdk.java.net/browse/JDK-8200758](https://bugs.openjdk.java.net/browse/JDK-8200758)

---

<div class="post-metadata">

### Author: ![saikyun](https://clojureverse.org/user_avatar/clojureverse.org/saikyun/32/1958_2.png) [@saikyun](https://clojureverse.org/u/saikyun)
#### Post date: [May 29, 2019, 6:20am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/28 "2019-05-29T06:20:45Z")

</div>

Haven’t read the whole thread, but since no one has mentioned graal/native-image; maybe you could have a `plum build bin` which uses graal to build a native image? 🙂

---

<div class="post-metadata">

### Author: ![lilactown](https://clojureverse.org/user_avatar/clojureverse.org/lilactown/32/1221_2.png) [@lilactown](https://clojureverse.org/u/lilactown)
#### Post date: [May 29, 2019, 3:09pm UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/29 "2019-05-29T15:09:52Z")

</div>

This has been in the back of my mind because the time it takes currently to do things like e.g. `plum add clj-time "0.15.0"` is far too long for my tastes. However, I expect I would have to spend a lot of time to get individual commands native-image compatible.

---

<div class="post-metadata">

### Author: ![jacob](https://clojureverse.org/user_avatar/clojureverse.org/jacob/32/4016_2.png) [@jacob](https://clojureverse.org/u/jacob)
#### Post date: [May 30, 2019, 12:53am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/30 "2019-05-30T00:53:58Z")

</div>

Cross-posting here since the `#plum` channel still only has 4 people (you should all go join!)  
I’d appreciate feedback on this: [https://clojurians.slack.com/archives/CJFRQS61Z/p1559176465011800](https://clojurians.slack.com/archives/CJFRQS61Z/p1559176465011800)

---

<div class="post-metadata">

### Author: ![saikyun](https://clojureverse.org/user_avatar/clojureverse.org/saikyun/32/1958_2.png) [@saikyun](https://clojureverse.org/u/saikyun)
#### Post date: [June 7, 2019, 2:50pm UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/31 "2019-06-07T14:50:36Z")

</div>

Ah I see, I know nothing about the pain needed to deal with native-image, so it was a suggestion made in blissful ignorance. :^)

---

<div class="post-metadata">

### Author: ![system](https://clojureverse.org/uploads/default/original/2X/5/51079bf9e4b7d9466242c06cf1e43b9f8bd6da14.png) [@system](https://clojureverse.org/u/system)
#### Post date: [December 7, 2019, 2:50am UTC](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270/32 "2019-12-07T02:50:39Z")

</div>

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.

[Previous page](https://clojureverse.org/t/idea-a-tool-for-helping-developers-get-started-using-clojure-cli-tools-and-deps-edn/4270.md?page=1)
