| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
██████╗ ██████╗ █████╗ ██████╗████████╗██╗ ██████╗ █████╗ ██╗ ██╗ ██╗
██╔══██╗██╔══██╗██╔══██╗██╔════╝╚══██╔══╝██║██╔════╝██╔══██╗██║ ██║ ██║
██████╔╝██████╔╝███████║██║ ██║ ██║██║ ███████║██║ ██║ ██║
██╔═══╝ ██╔══██╗██╔══██║██║ ██║ ██║██║ ██╔══██║██║ ██║ ██║
██║ ██║ ██║██║ ██║╚██████╗ ██║ ██║╚██████╗██║ ██║███████╗███████╗██║
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝
Practicalli Clojure CLI Config provides a wide range of community tools that extend the features of the Clojure CLI, for use across all Clojure deps.edn projects.
clojure -X:deps aliases will list all the alias names at the project and user level.
Aliases are qualified keywords using descriptive names to clearly convey purpose and provide a level of consistency to minimise cognitive load.
| Task | Command | Configuration |
|---|---|---|
| Create minimal playground project | clojure -T:project/create | Practicalli |
| Clojure REPL - rebel readline & nrepl server | clojure -M:repl/rebel | Practicalli |
| ClojureScript REPL with nREPL server | clojure -M:repl/cljs | Practicalli |
| Run tests / watch for changes | clojure -X:test/run / clojure -X:test/watch | Practicalli |
| Run the project (clojure.main) | clojure -M -m domain.main-namespace | Built-in |
| Check library dependencies for newer versions | clojure -T:search/outdated | Practicalli |
| Download dependencies | clojure -P (followed by optional aliases) | Built-in |
| Generate image of project dependency graph | clojure -T:project/graph-deps | Practicalli |
| Deploy library locally (~/.m2/repository) | clojure -X:deps mvn-install :jar '"project.jar"' | Built-in |
| Find library names (Clojars & Maven Central) | clojure -M:search/libraries qualified-library-names | Practicalli |
| Find available versions of a library | clojure -X:deps find-versions :lib domain/library-name | Built-in |
| Resolve git coord tags to shas and update deps.edn | clojure -X:deps git-resolve-tags git-coord-tag | Built-in |
Practicalli books uses the Clojure CLI Config extensively to support a REPL Reloaded workflow for Clojure projects.
Practicalli Clojure book discusses Clojure CLI and its use, along with video walk-through of the key features.
Clojure CLI version 1.11.1.xxxx or later is recommended. Check the version of Clojure CLI currently installed via:
clojure --versionPracticalli guide to installing Clojure has detailed instructions to install Clojure CLI for a specific operating system, or follow the Clojure.org Getting Started page.
When Clojure CLI runs for the first time a configuration directory is created in $XDG_CONFIG_HOME/clojure or $HOME/.clojure if XDG_CONFIG_HOME not set
Practicalli recommends setting $XDG_CONFIG_HOME to $HOME/.config
Backup or delete the Clojure CLI configuration directory if it exists
Clone practicalli/clojure-cli-config repository (or create a fork and clone that instead)
git clone git@github.com:practicalli/clojure-cli-config.git $XDG_CONFIG_HOME/clojureIf $XDG_CONFIG_HOME not set, then use git clone git@github.com:practicalli/clojure-cli-config.git $HOME/.clojure
The deps.edn file in the Clojure CLI configuration directory contains all the Practicalli aliases, which are available from any Clojure CLI project for the current user account.
Windows support: Windows Sub-system for Linux (WSL) is strongly encouraged. Aliases should also work on Powershell or cmd.exe, although escape quoting of additional arguments may be required.
$HOME/.m2/repository is the default location of the local maven repository, the directory where library dependency jar files are cached.
:mvn/local-repo is a top-level key to set the local maven repository location, such as /home/practicalli/.cache/maven/repository to follow the XDG specification. If setting :mvn/local-repository, consider moving the contents of $HOME/.m2/repository to the new location to avoid downloading currently cached jar files (or use this as an opportunity to clear out the cache).
The collection of aliases is regularly reviewed and additional alias suggestions and PRs are most welcome.
The versions of libraries are updated at least once per month using the :project/outdated alias, updating the deps.edn file. The antq tool is used to report new library versions, sent to an org file which is then used to update the changelog.
cd $XDG_CONFIG_HOME/clojure
clojure -T:search/outdated > outdated.orgPull Requests from :search/outdated cannot be accepted unless full testing of every change can be demonstrated
A directory containing a deps.edn file is considered a Clojure project. A deps.edn file can contain an empty hash-map, {} or hash-map with configuration, usually :paths and :dependencies and perhaps some :aliases.
The project deps.edn file is merged with the user wide configuration, e.g $HOME/.clojure/deps.edn, with the project deps.edn keys taking precedence if there is duplication, otherwise they are merged.
Configuration passed via the command line when running clojure or the clj wrapper will take precedence over the project and user level configuration if there is duplication, otherwise they are merged.
See the rest of this readme for examples of how to use each alias this configuration contains.
Common arguments are included in alias definitions via main-opts and :exec-args to provide a default behaviour and simplify the use aliases.
Aliases are defined to be used with all execution options -A, -M, -P, -T or -X where possible.
| Task | Command | Configuration |
|---|---|---|
| Create minimal playground project | clojure -T:project/create | Practicalli |
| Clojure REPL - rebel readline & nrepl server | clojure -M:repl/rebel | Practicalli |
| ClojureScript REPL with nREPL server | clojure -M:repl/cljs | Practicalli |
| Run tests / watch for changes | clojure -X:test/run / clojure -X:test/watch | Practicalli |
| Run the project (clojure.main) | clojure -M -m domain.main-namespace | Built-in |
| Check library dependencies for newer versions | clojure -T:search/outdated | Practicalli |
| Download dependencies | clojure -P (followed by optional aliases) | Built-in |
| Generate image of project dependency graph | clojure -T:graph/deps | Practicalli |
| Deploy library locally (~/.m2/repository) | clojure -X:deps mvn-install :jar '"project.jar"' | Built-in |
| Find library names (Clojars & Maven Central) | clojure -M:search/libraries qualified-library-names | Practicalli |
| Find available versions of a library | clojure -X:deps find-versions :lib domain/library-name | Built-in |
| Resolve git coord tags to shas and update deps.edn | clojure -X:deps git-resolve-tags git-coord-tag | Built-in |
Run an interactive REPL on the command line with the basic built-in REPL UI or Rebel for a feature rich REPL experience.
nREPL server is started for all Clojure repl aliases along with the cider-nrepl middleware, so Clojure editors can connect to the REPL process started on the command line.
| Command | Description |
|---|---|
| clojure -M:repl/rebel | Rebel Rich terminal UI Clojure REPL with nREPL for connecting editors |
| clojure -M:repl/basic | Basic terminal UI Clojure REPL with nREPL for connecting editors |
| clojure -M:repl/reloaded | As above with dev path, library hotload, namespace reload, Portal data inspector |
| clojure -M:repl/cljs | Basic terminal UI ClojureScript REPL using Rebel Readline |
| clojure -M:repl/rebel-cljs | Rich terminal UI ClojureScript REPL using Rebel Readline |
| clojure -M:repl/figwheel | Rich terminal UI ClojureScript REPL using Rebel Readline with Figwheel built tool |
| clojure -M:repl/headless | REPL without prompt, include nREPL for connecting editors |
| clojure -M:repl/rebel-remote | Connect to a remote REPL via nREPL with Rebel Rich terminal UI |
| clojure -M:repl/remote | As above with basic prompt |
Use :env/dev with the :repl/rebel aliases to include dev/ in classpath and configure REPL startup actions using dev/user.clj
clojure -M:repl/reloaded provides common tools to enhance the REPL workflow (hotload libraries, refresh code changes, inspect data, advanced test runner, log & trace)
Use :dev/reloaded with Editor jack-in commands or other aliases to start a REPL process, e.g. clj -M:dev/reloaded:repl/basic for a reloaded REPL workflow with a basic terminal REPL prompt.
Connect to the nREPL server of a remote REPL using nREPL connect, using a simple terminal UI
clojure -M:repl/remote --host hostname --port 12345As above but using the enhanced Rebel Readline UI
clojure -M:repl/rebel-remote --host hostname --port 12345Clojure 1.10.x onward can run a Socket Server for serving a socket-based REPL (Clojure and ClojureScript).
tubular is a Socket Server client for Clojure and Clojurescript REPL processes.
| Command | Description |
|---|---|
| clojure -M:repl/socket | Clojure REPL using Socket Server on port 50505 |
| clojure -M:repl/socket-zero | As above but on first available port (container, cloud environment) |
| clojure -M:repl/socket-zero -r | As above but and run a REPL |
| clojure -M:repl/socket-node | ClojureScript REPL using Socket Server on port 55555 |
| clojure -M:repl/socket-browser | ClojureScript REPL using Socket Server on port 58585 |
| clojure -M:repl/socket-client | Socket REPL client on port 50505 (tubular) |
Environment settings and libraries to support REPL driven development
Create Clojure CLI configured projects, either built-in or practicalli/project-templates to provide REPL Reloaded tools and production-level CI workflows.
Default values (can be over-ridden on the command line)
| Command | Description |
|---|---|
| clojure -T:project/create :template app :name domain/app-name | A simple application |
| clojure -T:project/create | Practicalli application called playground |
| clojure -T:project/create :template practicalli/service | Practicalli Service called playground |
:project/new uses clj-new which is an archived project, although can still be used to create projects using Leiningen style templates. A Clojure CLI configuration must be manually added if these templates do not provide one.
| Command | Description |
|---|---|
| clojure -T:project/new :template app :name practicalli/my-application | App project with given name |
| clojure -T:project/new :template luminus :name practicalli/full-stack-app :args '["+http-kit" "+h2"]' | Luminus project with given name and template options |
| clojure -T:project/new :template figwheel-main :name practicalli/landing-page :args '["--reagent"]' | ClojureScript Figwheel-main project with reagent |
Run project using clojure.main with or without an alias:
clojure -M:alias-name -m domain.app-name
clojure -M -m domain.app-nameThe -M flag specified running the Clojure code with clojure.main library, so -M' is required even if an alias is not included in the running of the application. A warning will be displayed if the -M option is missing.
In the project deps.edn file it could be useful to define an alias to run the project, specifying the main namespace, the function to run and optionally any default arguments that are passed to that function.
:project/run
{:ns-default domain.main-namespace
:exec-fn -main
:exec-args {:port 8888}}Then the project can be run using clojure -X:project/run and arguments can optionally be included in this command line, to complement or replace any default arguments in exec-args.
| Command | Description |
|---|---|
| clojure -M:project/check | detailed report of compilation errors for a project |
| clojure -M:search/libraries library-name | fuzzy search Maven & Clojars |
| clojure -M:search/libraries -F:save library-name | fuzzy search Maven & Clojars and save to project deps.edn |
| clojure -T:search/outdated | report newer versions for maven and git dependencies |
| clojure -M:search/outdated-mvn | check for newer dependencies (maven only) |
:search/libraries will show warnings about unqualified libraries the first time it is used, which can safely be ignored
Carve - static analysis of code (clj-kondo) and remove or report unused vars
| Command | Description |
|---|---|
| clojure -M:project/unused --opts '{:paths ["src" "test"]}' | remove unused vars from the src and test paths |
| clojure -M:project/unused --opts '{:paths ["src" "test"] :report {:format :text}}' | report unused vars from the src and test paths |
Generate report in a file:
clojure -M:project/unused --opts '{:paths ["src" "test"] :report {:format :ignore}}' > .carve/ignoretools.build is a library for creating scripts to manage packaging the projects to a fine level of control. Projects start with common tasks for builind a jar or uberjar from the project.
Deploy a library jar locally using the built-in :deps alias of Clojure CLI or to Clojars.org using slipset/deps-deploy project.
| Command | Description |
|---|---|
| clojure -X:deps mvn-install :jar '"project.jar"' | deploy jar file to local maven repository, i.e. ~/.m2/repository |
| clojure -M:project/clojars project.jar | deploy jar file to Clojars |
| clojure -M:project/clojars-signed project.jar | deploy signed jar file to Clojars |
Set Clojars username/token in CLOJARS_USERNAME and CLOJARS_PASSWORD environment variables.
Set fully qualified artifact-name and version in project pom.xml file
Path to project.jar can also be set in alias to simplify the Clojure command.
clojure -X:deps mvn-install :jar '"project.jar"' for local deployment of jars is part of the 1.10.1.697 release of the Clojure CLI in September 2020.
Tools to search through code and libraries
A fuzzy search for a library by name, passing multiple names to search for
clojure -M:search/libraries http-kit ring compojureAdd the matching library as a dependency into the project deps.edn file
clojure -M:search/libraries --format:merge http-kit
Include Java source on the classpath to look up Java Class and method definitions, eg. cider-find-var in Emacs
Requires: Java sources installed locally (e.g. "/usr/lib/jvm/openjdk-21/lib/src.zip")
Use the aliases with either -A, -M or -X execution options on the Clojure command line.
Clone clojure/clojure repository. Clojure core Java source code in src/jvm/clojure/lang/
Databases and drivers, typically for development time inclusion such as embedded databases
clojure -M:database/h2 - run a REPL with an embedded H2 database and next.jdbc libraries
Use the aliases with either -M or -X flags on the Clojure command line.
REPL driven data inspectors and tap> sources for visualising data.
Navigate data in the form of edn, json and transit Practicalli Clojure -data browsers section - portal
| Command | Description |
|---|---|
| clojure -M:inspect/portal-cli | Clojure REPL with Portal dependency |
| clojure -M:inspect/portal-web | ClojureScript web browser REPL with Portal dependency |
| clojure -M:inspect/portal-node | ClojureScript node.js REPL with Portal dependency |
Using Portal once running (require '[portal.api :as portal]) once the REPL starts. For inspect/portal-web use (require '[portal.web :as portal]) instead
(portal/open) to open the web based inspector window in a browser.
(portal/tap) to add portal as a tap target (add-tap)
(tap> {:accounts [{:name "jen" :email "jen@jen.com"} {:name "sara" :email "sara@sara.com"}]}) to send data to the portal inspector window (or any other data you wish to send)
(portal/clear) to clear all values from the portal inspector window.
(portal/close) to close the inspector window.
Emacs CIDER has a built in debug tool that requires no dependencies (other than Cider itself).
Sayid is a comprehensive debug and profile tool (which requires your code to compile) and generated a full and detailed history of an evaluation.
Practicalli Spacemacs - Sayid debug and profile tool covers the use of these aliases in more detail
Clojure spec, generators and test.check
Unit test libraries and configuration. The Clojure standard library includes the clojure.test namespace, so no alias is required.
Practicalli Clojure: Unit testing covers many aspects of testing for projects. Kaocha is the main test runner used by Practicalli as it is simple to use and easily configurable to create an effective test workflow.
Run unit tests in a project which are defined under the test path. See
| Command | Description |
|---|---|
| clojure -X:test/run | run tests with the Kaocha comprehensive test runner for Clojure (same as :test/kaocha) |
| clojure -X:test/watch | run tests in watch mode using Kaocha test runner for Clojure (same as :test/kaocha-watch) |
| clojure -X:test/cognitect | Cognitect Clojure test runner |
| clojure -X:test/coverage | Cloverage clojure.test coverage report |
| clojure -M:test/cljs | ClojureScript test runner (Kaocha) |
:lib/kaocha alias adds kaocha as a library to the class path, enabling scripts such as kaocha-runner.el to run Kaocha test runner from Emacs Cider
A test.edn configuration file can be used with the :test/run alias instead of using various aliases defined above
Static analysis tools to help maintain code quality and suggest Clojure idioms.
| Command | Description |
|---|---|
| clojure -M:lint/clj-kondo | comprehensive and fast static analysis lint tool |
| clojure -M:lint/eastwood | classic lint tool for Clojure |
| clojure -M:lint/idiom | Suggest idiomatic Clojure code |
Create Graphviz graphs of project and library dependencies
Install Graphviz to generate PNG and SVG images. Or use the Edotor website to convert .dot files to PNG or SVG images and select different graph layout engines.
Generate dependency graphs for Vars in Clojure & ClojureScript namespaces
Use -f command line argument to over-ride file type created, i.e -f png
Vizns creates graphs of relationships between namespaces and their dependencies
Other options described in the visns project readme:
Visualise the relationships between dependencies in the project (or given deps.edn configuration). Shows the fully qualified name of a dependency, its version and size.
Generate a PNG image from the project deps.edn configuration and save to project-dependencies-graph.png file
clojure -T:graph/depsOptions available
Performance testing tools for the REPL
Use the aliases with either -M or -X flags on the Clojure command line.
clojure -M:performance/benchmark:repl/rebel
(require '[criterium.core :refer [bench quick-bench]])
(bench (expression-to-test))Performance test a project in the REPL
clojure -M:performance/benchmark:repl/rebel
(require '[practicalli/namespace-name]) ; require project code
(in-ns 'practicalli/namespace-name)
(quick-bench (project-function args))Use the aliases with either -M or -X flags on the Clojure command line.
In the REPL:
(require '[clj-memory-meter.core :as memory-meter])
(memory-meter/measure (your-expression))Web servers and other standalone services run with Clojure CLI
| Command | Description |
|---|---|
| clojure -M:service/http | HTTP file server for current directory on port 8000 |
| clojure -M:service/http 8888 | as above with PORT specified to 8888 |
| clojure -M:service/http 8888 --dir docs | as above with PORT 8888 and doc directory |
Use Ctrl-c to stop the server when running in the foreground
:security/nvd-scan and :security/ndv-fix adds clj-watson tool
The alias requires an API Key to access the NIST National Vulnerability Database (NVD).
CLJ_WATSON_NVD_API_KEY environment variable should be set to the value of the API Key, e.g via .bashrc or .zshenv file.
| Command | Description |
|---|---|
| clojure -T:security/nvd-scan | check all libraries on the class path for security vulnerabilities |
| clojure -T:security/nvd-fix | update all libraries on the class path for security vulnerabilities |
clj-watson-action can be used in a GitHub workflow to run security vulnerability checks
The Clojurians Zulip CLI provides a simple way to register community events.
Set an environment variable called ZULIP_AUTH to your account email, followed by the account token (see Account & privacy), e.g.
your@email.com:493u984u3249834uo4uCreate an event using the following command
Show help and options
clojure -M:community/zulip-event create -hAnnounce an meetup.com event (you'll be asked for confirmation before posting)
clojure -M:community/zulip-event create --zulip-auth "${ZULIP_AUTH}" --url https://www.meetup.com/some-group/events/123/Full example
clojure -M:community/zulip-event create --zulip-auth "${ZULIP_AUTH}" \
--title 'Practicalli Live - Exercism.io challenges' \
--start '2020-11-14T09:00+00:00' \
--duration 1 \
--url https://youtu.be/Z5C7X1UN8yo \
--description 'Walking through solutions to the Exercism.io challenges'Take care to get the timezone notation correct.
Clojure libraries are packaged as Java Archive (JAR) files and distributed by Maven style repositories. A Clojure project configuration defines library dependencies that are satisfied by downloading jar files from the collective repository sources.
central and clojars are defined in the Clojure CLI installation configuration and are the main repositories for Clojure development.
:mvn/repos
{"central" {:url "https://repo1.maven.org/maven2/"}
"clojars" {:url "https://repo.clojars.org/"}}central and clojars repos can be removed by setting their configuration to nil in the user or project deps.edn configuration.
`:mvn/repos
{"central" nil
"clojars" nil}Maven supports explicit mirror definition in ~/.m2/settings.xml and Clojure CLI supports this configuration. Adding Maven Central or a mirror to ~/.m2/settings.xml negates the need for its entry in deps.edn configuration.
The order of additional repositories consulted is not guaranteed, so may cause unpredictable side effects in the project build especially if RELEASE or LATEST tags are used rather than a specifice numerical version.
Use only one entry for a specific repository to ensure a repeatable build. For example, avoid having Maven Central and a Maven Central mirror both included.
Example of local Artifactory repository configuration
:mvn/repos
{"business-area" {:url "https://artifacts.internal-server.com:443/artifactory/business-area-maven-local"} :mvn/repos
{"google-maven-central" {:url "https://maven-central.storage-download.googleapis.com/maven2/"}} :mvn/repos
{"google-maven-central" {:url "https://maven-central-eu.storage-download.googleapis.com/maven2/"}
;; CDN access to clojars
"clojars" {:url "https://repo.clojars.org/"}} :mvn/repos
{"google-maven-central" {:url "https://maven-central-asia.storage-download.googleapis.com/maven2/"}
;; Community mirror
"clojars-china-mirror" {:url "https://mirrors.tuna.tsinghua.edu.cn/clojars/"}
;; CDN access to clojars
"clojars" {:url "https://repo.clojars.org/"}}Specify a local repository for maven, as an alternative to the default location: $HOME/.m2/repository
FreeDesktop.org XDG_CACHE_HOME is the recommended location for an alternative Maven local repository.
:mvn/local-repo "/home/practicalli/.cache/maven/repository"NOTE: The full path should be specified, otherwise a relative directory path will be created
clojure -Spath will show the current class path which will include the path to the local maven repository for the library dependencies.
NOTE: using clojure -Sforce forces a classpath recompute, deleting the contents of .cpcache
| Back | FazBrowse Home | New Git URL |