diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 026f622750d..3e8f017b378 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,6 +10,13 @@ updates: schedule: interval: weekly open-pull-requests-limit: 20 + - package-ecosystem: npm + directory: "/" + schedule: + interval: weekly + open-pull-requests-limit: 5 + labels: + - area/infra - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47f6f119b28..d56a24d57bf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,6 +60,13 @@ jobs: key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} restore-keys: ${{ runner.os }}-gems- + - name: Cache npm packages + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: ~/.npm + key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }} + restore-keys: ${{ runner.os }}-npm- + - name: Cache Playwright browsers id: playwright-cache uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -187,6 +194,23 @@ jobs: echo "Targeted check: $PATHS" fi + - name: Run Lighthouse CI + if: steps.link_scope.outputs.mode != 'skip' + run: | + npm ci + URLS="" + if [ "${{ steps.link_scope.outputs.mode }}" = "partial" ]; then + IFS=',' read -ra PATHS <<< "${{ steps.link_scope.outputs.paths }}" + for p in "${PATHS[@]:0:5}"; do + URLS="$URLS --collect.url=http://localhost:8090${p}" + done + else + URLS="--collect.url=http://localhost:8090/ --collect.url=http://localhost:8090/guides/ --collect.url=http://localhost:8090/blog/" + fi + npx lhci autorun $URLS + env: + LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }} + # Versioned guides (2.x-5.x) are excluded from this build by # _only_latest_guides_config.yml, so skip crawling those paths. - name: Run link crawler @@ -211,9 +235,39 @@ jobs: path: | target/*-reports/TEST-*.xml target/build-report.json + .lighthouseci/ README.md retention-days: 2 + - name: Lighthouse report + if: always() + run: | + { + echo "### Lighthouse Results" + echo "" + echo "| Page | Performance | Accessibility | Best Practices | SEO | Report |" + echo "|------|:----------:|:------------:|:--------------:|:---:|--------|" + for f in .lighthouseci/lhr-*.json; do + [ -f "$f" ] || continue + url=$(jq -r '.requestedUrl' "$f") + path=$(echo "$url" | sed 's|http://[^/]*||') + perf=$(jq '.categories.performance.score // 0' "$f" | awk '{printf "%d", $1 * 100}') + a11y=$(jq '.categories.accessibility.score // 0' "$f" | awk '{printf "%d", $1 * 100}') + bp=$(jq '.categories["best-practices"].score // 0' "$f" | awk '{printf "%d", $1 * 100}') + seo=$(jq '.categories.seo.score // 0' "$f" | awk '{printf "%d", $1 * 100}') + perf_icon=$( [ "$perf" -ge 90 ] && echo ":green_circle:" || ( [ "$perf" -ge 50 ] && echo ":orange_circle:" || echo ":red_circle:" ) ) + a11y_icon=$( [ "$a11y" -ge 90 ] && echo ":green_circle:" || ( [ "$a11y" -ge 50 ] && echo ":orange_circle:" || echo ":red_circle:" ) ) + bp_icon=$( [ "$bp" -ge 90 ] && echo ":green_circle:" || ( [ "$bp" -ge 50 ] && echo ":orange_circle:" || echo ":red_circle:" ) ) + seo_icon=$( [ "$seo" -ge 90 ] && echo ":green_circle:" || ( [ "$seo" -ge 50 ] && echo ":orange_circle:" || echo ":red_circle:" ) ) + link="" + if [ -f .lighthouseci/links.json ]; then + report_url=$(jq -r --arg u "$url" '.[$u] // empty' .lighthouseci/links.json) + [ -n "$report_url" ] && link="[Full report](${report_url})" + fi + echo "| \`${path:-/}\` | ${perf_icon} ${perf} | ${a11y_icon} ${a11y} | ${bp_icon} ${bp} | ${seo_icon} ${seo} | ${link} |" + done + } >> "$GITHUB_STEP_SUMMARY" + - name: Test report if: always() run: | diff --git a/.gitignore b/.gitignore index 9eb58883f83..b2b87340363 100755 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ bin target vendor node_modules +.lighthouseci .quarkus-main-repository diff --git a/_data/releases.yaml b/_data/releases.yaml index d11e78f3848..dd7ef6bb5a0 100644 --- a/_data/releases.yaml +++ b/_data/releases.yaml @@ -39,10 +39,17 @@ eol_support: you plan your upgrade. releases: - - version: "3.37" + + - version: "3.38" lts: false upcoming: true + - version: "3.37" + release_date: 2026-06-24 + lts: false + latest_patch: "3.37.2" + latest_patch_date: 2026-07-08 + - version: "3.36" release_date: 2026-05-27 eol_date: @@ -78,7 +85,7 @@ releases: ibm_eol: 2028-06-30 - version: "3.32" - release_date: 2026-02-26 + release_date: 2026-02-25 eol_date: 2026-03-25 lts: false latest_patch: "3.32.4" @@ -274,7 +281,7 @@ releases: latest_patch_date: 2024-01-31 - version: "3.5" - release_date: 2023-10-25 + release_date: 2023-10-11 eol_date: 2023-11-29 lts: false latest_patch: "3.5.3" @@ -288,7 +295,7 @@ releases: latest_patch_date: 2023-10-13 - version: "3.3" - release_date: 2023-08-23 + release_date: 2023-08-09 eol_date: 2023-09-20 lts: false latest_patch: "3.3.3" @@ -298,7 +305,7 @@ releases: release_date: 2023-07-05 eol_date: 2024-07-05 lts: true - latest_patch: "3.2.12" + latest_patch: "3.2.12.Final" latest_patch_date: 2024-04-16 rhbq_eol: 2025-12-31 @@ -306,42 +313,42 @@ releases: release_date: 2023-05-31 eol_date: 2023-07-05 lts: false - latest_patch: "3.1.3" + latest_patch: "3.1.3.Final" latest_patch_date: 2023-06-29 - version: "3.0" - release_date: 2023-04-26 + release_date: 2023-01-20 eol_date: 2023-05-31 lts: false - latest_patch: "3.0.4" + latest_patch: "3.0.4.Final" latest_patch_date: 2023-05-25 - version: "2.16" release_date: 2023-01-25 eol_date: 2023-10-31 lts: false - latest_patch: "2.16.12" + latest_patch: "2.16.12.Final" latest_patch_date: 2023-10-17 - version: "2.15" release_date: 2022-12-14 eol_date: 2023-01-25 lts: false - latest_patch: "2.15.3" + latest_patch: "2.15.3.Final" latest_patch_date: 2023-01-10 - version: "2.14" release_date: 2022-11-09 eol_date: 2022-12-14 lts: false - latest_patch: "2.14.3" + latest_patch: "2.14.3.Final" latest_patch_date: 2022-12-06 - version: "2.13" release_date: 2022-09-28 eol_date: 2022-11-07 lts: false - latest_patch: "2.13.9" + latest_patch: "2.13.9.Final" latest_patch_date: 2023-11-22 rhbq_eol: 2025-06-30 @@ -349,42 +356,42 @@ releases: release_date: 2022-08-31 eol_date: 2022-09-21 lts: false - latest_patch: "2.12.3" + latest_patch: "2.12.3.Final" latest_patch_date: 2022-09-20 - version: "2.11" - release_date: 2022-07-27 + release_date: 2023-08-23 eol_date: 2022-08-24 lts: false - latest_patch: "2.11.3" + latest_patch: "2.11.3.Final" latest_patch_date: 2022-08-24 - version: "2.10" release_date: 2022-06-22 eol_date: 2022-07-26 lts: false - latest_patch: "2.10.4" + latest_patch: "2.10.4.Final" latest_patch_date: 2022-07-27 - version: "2.9" release_date: 2022-05-11 eol_date: 2022-06-15 lts: false - latest_patch: "2.9.2" + latest_patch: "2.9.2.Final" latest_patch_date: 2022-05-25 - version: "2.8" release_date: 2022-04-12 eol_date: 2022-05-06 lts: false - latest_patch: "2.8.3" + latest_patch: "2.8.3.Final" latest_patch_date: 2022-05-06 - version: "2.7" release_date: 2022-02-02 eol_date: 2022-05-30 lts: false - latest_patch: "2.7.7" + latest_patch: "2.7.7.Final" latest_patch_date: 2023-01-26 rhbq_eol: 2024-06-30 @@ -392,35 +399,35 @@ releases: release_date: 2021-12-22 eol_date: 2022-01-26 lts: false - latest_patch: "2.6.3" + latest_patch: "2.6.3.Final" latest_patch_date: 2022-01-20 - version: "2.5" release_date: 2021-11-24 eol_date: 2021-12-17 lts: false - latest_patch: "2.5.4" + latest_patch: "2.5.4.Final" latest_patch_date: 2021-12-20 - version: "2.4" release_date: 2021-10-27 eol_date: 2021-11-17 lts: false - latest_patch: "2.4.2" + latest_patch: "2.4.2.Final" latest_patch_date: 2021-11-12 - version: "2.3" release_date: 2021-10-06 eol_date: 2021-10-20 lts: false - latest_patch: "2.3.1" + latest_patch: "2.3.1.Final" latest_patch_date: 2021-10-20 - version: "2.2" release_date: 2021-08-31 eol_date: 2021-12-21 lts: false - latest_patch: "2.2.5" + latest_patch: "2.2.5.Final" latest_patch_date: 2021-12-21 rhbq_eol: 2023-06-30 @@ -428,27 +435,258 @@ releases: release_date: 2021-07-29 eol_date: 2021-08-26 lts: false - latest_patch: "2.1.4" + latest_patch: "2.1.4.Final" latest_patch_date: 2021-08-26 - version: "2.0" release_date: 2021-06-30 eol_date: 2021-07-22 lts: false - latest_patch: "2.0.3" + latest_patch: "2.0.3.Final" latest_patch_date: 2021-07-22 - - version: "1" - release_date: 2019-11-25 - eol_date: 2021-06-23 + - version: "1.13" + release_date: 2021-03-30 lts: false - latest_patch: "1.13.7" + latest_patch: "1.13.7.Final" latest_patch_date: 2021-06-09 - rhbq_eol: 2022-06-30 - - version: "0" - release_date: 2018-12-12 - eol_date: 2019-11-25 + - version: "1.12" + release_date: 2021-02-23 + lts: false + latest_patch: "1.12.2.Final" + latest_patch_date: 2021-03-11 + + - version: "1.11" + release_date: 2021-01-20 + lts: false + latest_patch: "1.11.7.Final" + latest_patch_date: 2021-05-19 + + - version: "1.10" + release_date: 2020-11-24 + lts: false + latest_patch: "1.10.5.Final" + latest_patch_date: 2020-12-17 + + - version: "1.9" + release_date: 2020-10-21 + lts: false + latest_patch: "1.9.2.Final" + latest_patch_date: 2020-11-05 + + - version: "1.8" + release_date: 2020-09-15 + lts: false + latest_patch: "1.8.3.Final" + latest_patch_date: 2020-10-09 + + - version: "1.7" + release_date: 2020-08-13 + lts: false + latest_patch: "1.7.6.Final" + latest_patch_date: 2020-12-16 + + - version: "1.6" + release_date: 2020-07-08 + lts: false + latest_patch: "1.6.1.Final" + latest_patch_date: 2020-07-21 + + - version: "1.5" + release_date: 2020-06-03 + lts: false + latest_patch: "1.5.2.Final" + latest_patch_date: 2020-06-18 + + - version: "1.4" + release_date: 2020-04-24 + lts: false + latest_patch: "1.4.2.Final" + latest_patch_date: 2020-05-05 + + - version: "1.3" + release_date: 2020-03-13 + lts: false + latest_patch: "1.3.4.Final" + latest_patch_date: 2020-06-03 + + - version: "1.2" + release_date: 2020-01-23 + lts: false + latest_patch: "1.2.1.Final" + latest_patch_date: 2020-02-19 + + - version: "1.1" + release_date: 2019-12-17 + lts: false + latest_patch: "1.1.1.Final" + latest_patch_date: 2020-01-07 + + - version: "1.0" + release_date: 2019-11-25 + lts: false + latest_patch: "1.0.1.Final" + latest_patch_date: 2019-11-28 + + - version: "0.28" + release_date: 2019-11-04 lts: false latest_patch: "0.28.1" latest_patch_date: 2019-11-04 + + - version: "0.27" + release_date: 2019-10-30 + lts: false + latest_patch: "0.27.0" + latest_patch_date: 2019-10-30 + + - version: "0.26" + release_date: 2019-10-22 + lts: false + latest_patch: "0.26.1" + latest_patch_date: 2019-10-23 + + - version: "0.25" + release_date: 2019-10-16 + lts: false + latest_patch: "0.25.0" + latest_patch_date: 2019-10-16 + + - version: "0.24" + release_date: 2019-10-12 + lts: false + latest_patch: "0.24.0" + latest_patch_date: 2019-10-12 + + - version: "0.23" + release_date: 2019-09-25 + lts: false + latest_patch: "0.23.2" + latest_patch_date: 2019-10-02 + + - version: "0.22" + release_date: 2019-09-15 + lts: false + latest_patch: "0.22.0" + latest_patch_date: 2019-09-15 + + - version: "0.21" + release_date: 2019-08-15 + lts: false + latest_patch: "0.21.2" + latest_patch_date: 2019-09-05 + + - version: "0.20" + release_date: 2019-07-31 + lts: false + latest_patch: "0.20.0" + latest_patch_date: 2019-07-31 + + - version: "0.19" + release_date: 2019-07-10 + lts: false + latest_patch: "0.19.1" + latest_patch_date: 2019-07-11 + + - version: "0.18" + release_date: 2019-06-27 + lts: false + latest_patch: "0.18.0" + latest_patch_date: 2019-06-27 + + - version: "0.17" + release_date: 2019-06-19 + lts: false + latest_patch: "0.17.0" + latest_patch_date: 2019-06-19 + + - version: "0.16" + release_date: 2019-06-03 + lts: false + latest_patch: "0.16.1" + latest_patch_date: 2019-06-06 + + - version: "0.15" + release_date: 2019-05-14 + lts: false + latest_patch: "0.15.0" + latest_patch_date: 2019-05-14 + + - version: "0.14" + release_date: 2019-04-25 + lts: false + latest_patch: "0.14.0" + latest_patch_date: 2019-04-25 + + - version: "0.13" + release_date: 2019-04-08 + lts: false + latest_patch: "0.13.3" + latest_patch_date: 2019-04-16 + + - version: "0.12" + release_date: 2019-03-20 + lts: false + latest_patch: "0.12.0" + latest_patch_date: 2019-03-20 + + - version: "0.11" + release_date: 2019-03-06 + lts: false + latest_patch: "0.11.0" + latest_patch_date: 2019-03-06 + + - version: "0.10" + release_date: 2019-03-01 + lts: false + latest_patch: "0.10.0" + latest_patch_date: 2019-03-01 + + - version: "0.9" + release_date: 2019-02-14 + lts: false + latest_patch: "0.9.1" + latest_patch_date: 2019-02-14 + + - version: "0.8" + release_date: 2019-02-06 + lts: false + latest_patch: "0.8.0" + latest_patch_date: 2019-02-06 + + - version: "0.7" + release_date: 2019-01-23 + lts: false + latest_patch: "0.7.0" + latest_patch_date: 2019-01-23 + + - version: "0.6" + release_date: 2019-01-16 + lts: false + latest_patch: "0.6.0" + latest_patch_date: 2019-01-16 + + - version: "0.5" + release_date: 2019-01-09 + lts: false + latest_patch: "0.5.0" + latest_patch_date: 2019-01-09 + + - version: "0.4" + release_date: 2019-01-03 + lts: false + latest_patch: "0.4.0" + latest_patch_date: 2019-01-03 + + - version: "0.3" + release_date: 2018-12-26 + lts: false + latest_patch: "0.3.0" + latest_patch_date: 2018-12-26 + + - version: "0.2" + release_date: 2018-12-19 + lts: false + latest_patch: "0.2.0" + latest_patch_date: 2018-12-19 diff --git a/_data/wg.yaml b/_data/wg.yaml index 2012bb870a0..f3765bf0308 100644 --- a/_data/wg.yaml +++ b/_data/wg.yaml @@ -1,60 +1,48 @@ --- working-groups: - - title: "Convert quarkus.io to Roq" - board-url: "https://github.com/orgs/quarkusio/projects/79" + - title: "Quarkus 4" + board-url: "https://github.com/orgs/quarkusio/projects/51" short-description: | - The main objective of this working group is to convert our Jekyll-based website to one built on Roq. A side-effect may be a more generalised set of tools and docs for others to use to convert their sites. + The Quarkus 4 working group aims to coordinate and track all Quarkus 4-related development in a long-running effort. readme: | -

