ol.dirs
A 0-dependency implementation of XDG base directories, systemd unit directories, Windows Known Folder paths, and macOS standard directories for Clojure, ClojureScript, and ClojureDart.
ol.dirs returns string paths or vectors of string paths. It does not create directories, does not check whether they exist, and carries no runtime dependencies.
Support Matrix
| Runtime | Linux | macOS | Windows |
|---|---|---|---|
Clojure |
yes |
yes |
yes |
ClojureScript on Node |
yes |
yes |
yes |
ClojureDart |
yes |
yes |
yes |
Project status: Maturing.
Installation
;; deps.edn
{:deps {com.outskirtslabs/dirs {:mvn/version "0.1.0" }}}
;; Leiningen
[com.outskirtslabs/dirs "0.1.0" ]
Quick Start
(require ' [ol.dirs :as dirs])
(dirs/config-home)
;; => "/home/alice/.config"
(dirs/config-home "My App" )
;; => "/home/alice/.config/my-app"
(dirs/config-home "org" "Acme Corp" "My App" )
;; => Linux: "/home/alice/.config/my-app"
;; => macOS: "/Users/Alice/Library/Application Support/org.Acme-Corp.My-App"
;; => Windows: "C:\\Users\\Alice\\AppData\\Roaming\\Acme Corp\\My App"
API Notes
These functions support app-specific arities. Arity 0 returns the base directory, arity 1 appends an application name, and arity 3 appends a platform-specific qualifier, organization, and application path. The concrete path shapes are shown below in the App Path Rules table and in the example above.
data-home, config-home, state-home, cache-home, runtime-dir, executable-dir, preference-dir, state-dir, and config-dir all support those same arities.
data-dirs and config-dirs do too, but return vectors and append the application path to each search root.
App Path Rules
| Form | Linux | macOS | Windows |
|---|---|---|---|
|
|
|
|
|
|
|
|
Base Directories
| Function | Linux | macOS | Windows |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
same as |
|
|
|
|
|
|
|
|
|
|
On Linux, trusted systemd units can override config-home, state-home, and cache-home via CONFIGURATION_DIRECTORY, STATE_DIRECTORY, and CACHE_DIRECTORY as documented in systemd.exec(5).
User-Facing Directories
| Function | Linux | macOS | Windows |
|---|---|---|---|
|
|
|
Music Known Folder |
|
|
|
Desktop Known Folder |
|
|
|
Documents Known Folder |
|
|
|
Downloads Known Folder |
|
|
|
|
|
|
|
Pictures Known Folder |
|
|
|
Public Known Folder |
|
|
|
Templates Known Folder |
|
|
|
Videos Known Folder |
Nil Semantics
These functions may return nil by design:
-
runtime-dirandexecutable-diron non-Linux platforms -
font-diron Windows -
template-diron macOS -
Linux user-facing directories when
user-dirs.dirsis missing, unreadable, disabled, or malformed
Development
bb test:clj
bb test:cljs
bb test:cljd
bb test
The CLJD workspace commands live under dart/, because the Dart toolchain emits generated files that are easier to keep isolated there.
License
Copyright © 2026 Casey Link
Distributed under the EUPL-1.2.