This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-website.git


The following commit(s) were added to refs/heads/main by this push:
     new ef281f35 Blog: dependency updates across Camel 4.x releases (#1669)
ef281f35 is described below

commit ef281f35d78873d94fea0506b5162b4f8a586375
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jun 18 11:58:02 2026 +0200

    Blog: dependency updates across Camel 4.x releases (#1669)
    
    * chore: blog post on dependency updates across Camel 4.x releases
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * ci: fix preview URL extraction in netlify deploy workflow
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
---
 .github/workflows/preview.yaml                     |   4 +-
 .../2026/06/camel-dependency-updates/featured.svg  | 111 +++++++++++++++
 .../blog/2026/06/camel-dependency-updates/index.md | 156 +++++++++++++++++++++
 3 files changed, 270 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/preview.yaml b/.github/workflows/preview.yaml
index ed24701c..2a8cccb0 100644
--- a/.github/workflows/preview.yaml
+++ b/.github/workflows/preview.yaml
@@ -63,7 +63,9 @@ jobs:
           PR_NUMBER=${PR_NUMBER//[^0-9]/}
           PR_URL="https://github.com/apache/camel-website/pull/${PR_NUMBER}";
           yarn install
-          DEPLOY_URL=$(yarn preview:netlify --alias="pr-${PR_NUMBER}" 
--message="Preview for ${PR_URL}" --json 2> /dev/null |jq -r .deploy_url)
+          DEPLOY_OUTPUT=$(yarn preview:netlify --alias="pr-${PR_NUMBER}" 
--message="Preview for ${PR_URL}" --json)
+          echo "Deploy output: $DEPLOY_OUTPUT"
+          DEPLOY_URL=$(echo "$DEPLOY_OUTPUT" | jq -r '.deploy_ssl_url // 
.deploy_url // .url // empty')
           echo "DEPLOY_URL=${DEPLOY_URL}" >> $GITHUB_ENV
           echo "ISSUE_NUMBER=${PR_NUMBER}" >> $GITHUB_ENV
       - uses: actions/github-script@v7
diff --git a/content/blog/2026/06/camel-dependency-updates/featured.svg 
b/content/blog/2026/06/camel-dependency-updates/featured.svg
new file mode 100644
index 00000000..ae9ea881
--- /dev/null
+++ b/content/blog/2026/06/camel-dependency-updates/featured.svg
@@ -0,0 +1,111 @@
+<svg xmlns="http://www.w3.org/2000/svg"; viewBox="0 0 800 450" 
font-family="'Segoe UI', Arial, sans-serif">
+  <defs>
+    <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
+      <stop offset="0%" style="stop-color:#1a1a2e"/>
+      <stop offset="100%" style="stop-color:#16213e"/>
+    </linearGradient>
+    <linearGradient id="bar" x1="0%" y1="0%" x2="0%" y2="100%">
+      <stop offset="0%" style="stop-color:#e8792f"/>
+      <stop offset="100%" style="stop-color:#c4611a"/>
+    </linearGradient>
+    <linearGradient id="barAdd" x1="0%" y1="0%" x2="0%" y2="100%">
+      <stop offset="0%" style="stop-color:#4ade80"/>
+      <stop offset="100%" style="stop-color:#22c55e"/>
+    </linearGradient>
+    <filter id="glow">
+      <feGaussianBlur stdDeviation="2" result="blur"/>
+      <feMerge>
+        <feMergeNode in="blur"/>
+        <feMergeNode in="SourceGraphic"/>
+      </feMerge>
+    </filter>
+  </defs>
+
+  <!-- Background -->
+  <rect width="800" height="450" fill="url(#bg)"/>
+
+  <!-- Subtle grid -->
+  <g opacity="0.04" stroke="#fff" stroke-width="0.5">
+    <line x1="0" y1="100" x2="800" y2="100"/>
+    <line x1="0" y1="150" x2="800" y2="150"/>
+    <line x1="0" y1="200" x2="800" y2="200"/>
+    <line x1="0" y1="250" x2="800" y2="250"/>
+    <line x1="0" y1="300" x2="800" y2="300"/>
+    <line x1="0" y1="350" x2="800" y2="350"/>
+  </g>
+
+  <!-- Title -->
+  <text x="400" y="32" text-anchor="middle" fill="#ffffff" font-size="16" 
font-weight="600" letter-spacing="1" opacity="0.9">APACHE CAMEL — DEPENDENCY 
UPDATES</text>
+
+  <!-- Main hero number -->
+  <g transform="translate(400, 105)" filter="glow">
+    <text x="0" y="0" text-anchor="middle" fill="#e8792f" font-size="64" 
font-weight="bold">2,449</text>
+    <text x="0" y="28" text-anchor="middle" fill="#8899bb" font-size="15" 
font-weight="500" letter-spacing="1">DEPENDENCY VERSION UPDATES</text>
+    <text x="0" y="48" text-anchor="middle" fill="#667799" font-size="13" 
letter-spacing="0.5">ACROSS 20 MINOR RELEASES (4.0 → 4.20)</text>
+  </g>
+
+  <!-- Bar chart: dependency updates per release -->
+  <!-- Chart area: x=60..740, y=170..350, max height=170 for value 173 -->
+  <g transform="translate(60, 350)">
+    <!-- Bars (scaled: max 173 -> height 150) -->
+    <rect x="6"   y="-56"  width="28" height="56"  fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="40"  y="-48"  width="28" height="48"  fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="74"  y="-113" width="28" height="113" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="108" y="-114" width="28" height="114" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="142" y="-83"  width="28" height="83"  fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="176" y="-106" width="28" height="106" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="210" y="-132" width="28" height="132" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="244" y="-134" width="28" height="134" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="278" y="-150" width="28" height="150" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="312" y="-134" width="28" height="134" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="346" y="-103" width="28" height="103" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="380" y="-128" width="28" height="128" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="414" y="-88"  width="28" height="88"  fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="448" y="-104" width="28" height="104" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="482" y="-116" width="28" height="116" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="516" y="-102" width="28" height="102" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="550" y="-122" width="28" height="122" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="584" y="-106" width="28" height="106" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="618" y="-134" width="28" height="134" fill="url(#bar)" rx="2" 
opacity="0.9"/>
+    <rect x="652" y="-50"  width="28" height="50"  fill="url(#bar)" rx="2" 
opacity="0.9"/>
+
+    <!-- Version labels (every other) -->
+    <text x="20"  y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.1</text>
+    <text x="88"  y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.3</text>
+    <text x="156" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.5</text>
+    <text x="224" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.7</text>
+    <text x="292" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.9</text>
+    <text x="360" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.11</text>
+    <text x="428" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.13</text>
+    <text x="496" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.15</text>
+    <text x="564" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.17</text>
+    <text x="632" y="14" text-anchor="middle" fill="#667799" 
font-size="8">4.19</text>
+
+    <!-- Peak label -->
+    <text x="292" y="-155" text-anchor="middle" fill="#4ade80" font-size="11" 
font-weight="bold">173</text>
+  </g>
+
+  <!-- Bottom stats row -->
+  <g transform="translate(0, 385)">
+    <line x1="50" y1="0" x2="750" y2="0" stroke="#2a3a5e" stroke-width="1"/>
+
+    <text x="133" y="30" text-anchor="middle" fill="#e8792f" font-size="22" 
font-weight="bold">122</text>
+    <text x="133" y="48" text-anchor="middle" fill="#667799" 
font-size="11">AVG PER RELEASE</text>
+
+    <line x1="265" y1="12" x2="265" y2="52" stroke="#2a3a5e" stroke-width="1"/>
+
+    <text x="400" y="30" text-anchor="middle" fill="#4ade80" font-size="22" 
font-weight="bold">415 → 507</text>
+    <text x="400" y="48" text-anchor="middle" fill="#667799" 
font-size="11">TOTAL DEPENDENCIES</text>
+
+    <line x1="535" y1="12" x2="535" y2="52" stroke="#2a3a5e" stroke-width="1"/>
+
+    <text x="665" y="30" text-anchor="middle" fill="#60a5fa" font-size="22" 
font-weight="bold">20</text>
+    <text x="665" y="48" text-anchor="middle" fill="#667799" 
font-size="11">MINOR RELEASES</text>
+  </g>
+
+  <!-- Small camel silhouette watermark -->
+  <g transform="translate(720, 8)" opacity="0.15">
+    <path d="M0,22 Q5,8 12,10 Q15,2 22,5 Q28,0 32,6 L38,10 Q42,8 45,12 L48,22 
L44,22 L42,16 L38,22 L28,22 L26,16 L22,22 L12,22 L10,16 L6,22 Z"
+          fill="#e8792f"/>
+  </g>
+</svg>
diff --git a/content/blog/2026/06/camel-dependency-updates/index.md 
b/content/blog/2026/06/camel-dependency-updates/index.md
new file mode 100644
index 00000000..2382a968
--- /dev/null
+++ b/content/blog/2026/06/camel-dependency-updates/index.md
@@ -0,0 +1,156 @@
+---
+title: "The Hidden Work: 2,449 Dependency Updates Across 20 Apache Camel 
Releases"
+date: 2026-06-18
+draft: false
+authors: [davsclaus]
+categories: ["Community"]
+preview: "Apache Camel manages 500+ third-party dependencies. Over 20 minor 
releases and 38 LTS patch releases, the community made 2,890 dependency version 
updates — quiet, invisible work that keeps the framework secure and compatible."
+---
+
+Every Apache Camel release ships new features and bug fixes — and those get 
the headlines. But behind every release there is a quieter effort that rarely 
gets mentioned: **keeping 500+ third-party dependencies current**.
+
+We compared the `parent/pom.xml` across every Camel 4.x minor release — from 
4.0.0 to 4.20.0 — and counted every dependency version that changed. Here is 
what we found.
+
+## 2,449 dependency updates across 20 releases
+
+Every minor release updates a significant portion of the dependency tree. The 
average is **122 dependency version updates per release** — roughly a quarter 
of all managed dependencies.
+
+| Release | Date | Updated | Added | Removed | Total Deps |
+|---------|------|---------|-------|---------|------------|
+| 4.0.0 → 4.1.0 | Oct 2023 | 65 | 2 | 4 | 413 |
+| 4.1.0 → 4.2.0 | Nov 2023 | 55 | 3 | 1 | 415 |
+| 4.2.0 → 4.3.0 | Dec 2023 | 130 | 0 | 0 | 415 |
+| 4.3.0 → 4.4.0 | Feb 2024 | 132 | 8 | 2 | 421 |
+| 4.4.0 → 4.5.0 | Mar 2024 | 96 | 7 | 1 | 427 |
+| 4.5.0 → 4.6.0 | May 2024 | 122 | 3 | 2 | 428 |
+| 4.6.0 → 4.7.0 | Jul 2024 | 152 | 5 | 4 | 429 |
+| 4.7.0 → 4.8.0 | Sep 2024 | 154 | 7 | 0 | 436 |
+| 4.8.0 → 4.9.0 | Nov 2024 | 173 | 20 | 3 | 453 |
+| 4.9.0 → 4.10.0 | Feb 2025 | 155 | 3 | 5 | 451 |
+| 4.10.0 → 4.11.0 | Mar 2025 | 119 | 11 | 4 | 458 |
+| 4.11.0 → 4.12.0 | May 2025 | 148 | 6 | 1 | 463 |
+| 4.12.0 → 4.13.0 | Jul 2025 | 102 | 7 | 2 | 468 |
+| 4.13.0 → 4.14.0 | Aug 2025 | 120 | 2 | 0 | 470 |
+| 4.14.0 → 4.15.0 | Oct 2025 | 134 | 5 | 1 | 474 |
+| 4.15.0 → 4.16.0 | Nov 2025 | 117 | 6 | 0 | 480 |
+| 4.16.0 → 4.17.0 | Jan 2026 | 141 | 11 | 1 | 490 |
+| 4.17.0 → 4.18.0 | Feb 2026 | 122 | 5 | 0 | 495 |
+| 4.18.0 → 4.19.0 | Apr 2026 | 154 | 15 | 4 | 506 |
+| 4.19.0 → 4.20.0 | Apr 2026 | 58 | 1 | 0 | 507 |
+| **Total** | | **2,449** | **127** | **35** | |
+
+The 4.8.0 → 4.9.0 release had the highest activity: **173 updated** and **20 
added** — reflecting the wave of new AI and cloud connectors entering the 
project during that period.
+
+## The dependency footprint grew 22%
+
+Camel 4.0.0 managed **415** third-party dependency versions. By 4.20.0 that 
number is **507** — a 22% increase across 20 releases. That growth comes from 
new connectors (AI, MCP, document processing, cloud services) each bringing 
their own dependency trees.
+
+The net growth of **92 dependencies** (127 added, 35 removed) shows the 
community also prunes — replacing deprecated libraries, consolidating 
duplicates, and dropping abandoned projects.
+
+## LTS patch branches: manual, targeted updates
+
+The minor release numbers tell one story. The LTS patch branches tell another 
— and in some ways a more impressive one.
+
+Apache Camel maintains multiple Long-Term Support (LTS) release lines 
simultaneously, each receiving patch releases for approximately one year. On 
these branches, dependency updates are not bulk upgrades — they are 
**deliberate, targeted changes**: CVE fixes, Spring Boot patch release 
alignments, and known dependency bug fixes that affect users. None of this is 
automated. Every update is hand-picked, reviewed, and tested.
+
+Here is the full LTS patch history for Camel 4.x:
+
+### 4.0.x LTS (6 patch releases)
+
+| Release | Date | Updated |
+|---------|------|---------|
+| 4.0.0 → 4.0.1 | Sep 2023 | 11 |
+| 4.0.1 → 4.0.2 | Oct 2023 | 19 |
+| 4.0.2 → 4.0.3 | Nov 2023 | 4 |
+| 4.0.3 → 4.0.4 | Jan 2024 | 8 |
+| 4.0.4 → 4.0.5 | Apr 2024 | 10 |
+| 4.0.5 → 4.0.6 | Aug 2024 | 5 |
+| **Total** | | **57** |
+
+### 4.4.x LTS (5 patch releases)
+
+| Release | Date | Updated |
+|---------|------|---------|
+| 4.4.0 → 4.4.1 | Mar 2024 | 8 |
+| 4.4.1 → 4.4.2 | Apr 2024 | 8 |
+| 4.4.2 → 4.4.3 | Jun 2024 | 24 |
+| 4.4.3 → 4.4.4 | Oct 2024 | 34 |
+| 4.4.4 → 4.4.5 | Jan 2025 | 13 |
+| **Total** | | **87** |
+
+### 4.8.x LTS (9 patch releases)
+
+| Release | Date | Updated |
+|---------|------|---------|
+| 4.8.0 → 4.8.1 | Oct 2024 | 16 |
+| 4.8.1 → 4.8.2 | Dec 2024 | 15 |
+| 4.8.2 → 4.8.3 | Jan 2025 | 13 |
+| 4.8.3 → 4.8.4 | Feb 2025 | 11 |
+| 4.8.4 → 4.8.5 | Mar 2025 | 0 |
+| 4.8.5 → 4.8.6 | Mar 2025 | 11 |
+| 4.8.6 → 4.8.7 | May 2025 | 6 |
+| 4.8.7 → 4.8.8 | Jun 2025 | 11 |
+| 4.8.8 → 4.8.9 | Sep 2025 | 0 |
+| **Total** | | **83** |
+
+### 4.10.x LTS (9 patch releases)
+
+| Release | Date | Updated |
+|---------|------|---------|
+| 4.10.0 → 4.10.1 | Feb 2025 | 10 |
+| 4.10.1 → 4.10.2 | Mar 2025 | 3 |
+| 4.10.2 → 4.10.3 | Mar 2025 | 9 |
+| 4.10.3 → 4.10.4 | Apr 2025 | 14 |
+| 4.10.4 → 4.10.5 | May 2025 | 13 |
+| 4.10.5 → 4.10.6 | Jun 2025 | 10 |
+| 4.10.6 → 4.10.7 | Sep 2025 | 20 |
+| 4.10.7 → 4.10.8 | Dec 2025 | 18 |
+| 4.10.8 → 4.10.9 | Feb 2026 | 7 |
+| **Total** | | **104** |
+
+### 4.14.x LTS (7 patch releases, active)
+
+| Release | Date | Updated |
+|---------|------|---------|
+| 4.14.0 → 4.14.1 | Sep 2025 | 11 |
+| 4.14.1 → 4.14.2 | Oct 2025 | 20 |
+| 4.14.2 → 4.14.3 | Dec 2025 | 7 |
+| 4.14.3 → 4.14.4 | Jan 2026 | 8 |
+| 4.14.4 → 4.14.5 | Feb 2026 | 3 |
+| 4.14.5 → 4.14.6 | Apr 2026 | 30 |
+| 4.14.6 → 4.14.7 | Apr 2026 | 0 |
+| **Total** | | **79** |
+
+### 4.18.x LTS (2 patch releases, active)
+
+| Release | Date | Updated |
+|---------|------|---------|
+| 4.18.0 → 4.18.1 | Mar 2026 | 23 |
+| 4.18.1 → 4.18.2 | Apr 2026 | 8 |
+| **Total** | | **31** |
+
+### LTS totals
+
+Across all six LTS lines: **441 targeted dependency updates** in **38 patch 
releases** — every single one reviewed and tested manually.
+
+These are not the broad sweeps of a minor release where everything gets 
bumped. These are selective, risk-aware updates where the maintainers evaluate 
each change: does this CVE affect Camel? Does this Spring Boot patch break 
compatibility? Is this dependency bug worth the risk of updating on a stable 
branch?
+
+## Why this matters
+
+Outdated dependencies are the most common source of security vulnerabilities 
in Java projects. Every CVE in a transitive dependency is a potential exposure 
for every user. When the Log4Shell vulnerability hit in December 2021, projects 
that had fallen behind on dependency updates faced emergency scrambles. 
Projects that kept current were patched within days.
+
+Camel's approach is systematic: dependencies are updated **every release 
cycle**, not in occasional bulk upgrades. This means:
+
+- **Security patches land quickly.** When a dependency publishes a CVE fix, it 
typically reaches the next Camel release — not months later.
+- **No big-bang upgrades.** Updating 120 dependencies every 6–8 weeks is 
manageable. Updating 400 dependencies after a year of neglect is not.
+- **Compatibility stays tested.** Each incremental update gets the full test 
suite — 22,000 test files across 350+ connectors.
+
+## The invisible maintenance tax
+
+These 2,890 updates — 2,449 on minor releases plus 441 hand-picked patches on 
LTS branches — don't show up in release notes. They don't get conference talks. 
They are the kind of work that only gets noticed when it stops happening — when 
a downstream user runs a security scan and discovers they're three versions 
behind on a library with a known CVE.
+
+For a framework that manages 500+ dependencies across 350+ connectors, keeping 
the dependency tree current is a substantial, ongoing commitment. It is also 
one of the most important things the Apache Camel community does.
+
+## The data is public
+
+All numbers in this post were computed by comparing the `parent/pom.xml` 
across [git tags](https://github.com/apache/camel/tags) in the [Apache Camel 
repository](https://github.com/apache/camel). The `parent/pom.xml` file 
contains all managed dependency versions for the project — anyone can reproduce 
these numbers with `git show <tag>:parent/pom.xml` and a diff.

Reply via email to