Objective:

-

The main objective of this working group is to convert our Jekyll-based website to a Roq-based one.

+

Objective

+

This long‑running working group is dedicated to tracking development and ensuring a smooth rollout for Quarkus 4. It will serve as the central coordination point for feature tracking, release hygiene, migration guidance, and community alignment related to Quarkus 4.

The Problem

-

Although Quarkus promotes a Quarkus-based static site generator, our own website uses a Ruby-based one. As well as being reputationally awkward (why aren't we eating our own dog food?), the Ruby-based generator has several practical limitations:

+

Quarkus 4 introduces significant shifts, including new Java 25 flags, architectural refinements, deprecations, and ecosystem changes. Without a focused group, efforts become fragmented, and downstream consumers (extensions, integrations, platform partners) may struggle to stay aligned.

+

Proposed Solution

+

Establish a designated WG to:

-

The proposed Solution

-

Add support for Roq for the range of features used on quarkus.io, and add migration scripts to convert Jekyll to Quarkus. Once these are done, the quarkus.io site can be converted to Roq.

Definition of Done

-

This working group is complete when the live quarkus.io site is based on Roq.

-

Scope of Work

-

Visual changes to the website are outside the scope of this work. Conversion of some of the smaller satellite sites, such as https://quarkiverse.io/, could be in scope to act as prototypes. It is assumed that the quarkus.io contents that use asciidoc will continue to do so.

-

Organizing the Work

-

Issues will be split between the https://github.com/quarkusio/quarkusio.github.io and https://github.com/quarkiverse/quarkus-roq repositories. Zulip will be used for coordination.

-

Expected Timeline:

-

I expect about six months to be a suitable timescale.

-

As always, we will aim for an incremental delivery, although the final switch will be a big bang.

- -

Potential Outcomes & Deliverables

-

The deliverables of this working group include:

+

This WG will be considered complete when:

+

Organizing the Work

+

Coordination via:

+

Expected Timeline:

+

This is a long-running WG, starting now and wrapping up post‑GA (~late Q2 2026). We’ll mark it as “done” upon the public release of Quarkus 4 GA.

status: on track lts: false completed: false - last-activity: 2026-07-10 - last-update-date: 2026-07-09 + last-activity: 2026-07-13 + last-update-date: 2026-06-29 last-update: | - My performance numbers were premature. Very premature, in fact. I thought guides were working, but they were not. With guide parsing, the Roq builds take half again as long as the Jekyll builds. There may be opportunities for tuning to improve that. + Work on Quarkus 4 saw progress with CI rework for the 4.0 branch. The team improved the Event bus and updated Vert.x configuration, including `Buffer#getByteBuf` usage. We also revisited the default value for `quarkus.http.use-semicolon-as-query-param-delimiter`. - I've also done lighthouse tests, and the Roq site drops 7 points on performance, and 17 points on SEO. I've raised issues to track those. - point-of-contact: "@holly-cummins and @ia3andy" - proposal: https://github.com/quarkusio/quarkus/discussions/53541 - discussion: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev + (This status update was automatically generated using AI.) - title: "Quarkus Data" board-url: "https://github.com/orgs/quarkusio/projects/50" short-description: | @@ -113,7 +101,7 @@ working-groups: status: on track lts: false completed: false - last-activity: 2026-07-10 + last-activity: 2026-07-13 last-update-date: 2026-06-29 last-update: | The team resolved issues with `AutoId` and `@Transactional` in Hibernate Reactive Panache, also addressing duplicate feature name conflicts. Our focus now turns to redesigning core data operations, fleshing out shortcut types, and integrating with Spring Data extensions. @@ -123,76 +111,6 @@ working-groups: point-of-contact: "@FroMage (@Stephane Epardaud on Zulip)" proposal: https://github.com/quarkusio/quarkus/discussions/48949 discussion: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev/topic/WG.20-.20Panache.2ENext/with/529258261 - - title: "Dev Services Lifecycle" - board-url: "https://github.com/orgs/quarkusio/projects/49" - short-description: | - This working group will define and implement a consistent and configurable lifecycle model for Dev Services. It will shift the startup to the correct phase, enable optional reuse across dev and test modes, and clarify teardown and sharing behavior. The goal is to improve the developer experience. - readme: | -

This working group was formed to address long-standing inconsistencies and pain points in the Dev Services lifecycle within Quarkus. Dev Services are essential for simplifying local development and testing by automatically provisioning runtime dependencies (e.g., databases, message brokers), but their current lifecycle behavior leads to confusion and inefficiencies. Most notably, they are started during the augmentation phase, which conflicts with their inherently runtime-oriented nature and causes issues with newer efforts such as the test classloading revamp.

-

The primary goal of this group is to define and implement a consistent, runtime-aligned lifecycle model for Dev Services. This includes shifting their startup to a phase after augmentation but before the application begins execution, ensuring better alignment with the runtime environment. A critical focus will also be on enabling optional reuse of Dev Services across dev and test modes — including reuse between repeated test executions — to reduce startup time and improve the iterative development experience.

-

The group's scope covers several strategic areas: formalizing when and how Dev Services are started, reused, or stopped; defining rules for discoverability and sharing between profiles or processes; and avoiding resource leaks or accidental retention. It explicitly excludes broader orchestration features (such as service dependency graphs) and unrelated feature enhancements.

-

The working group will produce a set of deliverables to support the new model. These include one or more Architecture Decision Records (ADRs) describing the new lifecycle model, the implementation of lifecycle logic in Quarkus Core, and updates to both user-facing and contributor documentation. Additionally, enhancements to the Dev Services development model will make it easier for extension authors to adopt and follow the new lifecycle standards. A public communication effort (e.g., blog posts or demos) will also be used to showcase the improvements.

-

The new API is described here: https://quarkus.io/blog/new-dev-services-api/

- - status: on track - lts: false - completed: false - last-activity: 2026-07-10 - last-update-date: 2026-06-29 - last-update: | - The group migrated observability to the new dev service model. We also addressed the `ObservabilityJsonRPCService` failure that occurred when the LGTM dev service was disabled. - - (This status update was automatically generated using AI.) - point-of-contact: "@holly-cummins (@Holly Cummins on Zulip), @ozangunalp (@Ozan Günalp on Zulip )" - proposal: https://github.com/quarkusio/quarkus/discussions/47683 - discussion: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev - - title: "Quarkus 4" - board-url: "https://github.com/orgs/quarkusio/projects/51" - short-description: | - The Quarkus 4 working group aims to coordinate and track all Quarkus 4-related development in a long-running effort. - readme: | -

Objective

-

This long‑running working group is dedicated to tracking development and ensuring a smooth rollout for Quarkus 4. It will serve as the central coordination point for feature tracking, release hygiene, migration guidance, and community alignment related to Quarkus 4.

-

The Problem

-

Quarkus 4 introduces significant shifts, including new Java 25 flags, architectural refinements, deprecations, and ecosystem changes. Without a focused group, efforts become fragmented, and downstream consumers (extensions, integrations, platform partners) may struggle to stay aligned.

-

Proposed Solution

-

Establish a designated WG to:

- -

Definition of Done

-

This WG will be considered complete when:

- -

Organizing the Work

-

Coordination via:

- -

Expected Timeline:

-

This is a long-running WG, starting now and wrapping up post‑GA (~late Q2 2026). We’ll mark it as “done” upon the public release of Quarkus 4 GA.

- status: on track - lts: false - completed: false - last-activity: 2026-07-10 - last-update-date: 2026-06-29 - last-update: | - Work on Quarkus 4 saw progress with CI rework for the 4.0 branch. The team improved the Event bus and updated Vert.x configuration, including `Buffer#getByteBuf` usage. We also revisited the default value for `quarkus.http.use-semicolon-as-query-param-delimiter`. - - (This status update was automatically generated using AI.) - title: "Observability.Next" board-url: "https://github.com/orgs/quarkusio/projects/42" short-description: | @@ -262,7 +180,7 @@ working-groups: status: on track lts: false completed: false - last-activity: 2026-07-10 + last-activity: 2026-07-13 last-update-date: 2026-06-29 last-update: | The team resolved issues with OpenTelemetry context loss in blocking `@ConsumeEvent` messages and improved Vert.x event bus span correlation. We also addressed the `HttpServerMetricsTagsContributor` for connection resets. Current efforts focus on OpenTelemetry declarative configuration, propagating OTel trace context, and exploring observability guidance with AI. @@ -270,6 +188,88 @@ working-groups: (This status update was automatically generated using AI.) point-of-contact: "@brunobat" proposal: https://github.com/quarkusio/quarkus/discussions/44423 + - title: "Convert quarkus.io to Roq" + board-url: "https://github.com/orgs/quarkusio/projects/79" + short-description: | + The main objective of this working group is to convert our Jekyll-based website to one built on Roq. A side-effect may be a more generalised set of tools and docs for others to use to convert their sites. + readme: | +

Objective:

+

The main objective of this working group is to convert our Jekyll-based website to a Roq-based one.

+

The Problem

+

Although Quarkus promotes a Quarkus-based static site generator, our own website uses a Ruby-based one. As well as being reputationally awkward (why aren't we eating our own dog food?), the Ruby-based generator has several practical limitations:

+ +

The proposed Solution

+

Add support for Roq for the range of features used on quarkus.io, and add migration scripts to convert Jekyll to Quarkus. Once these are done, the quarkus.io site can be converted to Roq.

+

Definition of Done

+

This working group is complete when the live quarkus.io site is based on Roq.

+

Scope of Work

+

Visual changes to the website are outside the scope of this work. Conversion of some of the smaller satellite sites, such as https://quarkiverse.io/, could be in scope to act as prototypes. It is assumed that the quarkus.io contents that use asciidoc will continue to do so.

+

Organizing the Work

+

Issues will be split between the https://github.com/quarkusio/quarkusio.github.io and https://github.com/quarkiverse/quarkus-roq repositories. Zulip will be used for coordination.

+

Expected Timeline:

+

I expect about six months to be a suitable timescale.

+

As always, we will aim for an incremental delivery, although the final switch will be a big bang.

+ +

Potential Outcomes & Deliverables

+

The deliverables of this working group include:

+ + + status: on track + lts: false + completed: false + last-activity: 2026-07-13 + last-update-date: 2026-07-09 + last-update: | + My performance numbers were premature. Very premature, in fact. I thought guides were working, but they were not. With guide parsing, the Roq builds take half again as long as the Jekyll builds. There may be opportunities for tuning to improve that. + + I've also done lighthouse tests, and the Roq site drops 7 points on performance, and 17 points on SEO. I've raised issues to track those. + point-of-contact: "@holly-cummins and @ia3andy" + proposal: https://github.com/quarkusio/quarkus/discussions/53541 + discussion: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev + - title: "Dev Services Lifecycle" + board-url: "https://github.com/orgs/quarkusio/projects/49" + short-description: | + This working group will define and implement a consistent and configurable lifecycle model for Dev Services. It will shift the startup to the correct phase, enable optional reuse across dev and test modes, and clarify teardown and sharing behavior. The goal is to improve the developer experience. + readme: | +

This working group was formed to address long-standing inconsistencies and pain points in the Dev Services lifecycle within Quarkus. Dev Services are essential for simplifying local development and testing by automatically provisioning runtime dependencies (e.g., databases, message brokers), but their current lifecycle behavior leads to confusion and inefficiencies. Most notably, they are started during the augmentation phase, which conflicts with their inherently runtime-oriented nature and causes issues with newer efforts such as the test classloading revamp.

+

The primary goal of this group is to define and implement a consistent, runtime-aligned lifecycle model for Dev Services. This includes shifting their startup to a phase after augmentation but before the application begins execution, ensuring better alignment with the runtime environment. A critical focus will also be on enabling optional reuse of Dev Services across dev and test modes — including reuse between repeated test executions — to reduce startup time and improve the iterative development experience.

+

The group's scope covers several strategic areas: formalizing when and how Dev Services are started, reused, or stopped; defining rules for discoverability and sharing between profiles or processes; and avoiding resource leaks or accidental retention. It explicitly excludes broader orchestration features (such as service dependency graphs) and unrelated feature enhancements.

+

The working group will produce a set of deliverables to support the new model. These include one or more Architecture Decision Records (ADRs) describing the new lifecycle model, the implementation of lifecycle logic in Quarkus Core, and updates to both user-facing and contributor documentation. Additionally, enhancements to the Dev Services development model will make it easier for extension authors to adopt and follow the new lifecycle standards. A public communication effort (e.g., blog posts or demos) will also be used to showcase the improvements.

+

The new API is described here: https://quarkus.io/blog/new-dev-services-api/

+ + status: on track + lts: false + completed: false + last-activity: 2026-07-10 + last-update-date: 2026-06-29 + last-update: | + The group migrated observability to the new dev service model. We also addressed the `ObservabilityJsonRPCService` failure that occurred when the LGTM dev service was disabled. + + (This status update was automatically generated using AI.) + point-of-contact: "@holly-cummins (@Holly Cummins on Zulip), @ozangunalp (@Ozan Günalp on Zulip )" + proposal: https://github.com/quarkusio/quarkus/discussions/47683 + discussion: https://quarkusio.zulipchat.com/#narrow/channel/187038-dev - title: "Binary Reproducibility" board-url: "https://github.com/orgs/quarkusio/projects/82" short-description: | diff --git a/_generated-doc/main/config/quarkus-all-config.adoc b/_generated-doc/main/config/quarkus-all-config.adoc index 76889564d95..e25227c4528 100644 --- a/_generated-doc/main/config/quarkus-all-config.adoc +++ b/_generated-doc/main/config/quarkus-all-config.adoc @@ -95105,6 +95105,31 @@ endif::add-copy-button-to-env-var[] |boolean |`+++false+++` +a| [[quarkus-rest-client-config_quarkus-rest-client-client-domain-socket]] [.property-path]##link:#quarkus-rest-client-config_quarkus-rest-client-client-domain-socket[`+++quarkus.rest-client."client".domain-socket+++`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.rest-client."client".domain-socket+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The path to a Unix domain socket. When set, the client connects to the server using a Unix domain socket instead of a network connection. The `url` or `uri` property is still required for the request path and HTTP `Host` header. + +Unix domain sockets are not available on Windows. + +This property is not applicable to the RESTEasy Client. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_REST_CLIENT__CLIENT__DOMAIN_SOCKET+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_REST_CLIENT__CLIENT__DOMAIN_SOCKET+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a| [[quarkus-rest-client-config_quarkus-rest-client-client-logging-scope]] [.property-path]##link:#quarkus-rest-client-config_quarkus-rest-client-client-logging-scope[`+++quarkus.rest-client."client".logging.scope+++`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.rest-client."client".logging.scope+++[] diff --git a/_generated-doc/main/config/quarkus-rest-client-config.adoc b/_generated-doc/main/config/quarkus-rest-client-config.adoc index b8ad96c9cd0..fa7907c8130 100644 --- a/_generated-doc/main/config/quarkus-rest-client-config.adoc +++ b/_generated-doc/main/config/quarkus-rest-client-config.adoc @@ -1717,6 +1717,31 @@ endif::add-copy-button-to-env-var[] |boolean |`+++false+++` +a| [[quarkus-rest-client-config_quarkus-rest-client-client-domain-socket]] [.property-path]##link:#quarkus-rest-client-config_quarkus-rest-client-client-domain-socket[`+++quarkus.rest-client."client".domain-socket+++`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.rest-client."client".domain-socket+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The path to a Unix domain socket. When set, the client connects to the server using a Unix domain socket instead of a network connection. The `url` or `uri` property is still required for the request path and HTTP `Host` header. + +Unix domain sockets are not available on Windows. + +This property is not applicable to the RESTEasy Client. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_REST_CLIENT__CLIENT__DOMAIN_SOCKET+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_REST_CLIENT__CLIENT__DOMAIN_SOCKET+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a| [[quarkus-rest-client-config_quarkus-rest-client-client-logging-scope]] [.property-path]##link:#quarkus-rest-client-config_quarkus-rest-client-client-logging-scope[`+++quarkus.rest-client."client".logging.scope+++`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.rest-client."client".logging.scope+++[] diff --git a/_generated-doc/main/config/quarkus-rest-client-config_quarkus.rest-client.adoc b/_generated-doc/main/config/quarkus-rest-client-config_quarkus.rest-client.adoc index b8ad96c9cd0..fa7907c8130 100644 --- a/_generated-doc/main/config/quarkus-rest-client-config_quarkus.rest-client.adoc +++ b/_generated-doc/main/config/quarkus-rest-client-config_quarkus.rest-client.adoc @@ -1717,6 +1717,31 @@ endif::add-copy-button-to-env-var[] |boolean |`+++false+++` +a| [[quarkus-rest-client-config_quarkus-rest-client-client-domain-socket]] [.property-path]##link:#quarkus-rest-client-config_quarkus-rest-client-client-domain-socket[`+++quarkus.rest-client."client".domain-socket+++`]## +ifdef::add-copy-button-to-config-props[] +config_property_copy_button:+++quarkus.rest-client."client".domain-socket+++[] +endif::add-copy-button-to-config-props[] + + +[.description] +-- +The path to a Unix domain socket. When set, the client connects to the server using a Unix domain socket instead of a network connection. The `url` or `uri` property is still required for the request path and HTTP `Host` header. + +Unix domain sockets are not available on Windows. + +This property is not applicable to the RESTEasy Client. + + +ifdef::add-copy-button-to-env-var[] +Environment variable: env_var_with_copy_button:+++QUARKUS_REST_CLIENT__CLIENT__DOMAIN_SOCKET+++[] +endif::add-copy-button-to-env-var[] +ifndef::add-copy-button-to-env-var[] +Environment variable: `+++QUARKUS_REST_CLIENT__CLIENT__DOMAIN_SOCKET+++` +endif::add-copy-button-to-env-var[] +-- +|string +| + a| [[quarkus-rest-client-config_quarkus-rest-client-client-logging-scope]] [.property-path]##link:#quarkus-rest-client-config_quarkus-rest-client-client-logging-scope[`+++quarkus.rest-client."client".logging.scope+++`]## ifdef::add-copy-button-to-config-props[] config_property_copy_button:+++quarkus.rest-client."client".logging.scope+++[] diff --git a/_includes/recent-posts-band.html b/_includes/recent-posts-band.html index 1cd2e0a6510..1103cb574c8 100644 --- a/_includes/recent-posts-band.html +++ b/_includes/recent-posts-band.html @@ -13,7 +13,7 @@
{{ post.title

{{ post.date | date: '%B %d, %Y' }}    Tags: {% for tag in post.tags %} - {{ tag }} + {{ tag | downcase }} {% endfor %}

diff --git a/_includes/spring-migrate-content.html b/_includes/spring-migrate-content.html index d96babecabe..10d886be737 100644 --- a/_includes/spring-migrate-content.html +++ b/_includes/spring-migrate-content.html @@ -21,6 +21,7 @@

Spring APIs that work on Quarkus, out of the box