announcements

2026-03-21T17:53:21.444449Z

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.

🪫 4
🎉 13
⚡ 5