jolt/docs/libraries.md
Yogthos cf1fdfdb24 feat: run the real clojure.tools.logging (defmacro/syntax-quote/ns + host shims)
Pivot from a jolt reimplementation to running the upstream library verbatim.
Vendors the real clojure/tools/logging.clj; jolt provides the backend and the
host primitives it needs. Language features (broadly useful for real Clojure
libs), all covered in 3-mode conformance + spec suites:

- defmacro: multi-arity dispatch (jolt-q8l) and a docstring + attr-map + params
  head (jolt-qnr) — the 4-arity log macro and every level macro need these.
- syntax-quote resolves an alias-qualified symbol to its target ns (jolt-9av),
  so a macro template (impl/get-logger) resolves at the use site.
- the ns macro unwraps ^{:map} metadata on the ns name (jolt-8w2 workaround,
  matching def/defn/defmacro).
- a namespace object self-evaluates, so ~*ns* can be spliced into a template.

Host shims (ported from / modeled on clojure where applicable):
- clojure.string/trim-newline (ported, CharSequence interop -> count/subs)
- agent/send-off/send (minimal synchronous stubs; jolt has no thread pool/STM)
- clojure.lang.LockingTransaction/isRunning -> false
- a minimal clojure.pprint (pprint/with-pprint-dispatch/code-dispatch, for spy)
- clojure.tools.logging.impl: a jolt stderr LoggerFactory backend (the library's
  designed pluggable extension point)

docs/libraries.md lists tools.logging; grammar.ebnf metadata note clarified.
Conformance 355/355 x3 modes; full jpm test gate green.
2026-06-13 18:50:53 -04:00

2.5 KiB

Clojure libraries known to work with Jolt

Libraries confirmed to load and pass their conformance checks on Jolt (see test/integration/deps-conformance-test.janet and the ring-app example).

  • config
  • Selmer
  • medley
  • cuerdas
  • ring-core — via :deps/root "ring-core", on the ring-app example's spork/http adapter
  • ring-codec
  • reitit-core — data-driven routing; the reitit.Trie Java class is mirrored in Clojure by jolt-lang/router. Load with JOLT_FEATURES including clj.
  • honeysql — full formatter + helpers (select/insert/update/delete/joins/:inline), loaded unmodified from git
  • clojure.jdbc — as jolt-lang/db's jdbc.core, reimplemented over janet sqlite3/pq drivers (SQLite + PostgreSQL)
  • next.jdbc — a compatibility layer in jolt-lang/db (next.jdbc, next.jdbc.sql, next.jdbc.prepare, next.jdbc.transaction) over jdbc.core, for libraries that target the next.jdbc API
  • tools.logging — the real clojure.tools.logging source runs verbatim. jolt provides a native clojure.tools.logging.impl backend (a stderr LoggerFactory — the library's designed extension point, where slf4j/log4j/jul adapters normally plug in) plus the host shims it needs (agent/send-off, clojure.lang.LockingTransaction, a clojure.pprint subset, clojure.string/trim-newline). The level macros, logf/logp, spy, and enabled? all work; output goes to stderr.
  • migratus — database migrations; loads unmodified and runs filesystem SQL/EDN migrations against SQLite through the next.jdbc layer above. migrate/rollback round-trip end to end. Caveat: migration ids are 14-digit timestamps, and the janet-lang/sqlite3 driver currently truncates INTEGER columns to 32 bits, so completion tracking needs the one-line upstream fix (sqlite3_column_int64); ids under 2^31 work as is.