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, link relations, and internet-format strings.

Use it when: Validation or application code needs email, hostname, IP, URI, date, encoding, link-relation, 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, SKOS-style concept scheme, screening, postal, and access-policy protobuf types and rules.

Use it when: A schema needs structural ranges, tree paths, taxonomies, concept schemes, or access-policy types with declared validation rules.

Includes ConceptScheme, Concept, and ConceptRef with ConceptSchemeRules validation alongside DateRange, LongRange, and DoubleRange.

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-delegation-receipt

Projects delegation transcripts into canonical signed-work-record manifests.

Use it when: Exporting a completed delegation task transcript as a verifiable receipt.

Pair with protomolt-receipt to sign or verify the resulting manifest.

protomolt-delegation-repository

Persists encrypted delegation transcripts through the repository document service.

Use it when: Saving and restoring delegation transcripts in repository storage with client-side AES-256-GCM encryption.

Requires a reachable repository service and an encryption key resolver.

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-mapper-cel

Applies CEL filters and selectors through the protobuf field mapper.

Use it when: A field mapping rule needs a CEL filter or selector over protobuf descriptors and messages.

Shared CEL compilation and evaluation live in protomolt-cel; strict and try-map operations handle CEL failures differently.

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

Defines the schema registry store SPI and in-memory store for versioned protobuf schemas, references, descriptor sets, and compatibility modes.

Use it when: Embedding an in-memory schema registry or implementing a custom registry storage provider.

The Git-backed store lives in protomolt-schema-registry-git; serving the registry over HTTP is the service module's role.

Examples in the tests

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.

protomolt-schema-registry-git

Implements the Git-backed schema registry store, pull-only remote federation, and workflow version repository.

Use it when: Persisting registered protobuf schemas, compatibility settings, and promoted workflows as commits in a local Git repository.

Discovered via SchemaRegistryStoreProvider; HTTP serving lives in protomolt-registry-service.

Examples in the tests

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 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 in-memory ZIP archives; use protomolt-emit-git for Git repository delivery.

Examples in the tests

protomolt-emit-git

Delivers validated file bundles as commits to a Git repository.

Use it when: A rendered bundle of files should be committed directly to a Git branch.

Extends protomolt-emit with JGit-backed repository delivery.

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-actions-index

Contributes index-mapping rendering actions to a ProtoMolt action catalog.

Use it when: A host wants catalog actions that render search index mappings from descriptors.

Discovered through ActionProvider when present on the classpath.

protomolt-actions-schema

Supplies schema-source resolution and action contract providers for action callers.

Use it when: Catalog actions need to compile or resolve schema sources supplied in action requests.

Discovered through ActionContractProvider and SchemaResolverProvider.

protomolt-actions-toolkit

Contributes core protobuf compilation, validation, mapping, diff, and shape actions to an action catalog.

Use it when: A host wants the standard protobuf toolkit verbs registered in its action catalog.

Discovered through ActionProvider when present on the classpath.

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-connect

Serves the Connect protocol with binary protobuf over in-process gRPC services on the JDK HTTP server.

Use it when: Browser or HTTP clients need unary and server-streaming Connect binary protobuf calls against in-process gRPC services.

Supports binary protobuf message framing; Connect error and end-of-stream frames use the protocol's standard JSON envelopes.

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

protomolt-repo-accession

Implements the parts-based repository v2 DocumentService save, read, link, stream, upload, and outbox handlers over stacks and the catalog.

Use it when: Running or embedding the v2 DocumentService over write-once stacks and the PostgreSQL catalog.

Composes protomolt-repo-admission, protomolt-repo-stack, and protomolt-repo-catalog.

Examples in the tests

protomolt-repo-archive

Implements ArchiveService and ArchiveMutationService over v2 repository documents: archive definitions, stats, entry and rendition calls read and write through DocumentService.

Use it when: Serving archive entry and rendition operations backed by the v2 parts-based document store.

In-tree library and gRPC service implementation. Archive definitions are CORE-only v2 documents in the archive-def:<account_id> graph, and GetArchiveStats scans live documents for exact counts. ClassifyEntry, BridgeEntry and the ListEntries classification_state filter run over classification stored in each entry's CORE. DeleteRendition and PruneVersions are refused with FAILED_PRECONDITION under keep-forever retention after the archive and live entry are found. Stock hosts mount DocumentArchiveGrpcService and DocumentArchiveMutationGrpcService on gRPC, and POST /v1/archive:upload writes through the same DocumentArchive.

Examples in the tests

protomolt-repo-blob-redis

Implements the repository BlobStore SPI over Redis with configurable TTL and object size bounds.

Use it when: Using Redis as a cache tier behind CachingBlobStore or for bounded non-streamed blob storage.

Standalone Redis blob storage does not implement streamed reads required by v2 stacks; use s3-redis-cache for v2.

Examples in the tests

protomolt-repo-container

Provides the PostgreSQL drive, reader-host, and managed-backend storage ledger for repository operations.

Use it when: Managing drive records, reader-host registration, or managed-backend ledger state in PostgreSQL.

Document part encoding lives in protomolt-repo-codec, and byte storage providers live in protomolt-repo-blob-spi and its adapters.

Examples in the tests

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-delegation-proto

Defines delegation task, offer, candidate, review, and action protobuf contracts.

Use it when: Sharing delegation wire messages and generated Java types without coordinator dependencies.

Contract definitions and generated types; lifecycle and coordinator logic live in sibling modules.

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

Defines the parts-based document store (repo.v2), document links (link = 59100551), drive, archive, rendition, and event contracts.

Use it when: Integrate with parts-based document storage, typed document links, or versioned archive operations.

Contract definitions and generated types; the running services live in protomolt-repo-accession and protomolt-repo-service.

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.