Alembic is fine if you're using Leiningen, but I've been using deps.edn
and Clojure's built-in project/dependency management.
deps.edn
{:deps
{org.clojure/tools.deps.alpha
{:git/url "https://github.com/clojure/tools.deps.alpha.git"
:sha "d492e97259c013ba401c5238842cd3445839d020"}}}
user.clj
(ns user
(:require [clojure.tools.deps.alpha.repl :refer [add-lib]]))
(defn add-project-dep
([lib-name lib-version]
(let [dep-name (symbol lib-name)
dep-version (name lib-version)]
(add-lib dep-name {:mvn/version dep-version}))))
(add-project-dep :hiccup "1.0.5")
(require '[hiccup.core :refer [html]])
(html [:div "Hello World"])
;; => "<div>Hello World</div>"