Operational reference for Vidocq Runtime — Maven coordinates, MicroProfile Config keys, vidocq-runtime-maven-plugin goals, exported Java modules, public SPI.

Maven coordinates

Artefact Role

io.vidocq.runtime:vidocq-runtime-parent:0.3.0

Parent POM (Model 4.0.0)

io.vidocq.runtime:vidocq-runtime-spi:0.3.0

Public SPI (VidocqExtension, ExtensionContext, VidocqConfig)

io.vidocq.runtime:vidocq-runtime-core:0.3.0

Runtime engine (boot orchestrator, lifecycle)

io.vidocq.runtime.extensions:vidocq-runtime-extensions:0.3.0

Aggregator of the shipped extensions, grouped by domain (essentials, jakartaee-core, jakartaee-web, microprofile, module-repackaged)

io.vidocq.runtime:vidocq-runtime-maven-plugin:0.3.0

Maven plugin — generate, package, dev, checkpom, modularize, jlink, jpackage, docker, check-module-info, complete-module-info

io.vidocq.runtime:vidocq-runtime-examples:0.3.0

Examples (vidocq-runtime-cassini-rest-example, vidocq-runtime-cervantes-jwt-example, vidocq-runtime-knock-health-example, vidocq-runtime-mansart-h2-example, vidocq-runtime-petstore-example, plus the vidocq-runtime-external-rest-lib helper library)

io.vidocq.runtime:vidocq-runtime-integration-tests:0.3.0

Multi-extension integration tests

Exported Java modules

Module Contents

io.vidocq.runtime.spi

Public SPI interfaces (VidocqExtension, ExtensionContext, VidocqConfiguration, config.*). Must be declared requires in any extension.

io.vidocq.runtime.core

Orchestration engine — io.vidocq.runtime.core.Vidocq (the main/run entry point), VidocqBootstrap, ExtensionLoader, built-in config sources.

The io.vidocq.runtime.extensions.* modules each correspond to a built-in extension. The Maven plugin has no module-info.java on purpose: Maven plugins run on Maven’s class path, not on the application module path.

MicroProfile Config keys

Key Default Description

vidocq.http.host

0.0.0.0

Bind address of the default listener. Alias for vidocq.chappe.listener.default.host.

vidocq.http.port

8080

Port of the default listener (HTTP/1.1 + H2c). Alias for vidocq.chappe.listener.default.port.

vidocq.chappe.listeners

default

CSV list of listeners to start.

vidocq.chappe.listener.<name>.host
vidocq.chappe.listener.<name>.port

0.0.0.0
8080 (for default)

Bind of a named listener. Takes precedence over the vidocq.http.* alias; any listener other than default must declare its port.

vidocq.http.mount.<name>.*

—

Declarative mounts (static resources, …).

vidocq.pool.url
vidocq.pool.username / vidocq.pool.password

—

JDBC coordinates of the default Mansart datasource. A named datasource uses vidocq.pool.<name>.url.

vidocq.pool.maxSize

20

Mansart pool maximum size. See the Mansart pool extension for minIdle, acquireTimeout, validation, xa, …

vidocq.rest.context-path

/

Prefix under which Cassini mounts the JAX-RS application.

vidocq.profile

(empty)

Active profile (dev, prod, …) — %<profile>. prefix recognised.

vidocq.config.dir

(empty)

External override directory (ExternalFileConfigSource, ordinal 250).

TLS is not implemented yet: vidocq.https.port, vidocq.tls.cert and vidocq.tls.key are planned, and setting them today has no effect.

A vidocq. key that no extension consumes is applied by nobody: the application silently keeps the default, and the mistake stays invisible whenever the configured value happens to *be the default. Since 0.3.0 the runtime reports such a key as a startup warning, for every namespace an extension claims through VidocqExtension.configKeys().

ConfigSource hierarchy (descending ordinal):

Ordinal Source Description

400

SystemPropertiesConfigSource

-Dkey=value

300

EnvConfigSource

Environment variables

250

ExternalFileConfigSource

${java.home}/conf/vidocq.properties or $VIDOCQ_CONFIG_DIR/vidocq.properties

