One of my recent initiatives is to facilitate the coordination of electric utility grids and customer energy usage. More context at https://grid-coordination.energy.
Announcing the following Clojure libraries:
• https://github.com/grid-coordination/clj-oa3 — Spec-driven HTTP client for the OpenADR 3 demand-response API. The OpenAPI spec is the single source of truth; entity coercion gives you namespaced keywords, java.time types, and Malli schemas.
• https://github.com/grid-coordination/clj-oa3-client — Component-based client framework for OpenADR 3 with VEN/BL lifecycle management, MQTT and webhook notification channels, and mDNS discovery.
• https://github.com/grid-coordination/clj-mdns — Clojure wrapper around JmDNS for mDNS/DNS-SD service discovery. Register, browse, and resolve services on the local network.
• https://github.com/grid-coordination/clj-gridx — Client for the GridX API, providing access to marginal cost pricing data for California electricity utilities.
• https://github.com/grid-coordination/clj-midas — Client for the California Energy Commission's MIDAS API — electricity rate data, GHG emissions signals, and Flex Alerts.
All libraries are available on https://clojars.org/search?q=energy.grid-coordination under energy.grid-coordination.
Common design philosophy:
• Each API client embeds its OpenAPI spec and uses it to drive HTTP operations (via https://github.com/oliyh/martian), so there's no code generation and no hand-written endpoint wrappers.
• Responses coerce to namespaced Clojure maps with proper types (`java.time.Instant`, BigDecimal, etc.) while preserving the original wire data as metadata for debugging and round-tripping.
• https://github.com/metosin/malli schemas are provided for both raw and coerced entity types.
• The -client libraries add https://github.com/stuartsierra/component lifecycle and are designed for REPL-driven development.
Also available: https://github.com/grid-coordination/clj-oa3-test — A 192-test integration suite for validating OpenADR 3 server implementations. Covers all CRUD endpoints, role-based authorization, MQTT notification delivery, webhook callbacks, and broker authentication. Useful as a conformance check for any OpenADR 3 VTN, or as a reference for how to exercise the API with the clj-oa3 libraries. Generates structured test reports in EDN and tabular formats.