Skip to main content
The Repost build plugin turns your .repost schema into a typed Java client: immutable models, a webhooks.<catalog>.<member>() method tree, synchronous and CompletionStage sends, and a shared runtime that handles retries, idempotency, and delivery reconciliation. The same schema and wire format back the TypeScript, Go, Python, and Kotlin SDKs, pinned by a cross-language conformance suite. The runtime is published to Maven Central under the sh.repost group and is server-side only — it holds a publish credential and must not ship in an Android app or any untrusted client.
The published runtime is version 1.0.18 and the schema engine is 0.9.0. Every coordinate on this page resolves from Maven Central. Kotlin projects should follow the Kotlin quickstart instead.
1

Install the plugin and BOM

Import the repost-bom to keep every Repost artifact on one version, depend on repost-client, and add the repost-maven-plugin to generate on every build. A complete working project lives in the repo under examples/java.
pom.xml
The plugin resolves and runs a signed, platform-specific schema engine (sh.repost:repost-schema-engine:0.9.0) — nothing else to install. It adds no transitive HTTP, JSON, or logging libraries to your classpath — the transport is a source-verified, relocated Apache HttpClient baseline inside repost-client, so it cannot collide with your own Jackson, SLF4J, or OkHttp versions.
2

Define the schema

repost schema init --language java --output ./src/main/java scaffolds a repost/ directory. Declare your events and a Java generator block:
repost/schema.repost
The generator block sets four things the other languages don’t need — Code generation explains each field, the engine pinning, and multi-module builds.
3

Generate the client

The plugin binds to the generate-sources phase, so a normal compile already produces your client. To run generation on its own:

Your first send

The client is AutoCloseable. Open it in a try-with-resources; create() reads the credential and endpoint from the environment. Send synchronously, or asynchronously with a CompletionStage, passing an idempotency key you control:
A successful send returns a SendResult whose getDeliveryState() is ACCEPTED; any failure throws a RepostException subclass — Reliability covers the full outcome model. close() returns every owned thread and connection to baseline — always close a client you created.

Continue

Code generation

The generator block, the repost:check CI gate, and multi-module builds.

Configuration

Credentials, timeouts, retries, and transport options with production defaults.

Reliability

Idempotency, the five delivery states, cancellation, and backpressure.