Choose the libraries you need

Start with a single module for your application. Add transformation, storage, workflow, or agent capabilities as you need them.

Overview. This guide gives each library, reusable contract, and adapter its own section. A contract module supplies message or service definitions; a provider or connector may need an external system. Installing a library does not start the ProtoMolt platform.

Common starting points

Use the protomolt-bom to align Maven dependency versions, then add the modules you need under the ai.pipestream group. The repository's getting-started guide has the current dependency setup. The directory names below locate source code; the protomolt- names are the artifact IDs.

Reference: the Gradle project index also covers applications, services, adapters, schemas, tests, and build tooling.

Protobuf foundations

protomolt-acp

Provides a small Agent Client Protocol runtime and blocking JSON-RPC client over stdio.

Use it when: A Java process must host or call an ACP agent without a reactive runtime.

Pair it with an ACP agent implementation for your application.

Examples in the tests

protomolt-compat

Computes typed protobuf schema changes and evaluates Confluent-style compatibility policies.

Use it when: You want to check compatibility before accepting a schema change in a registry or CI gate.

Compatibility policy is distinct from compiling a schema successfully.

Examples in the tests

protomolt-descriptors

Registers and resolves protobuf message descriptors, including nested and well-known types.

Use it when: Your application must create or inspect messages from descriptors rather than generated Java classes.

Use fully qualified names when simple message names collide.

Examples in the tests

protomolt-formats

Dependency-free parsers for common identifiers and internet-format strings.

Use it when: Validation or application code needs email, hostname, IP, URI, date, encoding, or trade-item checks.

The facade returns booleans; callers supply their own field-specific error policy.

Examples in the tests

protomolt-sources

Models and compiles a set of .proto sources into linked descriptors and a descriptor set in memory.

Use it when: Schemas arrive as source text and must be compiled without installing protoc.

Uses Square Wire and preserves linked custom options through a repair pass.

Examples in the tests

Annotations and validation

protomolt-protobuf-metric

Defines metric and aggregate descriptor options.

Use it when: Authoring schemas that must declare measures, dimensions, filters, and calculated members.

This module provides the wire vocabulary; metric execution lives elsewhere.

protomolt-protobuf-types

Defines reusable range, path, taxonomy, screening, postal, and access-policy protobuf types.

Use it when: A schema needs these structural values with declared validation rules.

Range types are DateRange, LongRange, and DoubleRange; not every numeric index kind has its own message.

Examples in the tests

Mappings, projections, and execution

protomolt-delegation

Implements a bidirectional worker task lifecycle with admission, evidence candidates, reviews, and transcripts.

Use it when: Work must remain pending until a coordinator explicitly accepts or revises a candidate.

It is an in-process coordinator library; applications mount its transport and authorization boundary.

Examples in the tests

protomolt-mapper

Reads and writes descriptor paths and parses a compact text mapping rule language.

Use it when: Use for direct message-to-message field copies, appends, removals, and Any-aware path access.

It reports absent optional paths differently from invalid paths.

Examples in the tests

protomolt-projection

Builds target DynamicMessages from descriptor-declared source paths, CEL expressions, literals, and defaults.

Use it when: A target schema should own the provenance of each projected field.

Map target fields are explicitly unsupported; CEL source masks are lower bounds.

Examples in the tests

protomolt-receipt

Creates and verifies canonical signed work-record manifests with detached Ed25519 signatures.

Use it when: A workflow result needs portable evidence that can be verified offline.

The signature binds the issuer to the recorded manifest; the verifier applies the supplied trust policy.

Examples in the tests

protomolt-workflow

Compiles and runs checked serial gRPC workflows with joins, deadlines, records, and replay support.

Use it when: A multi-call integration needs descriptor-checked edges and a recorded run.

A workflow is a composition library; choosing and operating remote services remains application work.

Examples in the tests

Schema registries

protomolt-registry-proto

Defines the protobuf contract for content-addressed descriptor-set exchange.

Use it when: Generating clients or implementing a peer-to-peer descriptor exchange transport.

This module is contract-only; the registry's ordinary API is HTTP.

Structured generation and model providers

protomolt-inference-structured

Coordinates model generation into one validated DynamicMessage with bounded repair attempts and provenance.

Use it when: A cataloged model must fill a descriptor-defined protobuf form.

It validates syntax and descriptor rules, while task-specific semantic acceptance still belongs to the caller or reviewer.

Examples in the tests

Asset formats and classification

protomolt-asset-bridge

Routes characterized assets to transformations that derive useful renditions, including container member lists and dataset schemas.

Use it when: You want to inspect archive contents or derive a schema from supported delimited, NDJSON, or Avro data.

A format may declare an applicable transformation that the current engine cannot execute; engine lookup distinguishes the two.

Examples in the tests

protomolt-asset-bridge-parse

Adapts parser extraction into document-text and OCR-text renditions, with declared quality measurements for recovered text.

Use it when: You already have a ParserPluginService and want its output represented as an asset rendition.

Text extraction is supplied by the parser; this adapter does not bundle an OCR model.

Examples in the tests

