|
Vidocq Runtime is at 0.4.0-SNAPSHOT. Any real-world migration is premature — this page documents the mappings ahead of time. |
Side-by-side comparison
| Aspect | Vidocq Runtime | Quarkus | Helidon MP | Spring Boot | Open Liberty | Payara Micro |
|---|---|---|---|---|---|---|
Minimum JDK |
25 |
17 |
21 |
17 |
17 |
17 |
I/O threading model |
Virtual threads |
Vert.x event loop |
Helidon Níma (VT) |
Tomcat / Netty |
Platform threads |
Platform threads |
Build-time vs runtime |
Build-time (Class-File API) |
Build-time (Gizmo / ASM) |
Runtime |
Runtime |
Runtime |
Runtime |
Strict Java Modules |
Yes |
No |
No |
No |
No |
No |
Native AOT |
GraalVM + Leyden CDS |
GraalVM |
GraalVM |
GraalVM |
Partial |
Partial |
Typical cold start (jlink/CDS) |
~1 s |
~0.5 s (native) |
~1 s |
~3 s |
~5 s |
~3 s |
Standalone image size |
~40 MB (jlink) |
~80 MB (native) |
~50 MB |
~70 MB |
~150 MB |
~80 MB |
ASM / Byte Buddy dependency |
None |
ASM (Gizmo) |
ASM |
ByteBuddy + ASM |
ASM |
ASM |
|
The numbers above are indicative and will be updated as |
From Quarkus
Vidocq Runtime explicitly borrows the Quarkus extension pattern.
| Quarkus | Vidocq Runtime | Note |
|---|---|---|
Quarkus deployment build steps + recorders ( |
|
Simpler model — |
Gizmo bytecode generation (ASM) |
APT + Class-File API (JEP 484) at compile time |
No ASM — standard JDK bytecode |
ArC (runtime CDI) |
Build-time in both cases |
|
RESTEasy Reactive |
No Vert.x — virtual threads |
|
Hibernate Reactive / ORM |
JDBC + virtual threads, no Vert.x SQL Client |
|
Jackson |
JSON-B 3.0 / JSON-P 2.1 implementation |
The forthcoming compare-to/ workspace examples will illustrate migrating a simple extension.
From Spring Boot
Spring Boot does not naturally align with the MicroProfile model, and migration touches the programming model.
| Spring Boot | Vidocq Runtime | Note |
|---|---|---|
|
|
No application class required |
|
|
Standard Jakarta REST |
|
|
CDI Lite |
|
|
Constructor injection preferred |
|
|
MicroProfile Config via |
|
|
|
Spring Data JPA |
Mansart (Jakarta Data 1.0) |
APT-generated repositories |
From Open Liberty / WildFly
-
server.xml→ MicroProfile Config + Vidocq Runtime extensions. -
EAR → standalone JAR + Maven plugin.
-
JNDI → CDI lookup via
Vauban.bootstrap(). -
Jakarta annotations — directly compatible, the programming model stays identical.
From Payara Micro
Payara Micro and Vidocq Runtime share the MicroProfile target. The main difference is the build-time approach: Payara Micro embeds GlassFish; Vidocq Runtime produces a minimal jlink binary without a classical application server.
-
payara-micro --deploy app.war→bin/run.shfrom thevidocq:packagebin/+lib/distribution (also attached as a-dist.zip). -
payara-micro.jar(~80 MB) → jlink image (~40 MB). -
Every enabled MicroProfile
feature.xmlis replaced by the matching Vidocq Runtime extension.
MicroProfile table
| MicroProfile spec | Vidocq Runtime status | Extension |
|---|---|---|
MP Config 3.1 |
Delivered |
|
MP Health 4.0 |
Delivered |
|
MP Metrics 5.1 |
Delivered |
|
MP OpenAPI 4.2 |
Delivered |
|
MP REST Client 4.0 |
Delivered |
|
MP JWT Auth 2.2 |
Delivered |
|
MP Telemetry 2.2 |
Delivered |
|
MP Fault Tolerance 4.1 |
Delivered |
|
Seven extensions run the TCKs of their MicroProfile 7.2 specifications and the Metrics 5.1 extension runs its own TCK (Metrics is not part of the 7.2 platform); all eight pass on the assembled runtime, through the runners embedded in vidocq-runtime-integration-tests (Maven profile tck) — 1888 TCK tests green on 2026-10-04. The OpenAPI 4.2 and Telemetry 2.2 runs use release-candidate TCKs, byte-identical to the finals; the 7.2 platform release is still under ballot. See TCK status.
The dev console is no longer a dependency NEW
Before, an application declared vidocq-runtime-devconsole-extension itself to get the
dev console, and that dependency shipped in every binary vidocq:package, jlink,
jpackage and docker produced — off by default, but its code was there. mvn vidocq:dev now adds the
console itself, at the Vidocq version of the application’s Chappe extension, the moment the application already has
vidocq-runtime-chappe-webserver-extension; no application ever needs to declare it, and no binary ever
contains it (Vidocq/vidocq#143).
-
Remove
vidocq-runtime-devconsole-extensionfrom the pom.vidocq:checkpomalready warns about it if you do not — a dev-only dependency declared outsidetestscope — and every packaging goal drops it anyway, with a warning, whether or not you remove it. Its SPI,vidocq-runtime-devconsole-spi, a small API jar, stays in the binary as long as the console, or an extension that requires the SPI, is declared. -
Unless a test reads the console, such as one that calls its
/api/snapshot: keep the dependency, moved to<scope>test</scope>, together with the-devmodule of any extension whose live panel the same test reads (A-devmodule, never packaged).testscope is never packaged, andcheckpomaccepts it. -
An application that got
vidocq-runtime-chappe-webserver-extensiononly transitively through the console — the console depends on it, so declaring the console was enough to bring Chappe along — now declares Chappe itself. Without it,vidocq:devlogsDev tools: no dev console, it needs vidocq-runtime-chappe-webserver-extensionand starts without one, since nothing serves the console’s page any more.
See Dev tools and binaries for the whole picture,
including the six -dev panel modules this repository’s own extensions now ship.
Config and Rest Client need their codegen bundle NEW
Two extensions now ship a -codegen bundle, as the others already did, and vidocq:checkpom fails the build
of an application that declares the extension without it:
-
vidocq-runtime-ravel-config-extension→vidocq-runtime-ravel-config-extension-codegen(Vidocq/ravel#21). Without it,@Inject @ConfigPropertywas reported unsatisfied at compile time, and the only way out was-Avauban.validation=false. -
vidocq-runtime-cyrano-rest-client-extension→vidocq-runtime-cyrano-rest-client-extension-codegen(Vidocq/vidocq#207). Without it,@Inject @RestClientwas unsatisfied at boot.
Add each one to the compiler’s annotationProcessorPaths, next to the inherited indexer
(combine.children="append"). checkpom prints the <path> to paste:
<path>
<groupId>io.vidocq.runtime.extensions.microprofile</groupId>
<artifactId>vidocq-runtime-cyrano-rest-client-extension-codegen</artifactId>
<version>0.4.0-SNAPSHOT</version>
<type>pom</type>
</path>
vidocq extension add ravel-config and vidocq extension add cyrano-rest-client write it for you. See
the Config extension and
the Rest Client extension.
vidocq:modularize is now vauban:modularize NEW
The goal moved to io.vidocq.vauban:vauban-maven-plugin. A pom that runs vidocq:modularize declares the
Vauban plugin instead, renames the vidocq.modularize. properties to vauban.modularize., and drops
<release>; the copies are written to target/vauban-modularized/, where vidocq:dev, vidocq:jlink and
vidocq:package read them. See modularize moved to
the Vauban plugin.
Next steps
-
Concepts — fundamental differences from Quarkus
-
TCK status — conformance coverage