aroemers / mount-lite

mount, but different and light
https://cljdoc.org/d/functionalbytes/mount-lite/
Eclipse Public License 1.0
102 stars 8 forks source link
clojure defstate mount

logo

A library resembling mount, but different on some key things:

Getting started

Add [functionalbytes/mount-lite "2.3.0"] or functionalbytes/mount-lite {:mvn/version "2.3.0"} to your dependencies and make sure Clojars is one of your repositories.

You can find all the documentation about mount-lite, what makes it unique, and the API by clicking on the link below:

>>> FULL DOCUMENTATION <<<

A primer

Require the mount.lite namespace, and other namespaces you depend on.

(ns your.app
  (:require [mount.lite :refer (defstate) :as mount]
            [your.app.config :as config] ;; <-- Also has a defstate.
            [some.db.lib :as db]))

Define a defstate var, including the :start and :stop lifecycle expressions.

(defstate db
  :start (db/start (get-in @config/config [:db :url]))
  :stop  (db/stop @db))
;=> #'your.app/db

Then start all defstates, use (start). A sequence of started state vars is returned. The order in which the states are started is determined by their load order by the Clojure compiler. Calling (stop) stops all the states in reverse order.

(mount/start)
;=> (#'your.app.config/config #'your.app/db)

@db
;=> object[some.db.Object 0x12345678]

(mount/stop)
;=> (#'your.app/db #'your.app.config/config)

@db
;=> ExceptionInfo: state db is not started

That's it, enjoy!

Core development features

Next to above basic usage, the core provides three more concepts:

Extensions

The core provides an easy extension point. The following extensions are currently provided:

Version 2.x

Version 2.x is breaking with the 0.9.x versions. Version 2.0 introduced the ability to run multiple systems of states simultaneously. This was an opportunity to get rid of the excess, based on experience in several larger projects. It has become really "lite", especially the core, while providing an easy to understand extension point for more advanced features. This blog post explains what has changed in version 2.0 in detail, and why.

Version 0.9.x will still be maintained, and can be found under the 1.x branch.

License

Copyright © 2017-2024 Functional Bytes

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

2.x branch: Circle CI