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.4.0-SNAPSHOT

Parent POM (Model 4.0.0). It manages every Vidocq artifact and the vidocq-runtime-maven-plugin at the runtime version written out literally, so an application that declares a <version> of its own resolves them at the runtime’s version, not its own NEW.

io.vidocq.runtime:vidocq-runtime-spi:0.4.0-SNAPSHOT

Public SPI (VidocqExtension, ExtensionContext, VidocqConfig, the startup report contributors NEW)

io.vidocq.runtime:vidocq-runtime-devconsole-spi:0.4.0-SNAPSHOT NEW

Dev console panel SPI (DevConsolePanel, PanelSample, Chart, Series, Unit): what a runtime extension implements to show its section of the startup report live. See Writing a dev console panel.

io.vidocq.runtime:vidocq-runtime-core:0.4.0-SNAPSHOT

Runtime engine (boot orchestrator, lifecycle)

io.vidocq.runtime.extensions:vidocq-runtime-extensions:0.4.0-SNAPSHOT

Aggregator of the shipped extensions, grouped by domain (essentials, jakartaee-core, jakartaee-web, microprofile, module-repackaged). The dev console NEW is io.vidocq.runtime.extensions.essentials:vidocq-runtime-devconsole-extension (Dev console).

io.vidocq.runtime.extensions.essentials:vidocq-runtime-langchain4j-cdi-mcp-extension:0.4.0-SNAPSHOT NEW

langchain4j-cdi MCP server extension. Built in the reactor, not published while langchain4j-cdi is a SNAPSHOT: see langchain4j-cdi MCP server

io.vidocq.runtime:vidocq-runtime-maven-plugin:0.4.0-SNAPSHOT

Maven plugin — generate, package, dev, checkpom, jlink, jpackage, docker, check-module-info, complete-module-info (modularize moved to the Vauban plugin)

io.vidocq.runtime:vidocq-runtime-examples:0.4.0-SNAPSHOT

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.4.0-SNAPSHOT

Multi-extension integration tests

Exported Java modules

Module Contents

io.vidocq.runtime.spi

Public SPI interfaces (VidocqExtension, ExtensionContext, VidocqConfiguration, config., report. NEW). Must be declared requires in any extension, and in any startup report contributor.

io.vidocq.runtime.spi.devconsole NEW

The dev console panel SPI, requires transitive io.vidocq.runtime.spi. Must be declared requires in an extension that implements DevConsolePanel. Its name keeps it in the boot layer across dev reloads, with the console.

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. It cannot list a listener an extension declares itself NEW, such as the dev console’s dev (A listener of an extension’s own).

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.migration.enabled
vidocq.migration.engine

true
the one backend

Schema migration at boot, and the backend when both Flyway and Liquibase are present. See Schema migration.

vidocq.migration.locations NEW
vidocq.migration.<name>.locations

the backend’s

Script locations of the @Default datasource, and of a named one, which this key enrols. Read from every configuration source.

vidocq.migration.failOnMissingLocations NEW

false

true: a Flyway location with no script stops the boot instead of migrating nothing.

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).

vidocq.log.console NEW

auto

auto: one aligned line per record on stdout when the application has not configured logging; jdk: keep the JDK console handler. See Console logging.

vidocq.console.color NEW

auto

Console colours: auto, always or never. A non-empty NO_COLOR environment variable always disables them.

vidocq.launch.mode NEW

auto

Launch mode shown by the startup banner and the startup report, and returned by ExtensionContext.launchMode(): dev, test or prod, forced instead of detected; auto detects it. Another value is reported as VIDOCQ-CFG-001 and means auto. See Launch mode.

vidocq.startup.report NEW

auto

Level of the startup report: auto (detailed on the first boot of a dev launch, summary otherwise, off for an embedded deployment), off, summary or detailed. Another value is reported as VIDOCQ-CFG-001 and means auto. See Startup report.

vidocq.banner.mode NEW

auto

Startup banner: auto (the art on a terminal or a dev launch, one INFO line elsewhere), console, log or off. See Startup banner.

vidocq.banner.location NEW

(empty)

Custom banner: classpath:<resource>, file:<path> or <path>; a vidocq-banner.txt resource is used without configuration.

vidocq.devconsole.enabled NEW

auto

Dev console: auto (on in a dev launch, off otherwise), true or false. Another value is reported as VIDOCQ-DEVC-003 and means auto. Read by vidocq-runtime-devconsole-extension. See Dev console.

vidocq.devconsole.port NEW

8888

Port of the dev console, 0 for a free one that the dev reloads keep. A taken port falls back to a free one (VIDOCQ-DEVC-004).

vidocq.devconsole.host NEW

127.0.0.1

Address of the dev console. Not a loopback address: VIDOCQ-DEVC-002. Anything but ASCII letters, digits and .-_:%[]: VIDOCQ-DEVC-003, and 127.0.0.1.

vidocq.mcp.serverName / vidocq.mcp.serverVersion NEW

langchain4j-cdi / unknown

Name and version the langchain4j-cdi MCP server advertises. Read by vidocq-runtime-langchain4j-cdi-mcp-extension, with seven other vidocq.mcp.* keys: allowedOrigins, mrtrMode, requestStateSecret, requestStateTtl, continuationTimeout, cacheTtl, cacheScope. See its configuration.

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 nothing 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(). The core claims vidocq.log., vidocq.console., vidocq.banner., vidocq.launch. and vidocq.startup. itself, so a typo such as vidocq.console.colour, vidocq.banner.enabled or vidocq.startup.reprot is reported too. The warning carries the code VIDOCQ-CFG-003 NEW.

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:run NEW

