Factual reference: published Maven artefacts, exported Java modules, supported Jakarta REST 4.0 annotations, configuration properties.

Maven artefacts

Artefact Role

io.vidocq.cassini:cassini-api:0.2.0

Public SPI: HTTP/transport (CassiniHttpExchange, CassiniHttpAdapter, CassiniStack), BeanProvider, ResourceFactory, and the codegen SPI (ResourceAdapter, RouteProvider, RouteDescriptor, InjectionSupport).

io.vidocq.cassini:cassini-core:0.2.0

JAX-RS engine (Invoker, ResourceScanner, RouteRegistry, MessageBodyRegistry, filters, providers, SSE, multipart) + the adapter generators (RuntimeAdapterGenerator, AdapterRegistry).

io.vidocq.cassini:cassini-client:0.2.0

JAX-RS Client 4.0 — zero-dependency ClientBuilder on java.net.http + virtual threads. Reuses MessageBodyRegistry from cassini-core.

io.vidocq.cassini:cassini-cdi-vauban:0.2.0

BeanProvider adapter that resolves resources through Vauban (BCE CassiniScopeExtension included).

io.vidocq.cassini:cassini-chappe:0.2.0

Reference transport — wires Cassini onto Chappe (HTTP/1.1, H2, virtual threads). Used for the TCK.

io.vidocq.cassini:cassini-jdk-http:0.2.0

Pure JDK transport — com.sun.net.httpserver.HttpServer, no external dependency.

io.vidocq.cassini:cassini-processor:0.2.0

APT annotation processor — generates CassiniAdapter+` / `+CassiniRoutes sources at compile time. AOT-safe.

io.vidocq.cassini:cassini-maven-plugin:0.2.0

Maven plugin (generate goal, bound to process-classes) — pre-generates adapters for external dependency archives.

io.vidocq.cassini:cassini-examples-*

Examples: cassini-examples-chappe (standard SE-Bootstrap), cassini-examples-jdkhttp (direct CassiniStack), cassini-examples-vauban (CDI + SE-Bootstrap).

cassini-tck is not published and is out-of-reactor (standalone modelVersion 4.0.0 POM). See TCK — out-of-reactor runner.

Java modules

Module Exports / Provides

io.vidocq.cassini.api

exports io.vidocq.cassini.spi.http;
exports io.vidocq.cassini.spi.resource;
exports io.vidocq.cassini.spi.bean;
exports io.vidocq.cassini.spi.gen;
uses io.vidocq.cassini.spi.http.CassiniStack.BuilderFactory;
uses io.vidocq.cassini.spi.bean.BeanProvider.Factory;

io.vidocq.cassini.core

No public export. internal.* is qualified-exported / opened only to cassini.tck, cassini.client, cassini.maven.plugin, cassini.chappe, cassini.jdkhttp.

provides io.vidocq.cassini.spi.http.CassiniStack.BuilderFactory
    with io.vidocq.cassini.internal.CassiniStackBuilderFactory;

io.vidocq.cassini.chappe

exports io.vidocq.cassini.chappe;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with io.vidocq.cassini.chappe.ChappeRuntimeDelegate;

io.vidocq.cassini.jdkhttp

exports io.vidocq.cassini.jdkhttp;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with io.vidocq.cassini.jdkhttp.JdkHttpRuntimeDelegate;

io.vidocq.cassini.cdi.vauban

exports io.vidocq.cassini.cdi.vauban;
provides io.vidocq.cassini.spi.bean.BeanProvider.Factory
    with ...VaubanBeanProviderFactory;
provides ...build.compatible.spi.BuildCompatibleExtension
    with ...CassiniScopeExtension;

io.vidocq.cassini.client

requires io.vidocq.cassini.core, java.net.http;
provides jakarta.ws.rs.client.ClientBuilder
    with ...CassiniClientBuilder;
provides jakarta.ws.rs.ext.RuntimeDelegate
    with ...CassiniClientRuntimeDelegate;
uses jakarta.ws.rs.core.Feature;

io.vidocq.cassini.processor

exports io.vidocq.cassini.processor;
provides javax.annotation.processing.Processor
    with ...CassiniResourceProcessor;
cassini-core deliberately does not expose its CassiniRuntimeDelegate via ServiceLoader — to avoid a collision with the RuntimeDelegate from the active transport (cassini-chappe or cassini-jdk-http).

Supported annotations

@Path, @GET, @POST, @PUT, @DELETE, @PATCH, @HEAD, @OPTIONS, @HttpMethod, @ApplicationPath, @Produces, @Consumes, @PathParam, @QueryParam, @HeaderParam, @CookieParam, @FormParam, @MatrixParam, @BeanParam, @DefaultValue, @Encoded, @Provider, @Priority, @NameBinding, @PreMatching, @Context, @Suspended (async — see TCK for M2h status).

CDI (with cassini-cdi-vauban): @ApplicationScoped, @RequestScoped, @Singleton, @Inject.

Implemented JAX-RS interfaces

Application, SeBootstrap, Configuration, Configurable, UriInfo, Request, HttpHeaders, SecurityContext, Providers, MessageBodyReader, MessageBodyWriter, ContextResolver, ExceptionMapper, ContainerRequestFilter, ContainerResponseFilter, ReaderInterceptor, WriterInterceptor, DynamicFeature, Feature, Sse, SseEventSink, SseBroadcaster, AsyncResponse, CompletionCallback, ConnectionCallback, EntityPart, EntityPart.Builder (multipart §3.5.4).

Client side (cassini-client): Client, ClientBuilder, WebTarget, Invocation, Invocation.Builder, AsyncInvoker, ClientRequestContext, ClientResponseContext, ClientRequestFilter, ClientResponseFilter.

Configuration

Cassini is configured via SeBootstrap.Configuration (standard) or via the CassiniStack.builder() builder (advanced):

Property

Default

Description

host

0.0.0.0

Transport listening interface.

port

0 (auto)

HTTP port. 0 = random free.

rootPath

/

Mount prefix for the Application.

protocol

HTTP

HTTP or HTTPS (depending on transport support).

When Cassini is driven by Vidocq Runtime (the vidocq-rest-cassini extension), two extra MicroProfile Config properties:

Property

Default

Description

vidocq.rest.context-path

/

JAX-RS mount prefix in the Vidocq server.

vidocq.rest.listener

default

Target Chappe listener.

Bugs and benchmarks

  • lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BUG.md[BUG.md] — reproducible issues.

  • lien:https://codeberg.org/Vidocq/cassini/src/branch/main/BENCH.md[BENCH.md] — JMH/wrk vs RESTEasy / Jersey / Helidon.