Liking cljdoc? Tell your friends :D

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.1.0 - 2025-12-15

Initial release of clj-artnet — a pure-Clojure implementation of Art-Net 4.

Added

Core protocol support

  • ArtDmx — Send and receive DMX512 data (512 channels per universe).
  • ArtSync — Synchronize outputs across multiple nodes for tear-free rendering.
  • ArtPoll/ArtPollReply — Automatic node discovery and status announcements.
  • ArtRdm — RDM (Remote Device Management) messaging over Art-Net.
  • ArtRdmSub — Compressed RDM sub-device data.
  • ArtTimeCode — SMPTE/EBU timecode distribution.
  • ArtTrigger — Remote trigger macros.
  • ArtCommand — Text-based parameter commands.
  • ArtAddress — Remote node programming.
  • ArtIpProg — IP address programming.
  • ArtDiagData — Diagnostic messaging.
  • ArtDataRequest/ArtDataReply — Data queries (URLs, firmware info).
  • ArtFirmwareMaster — Firmware upload support.

Architecture

  • Functional core, imperative shell — Pure protocol logic separated from I/O.
  • core.async.flow graph — Backpressure-aware streaming architecture.
  • Zero-copy packet handling — Direct ByteBuffer operations minimize allocation.
  • Declarative codec specifications — Data-driven packet encoding/decoding.
  • Event-sourced state machine — Predictable, testable protocol handling.

Public API

  • start-node! — Start an Art-Net node with configuration options.
  • stop-node! — Stop node and release all resources.
  • send-dmx! — Unicast ArtDmx packets with full addressing support.
  • send-rdm! — Unicast ArtRdm packets for RDM communication.
  • send-sync! — Broadcast ArtSync for synchronized output.
  • send-diagnostic! — Send ArtDiagData to diagnostic subscribers.
  • state — Get current node runtime state snapshot.
  • apply-state! — Update node configuration at runtime.

Features

  • 15-bit Port-Address — Full Art-Net 3/4 universe addressing (0–32,767).
  • BindIndex pagination — Multi-port gateways (>4 ports) without multi-homing.
  • Failsafe playback — Configurable idle timeout with zero/full/scene modes.
  • HTP/LTP (Highest Takes Precedence/Latest Takes Precedence) merge — Automatic merging from multiple source controllers.
  • Reply-on-change — Subscriber management with configurable eviction policies.
  • Buffer pools — Pre-allocated RX/TX buffer pools for zero-allocation steady state.
  • Virtual Thread I/O — Java 21+ Virtual Threads via core.async/io-thread.

Configuration

  • Extensive node configuration (short name, long name, ports, style).
  • Network binding options (host, port).
  • Callback system for DMX, RDM, timecode, and discovery events.
  • Sync mode configuration (immediate, art-sync, buffer-ttl).
  • Failsafe configuration (timeout, tick interval, playback mode).
  • Buffer pool sizing (RX/TX count and size).

Testing

  • Property-based tests with test.check for codec verification.
  • Integration tests for node lifecycle and packet handling.
  • 320 tests with 1,308 assertions.

Dependencies

  • Clojure 1.12.4+
  • Java 21+ (Virtual Threads, DatagramChannel)
  • org.clojure/core.async 1.9.829-alpha2
  • com.taoensso/trove 1.1.0

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close