One run of the application in a forked JVM, after a lifecycle forked up to process-classes: mvn vidocq:run compiles, indexes and runs. See the goal’s reference.

vidocq:checkpom

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

vauban:modularize (Vauban plugin)

Patches the non-modular jars of the runtime closure with a synthesized module-info (default phase prepare-package). Lives in io.vidocq.vauban:vauban-maven-plugin, not in this one.

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.

vidocq:idea NEW

Experimental — IntelliJ IDEA shared run configurations (.run/*.run.xml) for the reactor’s applications, or a CI check of them. Details.

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), launchMode() NEW, startupReport() NEW.

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.

ApplicationLayer NEW

The module layer Vidocq boots the application in, when it has one of its own — current() — and the files of a directory of its modules — list(layer, directory): what a library that scans the application reads, since the layer’s class loader lists no directory. See Listing the application’s files.

report.StartupReportContributor NEW

Adds a section to the startup report. Implemented by an extension, or declared as a service with provides … with … in module-info.java and META-INF/services. See Contributing to the startup report.

report.StartupReportContext / report.StartupReportSection NEW

What a contributor reads (level, launch mode, beans, routes) and where it writes (summary line, rows, lists, secrets, listeners, routes, anomalies).

report.Verbosity / report.LaunchMode NEW

OFF, SUMMARY, DETAILED; DEV, TEST, PROD.

report.StartupReportView NEW

The startup report of the running boot, read-only, from ExtensionContext.startupReport(): launch mode and reason, anomalies, sections, the detailed text, and the contributors the boot called. See Reading the startup report.

report.ReportAnomaly / report.ReportSection / report.ReportLine NEW

Its text-only records: an anomaly (code, message, hint, source), a section (id, headline, summary, lines), a line (key, values).

Dev console SPI (vidocq-runtime-devconsole-spi) NEW

Source: vidocq-runtime-devconsole-spi/src/main/java/io/vidocq/runtime/spi/devconsole/. How to use it: Writing a dev console panel.

Type Role

DevConsolePanel NEW

A StartupReportContributor that the dev console also shows live: sample(PanelSample) on every poll, charts() once per boot.

PanelSample NEW

Where sample writes: gauge, counter, duration, text, absent, table, group; requireKey(key), the rule of every key.

Unit NEW

COUNT, BYTES, NANOS, RATIO.

Chart / Series / Series.Style NEW

A chart the page draws from successive samples; a value it plots, in the style AREA, STACKED, LINE, RATE or CEILING.

Startup anomaly codes NEW

Each is one WARNING record on io.vidocq.startup.anomaly, its code first, logged at every level of the startup report, except VIDOCQ-DEVC-005, which the dev console logs on io.vidocq.devconsole when a panel fails to sample. See Anomalies.

Code Raised when

VIDOCQ-CFG-001

vidocq.startup.report or vidocq.launch.mode has a value it does not accept; auto is used.

VIDOCQ-CFG-002

The audit of the configured keys failed; unread keys are not reported on this boot.

VIDOCQ-CFG-003

A configured key under an audited namespace is read by nothing.

VAUBAN-009

Load-time weaving was needed and could not be prepared.

VIDOCQ-RPT-001

A startup report contributor could not be loaded, created or identified, or failed; its section is skipped.

VIDOCQ-RPT-002

Two contributors of different classes use the same id, or one uses the id of a section of the core, or startup, config, cdi, logs, tests or jvm NEW, the dev console’s own panels; the second is skipped.

VIDOCQ-DEVC-001 NEW

The dev console is on in a test or prod launch.

VIDOCQ-DEVC-002 NEW

The dev console listens on an address that is not a loopback one.

VIDOCQ-DEVC-003 NEW

A vidocq.devconsole.* key has a value the console does not accept; its default is used.

VIDOCQ-DEVC-004 NEW

The dev console’s port was taken; it listens on a free one.

VIDOCQ-DEVC-005 NEW

A dev console panel failed to sample; that poll misses its live values.

VIDOCQ-MIG-001 NEW

A datasource’s migration found no migration, and its schema history records none: the schema was not migrated.

MANSART-POOL-001 NEW

A Mansart pool opened none of the connections its minIdle asks for at boot.

MANSART-POOL-002 NEW

A named Mansart pool is open, but no @Named DataSource bean serves it.

MANSART-DATA-001 NEW

Mansart could not build the model of a repository’s entity; the catalogue shows the entity without its columns.

VIDOCQ-MCP-001 NEW

The langchain4j-cdi MCP server module does not provide McpServerSPI, or is not open.

VIDOCQ-MCP-002 NEW

The langchain4j-cdi MCP extension is present but no McpEndpoint bean exists.

VIDOCQ-MCP-003 NEW

langchain4j-cdi’s MCP server is loaded twice, in the boot layer and in the application layer.

VIDOCQ-MCP-004 NEW

vidocq.mcp.* keys are set and the application also produces @Named("mcp-server"); the keys win.

VIDOCQ-MCP-005 NEW

An MCP tool, prompt or resource template argument has no name.

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