protomolt-asset-proto

Defines typed file formats, content profiles, derived renditions, and classification states with validation annotations.

Use it when: You need to represent what an asset claims to be, what its bytes indicate, and whether those findings agree.

This module defines the contract; asset-characterize implements identification.

Examples in the tests

Mesh contracts and coordination

protomolt-mesh-cluster

An in-memory cluster directory with optional persistent event records and delegation advertisements.

Use it when: You need processor discovery, capacity, heartbeat, and lease information for local or remote endpoints.

The directory runs in process; a host exposes its actions and supplies persistence.

Examples in the tests

protomolt-mesh-proto

Protobuf contracts for mesh envelopes, headers, schema references, claim checks, and processing options.

Use it when: Defining data that can be validated and described consistently between mesh components.

Metrics

protomolt-metric-spi

Builds descriptor-declared metric mappings and checks aggregate queries before an engine runs them.

Use it when: You want to add a metric backend or validate a metric query in process.

It is an SPI, so an executor is required to return results.

Examples in the tests

Output, storage, and Kafka

protomolt-emit

Writes validated bundles of named files to a directory, Git repository, or deterministic in-memory ZIP.

Use it when: A renderer has produced files that must be delivered as one checked bundle.

Built-in delivery targets include local directories and Git repositories.

Examples in the tests

protomolt-emit-okf

Renders descriptors or a registry into an Open Knowledge Format Markdown bundle.

Use it when: You want to publish a human-readable schema catalogue from protobuf descriptors.

It is a renderer; choose a bundle sink separately.

Examples in the tests

protomolt-iceberg

Creates descriptor-driven Iceberg schemas and appends ProtoMolt Parquet data to tables.

Use it when: You want to make typed protobuf records available as Iceberg table snapshots.

Equality deletes and variant columns are not supported.

Examples in the tests

protomolt-kafka-connect

Supplies Kafka Connect source and sink connectors plus protobuf-aware validation, mapping, redaction, and CEL transforms.

Use it when: You want to move Kafka topic records into gRPC services or feed a topic from a gRPC server stream.

The source connector owns durable resume-token handling.

Examples in the tests

protomolt-kafka-serde

Provides a Kafka protobuf serde that checks declared schema rules when writing records.

Use it when: Use it for Kafka producers, consumers, or Streams that need Confluent framing and protobuf validation.

A schema registry endpoint is required for schema-id resolution.

Examples in the tests

Actions and protocol adapters

protomolt-actions

Defines the action catalog, request contracts, scopes, budgets, and one dispatch path.

Use it when: You want to expose a descriptor-backed operation consistently to MCP, HTTP, CLI, and gRPC hosts.

A host supplies callers, authorization, and the action set.

Examples in the tests

protomolt-grpc-workflow

Defines descriptor-grounded workflow, artifact, and run-evidence contracts with filesystem repositories.

Use it when: Embedding the workflow contract and its evidence storage outside a server.

Use the workflow runtime to execute the stored definitions.

Examples in the tests

protomolt-http-rest

Provides a framework-neutral REST gateway with token requirements and shared error mapping.

Use it when: You want to mount selected gRPC methods as REST endpoints in a host.

REST exposure is selected by Java annotation, not by a protobuf option.

Examples in the tests

Schema and content acquisition

Document storage and parsing

Configuration

Service and event contracts

protomolt-account-proto

Account messages, account lifecycle RPCs, and account-event payloads.

Use it when: Build a client for account creation, listing, or activation.

Contract definitions and generated types; the running service is a separate module.

protomolt-inference-proto

Generation, model discovery, capability, usage, and structured-result messages for inference clients and providers.

Use it when: Share typed model requests and responses without depending on an inference server implementation.

Contract definitions and generated types; the running service is a separate module.

protomolt-intake-proto

Document-ingest requests and responses, including the framed client-streaming ingestion contract.

Use it when: Submit documents to an intake service using a generated protobuf client.

Contract definitions and generated types; the running service is a separate module.

protomolt-jobs-proto

Workflow-run request and lifecycle event messages for asynchronous job submission and observation.

Use it when: Produce workflow requests or consume job lifecycle events through Kafka.

Message definitions only; job operations are exposed through catalog actions rather than a service in this proto.

protomolt-metric-proto

Metric mapping discovery, aggregate query, and rollup rebuild request and response messages.

Use it when: Build a typed client for descriptor-declared metrics.

Contract definitions and generated types; the running service is a separate module.

protomolt-parse-proto

The parsing coordinator and parser plugin contracts, including routing and streamed parser messages.

Use it when: Implement a parser plugin or call the coordinator from another application.

Contract definitions and generated types; the running service is a separate module.

protomolt-repo-proto

Document, drive, archive, rendition, and event contracts for repository clients.

Use it when: Integrate with document storage or versioned archive operations.

Contract definitions and generated types; the running service is a separate module.

protomolt-search-proto

Typed indexing and search requests, query lanes, stored-value results, and subject discovery.

Use it when: Build a client for the Java search service or implement its service contract.

Contract definitions and generated types; the running service is a separate module.