Document Model

The core module defines a format-neutral mutable tree with separate layers for values, human comments, common source decorations, and backend-specific metadata.

Main Types

Type Role
ConfigDocument Complete config with an object root.
ConfigNode Mutable tree node. A node is an object, list, scalar, or null.
ConfigPath Immutable path of object keys.
ConfigComment Leading, inline, and trailing comment groups.
ConfigCommentLine One comment line with text, marker, and logical type.
ConfigNodeDecorations Source details shared across formats.
ConfigValue Sealed immutable value model for codecs and adapters.
ConfigCodec<T> Encoder and decoder for Java value types used by codec-based APIs.
ConfigCodecRegistry Registry of built-in scalar codecs and custom static-field codecs.
ConfigLoader Reader and writer for a concrete format.
ConfigFormat Named format descriptor with extensions, capabilities, and loader.

Node Kinds

Kind Shape
OBJECT Ordered map of String keys to child nodes.
LIST Ordered list of child nodes.
SCALAR Java scalar value such as String, Boolean, Number, or backend scalar.
NULL Explicit null value.

Comments

ConfigComment stores source comments in three positions:

Position Meaning
Leading Lines before the node.
Inline Comment on the same logical line as the node.
Trailing Lines after the node, such as YAML end comments.

Each ConfigCommentLine stores:

Field Examples
text() Port used by the public listener.
type() BLOCK, INLINE, BLANK
marker() HASH, DOUBLE_SLASH, EXCLAMATION, UNKNOWN

Decorations

ConfigNodeDecorations stores source detail that is common enough to model directly:

Decoration Purpose
keyComment() Comment attached to the key rather than the value.
keyStyle() Scalar style for a key.
scalarStyle() Scalar style for a scalar value.
collectionStyle() Block, flow, table, inline, array-table, or unspecified style.
keyLocation() Best-effort source location for the key.
valueLocation() Best-effort source location for the value.
attributes() String attributes that are useful but not common enough for a dedicated field.

Metadata

ConfigNode.metadata() stores backend-specific values. Use constants from the relevant module instead of raw strings.

node.metadata(JsonMetadataKeys.NUMBER_RADIX)
  .ifPresent(radix -> log.debug("JSON5 radix {}", radix));

Paths

ConfigPath.parse("server.port");
ConfigPath.of("server", "port");
ConfigPath.parse("database\\.url");

ConfigPath.parse(...) uses dots as separators and backslash as the escape character. ConfigPath.of(...) accepts literal path segments.

Built-In Codecs

The default registry supports:

Java type Notes
String Uses string value or scalar toString().
Boolean and boolean Accepts booleans and compatible strings.
Primitive wrappers Boolean, byte, short, int, long, float, double, char.
Big numbers BigInteger, BigDecimal.
Time values LocalDate, LocalTime, LocalDateTime, Instant, Duration, Period.
Utility values UUID, File, Path, URL, URI.
Enums Encoded by enum constant name.

Register custom codecs for static-field application records and value objects.

Search Documentation