100

PropertiesFileConfigSource

Classpath vidocq.properties

Maven plugin goals

Goal Role

vidocq:generate

Generates the CDI bean index and pre-generates proxies/interceptors (compile-time codegen).

vidocq:package

Standalone distribution: bin/run.sh + bin/run.cmd launchers, lib/*.jar (application + module-path closure), attached as a -dist.zip.

vidocq:dev

Dev/watch mode — forks a child JVM with -Dvidocq.profile=dev, recompiles and hot-reloads on change.

vidocq:checkpom

Verifies every vidocq-runtime-<name>-extension declared in the pom is correctly wired (bound to validate via pluginManagement).

vidocq:modularize

Patches the non-modular jars of the runtime closure with a generated module-info (default phase prepare-package).

vidocq:jlink

Standalone Java image (target/dist/) with binary launcher.

vidocq:jpackage

Native bundle (.app, .exe, .msi, .deb, .rpm, or app-image).

vidocq:docker

Generates target/Dockerfile distroless; optional Docker build via vidocq.docker.build=true.

vidocq:check-module-info

Verifies the application module-info.java declares the JPMS directives its Vidocq extensions need (e.g. opens db.migration).

vidocq:complete-module-info

Opt-in companion of check-module-info — rewrites src/main/java/module-info.java to add the missing directives.

See the dedicated page for the exhaustive parameter list.

CLI commands

The vidocq command-line tool (see Getting started for installation). Run vidocq help <command> for the options of each.

Command Role

create

Scaffold a new application (--name, --group-id, --extension/-x, --package, --parent-version).

build [type]

Build & package the project by wrapping the Vidocq Maven plugin. With no type it runs the package lifecycle phase (standalone distribution ZIP); a type layers the matching plugin goal on top: package (default), jlink, jpackage, docker. Options: --offline/-o, --skip-tests, --dry-run, -- <args…​> passed to Maven.

dev

Run the application in watch mode from the CLI’s module path. For extension-based apps prefer mvn vidocq:dev, which sees the extensions declared in the pom.

start

Run the application once from the CLI’s module path (same pom caveat as dev).

extension

Manage extensions: list --available, add <name> (edits the pom with the right coordinates).

clean

Remove build outputs.

config

Inspect and edit CLI configuration.

doctor

Diagnose the local setup (JDK, Maven, PATH).

info

Show project and runtime information.

completion

Generate shell completion scripts.

version / help

Print the CLI version / command help.

Public SPI (vidocq-runtime-spi)

Source: vidocq-runtime-spi/src/main/java/io/vidocq/runtime/spi/.

Type Role

VidocqExtension

Lifecycle interface — name(), priority() (lower runs first, default 1000), configure(VidocqConfiguration), beforeStart(VaubanContainerBuilder), onStart(ExtensionContext), onStop(), configKeys(). Registered with provides … with … in module-info.java (or META-INF/services), discovered via ServiceLoader.

ExtensionContext

Passed to onStart — container(), beanManager(), configuration() (legacy), config() (typed).

VidocqConfiguration

String-property configuration passed to configure — property(key) returns Optional<String>, property(key, default), portFor(extensionName, defaultPort).

config.VidocqConfig

Typed configuration API aligned with MicroProfile Config concepts — getValue(key, type) returns Optional<T>, getValues(key, elementType); extensible via config.ConfigSource, config.ConfigSourceProvider and config.Converter<T>.

VidocqApp

Interface for the application entry class re-loaded inside the Vauban application layer by Vidocq.run(Class, args).

@VidocqMain

Annotation for the zero-config IDE trampoline main — boots the runtime in the Vauban layer.

Bugs and benchmarks

  • Vidocq Runtime bugs: vidocq/BUG.md

  • Cross-cutting bugs: vidocq/CHAPPE-BUGS.md, vidocq/VAUBAN-BUGS.md

  • Benchmarks: vidocq/BENCH.md

Compatibility

  • Java 25 minimum (LTS)

  • Maven 3.9.16 minimum

  • Strict Java Modules — one module-info.java per submodule

  • No hidden classpath — every dependency exposes a named module

Next steps