Practicalli Clojure CLI Config: a shared deps.edn of aliases
User aliases and Clojure CLI configuration for deps.edn based projects
At a glance
- What is it?
- This repository is not a library but a user-level `deps.edn` full of aliases, tooling configuration and CI workflows for anyone using the Clojure CLI. It saves every developer on a project from writing the same REPL, test and lint aliases by hand, and it is published as a config rather than a dependency, which changes how you consume it.
- Who is it for?
- Adopt this repository if your team works in `deps.edn` based Clojure projects and wants one agreed set of aliases instead of each developer inventing their own, and if you are comfortable copying files into the Clojure CLI user configuration directory.
- Can I use it commercially?
- Yes, with credit. CC-BY-SA-4.0 allows commercial use as long as you credit the authors and indicate what you changed. It is written for creative content, so check how it applies to any code.
- Is it still maintained?
- Yes. The repository last received commits 8 days ago.
- What is it written in?
- Mainly edn, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What the repository actually contains
The description calls this project user aliases and Clojure CLI configuration for deps.edn based projects, and the primary language is recorded as `edn`, not Clojure. That is the first thing to understand: there is no library to add to your `deps.edn` and no API to call.
The README lists the contents plainly. A `deps.edn` user configuration containing alias definitions. A GitHub workflow that runs MegaLinter and code quality checks, with clj-kondo and cljstyle provided by the setup-clojure action. A cljstyle configuration that follows the Clojure Style Guide, held in a `.cljstyle` file. A Rebel Readline example configuration supporting the rich terminal UI used by Practicalli. A cspell configuration for linting markdown and other text. And a `deps-deprecated.edn` holding alias examples for tools the author no longer uses but that may still interest the wider community.
The tree at the top level matches that inventory: `deps.edn`, `deps-deprecated.edn`, `rebel_readline.edn`, `clojurescript-figwheel-experiments.edn`, `.cljstyle`, `.cspell.json` and `.cspell/`, plus `docs/`, `docs-theme/`, a `Makefile`, `CHANGELOG.org` and a `zensical.toml` for the documentation site.
So the deliverable is a set of files you install into your Clojure CLI user configuration directory, and the value is that everyone on the team ends up with the same command names for the same jobs.
Alias names are namespaced so they do not collide
The design decision that makes this file usable across a whole team is the naming scheme, and the README states the reasoning: aliases are qualified keywords using descriptive names to clearly convey purpose and provide a level of consistency to minimise cognitive load.
In practice that means an alias is not called `test` but `test/run`, not `repl` but `repl/rebel`, and the prefix tells you where the alias came from. The README splits the alias space in two: built-in tasks provided by the Clojure CLI itself, and Practicalli aliases provided by this configuration. That distinction matters, because the same conceptual job can have both a built-in form and a configured one, and knowing which is which explains why the invocation flags differ from task to task.
The flags follow the Clojure CLI execution option model, and the README spells out all three in a short list. `-M` is for `:main-opts` configuration. `-X` is for `:exec-opts` configuration. `-T` is for `:exec-opts` while ignoring project dependencies, which is what makes an alias usable before the project has its own dependencies resolved, or in a directory that is not a project at all.
To see what you actually have, the README gives one command:
clojure --versionand, for the alias list itself, `clojure -X:deps aliases` lists all the alias names at both the project level and the user level. That distinction between project and user level is the mechanism by which a team alias can be overridden locally, or a project alias can coexist with a user one of the same name.
The common task table, and which of those tasks are actually free
The README maps common development tasks to commands and marks each one as built-in or Practicalli, and the table is the fastest way to see what this configuration adds over a bare Clojure CLI.
The Practicalli-provided entries include creating a minimal playground project with `clojure -T:project/create`, a REPL with rebel readline and an nREPL server via `clojure -M:repl/rebel`, a ClojureScript REPL with an nREPL server via `clojure -M:repl/cljs`, running tests and watching for changes with `clojure -X:test/run` and `clojure -X:test/watch`, checking library dependencies for newer versions with `clojure -T:search/outdated`, generating an image of the project dependency graph with `clojure -T:project/graph-deps`, and finding library names on Clojars and Maven Central with `clojure -M:search/libraries qualified-library-names`.
The built-in entries are the ones the Clojure CLI already ships: running the project with `clojure -M -m domain.main-namespace`, downloading dependencies with `clojure -P`, installing a library into the local `~/.m2/repository` with `clojure -X:deps mvn-install :jar '"project.jar"'`, finding available versions with `clojure -X:deps find-versions :lib domain/library-name`, and resolving git coordinate tags to shas while updating `deps.edn` with `clojure -X:deps git-resolve-tags git-coord-tag`.
That split is the honest value proposition. Several tasks that look like they are part of this project are in fact the CLI's own, and the ones this repository adds are mostly about convenience wrappers, REPL setup, and tooling that the CLI does not ship.
Installing: copy the user config, check the CLI version first
The README recommends Clojure CLI version 1.11.1.1xxx or later and tells you to confirm the installed version with the command shown above. A dedicated guide to installing the Clojure CLI is linked for the case where you need it on a specific operating system.
The install method itself follows from the project being a user configuration rather than a dependency. There is no `deps.edn` coordinate to add, and the files belong in the Clojure CLI user configuration directory where the CLI reads `deps.edn` from, alongside any aliases you define yourself. The README's own Contents list separates Install from Updating practicalli/clojure-cli-config, which tells you the expected workflow is a copy of the files, and later a copy of the newer version over the top, rather than a version manager resolving a coordinate.
The Makefile in the repository shows what the author runs against this configuration during development of the tooling itself, and it names the aliases the workflow depends on: `:dev/env` to include the `dev` directory on the class path, `:test/env` to include the `test` directory and the libraries needed for testing, `:test/run` to run the kaocha test runner with its supporting paths and dependencies, `:repl/rebel` to start a Rebel terminal UI, and `:package/uberjar` to create an uberjar for the service. The requirements comment also lists cljstyle, docker for running MegaLinter locally, and the mega-linter-runner.
Two of the Makefile variables show how the tooling is wired into CI, and they name the MegaLinter invocation and the local documentation server:
MEGALINTER_RUNNER := npx mega-linter-runner --flavor java --env "'MEGALINTER_CONFIG=.github/config/megalinter.yaml'" --remove-container
DOCS_SERVER := zensical serve --dev-addr localhost:7777The REPL workflow is the part most teams will feel
The README points the Practicalli books and the Clojure book at this configuration as the foundation for a REPL Reloaded workflow, which is the Clojure community's habit of keeping a long-lived REPL process and reloading code into it rather than restarting the JVM for every change.
The `repl/rebel` alias is the entry point for that, and it depends on the separate `rebel_readline.edn` file in the repository, which the README describes as an example configuration supporting the rich terminal UI. The distinction between example configuration and enforced configuration is worth keeping in mind. Nothing in the project forces your terminal UI on you, the file is offered as a starting point, and a team with its own preferences will edit it and diverge from the upstream file.
The ClojureScript side has its own alias, `repl/cljs`, for a ClojureScript REPL with an nREPL server, and the tree contains `clojurescript-figwheel-experiments.edn`, which suggests some exploration of Figwheel for ClojureScript build and reload behaviour.
The Contents list in the README is where the full scope shows up. Beyond development environment setup, the config covers project dependencies, analysis, packaging and deployment, searching for libraries, code formatting, lint tools, Java sources, test runners, test coverage, Clojure specification, performance testing, security tooling, databases and drivers, data inspectors, visualising project vars and library dependencies, debug tools, services, and library hosting services such as maven mirrors and local repositories.
That breadth is a feature for a team that wants one place to look, and a maintenance cost for anyone who has to keep it working.
Where a shared alias file stops being the right answer
The main limitation is the mismatch between what a config file can pin and what a project dependency can pin. The aliases in `deps.edn` name tools and libraries, and the versions those tools resolve to are not recorded in your project the way a normal dependency would be. Two developers on the same alias can therefore end up running different versions of a linter or a test runner, and the failure shows up as inconsistent output rather than an error.
The project is candid about the age of its contents in a different way. The `deps-deprecated.edn` file exists specifically to hold alias examples for tools the author no longer uses, kept because they may still interest the wider community. That is a useful signal and a hazard at the same time: some aliases in the wider Clojure ecosystem are pinned to versions that the CLI's own execution model has moved past, and the deprecated file is where the interesting ones end up.
The licence deserves a second look too, and it is unusual. The repository is recorded under Creative Commons Attribution ShareAlike 4.0, not a software licence, and the README carries the Creative Commons badge and the attribution and sharealike notice. A configuration file is arguably content rather than code, but the same file also contains executable alias definitions, and CC BY-SA 4.0 has obligations around attribution and sharealike that differ sharply from MIT or Apache-2.0. This is a description of the terms as stated, not legal advice, and the `LICENSE` file in the repository is the version to read before you redistribute it internally.
Maintenance itself is steady rather than frantic. The last push was on 2026-10-15, and the release tags are dated releases rather than version numbers: 2026-09-28 for monthly library updates, 2026-09-06 for monthly updates and the documentation site, and 2026-08-03. The naming shows the cadence: this repository is a monthly refresh of library versions, not a package with semantic versioning.
Editorial conclusion
Adopt this repository if your team works in `deps.edn` based Clojure projects and wants one agreed set of aliases instead of each developer inventing their own, and if you are comfortable copying files into the Clojure CLI user configuration directory. Do not adopt it if you want versioned, dependency-managed tooling, because the aliases are config and their libraries are resolved at run time rather than pinned in your project, and do not adopt it as a package because there is nothing to depend on. Before you install, check that your Clojure CLI is on version 1.11.1.1xxx or later as the README requires, read the `deps.edn` rather than trusting the alias names, and remember that the pinned tool versions in this file will age even though the repository itself was pushed to on 2026-10-15.
Frequently asked questions
What is Practicalli Clojure CLI Config and how do I install it?
It is a set of user-level configuration files for the Clojure CLI, including a `deps.edn` of alias definitions, cljstyle, cspell and Rebel Readline configuration. The README recommends Clojure CLI version 1.11.1.1xxx or later, checked with `clojure --version`, and a guide to installing the CLI itself is linked from the repository.
How do I list the aliases available in Practicalli Clojure CLI Config?
The README states that `clojure -X:deps aliases` lists all the alias names at the project level and the user level. The names are qualified keywords with descriptive names, such as `repl/rebel` and `test/run`.
What is the difference between the -M, -X and -T execution options?
The README lists them directly: `-M` is for `:main-opts` configuration, `-X` is for `:exec-opts` configuration, and `-T` is for `:exec-opts` while ignoring project dependencies. That last behaviour is what lets an alias run without the project's own dependencies resolved.
Which Practicalli Clojure CLI Config aliases are actually part of the Clojure CLI itself?
The README's task table marks each entry as built-in or Practicalli. Built-in tasks include running the project with `clojure -M -m domain.main-namespace`, downloading dependencies with `clojure -P`, and resolving git coordinate tags with `clojure -X:deps git-resolve-tags git-coord-tag`, while the REPL, test, project and search aliases come from this configuration.
What licence does Practicalli Clojure CLI Config use?
The repository is recorded under Creative Commons Attribution ShareAlike 4.0, and the README carries the Creative Commons badge and notice. The `LICENSE` file in the repository holds the terms, and since the same files contain executable alias definitions, it is worth reading that file before redistributing them.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/practicalli-clojure-cli-config)Was this useful?