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

hubcio pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iggy.git


The following commit(s) were added to refs/heads/master by this push:
     new 0928f1373 chore(repo): drop DEPENDENCIES.md per ASF policy (#3222)
0928f1373 is described below

commit 0928f1373d61dab83e409baef68f4a32646adcff
Author: Hubert Gruszecki <[email protected]>
AuthorDate: Sat May 9 14:09:35 2026 +0200

    chore(repo): drop DEPENDENCIES.md per ASF policy (#3222)
---
 .dockerignore                                      |   11 +-
 .github/actions/utils/docker-buildx/action.yml     |    7 +-
 .../utils/validate-third-party-licenses/action.yml |   79 ++
 .github/workflows/_build_python_wheels.yml         |   25 +
 .github/workflows/_common.yml                      |   29 +-
 .github/workflows/publish.yml                      |   19 +-
 .gitignore                                         |    2 +
 .pre-commit-config.yaml                            |    8 -
 DEPENDENCIES.md                                    | 1281 --------------------
 NOTICE                                             |    7 -
 about.hbs                                          |   23 +
 about.toml                                         |   91 ++
 core/ai/mcp/Dockerfile                             |   16 +-
 core/bench/dashboard/server/Dockerfile             |   10 +
 core/clock/Cargo.toml                              |    1 +
 core/connectors/runtime/Dockerfile                 |   16 +-
 core/server/Dockerfile                             |   40 +-
 core/shard/Cargo.toml                              |    1 +
 core/simulator/Cargo.toml                          |    1 +
 foreign/csharp/DEPENDENCIES.md                     |   17 -
 foreign/csharp/Iggy_SDK.sln                        |    1 -
 foreign/csharp/Iggy_SDK/Iggy_SDK.csproj            |    4 +-
 foreign/csharp/NOTICE                              |    7 -
 foreign/go/NOTICE                                  |    7 -
 foreign/java/NOTICE                                |    7 -
 foreign/node/NOTICE                                |    7 -
 foreign/node/package.json                          |    4 +-
 foreign/python/NOTICE                              |    7 -
 foreign/python/pyproject.toml                      |    9 +
 justfile                                           |    6 -
 scripts/ci/licenses-list.sh                        |  100 --
 scripts/ci/render-node-licenses.mjs                |  225 ++++
 scripts/ci/third-party-licenses.sh                 |  269 ++++
 scripts/prepare-release.sh                         |    3 +-
 web/.dockerignore                                  |    3 +-
 web/Dockerfile                                     |   32 +-
 web/LICENSE                                        |  201 ---
 web/NOTICE                                         |   19 -
 web/package-lock.json                              |    7 -
 web/package.json                                   |    1 -
 40 files changed, 879 insertions(+), 1724 deletions(-)

diff --git a/.dockerignore b/.dockerignore
index 6cb739480..02100b387 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -11,7 +11,16 @@
 /licenses
 /local_data
 /performance_results
-/scripts
+# Selectively exclude scripts/ subdirs not needed in container builds.
+# scripts/ci/third-party-licenses.sh + render-node-licenses.mjs are
+# required by the convenience-binary Dockerfiles to render LICENSE-binary
+# at build time.
+/scripts/dashboard
+/scripts/performance
+/scripts/*.sh
+/scripts/ci/*
+!/scripts/ci/third-party-licenses.sh
+!/scripts/ci/render-node-licenses.mjs
 **/target
 /target
 !/target/debug/iggy
diff --git a/.github/actions/utils/docker-buildx/action.yml 
b/.github/actions/utils/docker-buildx/action.yml
index f5c066817..b76b5c8ec 100644
--- a/.github/actions/utils/docker-buildx/action.yml
+++ b/.github/actions/utils/docker-buildx/action.yml
@@ -331,12 +331,7 @@ runs:
       id: ctx
       shell: bash
       run: |
-        # For web-ui, the context should be the web directory
-        if [ "${{ inputs.component }}" = "web-ui" ]; then
-          context="web"
-        else
-          context="${{ inputs.context }}"
-        fi
+        context="${{ inputs.context }}"
         echo "context=$context" >> "$GITHUB_OUTPUT"
         echo "📁 Build context: $context"
 
diff --git a/.github/actions/utils/validate-third-party-licenses/action.yml 
b/.github/actions/utils/validate-third-party-licenses/action.yml
new file mode 100644
index 000000000..711bbf2fb
--- /dev/null
+++ b/.github/actions/utils/validate-third-party-licenses/action.yml
@@ -0,0 +1,79 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Run the per-artifact third-party license validation matrix that ASF
+# release policy requires for convenience binaries (Docker images, PyPI
+# wheels). Single source of truth shared by the pre-merge gate
+# (.github/workflows/_common.yml) and the release gate
+# (.github/workflows/publish.yml). Adding a new convenience artifact
+# means adding ONE step here, never two.
+
+name: validate-third-party-licenses
+description: Validate every published artifact's bundled third-party licenses 
against the ASF accept list.
+inputs:
+  node-version:
+    description: "Node.js version used by the npm path"
+    required: false
+    default: "23"
+
+runs:
+  using: composite
+  steps:
+    - name: Setup Node.js
+      uses: actions/setup-node@v6
+      with:
+        node-version: ${{ inputs.node-version }}
+
+    - name: Setup Rust with cache
+      uses: ./.github/actions/utils/setup-rust-with-cache
+      with:
+        read-cache: "false"
+
+    - name: Install cargo-about
+      shell: bash
+      run: |
+        TARGET="$(uname -m)-unknown-linux-musl"
+        curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+          | tar -xz -C "$HOME/.cargo/bin" --strip-components=1 \
+              "cargo-about-0.9.0-${TARGET}/cargo-about"
+
+    - name: Validate apache/iggy bundle (server + CLI + embedded web)
+      shell: bash
+      run: ./scripts/ci/third-party-licenses.sh --validate
+           --manifest core/server/Cargo.toml
+           --manifest core/cli/Cargo.toml
+           --manifest web
+
+    - name: Validate iggy-mcp bundle
+      shell: bash
+      run: ./scripts/ci/third-party-licenses.sh --validate --manifest 
core/ai/mcp/Cargo.toml
+
+    - name: Validate iggy-bench-dashboard bundle
+      shell: bash
+      run: ./scripts/ci/third-party-licenses.sh --validate --manifest 
core/bench/dashboard/server/Cargo.toml
+
+    - name: Validate iggy-connect bundle
+      shell: bash
+      run: ./scripts/ci/third-party-licenses.sh --validate --manifest 
core/connectors/runtime/Cargo.toml
+
+    - name: Validate Python wheel bundle
+      shell: bash
+      run: ./scripts/ci/third-party-licenses.sh --validate --manifest 
foreign/python/Cargo.toml
+
+    - name: Validate web UI bundle
+      shell: bash
+      run: ./scripts/ci/third-party-licenses.sh --validate --manifest web
diff --git a/.github/workflows/_build_python_wheels.yml 
b/.github/workflows/_build_python_wheels.yml
index ce83f497c..ca698c26e 100644
--- a/.github/workflows/_build_python_wheels.yml
+++ b/.github/workflows/_build_python_wheels.yml
@@ -87,6 +87,13 @@ jobs:
       - name: Setup Rust with cache
         uses: ./.github/actions/utils/setup-rust-with-cache
 
+      - name: Generate third-party license manifest
+        run: |
+          TARGET="$(uname -m)-unknown-linux-musl"
+          curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+            | tar -xz -C "$HOME/.cargo/bin" --strip-components=1 
"cargo-about-0.9.0-${TARGET}/cargo-about"
+          ./scripts/ci/third-party-licenses.sh --generate --manifest 
foreign/python/Cargo.toml --output foreign/python/LICENSE-binary
+
       - name: Build wheels
         uses: PyO3/maturin-action@v1
         with:
@@ -139,6 +146,24 @@ jobs:
         with:
           python-version: "3.11"
 
+      - name: Setup Rust with cache
+        uses: ./.github/actions/utils/setup-rust-with-cache
+
+      - name: Generate third-party license manifest
+        run: |
+          # Embark Studios releases an aarch64-apple-darwin tarball but
+          # NOT x86_64-apple-darwin (404 as of 0.9.0). Intel macOS
+          # falls back to compiling cargo-about from source.
+          ARCH="$(uname -m | sed 's/arm64/aarch64/')"
+          if [ "$ARCH" = "aarch64" ]; then
+            TARGET="aarch64-apple-darwin"
+            curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+              | tar -xz -C "$HOME/.cargo/bin" --strip-components=1 
"cargo-about-0.9.0-${TARGET}/cargo-about"
+          else
+            cargo install cargo-about --locked --version 0.9.0 --features cli
+          fi
+          ./scripts/ci/third-party-licenses.sh --generate --manifest 
foreign/python/Cargo.toml --output foreign/python/LICENSE-binary
+
       - name: Build wheels
         uses: PyO3/maturin-action@v1
         with:
diff --git a/.github/workflows/_common.yml b/.github/workflows/_common.yml
index 4654a01cc..4c9181646 100644
--- a/.github/workflows/_common.yml
+++ b/.github/workflows/_common.yml
@@ -154,21 +154,12 @@ jobs:
       - name: Check Apache license headers
         run: ./scripts/ci/license-headers.sh --check
 
-  license-list:
-    name: Check licenses list
+  third-party-licenses:
+    name: Validate third-party licenses
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v6
-
-      - name: Setup Rust toolchain
-        uses: ./.github/actions/utils/setup-rust-with-cache
-        with:
-          read-cache: "false"
-
-      - name: Install cargo-license
-        run: cargo install cargo-license
-
-      - run: ./scripts/ci/licenses-list.sh --check
+      - uses: ./.github/actions/utils/validate-third-party-licenses
 
   markdown:
     name: Markdown lint
@@ -280,7 +271,7 @@ jobs:
         version-consistency,
         pr-title,
         license-headers,
-        license-list,
+        third-party-licenses,
         markdown,
         shellcheck,
         trailing-whitespace,
@@ -320,7 +311,7 @@ jobs:
           PYTHON_VERSIONS="${{ needs.python-versions.result }}"
           VERSION_CONSISTENCY="${{ needs.version-consistency.result }}"
           LICENSE_HEADERS="${{ needs.license-headers.result }}"
-          LICENSE_LIST="${{ needs.license-list.result }}"
+          THIRD_PARTY_LICENSES="${{ needs.third-party-licenses.result }}"
           MARKDOWN="${{ needs.markdown.result }}"
 
           if [ "$RUST_VERSIONS" = "success" ]; then
@@ -355,12 +346,12 @@ jobs:
             echo "| ⏭️ License Headers | $LICENSE_HEADERS | Check skipped |" 
>> $GITHUB_STEP_SUMMARY
           fi
 
-          if [ "$LICENSE_LIST" = "success" ]; then
-            echo "| ✅ License List | success | Dependencies licenses validated 
|" >> $GITHUB_STEP_SUMMARY
-          elif [ "$LICENSE_LIST" = "failure" ]; then
-            echo "| ❌ License List | failure | License list needs update |" >> 
$GITHUB_STEP_SUMMARY
+          if [ "$THIRD_PARTY_LICENSES" = "success" ]; then
+            echo "| ✅ Third-Party Licenses | success | All deps in about.toml 
accept list |" >> $GITHUB_STEP_SUMMARY
+          elif [ "$THIRD_PARTY_LICENSES" = "failure" ]; then
+            echo "| ❌ Third-Party Licenses | failure | Disallowed license 
detected (see job log) |" >> $GITHUB_STEP_SUMMARY
           else
-            echo "| ⏭️ License List | $LICENSE_LIST | Check skipped |" >> 
$GITHUB_STEP_SUMMARY
+            echo "| ⏭️ Third-Party Licenses | $THIRD_PARTY_LICENSES | Check 
skipped |" >> $GITHUB_STEP_SUMMARY
           fi
 
           if [ "$MARKDOWN" = "success" ]; then
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index a4b2fd014..c8a29a088 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -235,9 +235,25 @@ jobs:
           echo "Commit details:"
           git log -1 --pretty=format:"  Author: %an <%ae>%n  Date: %ad%n  
Subject: %s" "$COMMIT"
 
+  validate-licenses:
+    name: Validate third-party licenses (release gate)
+    needs: validate
+    runs-on: ubuntu-latest
+    # Re-runs the same per-artifact validation that pre-merge enforces,
+    # against the resolved release commit. Tags can point at commits
+    # older than the pre-merge gate, or be created via direct push that
+    # bypassed PR review, so a release-time gate is required to keep the
+    # policy contract intact. Composite action is shared with
+    # .github/workflows/_common.yml.
+    steps:
+      - uses: actions/checkout@v6
+        with:
+          ref: ${{ needs.validate.outputs.commit }}
+      - uses: ./.github/actions/utils/validate-third-party-licenses
+
   plan:
     name: Build publish plan
-    needs: validate
+    needs: [validate, validate-licenses]
     if: needs.validate.outputs.has_targets == 'true'
     runs-on: ubuntu-latest
     outputs:
@@ -1294,6 +1310,7 @@ jobs:
     needs:
       [
         validate,
+        validate-licenses,
         plan,
         check-tags,
         build-python-wheels,
diff --git a/.gitignore b/.gitignore
index 7c8d4d1dd..f0d8b6250 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,5 @@ foreign/node/.npm
 *.out
 go.work
 core/bench/dashboard/frontend/dist
+LICENSE-binary
+**/LICENSE-binary
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 907f52332..8e7909a54 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -63,14 +63,6 @@ repos:
         language: system
         pass_filenames: false
 
-      - id: licenses-list
-        name: licenses list
-        entry: ./scripts/ci/licenses-list.sh
-        args: ["--fix"]
-        language: system
-        files: ^Cargo\.lock$
-        pass_filenames: false
-
       - id: rust-version-sync
         name: rust version sync
         entry: ./scripts/ci/sync-rust-version.sh
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
deleted file mode 100644
index e3120c36e..000000000
--- a/DEPENDENCIES.md
+++ /dev/null
@@ -1,1281 +0,0 @@
-# Dependencies
-
-actix-codec: 0.5.2, "Apache-2.0 OR MIT",
-actix-cors: 0.7.1, "Apache-2.0 OR MIT",
-actix-files: 0.6.10, "Apache-2.0 OR MIT",
-actix-http: 3.12.1, "Apache-2.0 OR MIT",
-actix-macros: 0.2.4, "Apache-2.0 OR MIT",
-actix-router: 0.5.4, "Apache-2.0 OR MIT",
-actix-rt: 2.11.0, "Apache-2.0 OR MIT",
-actix-server: 2.6.0, "Apache-2.0 OR MIT",
-actix-service: 2.0.3, "Apache-2.0 OR MIT",
-actix-utils: 3.0.1, "Apache-2.0 OR MIT",
-actix-web: 4.13.0, "Apache-2.0 OR MIT",
-actix-web-codegen: 4.3.0, "Apache-2.0 OR MIT",
-adler2: 2.0.1, "0BSD OR Apache-2.0 OR MIT",
-aead: 0.5.2, "Apache-2.0 OR MIT",
-aes: 0.8.4, "Apache-2.0 OR MIT",
-aes-gcm: 0.10.3, "Apache-2.0 OR MIT",
-ahash: 0.7.8, "Apache-2.0 OR MIT",
-ahash: 0.8.12, "Apache-2.0 OR MIT",
-aho-corasick: 1.1.4, "MIT OR Unlicense",
-aligned: 0.4.3, "Apache-2.0 OR MIT",
-aligned-vec: 0.6.4, "MIT",
-alloc-no-stdlib: 2.0.4, "BSD-3-Clause",
-alloc-stdlib: 0.2.2, "BSD-3-Clause",
-allocator-api2: 0.2.21, "Apache-2.0 OR MIT",
-android_system_properties: 0.1.5, "Apache-2.0 OR MIT",
-anstream: 1.0.0, "Apache-2.0 OR MIT",
-anstyle: 1.0.14, "Apache-2.0 OR MIT",
-anstyle-parse: 1.0.0, "Apache-2.0 OR MIT",
-anstyle-query: 1.1.5, "Apache-2.0 OR MIT",
-anstyle-wincon: 3.0.11, "Apache-2.0 OR MIT",
-anyhow: 1.0.102, "Apache-2.0 OR MIT",
-apache-avro: 0.21.0, "Apache-2.0",
-ar_archive_writer: 0.5.1, "Apache-2.0 WITH LLVM-exception",
-arbitrary: 1.4.2, "Apache-2.0 OR MIT",
-arc-swap: 1.9.1, "Apache-2.0 OR MIT",
-arg_enum_proc_macro: 0.3.4, "MIT",
-argon2: 0.5.3, "Apache-2.0 OR MIT",
-array-init: 2.1.0, "Apache-2.0 OR MIT",
-arrayref: 0.3.9, "BSD-2-Clause",
-arrayvec: 0.7.6, "Apache-2.0 OR MIT",
-arrow: 58.2.0, "Apache-2.0",
-arrow-arith: 57.3.0, "Apache-2.0",
-arrow-arith: 58.2.0, "Apache-2.0",
-arrow-array: 57.3.0, "Apache-2.0",
-arrow-array: 58.2.0, "Apache-2.0 AND MIT",
-arrow-buffer: 57.3.0, "Apache-2.0",
-arrow-buffer: 58.2.0, "Apache-2.0",
-arrow-cast: 57.3.0, "Apache-2.0",
-arrow-cast: 58.2.0, "Apache-2.0",
-arrow-csv: 58.2.0, "Apache-2.0",
-arrow-data: 57.3.0, "Apache-2.0",
-arrow-data: 58.2.0, "Apache-2.0",
-arrow-ipc: 57.3.0, "Apache-2.0",
-arrow-ipc: 58.2.0, "Apache-2.0",
-arrow-json: 57.3.0, "Apache-2.0",
-arrow-json: 58.2.0, "Apache-2.0",
-arrow-ord: 57.3.0, "Apache-2.0",
-arrow-ord: 58.2.0, "Apache-2.0",
-arrow-row: 58.2.0, "Apache-2.0",
-arrow-schema: 57.3.0, "Apache-2.0",
-arrow-schema: 58.2.0, "Apache-2.0",
-arrow-select: 57.3.0, "Apache-2.0",
-arrow-select: 58.2.0, "Apache-2.0",
-arrow-string: 57.3.0, "Apache-2.0",
-arrow-string: 58.2.0, "Apache-2.0",
-as-any: 0.3.2, "Apache-2.0 OR MIT",
-as-slice: 0.2.1, "Apache-2.0 OR MIT",
-asn1-rs: 0.7.1, "Apache-2.0 OR MIT",
-asn1-rs-derive: 0.6.0, "Apache-2.0 OR MIT",
-asn1-rs-impl: 0.2.0, "Apache-2.0 OR MIT",
-assert-json-diff: 2.0.2, "MIT",
-assert_cmd: 2.2.1, "Apache-2.0 OR MIT",
-astral-tokio-tar: 0.6.1, "Apache-2.0 OR MIT",
-async-broadcast: 0.7.2, "Apache-2.0 OR MIT",
-async-channel: 2.5.0, "Apache-2.0 OR MIT",
-async-compression: 0.4.42, "Apache-2.0 OR MIT",
-async-dropper: 0.3.1, "MIT",
-async-dropper-derive: 0.3.1, "MIT",
-async-dropper-simple: 0.2.6, "MIT",
-async-lock: 3.4.2, "Apache-2.0 OR MIT",
-async-scoped: 0.9.0, "Apache-2.0 OR MIT",
-async-stream: 0.3.6, "MIT",
-async-stream-impl: 0.3.6, "MIT",
-async-task: 4.7.1, "Apache-2.0 OR MIT",
-async-trait: 0.1.89, "Apache-2.0 OR MIT",
-async_zip: 0.0.18, "MIT",
-atoi: 2.0.0, "MIT",
-atomic: 0.6.1, "Apache-2.0 OR MIT",
-atomic-polyfill: 1.0.3, "Apache-2.0 OR MIT",
-atomic-waker: 1.1.2, "Apache-2.0 OR MIT",
-autocfg: 1.5.0, "Apache-2.0 OR MIT",
-autotools: 0.2.7, "MIT",
-av-scenechange: 0.14.1, "MIT",
-av1-grain: 0.2.5, "BSD-2-Clause",
-avif-serialize: 0.8.9, "BSD-3-Clause",
-aws-config: 1.8.16, "Apache-2.0",
-aws-credential-types: 1.2.14, "Apache-2.0",
-aws-lc-rs: 1.16.3, "(Apache-2.0 OR ISC) AND ISC",
-aws-lc-sys: 0.40.0, "(Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 OR ISC OR 
MIT-0) AND (Apache-2.0 OR ISC) AND Apache-2.0 AND BSD-3-Clause AND ISC AND MIT",
-aws-runtime: 1.7.3, "Apache-2.0",
-aws-sdk-dynamodb: 1.111.0, "Apache-2.0",
-aws-sdk-sso: 1.98.0, "Apache-2.0",
-aws-sdk-ssooidc: 1.100.0, "Apache-2.0",
-aws-sdk-sts: 1.103.0, "Apache-2.0",
-aws-sigv4: 1.4.3, "Apache-2.0",
-aws-smithy-async: 1.2.14, "Apache-2.0",
-aws-smithy-http: 0.63.6, "Apache-2.0",
-aws-smithy-http-client: 1.1.12, "Apache-2.0",
-aws-smithy-json: 0.62.5, "Apache-2.0",
-aws-smithy-observability: 0.2.6, "Apache-2.0",
-aws-smithy-query: 0.60.15, "Apache-2.0",
-aws-smithy-runtime: 1.11.1, "Apache-2.0",
-aws-smithy-runtime-api: 1.12.0, "Apache-2.0",
-aws-smithy-runtime-api-macros: 1.0.0, "Apache-2.0",
-aws-smithy-types: 1.4.7, "Apache-2.0",
-aws-smithy-xml: 0.60.15, "Apache-2.0",
-aws-types: 1.3.15, "Apache-2.0",
-axum: 0.8.9, "MIT",
-axum-core: 0.5.6, "MIT",
-axum-macros: 0.5.1, "MIT",
-axum-server: 0.8.0, "MIT",
-az: 1.3.0, "Apache-2.0 OR MIT",
-backon: 1.6.0, "Apache-2.0",
-base16ct: 0.2.0, "Apache-2.0 OR MIT",
-base64: 0.22.1, "Apache-2.0 OR MIT",
-base64-simd: 0.8.0, "MIT",
-base64ct: 1.8.3, "Apache-2.0 OR MIT",
-bdd: 0.0.1, "Apache-2.0",
-beef: 0.5.2, "Apache-2.0 OR MIT",
-bench-dashboard-frontend: 0.7.0, "Apache-2.0",
-bench-dashboard-shared: 0.1.0, "Apache-2.0",
-bench-report: 0.3.0, "Apache-2.0",
-bench-runner: 0.1.0, "Apache-2.0",
-bigdecimal: 0.4.10, "Apache-2.0 OR MIT",
-bimap: 0.6.3, "Apache-2.0 OR MIT",
-bincode: 1.3.3, "MIT",
-bindgen: 0.71.1, "BSD-3-Clause",
-bit-set: 0.8.0, "Apache-2.0 OR MIT",
-bit-set: 0.10.0, "Apache-2.0 OR MIT",
-bit-vec: 0.8.0, "Apache-2.0 OR MIT",
-bit-vec: 0.9.1, "Apache-2.0 OR MIT",
-bit_field: 0.10.3, "Apache-2.0 OR MIT",
-bitflags: 1.3.2, "Apache-2.0 OR MIT",
-bitflags: 2.11.1, "Apache-2.0 OR MIT",
-bitstream-io: 4.10.0, "Apache-2.0 OR MIT",
-bitvec: 1.0.1, "MIT",
-blake2: 0.10.6, "Apache-2.0 OR MIT",
-blake3: 1.8.5, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR CC0-1.0",
-block-buffer: 0.10.4, "Apache-2.0 OR MIT",
-block-buffer: 0.12.0, "Apache-2.0 OR MIT",
-block2: 0.6.2, "MIT",
-bnum: 0.12.1, "Apache-2.0 OR MIT",
-bollard: 0.20.2, "Apache-2.0",
-bollard-buildkit-proto: 0.7.0, "Apache-2.0",
-bollard-stubs: 1.52.1-rc.29.1.3, "Apache-2.0",
-bon: 3.9.1, "Apache-2.0 OR MIT",
-bon-macros: 3.9.1, "Apache-2.0 OR MIT",
-borsh: 1.6.1, "Apache-2.0 OR MIT",
-borsh-derive: 1.6.1, "Apache-2.0",
-brotli: 8.0.2, "BSD-3-Clause AND MIT",
-brotli-decompressor: 5.0.0, "BSD-3-Clause OR MIT",
-bson: 2.15.0, "MIT",
-bstr: 1.12.1, "Apache-2.0 OR MIT",
-built: 0.8.0, "MIT",
-bumpalo: 3.20.2, "Apache-2.0 OR MIT",
-buoyant_kernel: 0.21.103, "Apache-2.0",
-buoyant_kernel_derive: 1.0.0, "Apache-2.0",
-byte-unit: 5.2.0, "MIT",
-bytecheck: 0.6.12, "MIT",
-bytecheck_derive: 0.6.12, "MIT",
-bytecount: 0.6.9, "Apache-2.0 OR MIT",
-bytemuck: 1.25.0, "Apache-2.0 OR MIT OR Zlib",
-bytemuck_derive: 1.10.2, "Apache-2.0 OR MIT OR Zlib",
-byteorder: 1.5.0, "MIT OR Unlicense",
-byteorder-lite: 0.1.0, "MIT OR Unlicense",
-bytes: 1.11.1, "MIT",
-bytes-utils: 0.1.4, "Apache-2.0 OR MIT",
-bytestring: 1.5.1, "Apache-2.0 OR MIT",
-bzip2: 0.6.1, "Apache-2.0 OR MIT",
-camino: 1.2.2, "Apache-2.0 OR MIT",
-capacity_builder: 0.5.0, "MIT",
-capacity_builder_macros: 0.3.0, "MIT",
-cargo-platform: 0.3.3, "Apache-2.0 OR MIT",
-cargo_metadata: 0.23.1, "MIT",
-cc: 1.2.62, "Apache-2.0 OR MIT",
-cesu8: 1.1.0, "Apache-2.0 OR MIT",
-cexpr: 0.6.0, "Apache-2.0 OR MIT",
-cfg-if: 1.0.4, "Apache-2.0 OR MIT",
-cfg_aliases: 0.2.1, "MIT",
-chacha20: 0.10.0, "Apache-2.0 OR MIT",
-charming: 0.6.0, "Apache-2.0 OR MIT",
-charming_macros: 0.1.0, "Apache-2.0 OR MIT",
-chrono: 0.4.44, "Apache-2.0 OR MIT",
-chrono-tz: 0.10.4, "Apache-2.0 OR MIT",
-cipher: 0.4.4, "Apache-2.0 OR MIT",
-clang-sys: 1.8.1, "Apache-2.0",
-clap: 4.6.1, "Apache-2.0 OR MIT",
-clap_builder: 4.6.0, "Apache-2.0 OR MIT",
-clap_complete: 4.6.3, "Apache-2.0 OR MIT",
-clap_derive: 4.6.1, "Apache-2.0 OR MIT",
-clap_lex: 1.1.0, "Apache-2.0 OR MIT",
-clock: 0.1.0, "N/A",
-cmake: 0.1.58, "Apache-2.0 OR MIT",
-cmov: 0.5.3, "Apache-2.0 OR MIT",
-cobs: 0.3.0, "Apache-2.0 OR MIT",
-color_quant: 1.1.0, "MIT",
-colorchoice: 1.0.5, "Apache-2.0 OR MIT",
-colored: 3.1.1, "MPL-2.0",
-combine: 4.6.7, "MIT",
-comfy-table: 7.2.2, "MIT",
-compio: 0.18.0, "MIT",
-compio-buf: 0.8.1, "MIT",
-compio-driver: 0.11.4, "MIT",
-compio-fs: 0.11.0, "MIT",
-compio-io: 0.9.1, "MIT",
-compio-log: 0.1.0, "MIT",
-compio-macros: 0.1.2, "MIT",
-compio-net: 0.11.1, "MIT",
-compio-quic: 0.7.2, "MIT",
-compio-runtime: 0.11.0, "MIT",
-compio-tls: 0.9.1, "MIT",
-compio-ws: 0.3.1, "MIT",
-compression-codecs: 0.4.38, "Apache-2.0 OR MIT",
-compression-core: 0.4.32, "Apache-2.0 OR MIT",
-concurrent-queue: 2.5.0, "Apache-2.0 OR MIT",
-configs: 0.1.0, "Apache-2.0",
-configs_derive: 0.1.0, "Apache-2.0",
-consensus: 0.1.0, "Apache-2.0",
-console: 0.16.3, "MIT",
-console_error_panic_hook: 0.1.7, "Apache-2.0 OR MIT",
-const-oid: 0.9.6, "Apache-2.0 OR MIT",
-const-oid: 0.10.2, "Apache-2.0 OR MIT",
-const-random: 0.1.18, "Apache-2.0 OR MIT",
-const-random-macro: 0.1.16, "Apache-2.0 OR MIT",
-constant_time_eq: 0.4.2, "Apache-2.0 OR CC0-1.0 OR MIT-0",
-convert_case: 0.6.0, "MIT",
-convert_case: 0.9.0, "MIT",
-convert_case: 0.10.0, "MIT",
-cooked-waker: 5.0.0, "MPL-2.0",
-cookie: 0.16.2, "Apache-2.0 OR MIT",
-core-foundation: 0.9.4, "Apache-2.0 OR MIT",
-core-foundation: 0.10.1, "Apache-2.0 OR MIT",
-core-foundation-sys: 0.8.7, "Apache-2.0 OR MIT",
-core_affinity: 0.8.3, "Apache-2.0 OR MIT",
-core_maths: 0.1.1, "MIT",
-cpufeatures: 0.2.17, "Apache-2.0 OR MIT",
-cpufeatures: 0.3.0, "Apache-2.0 OR MIT",
-crc: 3.4.0, "Apache-2.0 OR MIT",
-crc-catalog: 2.5.0, "Apache-2.0 OR MIT",
-crc32c: 0.6.8, "Apache-2.0 OR MIT",
-crc32fast: 1.5.0, "Apache-2.0 OR MIT",
-critical-section: 1.2.0, "Apache-2.0 OR MIT",
-crossbeam: 0.8.4, "Apache-2.0 OR MIT",
-crossbeam-channel: 0.5.15, "Apache-2.0 OR MIT",
-crossbeam-deque: 0.8.6, "Apache-2.0 OR MIT",
-crossbeam-epoch: 0.9.18, "Apache-2.0 OR MIT",
-crossbeam-queue: 0.3.12, "Apache-2.0 OR MIT",
-crossbeam-utils: 0.8.21, "Apache-2.0 OR MIT",
-crossfire: 3.1.10, "Apache-2.0",
-crunchy: 0.2.4, "MIT",
-crypto-bigint: 0.5.5, "Apache-2.0 OR MIT",
-crypto-common: 0.1.7, "Apache-2.0 OR MIT",
-crypto-common: 0.2.1, "Apache-2.0 OR MIT",
-csv: 1.4.0, "MIT OR Unlicense",
-csv-core: 0.1.13, "MIT OR Unlicense",
-ctor: 0.10.1, "Apache-2.0 OR MIT",
-ctor: 1.0.4, "Apache-2.0 OR MIT",
-ctor-proc-macro: 0.0.13, "Apache-2.0 OR MIT",
-ctr: 0.9.2, "Apache-2.0 OR MIT",
-ctrlc: 3.5.2, "Apache-2.0 OR MIT",
-ctutils: 0.4.2, "Apache-2.0 OR MIT",
-cucumber: 0.23.0, "Apache-2.0 OR MIT",
-cucumber-codegen: 0.23.0, "Apache-2.0 OR MIT",
-cucumber-expressions: 0.5.0, "Apache-2.0 OR MIT",
-curve25519-dalek: 4.1.3, "BSD-3-Clause",
-curve25519-dalek-derive: 0.1.1, "Apache-2.0 OR MIT",
-cyper: 0.8.3, "MIT",
-cyper-axum: 0.8.0, "MIT",
-cyper-core: 0.8.0, "MIT",
-darling: 0.20.11, "MIT",
-darling: 0.21.3, "MIT",
-darling: 0.23.0, "MIT",
-darling_core: 0.20.11, "MIT",
-darling_core: 0.21.3, "MIT",
-darling_core: 0.23.0, "MIT",
-darling_macro: 0.20.11, "MIT",
-darling_macro: 0.21.3, "MIT",
-darling_macro: 0.23.0, "MIT",
-dashmap: 6.1.0, "MIT",
-data-encoding: 2.11.0, "MIT",
-data-url: 0.3.2, "Apache-2.0 OR MIT",
-dbus: 0.9.11, "Apache-2.0 OR MIT",
-dbus-secret-service: 4.1.0, "Apache-2.0 OR MIT",
-deadpool: 0.12.3, "Apache-2.0 OR MIT",
-deadpool-runtime: 0.1.4, "Apache-2.0 OR MIT",
-debugid: 0.8.0, "Apache-2.0",
-deltalake: 0.32.1, "Apache-2.0",
-deltalake-aws: 0.15.0, "Apache-2.0",
-deltalake-azure: 0.15.0, "Apache-2.0",
-deltalake-core: 0.32.1, "Apache-2.0",
-deltalake-derive: 1.0.0, "Apache-2.0",
-deltalake-gcp: 0.16.0, "Apache-2.0",
-deno_core: 0.351.0, "MIT",
-deno_core_icudata: 0.74.0, "MIT",
-deno_error: 0.6.1, "MIT",
-deno_error_macro: 0.6.1, "MIT",
-deno_ops: 0.227.0, "MIT",
-deno_path_util: 0.4.0, "MIT",
-deno_unsync: 0.4.4, "MIT",
-der: 0.7.10, "Apache-2.0 OR MIT",
-der-parser: 10.0.0, "Apache-2.0 OR MIT",
-deranged: 0.5.8, "Apache-2.0 OR MIT",
-derive-new: 0.7.0, "MIT",
-derive-syn-parse: 0.2.0, "Apache-2.0 OR MIT",
-derive-where: 1.6.1, "Apache-2.0 OR MIT",
-derive_builder: 0.20.2, "Apache-2.0 OR MIT",
-derive_builder_core: 0.20.2, "Apache-2.0 OR MIT",
-derive_builder_macro: 0.20.2, "Apache-2.0 OR MIT",
-derive_more: 2.1.1, "MIT",
-derive_more-impl: 2.1.1, "MIT",
-difflib: 0.4.0, "MIT",
-digest: 0.10.7, "Apache-2.0 OR MIT",
-digest: 0.11.3, "Apache-2.0 OR MIT",
-dircpy: 0.3.20, "MIT",
-dirs: 6.0.0, "Apache-2.0 OR MIT",
-dirs-sys: 0.5.0, "Apache-2.0 OR MIT",
-dispatch2: 0.3.1, "Apache-2.0 OR MIT OR Zlib",
-displaydoc: 0.2.5, "Apache-2.0 OR MIT",
-dissimilar: 1.0.11, "Apache-2.0",
-dlopen2: 0.8.2, "MIT",
-dlopen2_derive: 0.4.3, "MIT",
-dlv-list: 0.5.2, "Apache-2.0 OR MIT",
-docker_credential: 1.3.3, "Apache-2.0 OR MIT",
-dotenvy: 0.15.7, "MIT",
-downcast: 0.11.0, "MIT",
-dtoa: 1.0.11, "Apache-2.0 OR MIT",
-dtor: 0.8.1, "Apache-2.0 OR MIT",
-dtor: 1.0.2, "Apache-2.0 OR MIT",
-dtor-proc-macro: 0.0.13, "Apache-2.0 OR MIT",
-dunce: 1.0.5, "Apache-2.0 OR CC0-1.0 OR MIT-0",
-dyn-clone: 1.0.20, "Apache-2.0 OR MIT",
-ecdsa: 0.16.9, "Apache-2.0 OR MIT",
-ed25519: 2.2.3, "Apache-2.0 OR MIT",
-ed25519-dalek: 2.2.0, "BSD-3-Clause",
-either: 1.15.0, "Apache-2.0 OR MIT",
-elasticsearch: 9.1.0-alpha.1, "Apache-2.0",
-elliptic-curve: 0.13.8, "Apache-2.0 OR MIT",
-embedded-io: 0.4.0, "Apache-2.0 OR MIT",
-embedded-io: 0.6.1, "Apache-2.0 OR MIT",
-encode_unicode: 1.0.0, "Apache-2.0 OR MIT",
-encoding_rs: 0.8.35, "(Apache-2.0 OR MIT) AND BSD-3-Clause",
-enum-as-inner: 0.6.1, "Apache-2.0 OR MIT",
-enumset: 1.1.12, "Apache-2.0 OR MIT",
-enumset_derive: 0.15.0, "Apache-2.0 OR MIT",
-equator: 0.4.2, "MIT",
-equator-macro: 0.4.2, "MIT",
-equivalent: 1.0.2, "Apache-2.0 OR MIT",
-erased-serde: 0.4.10, "Apache-2.0 OR MIT",
-err_trail: 0.11.0, "Apache-2.0",
-errno: 0.3.14, "Apache-2.0 OR MIT",
-error_set: 0.9.1, "Apache-2.0",
-error_set_impl: 0.9.1, "Apache-2.0",
-etcetera: 0.8.0, "Apache-2.0 OR MIT",
-etcetera: 0.11.0, "Apache-2.0 OR MIT",
-euclid: 0.22.14, "Apache-2.0 OR MIT",
-event-listener: 5.4.1, "Apache-2.0 OR MIT",
-event-listener-strategy: 0.5.4, "Apache-2.0 OR MIT",
-expect-test: 1.5.1, "Apache-2.0 OR MIT",
-exr: 1.74.0, "BSD-3-Clause",
-ext-trait: 1.0.1, "Apache-2.0 OR MIT OR Zlib",
-ext-trait-proc_macros: 1.0.1, "Apache-2.0 OR MIT OR Zlib",
-extension-traits: 1.0.1, "Apache-2.0 OR MIT OR Zlib",
-fastbloom: 0.14.1, "Apache-2.0 OR MIT",
-fastnum: 0.7.4, "Apache-2.0 OR MIT",
-fastrand: 2.4.1, "Apache-2.0 OR MIT",
-fax: 0.2.7, "MIT",
-fdeflate: 0.3.7, "Apache-2.0 OR MIT",
-ferroid: 2.0.0, "Apache-2.0 OR MIT",
-ff: 0.13.1, "Apache-2.0 OR MIT",
-fiat-crypto: 0.2.9, "Apache-2.0 OR BSD-1-Clause OR MIT",
-figlet-rs: 1.0.0, "Apache-2.0",
-figment: 0.10.19, "Apache-2.0 OR MIT",
-file-operation: 0.8.19, "MIT",
-filetime: 0.2.28, "Apache-2.0 OR MIT",
-find-msvc-tools: 0.1.9, "Apache-2.0 OR MIT",
-flatbuffers: 25.12.19, "Apache-2.0",
-flate2: 1.1.9, "Apache-2.0 OR MIT",
-float-cmp: 0.9.0, "MIT",
-float-cmp: 0.10.0, "MIT",
-flume: 0.11.1, "Apache-2.0 OR MIT",
-flume: 0.12.0, "Apache-2.0 OR MIT",
-fnv: 1.0.7, "Apache-2.0 OR MIT",
-foldhash: 0.1.5, "Zlib",
-foldhash: 0.2.0, "Zlib",
-fontconfig-parser: 0.5.8, "MIT",
-fontdb: 0.23.0, "MIT",
-foreign-types: 0.3.2, "Apache-2.0 OR MIT",
-foreign-types-shared: 0.1.1, "Apache-2.0 OR MIT",
-form_urlencoded: 1.2.2, "Apache-2.0 OR MIT",
-fragile: 2.1.0, "Apache-2.0",
-fs-err: 3.3.0, "Apache-2.0 OR MIT",
-fs2: 0.4.3, "Apache-2.0 OR MIT",
-fs_extra: 1.3.0, "MIT",
-fsevent-sys: 4.1.0, "MIT",
-fslock: 0.2.1, "MIT",
-funty: 2.0.0, "MIT",
-futures: 0.3.32, "Apache-2.0 OR MIT",
-futures-channel: 0.3.32, "Apache-2.0 OR MIT",
-futures-core: 0.3.32, "Apache-2.0 OR MIT",
-futures-executor: 0.3.32, "Apache-2.0 OR MIT",
-futures-intrusive: 0.5.0, "Apache-2.0 OR MIT",
-futures-io: 0.3.32, "Apache-2.0 OR MIT",
-futures-lite: 2.6.1, "Apache-2.0 OR MIT",
-futures-macro: 0.3.32, "Apache-2.0 OR MIT",
-futures-rustls: 0.26.0, "Apache-2.0 OR MIT",
-futures-sink: 0.3.32, "Apache-2.0 OR MIT",
-futures-task: 0.3.32, "Apache-2.0 OR MIT",
-futures-timer: 3.0.3, "Apache-2.0 OR MIT",
-futures-util: 0.3.32, "Apache-2.0 OR MIT",
-generator: 0.8.8, "Apache-2.0 OR MIT",
-generic-array: 0.14.7, "MIT",
-getrandom: 0.2.17, "Apache-2.0 OR MIT",
-getrandom: 0.3.4, "Apache-2.0 OR MIT",
-getrandom: 0.4.2, "Apache-2.0 OR MIT",
-ghash: 0.5.1, "Apache-2.0 OR MIT",
-gherkin: 0.16.0, "Apache-2.0 OR MIT",
-gif: 0.13.3, "Apache-2.0 OR MIT",
-gif: 0.14.2, "Apache-2.0 OR MIT",
-git2: 0.20.4, "Apache-2.0 OR MIT",
-glob: 0.3.3, "Apache-2.0 OR MIT",
-globset: 0.4.18, "MIT OR Unlicense",
-globwalk: 0.9.1, "MIT",
-gloo: 0.11.0, "Apache-2.0 OR MIT",
-gloo: 0.12.0, "Apache-2.0 OR MIT",
-gloo-console: 0.3.0, "Apache-2.0 OR MIT",
-gloo-console: 0.4.0, "Apache-2.0 OR MIT",
-gloo-dialogs: 0.2.0, "Apache-2.0 OR MIT",
-gloo-dialogs: 0.3.0, "Apache-2.0 OR MIT",
-gloo-events: 0.2.0, "Apache-2.0 OR MIT",
-gloo-events: 0.3.0, "Apache-2.0 OR MIT",
-gloo-file: 0.3.0, "Apache-2.0 OR MIT",
-gloo-file: 0.4.0, "Apache-2.0 OR MIT",
-gloo-history: 0.2.2, "Apache-2.0 OR MIT",
-gloo-history: 0.3.0, "Apache-2.0 OR MIT",
-gloo-net: 0.5.0, "Apache-2.0 OR MIT",
-gloo-net: 0.7.0, "Apache-2.0 OR MIT",
-gloo-render: 0.2.0, "Apache-2.0 OR MIT",
-gloo-render: 0.3.0, "Apache-2.0 OR MIT",
-gloo-storage: 0.3.0, "Apache-2.0 OR MIT",
-gloo-storage: 0.4.0, "Apache-2.0 OR MIT",
-gloo-timers: 0.3.0, "Apache-2.0 OR MIT",
-gloo-timers: 0.4.0, "Apache-2.0 OR MIT",
-gloo-utils: 0.2.0, "Apache-2.0 OR MIT",
-gloo-utils: 0.3.0, "Apache-2.0 OR MIT",
-gloo-worker: 0.5.0, "Apache-2.0 OR MIT",
-gloo-worker: 0.6.0, "Apache-2.0 OR MIT",
-gloo-worker-macros: 0.1.0, "Apache-2.0 OR MIT",
-gloo-worker-macros: 0.2.0, "Apache-2.0 OR MIT",
-governor: 0.10.4, "MIT",
-group: 0.13.0, "Apache-2.0 OR MIT",
-gzip-header: 1.1.0, "Apache-2.0 OR MIT",
-h2: 0.3.27, "MIT",
-h2: 0.4.14, "MIT",
-half: 2.7.1, "Apache-2.0 OR MIT",
-halfbrown: 0.4.0, "Apache-2.0 OR MIT",
-handlebars: 6.4.0, "MIT",
-harness_derive: 0.1.0, "Apache-2.0",
-hash32: 0.2.1, "Apache-2.0 OR MIT",
-hash32: 1.0.0, "Apache-2.0 OR MIT",
-hashbrown: 0.12.3, "Apache-2.0 OR MIT",
-hashbrown: 0.14.5, "Apache-2.0 OR MIT",
-hashbrown: 0.15.5, "Apache-2.0 OR MIT",
-hashbrown: 0.16.1, "Apache-2.0 OR MIT",
-hashbrown: 0.17.0, "Apache-2.0 OR MIT",
-hashlink: 0.10.0, "Apache-2.0 OR MIT",
-heapless: 0.7.17, "Apache-2.0 OR MIT",
-heck: 0.5.0, "Apache-2.0 OR MIT",
-hermit-abi: 0.5.2, "Apache-2.0 OR MIT",
-hex: 0.4.3, "Apache-2.0 OR MIT",
-hickory-proto: 0.25.2, "Apache-2.0 OR MIT",
-hickory-resolver: 0.25.2, "Apache-2.0 OR MIT",
-hkdf: 0.12.4, "Apache-2.0 OR MIT",
-hmac: 0.12.1, "Apache-2.0 OR MIT",
-hmac: 0.13.0, "Apache-2.0 OR MIT",
-home: 0.5.12, "Apache-2.0 OR MIT",
-hostname: 0.4.2, "MIT",
-http: 0.2.12, "Apache-2.0 OR MIT",
-http: 1.4.0, "Apache-2.0 OR MIT",
-http-body: 0.4.6, "MIT",
-http-body: 1.0.1, "MIT",
-http-body-util: 0.1.3, "MIT",
-http-range: 0.1.5, "MIT",
-httparse: 1.10.1, "Apache-2.0 OR MIT",
-httpdate: 1.0.3, "Apache-2.0 OR MIT",
-human-repr: 1.1.0, "MIT",
-humantime: 2.3.0, "Apache-2.0 OR MIT",
-hwlocality: 1.0.0-alpha.12, "MIT",
-hwlocality-sys: 0.7.0, "MIT",
-hybrid-array: 0.4.11, "Apache-2.0 OR MIT",
-hyper: 1.9.0, "MIT",
-hyper-named-pipe: 0.1.0, "Apache-2.0",
-hyper-rustls: 0.27.9, "Apache-2.0 OR ISC OR MIT",
-hyper-timeout: 0.5.2, "Apache-2.0 OR MIT",
-hyper-util: 0.1.20, "MIT",
-hyperlocal: 0.9.1, "MIT",
-iana-time-zone: 0.1.65, "Apache-2.0 OR MIT",
-iana-time-zone-haiku: 0.1.2, "Apache-2.0 OR MIT",
-iceberg: 0.9.1, "Apache-2.0",
-iceberg-catalog-rest: 0.9.1, "Apache-2.0",
-iceberg-storage-opendal: 0.9.1, "Apache-2.0",
-icu_collections: 2.2.0, "Unicode-3.0",
-icu_locale_core: 2.2.0, "Unicode-3.0",
-icu_normalizer: 2.2.0, "Unicode-3.0",
-icu_normalizer_data: 2.2.0, "Unicode-3.0",
-icu_properties: 2.2.0, "Unicode-3.0",
-icu_properties_data: 2.2.0, "Unicode-3.0",
-icu_provider: 2.2.0, "Unicode-3.0",
-id-arena: 2.3.0, "Apache-2.0 OR MIT",
-ident_case: 1.0.1, "Apache-2.0 OR MIT",
-idna: 1.1.0, "Apache-2.0 OR MIT",
-idna_adapter: 1.2.2, "Apache-2.0 OR MIT",
-if_chain: 1.0.3, "Apache-2.0 OR MIT",
-iggy: 0.10.0, "Apache-2.0",
-iggy-bench: 0.5.0, "Apache-2.0",
-iggy-bench-dashboard-server: 0.7.0, "Apache-2.0",
-iggy-cli: 0.13.0, "Apache-2.0",
-iggy-connectors: 0.4.0, "Apache-2.0",
-iggy-mcp: 0.4.0, "Apache-2.0",
-iggy_binary_protocol: 0.10.0, "Apache-2.0",
-iggy_common: 0.10.0, "Apache-2.0",
-iggy_connector_delta_sink: 0.1.0, "Apache-2.0",
-iggy_connector_elasticsearch_sink: 0.4.0, "Apache-2.0",
-iggy_connector_elasticsearch_source: 0.4.0, "Apache-2.0",
-iggy_connector_http_sink: 0.4.0, "Apache-2.0",
-iggy_connector_iceberg_sink: 0.4.0, "Apache-2.0",
-iggy_connector_influxdb_sink: 0.4.0, "Apache-2.0",
-iggy_connector_influxdb_source: 0.4.0, "Apache-2.0",
-iggy_connector_mongodb_sink: 0.4.0, "Apache-2.0",
-iggy_connector_postgres_sink: 0.4.0, "Apache-2.0",
-iggy_connector_postgres_source: 0.4.0, "Apache-2.0",
-iggy_connector_quickwit_sink: 0.4.0, "Apache-2.0",
-iggy_connector_random_source: 0.4.0, "Apache-2.0",
-iggy_connector_sdk: 0.3.0, "Apache-2.0",
-iggy_connector_stdout_sink: 0.4.0, "Apache-2.0",
-iggy_examples: 0.0.6, "Apache-2.0",
-ignore: 0.4.25, "MIT OR Unlicense",
-image: 0.25.10, "Apache-2.0 OR MIT",
-image-webp: 0.2.4, "Apache-2.0 OR MIT",
-imagesize: 0.13.0, "MIT",
-imgref: 1.12.1, "Apache-2.0 OR CC0-1.0",
-impl-more: 0.1.9, "Apache-2.0 OR MIT",
-implicit-clone: 0.6.0, "Apache-2.0 OR MIT",
-implicit-clone-derive: 0.1.2, "Apache-2.0 OR MIT",
-indexmap: 1.9.3, "Apache-2.0 OR MIT",
-indexmap: 2.14.0, "Apache-2.0 OR MIT",
-inflections: 1.1.1, "MIT",
-inlinable_string: 0.1.15, "Apache-2.0 OR MIT",
-inotify: 0.11.1, "ISC",
-inotify-sys: 0.1.5, "ISC",
-inout: 0.1.4, "Apache-2.0 OR MIT",
-integer-encoding: 3.0.4, "MIT",
-integration: 0.0.1, "Apache-2.0",
-interpolate_name: 0.2.4, "MIT",
-inventory: 0.3.24, "Apache-2.0 OR MIT",
-io-uring: 0.7.12, "Apache-2.0 OR MIT",
-io_uring_buf_ring: 0.2.3, "MIT",
-ipconfig: 0.3.4, "Apache-2.0 OR MIT",
-ipnet: 2.12.0, "Apache-2.0 OR MIT",
-is_terminal_polyfill: 1.70.2, "Apache-2.0 OR MIT",
-itertools: 0.13.0, "Apache-2.0 OR MIT",
-itertools: 0.14.0, "Apache-2.0 OR MIT",
-itoa: 1.0.18, "Apache-2.0 OR MIT",
-jiff: 0.2.24, "MIT OR Unlicense",
-jiff-static: 0.2.24, "MIT OR Unlicense",
-jiff-tzdb: 0.1.6, "MIT OR Unlicense",
-jiff-tzdb-platform: 0.1.3, "MIT OR Unlicense",
-jni: 0.21.1, "Apache-2.0 OR MIT",
-jni: 0.22.4, "Apache-2.0 OR MIT",
-jni-macros: 0.22.4, "Apache-2.0 OR MIT",
-jni-sys: 0.3.1, "Apache-2.0 OR MIT",
-jni-sys: 0.4.1, "Apache-2.0 OR MIT",
-jni-sys-macros: 0.4.1, "Apache-2.0 OR MIT",
-jobserver: 0.1.34, "Apache-2.0 OR MIT",
-journal: 0.1.0, "Apache-2.0",
-js-sys: 0.3.98, "Apache-2.0 OR MIT",
-jsonwebtoken: 10.3.0, "MIT",
-jwalk: 0.8.1, "MIT",
-keccak: 0.2.0, "Apache-2.0 OR MIT",
-keyring: 3.6.3, "Apache-2.0 OR MIT",
-kqueue: 1.1.1, "MIT",
-kqueue-sys: 1.1.0, "MIT",
-kurbo: 0.11.3, "Apache-2.0 OR MIT",
-language-tags: 0.3.2, "Apache-2.0 OR MIT",
-lazy_static: 1.5.0, "Apache-2.0 OR MIT",
-leb128fmt: 0.1.0, "Apache-2.0 OR MIT",
-lebe: 0.5.3, "BSD-3-Clause",
-left-right: 0.11.7, "Apache-2.0 OR MIT",
-lending-iterator: 0.1.7, "Apache-2.0 OR MIT OR Zlib",
-lending-iterator-proc_macros: 0.1.7, "Apache-2.0 OR MIT OR Zlib",
-lexical-core: 1.0.6, "Apache-2.0 OR MIT",
-lexical-parse-float: 1.0.6, "Apache-2.0 OR MIT",
-lexical-parse-integer: 1.0.6, "Apache-2.0 OR MIT",
-lexical-util: 1.0.7, "Apache-2.0 OR MIT",
-lexical-write-float: 1.0.6, "Apache-2.0 OR MIT",
-lexical-write-integer: 1.0.6, "Apache-2.0 OR MIT",
-libbz2-rs-sys: 0.2.3, "bzip2-1.0.6",
-libc: 0.2.186, "Apache-2.0 OR MIT",
-libdbus-sys: 0.2.7, "Apache-2.0 OR MIT",
-libfuzzer-sys: 0.4.12, "(Apache-2.0 OR MIT) AND NCSA",
-libgit2-sys: 0.18.4+1.9.3, "Apache-2.0 OR MIT",
-libloading: 0.8.9, "ISC",
-liblzma: 0.4.6, "Apache-2.0 OR MIT",
-liblzma-sys: 0.4.6, "Apache-2.0 OR MIT",
-libm: 0.2.16, "MIT",
-libmimalloc-sys: 0.1.47, "MIT",
-libredox: 0.1.16, "MIT",
-libsqlite3-sys: 0.30.1, "MIT",
-libz-sys: 1.1.28, "Apache-2.0 OR MIT",
-link-section: 0.2.1, "Apache-2.0 OR MIT",
-link-section: 0.16.0, "Apache-2.0 OR MIT",
-linked-hash-map: 0.5.6, "Apache-2.0 OR MIT",
-linktime-proc-macro: 0.1.0, "Apache-2.0 OR MIT",
-linux-raw-sys: 0.4.15, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-linux-raw-sys: 0.12.1, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-litemap: 0.8.2, "Unicode-3.0",
-local-channel: 0.1.5, "Apache-2.0 OR MIT",
-local-waker: 0.1.4, "Apache-2.0 OR MIT",
-lock_api: 0.4.14, "Apache-2.0 OR MIT",
-log: 0.4.29, "Apache-2.0 OR MIT",
-logos: 0.15.1, "Apache-2.0 OR MIT",
-logos-codegen: 0.15.1, "Apache-2.0 OR MIT",
-logos-derive: 0.15.1, "Apache-2.0 OR MIT",
-loom: 0.7.2, "MIT",
-loop9: 0.1.5, "MIT",
-lru-slab: 0.1.2, "Apache-2.0 OR MIT OR Zlib",
-lz4_flex: 0.12.1, "MIT",
-lz4_flex: 0.13.0, "MIT",
-macro_magic: 0.5.1, "MIT",
-macro_magic_core: 0.5.1, "MIT",
-macro_magic_core_macros: 0.5.1, "MIT",
-macro_magic_macros: 0.5.1, "MIT",
-macro_rules_attribute: 0.1.3, "MIT",
-macro_rules_attribute-proc_macro: 0.1.3, "MIT",
-matchers: 0.2.0, "MIT",
-matchit: 0.8.4, "BSD-3-Clause AND MIT",
-maybe-rayon: 0.1.1, "MIT",
-md-5: 0.10.6, "Apache-2.0 OR MIT",
-memchr: 2.8.0, "MIT OR Unlicense",
-memmap2: 0.9.10, "Apache-2.0 OR MIT",
-message_bus: 0.1.0, "Apache-2.0",
-metadata: 0.1.0, "Apache-2.0",
-miette: 7.6.0, "Apache-2.0",
-miette-derive: 7.6.0, "Apache-2.0",
-mimalloc: 0.1.50, "MIT",
-mime: 0.3.17, "Apache-2.0 OR MIT",
-mime_guess: 2.0.5, "MIT",
-minimal-lexical: 0.2.1, "Apache-2.0 OR MIT",
-miniz_oxide: 0.8.9, "Apache-2.0 OR MIT OR Zlib",
-mio: 1.2.0, "MIT",
-mockall: 0.14.0, "Apache-2.0 OR MIT",
-mockall_derive: 0.14.0, "Apache-2.0 OR MIT",
-moka: 0.12.15, "(Apache-2.0 OR MIT) AND Apache-2.0",
-mongocrypt: 0.3.2, "Apache-2.0",
-mongocrypt-sys: 0.1.5+1.15.1, "Apache-2.0",
-mongodb: 3.6.0, "Apache-2.0",
-mongodb-internal-macros: 3.6.0, "Apache-2.0",
-moxcms: 0.8.1, "Apache-2.0 OR BSD-3-Clause",
-murmur3: 0.5.2, "Apache-2.0 OR MIT",
-never-say-never: 6.6.666, "Apache-2.0 OR MIT OR Zlib",
-new_debug_unreachable: 1.0.6, "MIT",
-nix: 0.31.2, "MIT",
-no_std_io2: 0.9.4, "Apache-2.0 OR MIT",
-nom: 7.1.3, "MIT",
-nom: 8.0.0, "MIT",
-nom_locate: 5.0.0, "MIT",
-nonzero_ext: 0.3.0, "Apache-2.0",
-nonzero_lit: 0.1.2, "Apache-2.0 OR CC0-1.0 OR MIT",
-noop_proc_macro: 0.3.0, "MIT",
-normalize-line-endings: 0.3.0, "Apache-2.0",
-notify: 8.2.0, "CC0-1.0",
-notify-types: 2.1.0, "Apache-2.0 OR MIT",
-nougat: 0.2.4, "Apache-2.0 OR MIT OR Zlib",
-nougat-proc_macros: 0.2.4, "Apache-2.0 OR MIT OR Zlib",
-ntapi: 0.4.3, "Apache-2.0 OR MIT",
-nu-ansi-term: 0.50.3, "MIT",
-num: 0.4.3, "Apache-2.0 OR MIT",
-num-bigint: 0.4.6, "Apache-2.0 OR MIT",
-num-bigint-dig: 0.8.6, "Apache-2.0 OR MIT",
-num-complex: 0.4.6, "Apache-2.0 OR MIT",
-num-conv: 0.2.1, "Apache-2.0 OR MIT",
-num-derive: 0.4.2, "Apache-2.0 OR MIT",
-num-integer: 0.1.46, "Apache-2.0 OR MIT",
-num-iter: 0.1.45, "Apache-2.0 OR MIT",
-num-modular: 0.6.1, "Apache-2.0",
-num-order: 1.2.0, "Apache-2.0",
-num-rational: 0.4.2, "Apache-2.0 OR MIT",
-num-traits: 0.2.19, "Apache-2.0 OR MIT",
-num_cpus: 1.17.0, "Apache-2.0 OR MIT",
-num_threads: 0.1.7, "Apache-2.0 OR MIT",
-objc2: 0.6.4, "MIT",
-objc2-core-foundation: 0.3.2, "Apache-2.0 OR MIT OR Zlib",
-objc2-encode: 4.1.0, "MIT",
-objc2-foundation: 0.3.2, "MIT",
-objc2-io-kit: 0.3.2, "Apache-2.0 OR MIT OR Zlib",
-objc2-open-directory: 0.3.2, "Apache-2.0 OR MIT OR Zlib",
-object: 0.37.3, "Apache-2.0 OR MIT",
-object_store: 0.13.2, "Apache-2.0 OR MIT",
-octocrab: 0.50.0, "Apache-2.0 OR MIT",
-oid-registry: 0.8.1, "Apache-2.0 OR MIT",
-once_cell: 1.21.4, "Apache-2.0 OR MIT",
-once_cell_polyfill: 1.70.2, "Apache-2.0 OR MIT",
-opaque-debug: 0.3.1, "Apache-2.0 OR MIT",
-opendal: 0.55.0, "Apache-2.0",
-openssl: 0.10.79, "Apache-2.0",
-openssl-macros: 0.1.1, "Apache-2.0 OR MIT",
-openssl-probe: 0.2.1, "Apache-2.0 OR MIT",
-openssl-src: 300.6.0+3.6.2, "Apache-2.0 OR MIT",
-openssl-sys: 0.9.115, "MIT",
-opentelemetry: 0.31.0, "Apache-2.0",
-opentelemetry-appender-tracing: 0.31.1, "Apache-2.0",
-opentelemetry-http: 0.31.0, "Apache-2.0",
-opentelemetry-otlp: 0.31.1, "Apache-2.0",
-opentelemetry-proto: 0.31.0, "Apache-2.0",
-opentelemetry-semantic-conventions: 0.31.0, "Apache-2.0",
-opentelemetry_sdk: 0.31.0, "Apache-2.0",
-option-ext: 0.2.0, "MPL-2.0",
-ordered-float: 2.10.1, "MIT",
-ordered-float: 4.6.0, "MIT",
-ordered-multimap: 0.7.3, "MIT",
-os_pipe: 1.2.3, "MIT",
-outref: 0.5.2, "MIT",
-p256: 0.13.2, "Apache-2.0 OR MIT",
-p384: 0.13.1, "Apache-2.0 OR MIT",
-papaya: 0.2.4, "MIT",
-parking: 2.2.1, "Apache-2.0 OR MIT",
-parking_lot: 0.12.5, "Apache-2.0 OR MIT",
-parking_lot_core: 0.9.12, "Apache-2.0 OR MIT",
-parquet: 57.3.0, "Apache-2.0",
-parquet: 58.2.0, "Apache-2.0",
-parse-display: 0.9.1, "Apache-2.0 OR MIT",
-parse-display-derive: 0.9.1, "Apache-2.0 OR MIT",
-partitions: 0.1.0, "Apache-2.0",
-passterm: 2.0.6, "BSD-3-Clause",
-password-hash: 0.5.0, "Apache-2.0 OR MIT",
-paste: 1.0.15, "Apache-2.0 OR MIT",
-pastey: 0.1.1, "Apache-2.0 OR MIT",
-pastey: 0.2.2, "Apache-2.0 OR MIT",
-pbkdf2: 0.12.2, "Apache-2.0 OR MIT",
-pear: 0.2.9, "Apache-2.0 OR MIT",
-pear_codegen: 0.2.9, "Apache-2.0 OR MIT",
-peg: 0.6.3, "MIT",
-peg-macros: 0.6.3, "MIT",
-peg-runtime: 0.6.3, "MIT",
-pem: 3.0.6, "MIT",
-pem-rfc7468: 0.7.0, "Apache-2.0 OR MIT",
-percent-encoding: 2.3.2, "Apache-2.0 OR MIT",
-percent-encoding-rfc3986: 0.1.3, "Apache-2.0 OR MIT",
-pest: 2.8.6, "Apache-2.0 OR MIT",
-pest_derive: 2.8.6, "Apache-2.0 OR MIT",
-pest_generator: 2.8.6, "Apache-2.0 OR MIT",
-pest_meta: 2.8.6, "Apache-2.0 OR MIT",
-phf: 0.12.1, "MIT",
-phf_shared: 0.12.1, "MIT",
-pico-args: 0.5.0, "MIT",
-pin-project: 1.1.12, "Apache-2.0 OR MIT",
-pin-project-internal: 1.1.12, "Apache-2.0 OR MIT",
-pin-project-lite: 0.2.17, "Apache-2.0 OR MIT",
-pin-utils: 0.1.0, "Apache-2.0 OR MIT",
-pinned: 0.1.0, "Apache-2.0 OR MIT",
-pkcs1: 0.7.5, "Apache-2.0 OR MIT",
-pkcs8: 0.10.2, "Apache-2.0 OR MIT",
-pkg-config: 0.3.33, "Apache-2.0 OR MIT",
-plain: 0.2.3, "Apache-2.0 OR MIT",
-png: 0.17.16, "Apache-2.0 OR MIT",
-png: 0.18.1, "Apache-2.0 OR MIT",
-polling: 3.11.0, "Apache-2.0 OR MIT",
-polonius-the-crab: 0.2.1, "Apache-2.0 OR MIT OR Zlib",
-polyval: 0.6.2, "Apache-2.0 OR MIT",
-portable-atomic: 1.13.1, "Apache-2.0 OR MIT",
-portable-atomic-util: 0.2.7, "Apache-2.0 OR MIT",
-postcard: 1.1.3, "Apache-2.0 OR MIT",
-potential_utf: 0.1.5, "Unicode-3.0",
-powerfmt: 0.2.0, "Apache-2.0 OR MIT",
-ppv-lite86: 0.2.21, "Apache-2.0 OR MIT",
-predicates: 3.1.4, "Apache-2.0 OR MIT",
-predicates-core: 1.0.10, "Apache-2.0 OR MIT",
-predicates-tree: 1.0.13, "Apache-2.0 OR MIT",
-prettyplease: 0.2.37, "Apache-2.0 OR MIT",
-primeorder: 0.13.6, "Apache-2.0 OR MIT",
-proc-macro-crate: 1.3.1, "Apache-2.0 OR MIT",
-proc-macro-crate: 3.3.0, "Apache-2.0 OR MIT",
-proc-macro-error: 1.0.4, "Apache-2.0 OR MIT",
-proc-macro-error-attr: 1.0.4, "Apache-2.0 OR MIT",
-proc-macro-error-attr2: 2.0.0, "Apache-2.0 OR MIT",
-proc-macro-error2: 2.0.1, "Apache-2.0 OR MIT",
-proc-macro-rules: 0.4.0, "Apache-2.0 OR MIT",
-proc-macro-rules-macros: 0.4.0, "Apache-2.0 OR MIT",
-proc-macro2: 1.0.106, "Apache-2.0 OR MIT",
-proc-macro2-diagnostics: 0.10.1, "Apache-2.0 OR MIT",
-profiling: 1.0.18, "Apache-2.0 OR MIT",
-profiling-procmacros: 1.0.18, "Apache-2.0 OR MIT",
-prometheus-client: 0.24.1, "Apache-2.0 OR MIT",
-prometheus-client-derive-encode: 0.5.0, "Apache-2.0 OR MIT",
-prost: 0.14.3, "Apache-2.0",
-prost-derive: 0.14.3, "Apache-2.0",
-prost-reflect: 0.16.3, "Apache-2.0 OR MIT",
-prost-types: 0.14.3, "Apache-2.0",
-protox: 0.9.1, "Apache-2.0 OR MIT",
-protox-parse: 0.9.0, "Apache-2.0 OR MIT",
-psm: 0.1.31, "Apache-2.0 OR MIT",
-ptr_meta: 0.1.4, "MIT",
-ptr_meta_derive: 0.1.4, "MIT",
-pxfm: 0.1.29, "Apache-2.0 OR BSD-3-Clause",
-qoi: 0.4.1, "Apache-2.0 OR MIT",
-quad-rand: 0.2.3, "MIT",
-quanta: 0.12.6, "MIT",
-quick-error: 2.0.1, "Apache-2.0 OR MIT",
-quick-xml: 0.37.5, "MIT",
-quick-xml: 0.38.4, "MIT",
-quick-xml: 0.39.4, "MIT",
-quinn: 0.11.9, "Apache-2.0 OR MIT",
-quinn-proto: 0.11.14, "Apache-2.0 OR MIT",
-quinn-udp: 0.5.14, "Apache-2.0 OR MIT",
-quote: 1.0.45, "Apache-2.0 OR MIT",
-r-efi: 5.3.0, "Apache-2.0 OR LGPL-2.1-or-later OR MIT",
-r-efi: 6.0.0, "Apache-2.0 OR LGPL-2.1-or-later OR MIT",
-radium: 0.7.0, "MIT",
-rand: 0.8.6, "Apache-2.0 OR MIT",
-rand: 0.9.4, "Apache-2.0 OR MIT",
-rand: 0.10.1, "Apache-2.0 OR MIT",
-rand_chacha: 0.3.1, "Apache-2.0 OR MIT",
-rand_chacha: 0.9.0, "Apache-2.0 OR MIT",
-rand_core: 0.6.4, "Apache-2.0 OR MIT",
-rand_core: 0.9.5, "Apache-2.0 OR MIT",
-rand_core: 0.10.1, "Apache-2.0 OR MIT",
-rand_xoshiro: 0.8.0, "Apache-2.0 OR MIT",
-rav1e: 0.8.1, "BSD-2-Clause",
-ravif: 0.13.0, "BSD-3-Clause",
-raw-cpuid: 11.6.0, "MIT",
-rayon: 1.12.0, "Apache-2.0 OR MIT",
-rayon-core: 1.13.0, "Apache-2.0 OR MIT",
-rcgen: 0.14.7, "Apache-2.0 OR MIT",
-recursive: 0.1.1, "MIT",
-recursive-proc-macro-impl: 0.1.1, "MIT",
-redox_syscall: 0.5.18, "MIT",
-redox_syscall: 0.7.5, "MIT",
-redox_users: 0.5.2, "MIT",
-ref-cast: 1.0.25, "Apache-2.0 OR MIT",
-ref-cast-impl: 1.0.25, "Apache-2.0 OR MIT",
-regex: 1.12.3, "Apache-2.0 OR MIT",
-regex-automata: 0.4.14, "Apache-2.0 OR MIT",
-regex-lite: 0.1.9, "Apache-2.0 OR MIT",
-regex-syntax: 0.8.10, "Apache-2.0 OR MIT",
-rend: 0.4.2, "MIT",
-reqsign: 0.16.5, "Apache-2.0",
-reqwest: 0.12.28, "Apache-2.0 OR MIT",
-reqwest: 0.13.3, "Apache-2.0 OR MIT",
-reqwest-middleware: 0.5.1, "Apache-2.0 OR MIT",
-reqwest-retry: 0.9.1, "Apache-2.0 OR MIT",
-reqwest-tracing: 0.7.0, "Apache-2.0 OR MIT",
-resolv-conf: 0.7.6, "Apache-2.0 OR MIT",
-resvg: 0.45.1, "Apache-2.0 OR MIT",
-retry-policies: 0.5.1, "Apache-2.0 OR MIT",
-rfc6979: 0.4.0, "Apache-2.0 OR MIT",
-rgb: 0.8.53, "MIT",
-ring: 0.17.14, "Apache-2.0 AND ISC",
-ringbuffer: 0.16.0, "MIT",
-rkyv: 0.7.46, "MIT",
-rkyv_derive: 0.7.46, "MIT",
-rmcp: 1.6.0, "Apache-2.0",
-rmcp-macros: 1.6.0, "Apache-2.0",
-rmp: 0.8.15, "MIT",
-rmp-serde: 1.3.1, "MIT",
-roaring: 0.11.4, "Apache-2.0 OR MIT",
-rolling-file: 0.2.0, "Apache-2.0 OR MIT",
-route-recognizer: 0.3.1, "MIT",
-roxmltree: 0.20.0, "Apache-2.0 OR MIT",
-rsa: 0.9.10, "Apache-2.0 OR MIT",
-rust-embed: 8.11.0, "MIT",
-rust-embed-impl: 8.11.0, "MIT",
-rust-embed-utils: 8.11.0, "MIT",
-rust-ini: 0.21.3, "MIT",
-rust_decimal: 1.42.0, "MIT",
-rustc-hash: 2.1.2, "Apache-2.0 OR MIT",
-rustc_version: 0.4.1, "Apache-2.0 OR MIT",
-rustc_version_runtime: 0.3.0, "MIT",
-rusticata-macros: 4.1.0, "Apache-2.0 OR MIT",
-rustix: 0.38.44, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-rustix: 1.1.4, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-rustls: 0.23.40, "Apache-2.0 OR ISC OR MIT",
-rustls-native-certs: 0.8.3, "Apache-2.0 OR ISC OR MIT",
-rustls-pemfile: 2.2.0, "Apache-2.0 OR ISC OR MIT",
-rustls-pki-types: 1.14.1, "Apache-2.0 OR MIT",
-rustls-platform-verifier: 0.6.2, "Apache-2.0 OR MIT",
-rustls-platform-verifier: 0.7.0, "Apache-2.0 OR MIT",
-rustls-platform-verifier-android: 0.1.1, "Apache-2.0 OR MIT",
-rustls-webpki: 0.103.13, "ISC",
-rustversion: 1.0.22, "Apache-2.0 OR MIT",
-rustybuzz: 0.20.1, "MIT",
-ryu: 1.0.23, "Apache-2.0 OR BSL-1.0",
-same-file: 1.0.6, "MIT OR Unlicense",
-scc: 2.4.0, "Apache-2.0",
-schannel: 0.1.29, "MIT",
-schemars: 0.9.0, "MIT",
-schemars: 1.2.1, "MIT",
-schemars_derive: 1.2.1, "MIT",
-scoped-tls: 1.0.1, "Apache-2.0 OR MIT",
-scopeguard: 1.2.0, "Apache-2.0 OR MIT",
-sdd: 3.0.10, "Apache-2.0",
-seahash: 4.1.0, "MIT",
-sealed: 0.6.0, "Apache-2.0 OR MIT",
-sec1: 0.7.3, "Apache-2.0 OR MIT",
-secrecy: 0.10.3, "Apache-2.0 OR MIT",
-security-framework: 3.7.0, "Apache-2.0 OR MIT",
-security-framework-sys: 2.17.0, "Apache-2.0 OR MIT",
-seize: 0.5.1, "MIT",
-semver: 1.0.28, "Apache-2.0 OR MIT",
-send_wrapper: 0.6.0, "Apache-2.0 OR MIT",
-seq-macro: 0.3.6, "Apache-2.0 OR MIT",
-serde: 1.0.228, "Apache-2.0 OR MIT",
-serde-big-array: 0.5.1, "Apache-2.0 OR MIT",
-serde-wasm-bindgen: 0.6.5, "MIT",
-serde_bytes: 0.11.19, "Apache-2.0 OR MIT",
-serde_core: 1.0.228, "Apache-2.0 OR MIT",
-serde_derive: 1.0.228, "Apache-2.0 OR MIT",
-serde_derive_internals: 0.29.1, "Apache-2.0 OR MIT",
-serde_json: 1.0.149, "Apache-2.0 OR MIT",
-serde_path_to_error: 0.1.20, "Apache-2.0 OR MIT",
-serde_repr: 0.1.20, "Apache-2.0 OR MIT",
-serde_spanned: 0.6.9, "Apache-2.0 OR MIT",
-serde_spanned: 1.1.1, "Apache-2.0 OR MIT",
-serde_urlencoded: 0.7.1, "Apache-2.0 OR MIT",
-serde_v8: 0.260.0, "MIT",
-serde_with: 3.19.0, "Apache-2.0 OR MIT",
-serde_with_macros: 3.19.0, "Apache-2.0 OR MIT",
-serde_yaml_ng: 0.10.0, "MIT",
-serial_test: 3.4.0, "MIT",
-serial_test_derive: 3.4.0, "MIT",
-server: 0.8.0, "Apache-2.0",
-server-ng: 0.8.0, "Apache-2.0",
-sha1: 0.10.6, "Apache-2.0 OR MIT",
-sha1: 0.11.0, "Apache-2.0 OR MIT",
-sha2: 0.10.9, "Apache-2.0 OR MIT",
-sha2: 0.11.0, "Apache-2.0 OR MIT",
-sha3: 0.11.0, "Apache-2.0 OR MIT",
-shard: 0.1.0, "N/A",
-sharded-slab: 0.1.7, "MIT",
-shlex: 1.3.0, "Apache-2.0 OR MIT",
-signal-hook-registry: 1.4.8, "Apache-2.0 OR MIT",
-signature: 2.2.0, "Apache-2.0 OR MIT",
-simd-adler32: 0.3.9, "MIT",
-simd-json: 0.17.0, "Apache-2.0 OR MIT",
-simd_cesu8: 1.1.1, "Apache-2.0 OR MIT",
-simd_helpers: 0.1.0, "MIT",
-simdutf8: 0.1.5, "Apache-2.0 OR MIT",
-simple_asn1: 0.6.4, "ISC",
-simplecss: 0.2.2, "Apache-2.0 OR MIT",
-simulator: 0.1.0, "N/A",
-siphasher: 1.0.3, "Apache-2.0 OR MIT",
-slab: 0.4.12, "MIT",
-slotmap: 1.1.1, "Zlib",
-smallvec: 1.15.1, "Apache-2.0 OR MIT",
-smart-default: 0.7.1, "MIT",
-smawk: 0.3.2, "MIT",
-snafu: 0.8.9, "Apache-2.0 OR MIT",
-snafu-derive: 0.8.9, "Apache-2.0 OR MIT",
-snap: 1.1.1, "BSD-3-Clause",
-socket2: 0.5.10, "Apache-2.0 OR MIT",
-socket2: 0.6.3, "Apache-2.0 OR MIT",
-sourcemap: 9.3.2, "BSD-3-Clause",
-spin: 0.9.8, "MIT",
-spinning_top: 0.3.0, "Apache-2.0 OR MIT",
-spki: 0.7.3, "Apache-2.0 OR MIT",
-sqlparser: 0.61.0, "Apache-2.0",
-sqlx: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-core: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-macros: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-macros-core: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-mysql: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-postgres: 0.8.6, "Apache-2.0 OR MIT",
-sqlx-sqlite: 0.8.6, "Apache-2.0 OR MIT",
-sse-stream: 0.2.3, "Apache-2.0 OR MIT",
-stable_deref_trait: 1.2.1, "Apache-2.0 OR MIT",
-stacker: 0.1.24, "Apache-2.0 OR MIT",
-static-toml: 1.3.0, "MIT",
-static_assertions: 1.1.0, "Apache-2.0 OR MIT",
-strict-num: 0.1.1, "MIT",
-stringcase: 0.4.0, "MIT",
-stringprep: 0.1.5, "Apache-2.0 OR MIT",
-strsim: 0.11.1, "MIT",
-structmeta: 0.3.0, "Apache-2.0 OR MIT",
-structmeta-derive: 0.3.0, "Apache-2.0 OR MIT",
-strum: 0.27.2, "MIT",
-strum: 0.28.0, "MIT",
-strum_macros: 0.27.2, "MIT",
-strum_macros: 0.28.0, "MIT",
-subtle: 2.6.1, "BSD-3-Clause",
-svgtypes: 0.15.3, "Apache-2.0 OR MIT",
-symlink: 0.1.0, "Apache-2.0 OR MIT",
-syn: 1.0.109, "Apache-2.0 OR MIT",
-syn: 2.0.117, "Apache-2.0 OR MIT",
-sync_wrapper: 1.0.2, "Apache-2.0",
-synchrony: 0.1.8, "MIT",
-synstructure: 0.13.2, "MIT",
-synthez: 0.4.0, "BlueOak-1.0.0",
-synthez-codegen: 0.4.0, "BlueOak-1.0.0",
-synthez-core: 0.4.0, "BlueOak-1.0.0",
-sys_traits: 0.1.27, "MIT",
-sys_traits_macros: 0.1.0, "MIT",
-sysinfo: 0.37.2, "MIT",
-sysinfo: 0.39.0, "MIT",
-system-configuration: 0.7.0, "Apache-2.0 OR MIT",
-system-configuration-sys: 0.6.0, "Apache-2.0 OR MIT",
-tagptr: 0.2.0, "Apache-2.0 OR MIT",
-take_mut: 0.2.2, "MIT",
-tap: 1.0.1, "MIT",
-tar: 0.4.45, "Apache-2.0 OR MIT",
-tempfile: 3.27.0, "Apache-2.0 OR MIT",
-terminal_size: 0.4.4, "Apache-2.0 OR MIT",
-termtree: 0.5.1, "MIT",
-test-case: 3.3.1, "MIT",
-test-case-core: 3.3.1, "MIT",
-test-case-macros: 3.3.1, "MIT",
-testcontainers: 0.27.3, "Apache-2.0 OR MIT",
-testcontainers-modules: 0.15.0, "MIT",
-textwrap: 0.16.2, "MIT",
-thin-cell: 0.1.2, "MIT",
-thiserror: 1.0.69, "Apache-2.0 OR MIT",
-thiserror: 2.0.18, "Apache-2.0 OR MIT",
-thiserror-impl: 1.0.69, "Apache-2.0 OR MIT",
-thiserror-impl: 2.0.18, "Apache-2.0 OR MIT",
-thread_local: 1.1.9, "Apache-2.0 OR MIT",
-thrift: 0.17.0, "Apache-2.0",
-tiff: 0.11.3, "MIT",
-time: 0.3.47, "Apache-2.0 OR MIT",
-time-core: 0.1.8, "Apache-2.0 OR MIT",
-time-macros: 0.2.27, "Apache-2.0 OR MIT",
-tiny-keccak: 2.0.2, "CC0-1.0",
-tiny-skia: 0.11.4, "BSD-3-Clause",
-tiny-skia-path: 0.11.4, "BSD-3-Clause",
-tinystr: 0.8.3, "Unicode-3.0",
-tinyvec: 1.11.0, "Apache-2.0 OR MIT OR Zlib",
-tinyvec_macros: 0.1.1, "Apache-2.0 OR MIT OR Zlib",
-tokio: 1.52.3, "MIT",
-tokio-macros: 2.7.0, "MIT",
-tokio-rustls: 0.26.4, "Apache-2.0 OR MIT",
-tokio-stream: 0.1.18, "MIT",
-tokio-tungstenite: 0.29.0, "MIT",
-tokio-util: 0.7.18, "MIT",
-tokise: 0.2.1, "Apache-2.0 OR MIT",
-toml: 0.8.23, "Apache-2.0 OR MIT",
-toml: 1.1.2+spec-1.1.0, "Apache-2.0 OR MIT",
-toml_datetime: 0.6.11, "Apache-2.0 OR MIT",
-toml_datetime: 1.1.1+spec-1.1.0, "Apache-2.0 OR MIT",
-toml_edit: 0.19.15, "Apache-2.0 OR MIT",
-toml_edit: 0.22.27, "Apache-2.0 OR MIT",
-toml_parser: 1.1.2+spec-1.1.0, "Apache-2.0 OR MIT",
-toml_write: 0.1.2, "Apache-2.0 OR MIT",
-toml_writer: 1.1.1+spec-1.1.0, "Apache-2.0 OR MIT",
-tonic: 0.14.6, "MIT",
-tonic-prost: 0.14.6, "MIT",
-tools: 0.1.0, "Apache-2.0",
-tower: 0.5.3, "MIT",
-tower-http: 0.6.10, "MIT",
-tower-layer: 0.3.3, "MIT",
-tower-service: 0.3.3, "MIT",
-tracing: 0.1.44, "MIT",
-tracing-appender: 0.2.5, "MIT",
-tracing-attributes: 0.1.31, "MIT",
-tracing-core: 0.1.36, "MIT",
-tracing-log: 0.2.0, "MIT",
-tracing-opentelemetry: 0.32.1, "MIT",
-tracing-subscriber: 0.3.23, "MIT",
-trait-variant: 0.1.2, "Apache-2.0 OR MIT",
-try-lock: 0.2.5, "MIT",
-ttf-parser: 0.25.1, "Apache-2.0 OR MIT",
-tungstenite: 0.28.0, "Apache-2.0 OR MIT",
-tungstenite: 0.29.0, "Apache-2.0 OR MIT",
-twox-hash: 2.1.2, "MIT",
-typed-builder: 0.20.1, "Apache-2.0 OR MIT",
-typed-builder: 0.22.0, "Apache-2.0 OR MIT",
-typed-builder: 0.23.2, "Apache-2.0 OR MIT",
-typed-builder-macro: 0.20.1, "Apache-2.0 OR MIT",
-typed-builder-macro: 0.22.0, "Apache-2.0 OR MIT",
-typed-builder-macro: 0.23.2, "Apache-2.0 OR MIT",
-typed-path: 0.12.3, "Apache-2.0 OR MIT",
-typeid: 1.0.3, "Apache-2.0 OR MIT",
-typenum: 1.20.0, "Apache-2.0 OR MIT",
-typetag: 0.2.21, "Apache-2.0 OR MIT",
-typetag-impl: 0.2.21, "Apache-2.0 OR MIT",
-ucd-trie: 0.1.7, "Apache-2.0 OR MIT",
-ulid: 1.2.1, "MIT",
-uncased: 0.9.10, "Apache-2.0 OR MIT",
-unicase: 2.9.0, "Apache-2.0 OR MIT",
-unicode-bidi: 0.3.18, "Apache-2.0 OR MIT",
-unicode-bidi-mirroring: 0.4.0, "Apache-2.0 OR MIT",
-unicode-ccc: 0.4.0, "Apache-2.0 OR MIT",
-unicode-id-start: 1.4.0, "(Apache-2.0 OR MIT) AND Unicode-3.0",
-unicode-ident: 1.0.24, "(Apache-2.0 OR MIT) AND Unicode-3.0",
-unicode-linebreak: 0.1.5, "Apache-2.0",
-unicode-normalization: 0.1.25, "Apache-2.0 OR MIT",
-unicode-properties: 0.1.4, "Apache-2.0 OR MIT",
-unicode-script: 0.5.8, "Apache-2.0 OR MIT",
-unicode-segmentation: 1.13.2, "Apache-2.0 OR MIT",
-unicode-vo: 0.1.0, "Apache-2.0 OR MIT",
-unicode-width: 0.1.14, "Apache-2.0 OR MIT",
-unicode-width: 0.2.2, "Apache-2.0 OR MIT",
-unicode-xid: 0.2.6, "Apache-2.0 OR MIT",
-universal-hash: 0.5.1, "Apache-2.0 OR MIT",
-unsafe-libyaml: 0.2.11, "MIT",
-untrusted: 0.9.0, "ISC",
-ureq: 3.3.0, "Apache-2.0 OR MIT",
-ureq-proto: 0.6.0, "Apache-2.0 OR MIT",
-url: 2.5.8, "Apache-2.0 OR MIT",
-urlencoding: 2.1.3, "MIT",
-usvg: 0.45.1, "Apache-2.0 OR MIT",
-utf-8: 0.7.6, "Apache-2.0 OR MIT",
-utf8-width: 0.1.8, "MIT",
-utf8-zero: 0.8.1, "Apache-2.0 OR MIT",
-utf8_iter: 1.0.4, "Apache-2.0 OR MIT",
-utf8parse: 0.2.2, "Apache-2.0 OR MIT",
-uuid: 1.23.1, "Apache-2.0 OR MIT",
-v8: 137.3.0, "MIT",
-v_frame: 0.3.9, "BSD-2-Clause",
-v_htmlescape: 0.15.8, "Apache-2.0 OR MIT",
-validator: 0.19.0, "MIT",
-validator_derive: 0.19.0, "MIT",
-valuable: 0.1.1, "MIT",
-value-trait: 0.12.1, "Apache-2.0 OR MIT",
-vcpkg: 0.2.15, "Apache-2.0 OR MIT",
-vergen: 9.1.0, "Apache-2.0 OR MIT",
-vergen-git2: 9.1.0, "Apache-2.0 OR MIT",
-vergen-lib: 9.1.0, "Apache-2.0 OR MIT",
-version_check: 0.9.5, "Apache-2.0 OR MIT",
-void: 1.0.2, "MIT",
-vsimd: 0.8.0, "MIT",
-wait-timeout: 0.2.1, "Apache-2.0 OR MIT",
-walkdir: 2.5.0, "MIT OR Unlicense",
-want: 0.3.1, "MIT",
-wasi: 0.11.1+wasi-snapshot-preview1, "Apache-2.0 OR Apache-2.0 WITH 
LLVM-exception OR MIT",
-wasip2: 1.0.3+wasi-0.2.9, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR 
MIT",
-wasip3: 0.4.0+wasi-0.3.0-rc-2026-01-06, "Apache-2.0 OR Apache-2.0 WITH 
LLVM-exception OR MIT",
-wasite: 0.1.0, "Apache-2.0 OR BSL-1.0 OR MIT",
-wasm-bindgen: 0.2.121, "Apache-2.0 OR MIT",
-wasm-bindgen-futures: 0.4.71, "Apache-2.0 OR MIT",
-wasm-bindgen-macro: 0.2.121, "Apache-2.0 OR MIT",
-wasm-bindgen-macro-support: 0.2.121, "Apache-2.0 OR MIT",
-wasm-bindgen-shared: 0.2.121, "Apache-2.0 OR MIT",
-wasm-encoder: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wasm-metadata: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wasm-streams: 0.4.2, "Apache-2.0 OR MIT",
-wasm-streams: 0.5.0, "Apache-2.0 OR MIT",
-wasm_dep_analyzer: 0.3.0, "MIT",
-wasmparser: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wasmtimer: 0.4.3, "MIT",
-web-sys: 0.3.98, "Apache-2.0 OR MIT",
-web-time: 1.1.0, "Apache-2.0 OR MIT",
-webpki-root-certs: 1.0.7, "CDLA-Permissive-2.0",
-webpki-roots: 0.26.11, "CDLA-Permissive-2.0",
-webpki-roots: 1.0.7, "CDLA-Permissive-2.0",
-weezl: 0.1.12, "Apache-2.0 OR MIT",
-which: 6.0.3, "MIT",
-whoami: 1.6.1, "Apache-2.0 OR BSL-1.0 OR MIT",
-widestring: 1.2.1, "Apache-2.0 OR MIT",
-winapi: 0.3.9, "Apache-2.0 OR MIT",
-winapi-i686-pc-windows-gnu: 0.4.0, "Apache-2.0 OR MIT",
-winapi-util: 0.1.11, "MIT OR Unlicense",
-winapi-x86_64-pc-windows-gnu: 0.4.0, "Apache-2.0 OR MIT",
-windows: 0.61.3, "Apache-2.0 OR MIT",
-windows: 0.62.2, "Apache-2.0 OR MIT",
-windows-collections: 0.2.0, "Apache-2.0 OR MIT",
-windows-collections: 0.3.2, "Apache-2.0 OR MIT",
-windows-core: 0.61.2, "Apache-2.0 OR MIT",
-windows-core: 0.62.2, "Apache-2.0 OR MIT",
-windows-future: 0.2.1, "Apache-2.0 OR MIT",
-windows-future: 0.3.2, "Apache-2.0 OR MIT",
-windows-implement: 0.60.2, "Apache-2.0 OR MIT",
-windows-interface: 0.59.3, "Apache-2.0 OR MIT",
-windows-link: 0.1.3, "Apache-2.0 OR MIT",
-windows-link: 0.2.1, "Apache-2.0 OR MIT",
-windows-numerics: 0.2.0, "Apache-2.0 OR MIT",
-windows-numerics: 0.3.1, "Apache-2.0 OR MIT",
-windows-registry: 0.6.1, "Apache-2.0 OR MIT",
-windows-result: 0.3.4, "Apache-2.0 OR MIT",
-windows-result: 0.4.1, "Apache-2.0 OR MIT",
-windows-strings: 0.4.2, "Apache-2.0 OR MIT",
-windows-strings: 0.5.1, "Apache-2.0 OR MIT",
-windows-sys: 0.45.0, "Apache-2.0 OR MIT",
-windows-sys: 0.48.0, "Apache-2.0 OR MIT",
-windows-sys: 0.52.0, "Apache-2.0 OR MIT",
-windows-sys: 0.59.0, "Apache-2.0 OR MIT",
-windows-sys: 0.60.2, "Apache-2.0 OR MIT",
-windows-sys: 0.61.2, "Apache-2.0 OR MIT",
-windows-targets: 0.42.2, "Apache-2.0 OR MIT",
-windows-targets: 0.48.5, "Apache-2.0 OR MIT",
-windows-targets: 0.52.6, "Apache-2.0 OR MIT",
-windows-targets: 0.53.5, "Apache-2.0 OR MIT",
-windows-threading: 0.1.0, "Apache-2.0 OR MIT",
-windows-threading: 0.2.1, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.42.2, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.48.5, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.52.6, "Apache-2.0 OR MIT",
-windows_aarch64_gnullvm: 0.53.1, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.42.2, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.48.5, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.52.6, "Apache-2.0 OR MIT",
-windows_aarch64_msvc: 0.53.1, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.42.2, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.48.5, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.52.6, "Apache-2.0 OR MIT",
-windows_i686_gnu: 0.53.1, "Apache-2.0 OR MIT",
-windows_i686_gnullvm: 0.52.6, "Apache-2.0 OR MIT",
-windows_i686_gnullvm: 0.53.1, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.42.2, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.48.5, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.52.6, "Apache-2.0 OR MIT",
-windows_i686_msvc: 0.53.1, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.42.2, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.48.5, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.52.6, "Apache-2.0 OR MIT",
-windows_x86_64_gnu: 0.53.1, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.42.2, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.48.5, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.52.6, "Apache-2.0 OR MIT",
-windows_x86_64_gnullvm: 0.53.1, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.42.2, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.48.5, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.52.6, "Apache-2.0 OR MIT",
-windows_x86_64_msvc: 0.53.1, "Apache-2.0 OR MIT",
-winnow: 0.5.40, "MIT",
-winnow: 0.7.15, "MIT",
-winnow: 1.0.2, "MIT",
-winsafe: 0.0.19, "MIT",
-wiremock: 0.6.5, "Apache-2.0 OR MIT",
-wit-bindgen: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wit-bindgen: 0.57.1, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wit-bindgen-core: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR 
MIT",
-wit-bindgen-rust: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR 
MIT",
-wit-bindgen-rust-macro: 0.51.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception 
OR MIT",
-wit-component: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-wit-parser: 0.244.0, "Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT",
-writeable: 0.6.3, "Unicode-3.0",
-wyz: 0.5.1, "MIT",
-x509-parser: 0.18.1, "Apache-2.0 OR MIT",
-xattr: 1.6.1, "Apache-2.0 OR MIT",
-xmlparser: 0.13.6, "Apache-2.0 OR MIT",
-xmlwriter: 0.1.0, "MIT",
-y4m: 0.8.0, "MIT",
-yansi: 1.0.1, "Apache-2.0 OR MIT",
-yasna: 0.5.2, "Apache-2.0 OR MIT",
-yew: 0.23.0, "Apache-2.0 OR MIT",
-yew-macro: 0.23.0, "Apache-2.0 OR MIT",
-yew-router: 0.20.0, "Apache-2.0 OR MIT",
-yew-router-macro: 0.20.0, "Apache-2.0 OR MIT",
-yoke: 0.8.2, "Unicode-3.0",
-yoke-derive: 0.8.2, "Unicode-3.0",
-z85: 3.0.7, "Apache-2.0 OR MIT",
-zerocopy: 0.8.48, "Apache-2.0 OR BSD-2-Clause OR MIT",
-zerocopy-derive: 0.8.48, "Apache-2.0 OR BSD-2-Clause OR MIT",
-zerofrom: 0.1.7, "Unicode-3.0",
-zerofrom-derive: 0.1.7, "Unicode-3.0",
-zeroize: 1.8.2, "Apache-2.0 OR MIT",
-zeroize_derive: 1.4.3, "Apache-2.0 OR MIT",
-zerotrie: 0.2.4, "Unicode-3.0",
-zerovec: 0.11.6, "Unicode-3.0",
-zerovec-derive: 0.11.3, "Unicode-3.0",
-zip: 0.6.6, "MIT",
-zip: 8.6.0, "MIT",
-zlib-rs: 0.6.3, "Zlib",
-zmij: 1.0.21, "MIT",
-zopfli: 0.8.3, "Apache-2.0",
-zstd: 0.13.3, "MIT",
-zstd-safe: 7.2.4, "Apache-2.0 OR MIT",
-zstd-sys: 2.0.16+zstd.1.5.7, "Apache-2.0 OR MIT",
-zune-core: 0.4.12, "Apache-2.0 OR MIT OR Zlib",
-zune-core: 0.5.1, "Apache-2.0 OR MIT OR Zlib",
-zune-inflate: 0.2.54, "Apache-2.0 OR MIT OR Zlib",
-zune-jpeg: 0.4.21, "Apache-2.0 OR MIT OR Zlib",
-zune-jpeg: 0.5.15, "Apache-2.0 OR MIT OR Zlib",
diff --git a/NOTICE b/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/NOTICE
+++ b/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
 
 ================================================================
 
-This product includes various dependencies and code components that are 
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository 
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
 The Iggy project code was originally created, designed, developed by Piotr 
Gankiewicz in April 2023.
 It was released as an open-source project under MIT License, later converted 
to Apache 2.0 License,
 and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in 
February 2025.
diff --git a/about.hbs b/about.hbs
new file mode 100644
index 000000000..1aa1447c9
--- /dev/null
+++ b/about.hbs
@@ -0,0 +1,23 @@
+Apache Iggy (incubating) - Third-Party License Manifest
+========================================================
+
+The following third-party software components are statically linked into
+this Apache Iggy (incubating) convenience binary artifact. The complete
+license text for each component is reproduced verbatim below as required
+by the Apache Software Foundation release policy.
+
+This manifest is generated by `cargo-about` from the workspace `Cargo.lock`
+at build time. It does NOT apply to the official Apache source release,
+which ships only source code and lockfiles (no bundled third-party code).
+
+{{#each overview}}
+
+================================================================================
+LICENSE: {{{name}}} ({{{id}}}) - used by {{count}} crate(s)
+USED BY:
+{{#each indices}}{{#with (lookup @root.licenses this)}}{{#each used_by}}  - 
{{{crate.name}}} {{{crate.version}}}{{#if crate.repository}} 
({{{crate.repository}}}){{/if}}
+{{/each}}{{/with}}{{/each}}================================================================================
+
+{{{text}}}
+
+{{/each}}
diff --git a/about.toml b/about.toml
new file mode 100644
index 000000000..54dad6d8c
--- /dev/null
+++ b/about.toml
@@ -0,0 +1,91 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# cargo-about configuration for Apache Iggy.
+#
+# Used by `scripts/ci/third-party-licenses.sh` to render a
+# LICENSE-binary manifest that is bundled into convenience binary
+# artifacts (Docker images, PyPI wheels). Source releases do NOT bundle
+# third-party code, so the manifest is generated at build time only and is
+# .gitignored.
+#
+# License IDs accepted by ASF policy for redistribution.
+# See https://www.apache.org/legal/resolved.html
+#
+# Category A (explicitly listed on resolved.html, OK to bundle):
+#   Apache-2.0, MIT, BSD-2-Clause, BSD-3-Clause, BSD-3-Clause-Clear,
+#   ISC, Zlib, Unicode-3.0, Unicode-DFS-2016, CC0-1.0, OpenSSL,
+#   BSL-1.0, NCSA
+#
+# Category B (binary-only, requires labelling per resolved.html):
+#   MPL-2.0
+#
+# NOT on resolved.html, but accepted as Category-A-equivalent by
+# precedent in apache/iceberg-rust, apache/opendal, apache/paimon-rust
+# deny.toml allow lists:
+#   bzip2-1.0.6
+#       BSD-derived. Pulled in by libbz2-rs-sys (runtime). Allowed in
+#       apache/iceberg-rust, apache/paimon-rust; used directly by
+#       apache/datafusion as a workspace dep.
+#   Apache-2.0 WITH LLVM-exception
+#       Apache-2.0 plus the LLVM exception broadening downstream-binary
+#       grants. Pulled in by target-lexicon via the pyo3 build chain
+#       reachable from foreign/python. Allowed in apache/iceberg-rust
+#       and apache/datafusion deny.toml.
+#   CDLA-Permissive-2.0 (scoped exception, not in general accept list)
+#       Permissive open-data license. Pulled in only by webpki-roots
+#       and webpki-root-certs (Mozilla CA bundle data). Crate-scoped
+#       exception below mirrors apache/opendal and apache/paimon-rust.
+#       apache/iceberg-rust accepts globally; we follow the more
+#       conservative scoped pattern.
+accepted = [
+    "Apache-2.0",
+    "Apache-2.0 WITH LLVM-exception",
+    "MIT",
+    "BSD-2-Clause",
+    "BSD-3-Clause",
+    "BSD-3-Clause-Clear",
+    "ISC",
+    "Zlib",
+    "Unicode-3.0",
+    "Unicode-DFS-2016",
+    "MPL-2.0",
+    "CC0-1.0",
+    "OpenSSL",
+    "BSL-1.0",
+    "NCSA",
+    "bzip2-1.0.6",
+]
+
+# Skip dev-dependencies and build-dependencies; neither is shipped in
+# the convenience binary. Build-deps run only during compilation, so
+# their code never lands in the artifact. Excluding them keeps the
+# manifest focused on what the user actually receives, and forces a
+# new build-only license to surface in CI rather than silently
+# expanding the accept list.
+ignore-dev-dependencies = true
+ignore-build-dependencies = true
+ignore-transitive-dependencies = false
+
+# Per-crate license overrides. Each entry permits the listed license
+# only for that specific crate, not the workspace as a whole.
+
+[webpki-roots]
+accepted = ["CDLA-Permissive-2.0"]
+
+[webpki-root-certs]
+accepted = ["CDLA-Permissive-2.0"]
diff --git a/core/ai/mcp/Dockerfile b/core/ai/mcp/Dockerfile
index 5712ae9af..ea68f4934 100644
--- a/core/ai/mcp/Dockerfile
+++ b/core/ai/mcp/Dockerfile
@@ -45,7 +45,7 @@ ARG LIBC=musl
 ARG IGGY_CI_BUILD
 ENV IGGY_CI_BUILD=${IGGY_CI_BUILD}
 
-RUN apk add --no-cache zig make autoconf automake libtool pkgconfig && \
+RUN apk add --no-cache bash curl tar zig make autoconf automake libtool 
pkgconfig && \
     cargo install cargo-zigbuild --locked && \
     rustup target add \
     x86_64-unknown-linux-musl \
@@ -99,6 +99,18 @@ RUN 
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARG
     cp /app/target/${RUST_TARGET}/release/iggy-mcp /app/iggy-mcp; \
     fi
 
+#
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+#
+RUN 
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARGETPLATFORM}-${LIBC}
 \
+    
--mount=type=cache,target=/usr/local/cargo/git,id=cargo-git-${TARGETPLATFORM}-${LIBC}
 \
+    TARGET="$(uname -m)-unknown-linux-musl" && \
+    curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+      | tar -xz -C /usr/local/bin --strip-components=1 
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+    ./scripts/ci/third-party-licenses.sh --generate --manifest 
core/ai/mcp/Cargo.toml --output /app/LICENSE-binary
+
 #
 # Final runtime - Debian trixie Slim
 #
@@ -106,5 +118,7 @@ FROM debian:trixie-slim AS runtime
 WORKDIR /app
 
 COPY --from=builder /app/iggy-mcp /usr/local/bin/iggy-mcp
+COPY --from=builder /app/LICENSE-binary /usr/share/doc/iggy-mcp/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-mcp/
 
 ENTRYPOINT ["iggy-mcp"]
diff --git a/core/bench/dashboard/server/Dockerfile 
b/core/bench/dashboard/server/Dockerfile
index cc6e16d77..bfedb7696 100644
--- a/core/bench/dashboard/server/Dockerfile
+++ b/core/bench/dashboard/server/Dockerfile
@@ -68,6 +68,14 @@ RUN cd core/bench/dashboard/frontend && trunk build --release
 # Build the server with release profile
 RUN cargo build --release --bin iggy-bench-dashboard-server
 
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+RUN TARGET="$(uname -m)-unknown-linux-musl" && \
+    curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+      | tar -xz -C /usr/local/bin --strip-components=1 
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+    ./scripts/ci/third-party-licenses.sh --generate --manifest 
core/bench/dashboard/server/Cargo.toml --output 
/usr/src/iggy-bench-dashboard/LICENSE-binary
+
 # Runtime stage
 FROM debian:trixie-slim
 
@@ -84,6 +92,8 @@ RUN apt-get update && apt-get install -y 
--no-install-recommends \
 # Copy the built binary and frontend files
 COPY --from=builder 
/usr/src/iggy-bench-dashboard/target/release/iggy-bench-dashboard-server /app/
 COPY --from=builder 
/usr/src/iggy-bench-dashboard/core/bench/dashboard/frontend/dist 
/app/frontend/dist
+COPY --from=builder /usr/src/iggy-bench-dashboard/LICENSE-binary 
/usr/share/doc/iggy-bench-dashboard/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-bench-dashboard/
 
 # Create data directory and non-root user
 RUN groupadd -r iggy && \
diff --git a/core/clock/Cargo.toml b/core/clock/Cargo.toml
index df6ad0a8c..b1dc9ebfa 100644
--- a/core/clock/Cargo.toml
+++ b/core/clock/Cargo.toml
@@ -19,6 +19,7 @@
 name = "clock"
 version = "0.1.0"
 edition = "2024"
+license = "Apache-2.0"
 publish = false
 
 [dependencies]
diff --git a/core/connectors/runtime/Dockerfile 
b/core/connectors/runtime/Dockerfile
index e29eab4c9..880783687 100644
--- a/core/connectors/runtime/Dockerfile
+++ b/core/connectors/runtime/Dockerfile
@@ -45,7 +45,7 @@ ARG LIBC=glibc
 ARG IGGY_CI_BUILD
 ENV IGGY_CI_BUILD=${IGGY_CI_BUILD}
 
-RUN apk add --no-cache zig make autoconf automake libtool pkgconfig hwloc-dev 
xz-dev xz-static && \
+RUN apk add --no-cache bash curl tar zig make autoconf automake libtool 
pkgconfig hwloc-dev xz-dev xz-static && \
     cargo install cargo-zigbuild --locked && \
     rustup target add \
     x86_64-unknown-linux-musl \
@@ -102,6 +102,18 @@ RUN 
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARG
     cp /app/target/${RUST_TARGET}/release/iggy-connectors 
/app/iggy-connectors; \
     fi
 
+#
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+#
+RUN 
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARGETPLATFORM}-${LIBC}
 \
+    
--mount=type=cache,target=/usr/local/cargo/git,id=cargo-git-${TARGETPLATFORM}-${LIBC}
 \
+    TARGET="$(uname -m)-unknown-linux-musl" && \
+    curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+      | tar -xz -C /usr/local/bin --strip-components=1 
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+    ./scripts/ci/third-party-licenses.sh --generate --manifest 
core/connectors/runtime/Cargo.toml --output /app/LICENSE-binary
+
 #
 # Final runtime - Debian trixie Slim
 #
@@ -109,5 +121,7 @@ FROM debian:trixie-slim AS runtime
 WORKDIR /app
 
 COPY --from=builder /app/iggy-connectors /usr/local/bin/iggy-connectors
+COPY --from=builder /app/LICENSE-binary 
/usr/share/doc/iggy-connect/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-connect/
 
 ENTRYPOINT ["iggy-connectors"]
diff --git a/core/server/Dockerfile b/core/server/Dockerfile
index 62d37c4e9..989d03fad 100644
--- a/core/server/Dockerfile
+++ b/core/server/Dockerfile
@@ -46,7 +46,7 @@ ARG LIBC=musl
 ARG IGGY_CI_BUILD
 ENV IGGY_CI_BUILD=${IGGY_CI_BUILD}
 
-RUN apk add --no-cache zig make autoconf automake libtool pkgconfig hwloc-dev 
xz-dev xz-static nodejs npm && \
+RUN apk add --no-cache bash curl tar zig make autoconf automake libtool 
pkgconfig hwloc-dev xz-dev xz-static nodejs npm && \
     cargo install cargo-zigbuild --locked && \
     rustup target add \
     x86_64-unknown-linux-musl \
@@ -102,6 +102,18 @@ RUN 
--mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry-${TARG
     cp /app/target/${RUST_TARGET}/release/iggy /app/iggy; \
     fi
 
+# Generate third-party license manifest. Required by ASF release policy:
+# convenience binaries that statically link third-party code MUST include
+# the full license text of every bundled crate inside the artifact.
+RUN TARGET="$(uname -m)-unknown-linux-musl" && \
+    curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+      | tar -xz -C /usr/local/bin --strip-components=1 
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+    ./scripts/ci/third-party-licenses.sh --generate \
+      --manifest core/server/Cargo.toml \
+      --manifest core/cli/Cargo.toml \
+      --manifest web \
+      --output /app/LICENSE-binary
+
 # ── prebuilt path (FAST) 
──────────────────────────────────────────────────────
 FROM debian:trixie-slim AS prebuilt
 WORKDIR /out
@@ -111,6 +123,24 @@ COPY ${PREBUILT_IGGY_SERVER} /out/iggy-server
 COPY ${PREBUILT_IGGY_CLI}    /out/iggy
 RUN chmod +x /out/iggy-server /out/iggy
 
+# Generate LICENSE-binary for the prebuilt path. The prebuilt binaries are
+# built externally from this same Cargo.lock, so the manifest accurately
+# reflects what is statically linked into the image. iggy-server embeds
+# the compiled web UI (see core/server/build.rs), so the manifest must
+# also enumerate the web npm production dependencies.
+FROM --platform=$BUILDPLATFORM chef AS license-gen
+RUN apk add --no-cache bash curl tar nodejs npm
+COPY . .
+RUN cd web && npm ci --omit=dev --prefer-offline --no-audit
+RUN TARGET="$(uname -m)-unknown-linux-musl" && \
+    curl -sSfL 
"https://github.com/EmbarkStudios/cargo-about/releases/download/0.9.0/cargo-about-0.9.0-${TARGET}.tar.gz";
 \
+      | tar -xz -C /usr/local/bin --strip-components=1 
"cargo-about-0.9.0-${TARGET}/cargo-about" && \
+    ./scripts/ci/third-party-licenses.sh --generate \
+      --manifest core/server/Cargo.toml \
+      --manifest core/cli/Cargo.toml \
+      --manifest web \
+      --output /app/LICENSE-binary
+
 # ── final images 
──────────────────────────────────────────────────────────────
 FROM debian:trixie-slim AS runtime-prebuilt
 ARG TARGETPLATFORM
@@ -122,8 +152,10 @@ RUN apt-get update && apt-get install -y \
     libudev-dev \
     pkg-config \
     && rm -rf /var/lib/apt/lists/*
-COPY --from=prebuilt /out/iggy-server /usr/local/bin/iggy-server
-COPY --from=prebuilt /out/iggy        /usr/local/bin/iggy
+COPY --from=prebuilt    /out/iggy-server                
/usr/local/bin/iggy-server
+COPY --from=prebuilt    /out/iggy                       /usr/local/bin/iggy
+COPY --from=license-gen /app/LICENSE-binary             
/usr/share/doc/iggy/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy/
 RUN echo "═══════════════════════════════════════════════════════════════" && \
     echo "                    IGGY SERVER BUILD SUMMARY                  " && \
     echo "═══════════════════════════════════════════════════════════════" && \
@@ -152,6 +184,8 @@ RUN apt-get update && apt-get install -y \
     && rm -rf /var/lib/apt/lists/*
 COPY --from=builder /app/iggy-server /usr/local/bin/iggy-server
 COPY --from=builder /app/iggy        /usr/local/bin/iggy
+COPY --from=builder /app/LICENSE-binary /usr/share/doc/iggy/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy/
 RUN echo "═══════════════════════════════════════════════════════════════" && \
     echo "                    IGGY SERVER BUILD SUMMARY                  " && \
     echo "═══════════════════════════════════════════════════════════════" && \
diff --git a/core/shard/Cargo.toml b/core/shard/Cargo.toml
index 5d3151e7a..82bdb69f8 100644
--- a/core/shard/Cargo.toml
+++ b/core/shard/Cargo.toml
@@ -19,6 +19,7 @@
 name = "shard"
 version = "0.1.0"
 edition = "2024"
+license = "Apache-2.0"
 publish = false
 
 [dependencies]
diff --git a/core/simulator/Cargo.toml b/core/simulator/Cargo.toml
index 9f9d264e0..ab32a58cd 100644
--- a/core/simulator/Cargo.toml
+++ b/core/simulator/Cargo.toml
@@ -19,6 +19,7 @@
 name = "simulator"
 version = "0.1.0"
 edition = "2024"
+license = "Apache-2.0"
 publish = false
 
 [dependencies]
diff --git a/foreign/csharp/DEPENDENCIES.md b/foreign/csharp/DEPENDENCIES.md
deleted file mode 100644
index 4ae8d2e34..000000000
--- a/foreign/csharp/DEPENDENCIES.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Dependencies
-
-FluentAssertions: "6.12.0", "Apache-2.0",
-Microsoft.Extensions.Logging: "8.0.0", "MIT",
-Microsoft.Extensions.Logging.Console: "8.0.0", "MIT",
-Microsoft.NET.Test.Sdk: "18.0.1", "MIT",
-Microsoft.SourceLink.GitHub: "10.0.102", "MIT",
-Microsoft.Testing.Extensions.CodeCoverage: "18.3.2", "MIT",
-Microsoft.Testing.Extensions.TrxReport: "2.0.2", "MIT",
-Moq: "4.20.72", "BSD-3-Clause",
-Reqnroll.xUnit: "3.3.2", "BSD-3-Clause",
-Shouldly: "4.3.0", "BSD-3-Clause",
-System.IO.Hashing: "8.0.0", "MIT",
-Testcontainers: "4.10.0", "MIT",
-TUnit: "1.12.15", "MIT",
-xunit.v3.mtp-v2: "3.2.2", "Apache-2.0",
-xunit.runner.visualstudio: "3.1.5", "Apache-2.0",
diff --git a/foreign/csharp/Iggy_SDK.sln b/foreign/csharp/Iggy_SDK.sln
index 611c2f84d..5732f6978 100644
--- a/foreign/csharp/Iggy_SDK.sln
+++ b/foreign/csharp/Iggy_SDK.sln
@@ -12,7 +12,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = 
"Iggy_SDK.Tests.Integration"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionFolder", 
"SolutionFolder", "{3A9B7D3B-EFA9-4652-A647-C72F84616114}"
        ProjectSection(SolutionItems) = preProject
-               DEPENDENCIES.md = DEPENDENCIES.md
                Directory.Packages.props = Directory.Packages.props
                LICENSE = LICENSE
                NOTICE = NOTICE
diff --git a/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj 
b/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj
index e87a9dfa8..651406eda 100644
--- a/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj
+++ b/foreign/csharp/Iggy_SDK/Iggy_SDK.csproj
@@ -42,8 +42,8 @@
         <None Include="../LICENSE" Pack="true" PackagePath="">
             <Link>Properties/LICENSE</Link>
         </None>
-        <None Include="../DEPENDENCIES.md">
-            <Link>Properties\DEPENDENCIES.md</Link>
+        <None Include="../NOTICE" Pack="true" PackagePath="">
+            <Link>Properties/NOTICE</Link>
         </None>
     </ItemGroup>
 
diff --git a/foreign/csharp/NOTICE b/foreign/csharp/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/csharp/NOTICE
+++ b/foreign/csharp/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
 
 ================================================================
 
-This product includes various dependencies and code components that are 
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository 
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
 The Iggy project code was originally created, designed, developed by Piotr 
Gankiewicz in April 2023.
 It was released as an open-source project under MIT License, later converted 
to Apache 2.0 License,
 and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in 
February 2025.
diff --git a/foreign/go/NOTICE b/foreign/go/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/go/NOTICE
+++ b/foreign/go/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
 
 ================================================================
 
-This product includes various dependencies and code components that are 
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository 
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
 The Iggy project code was originally created, designed, developed by Piotr 
Gankiewicz in April 2023.
 It was released as an open-source project under MIT License, later converted 
to Apache 2.0 License,
 and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in 
February 2025.
diff --git a/foreign/java/NOTICE b/foreign/java/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/java/NOTICE
+++ b/foreign/java/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
 
 ================================================================
 
-This product includes various dependencies and code components that are 
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository 
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
 The Iggy project code was originally created, designed, developed by Piotr 
Gankiewicz in April 2023.
 It was released as an open-source project under MIT License, later converted 
to Apache 2.0 License,
 and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in 
February 2025.
diff --git a/foreign/node/NOTICE b/foreign/node/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/node/NOTICE
+++ b/foreign/node/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
 
 ================================================================
 
-This product includes various dependencies and code components that are 
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository 
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
 The Iggy project code was originally created, designed, developed by Piotr 
Gankiewicz in April 2023.
 It was released as an open-source project under MIT License, later converted 
to Apache 2.0 License,
 and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in 
February 2025.
diff --git a/foreign/node/package.json b/foreign/node/package.json
index 156f9927b..712f7c29b 100644
--- a/foreign/node/package.json
+++ b/foreign/node/package.json
@@ -28,7 +28,9 @@
     "dist/**/*.d.ts",
     "dist/index.d.ts",
     "!dist/bdd/",
-    "!dist/examples/"
+    "!dist/examples/",
+    "LICENSE",
+    "NOTICE"
   ],
   "types": "dist/index.d.ts",
   "main": "dist/index.js",
diff --git a/foreign/python/NOTICE b/foreign/python/NOTICE
index 61a3be1eb..cc8d19480 100644
--- a/foreign/python/NOTICE
+++ b/foreign/python/NOTICE
@@ -6,13 +6,6 @@ The Apache Software Foundation (http://www.apache.org/).
 
 ================================================================
 
-This product includes various dependencies and code components that are 
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository 
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
 The Iggy project code was originally created, designed, developed by Piotr 
Gankiewicz in April 2023.
 It was released as an open-source project under MIT License, later converted 
to Apache 2.0 License,
 and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in 
February 2025.
diff --git a/foreign/python/pyproject.toml b/foreign/python/pyproject.toml
index e7774fd20..e5c6506da 100644
--- a/foreign/python/pyproject.toml
+++ b/foreign/python/pyproject.toml
@@ -55,6 +55,12 @@ classifiers = [
 
 [tool.maturin]
 features = ["pyo3/extension-module"]
+# LICENSE-binary enumerates the statically-linked Rust crates
+# bundled into the wheel by maturin/PyO3. Generated at build time by
+# `scripts/ci/third-party-licenses.sh --generate --manifest 
foreign/python/Cargo.toml --output foreign/python/LICENSE-binary`
+# (foreign/python is excluded from the workspace, so cargo-about must be
+# pointed at this Cargo.toml explicitly). File is .gitignored; the wheel
+# build pipeline must generate it before invoking maturin.
 include = [
     { path = "LICENSE", format = [
         "sdist",
@@ -64,6 +70,9 @@ include = [
         "sdist",
         "wheel",
     ] },
+    { path = "LICENSE-binary", format = [
+        "wheel",
+    ] },
     { path = "apache_iggy.pyi", format = [
         "sdist",
     ] },
diff --git a/justfile b/justfile
index 2694389d3..6f37a5e81 100644
--- a/justfile
+++ b/justfile
@@ -75,11 +75,5 @@ licenses-fix:
 licenses-check:
   ./scripts/ci/license-headers.sh --check
 
-licenses-list-check:
-  ./scripts/ci/licenses-list.sh --check
-
-licenses-list-fix:
-  ./scripts/ci/licenses-list.sh --fix
-
 markdownlint:
   markdownlint '**/*.md' --ignore-path .gitignore
diff --git a/scripts/ci/licenses-list.sh b/scripts/ci/licenses-list.sh
deleted file mode 100755
index 2372ff3b3..000000000
--- a/scripts/ci/licenses-list.sh
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-set -euo pipefail
-
-# Default mode
-MODE="check"
-
-# Parse arguments
-if [ $# -gt 0 ]; then
-  case "$1" in
-    --check)
-      MODE="check"
-      ;;
-    --update|--fix)
-      MODE="update"
-      ;;
-    *)
-      echo "Usage: $0 [--check|--update|--fix]"
-      echo "  --check   Check if DEPENDENCIES.md is up to date (default)"
-      echo "  --update  Update DEPENDENCIES.md with current dependencies"
-      echo "  --fix     Alias for --update"
-      exit 1
-      ;;
-  esac
-fi
-
-# Check if cargo-license is installed
-if ! command -v cargo-license &>/dev/null; then
-  echo "❌ cargo-license command not found"
-  echo "💡 Install it using: cargo install cargo-license"
-  exit 1
-fi
-
-# Check if DEPENDENCIES.md exists
-if [ ! -f "DEPENDENCIES.md" ] && [ "$MODE" = "check" ]; then
-  echo "❌ DEPENDENCIES.md does not exist"
-  echo "💡 Run '$0 --fix' to create it"
-  exit 1
-fi
-
-# Generate current dependencies
-TEMP_FILE=$(mktemp)
-trap 'rm -f "$TEMP_FILE"' EXIT
-
-echo "Generating current dependencies list..."
-cargo license --color never --do-not-bundle --all-features >"$TEMP_FILE"
-
-# Update mode
-if [ "$MODE" = "update" ]; then
-  echo "🔧 Updating DEPENDENCIES.md..."
-  {
-    echo "# Dependencies"
-    echo ""
-    cat "$TEMP_FILE"
-  } >DEPENDENCIES.md
-  echo "✅ DEPENDENCIES.md has been updated"
-  exit 0
-fi
-
-# Check mode
-if [ "$MODE" = "check" ]; then
-  echo "🔍 Checking if DEPENDENCIES.md is up to date..."
-  # Create expected format for comparison
-  EXPECTED_FILE=$(mktemp)
-  trap 'rm -f "$TEMP_FILE" "$EXPECTED_FILE"' EXIT
-  {
-    echo "# Dependencies"
-    echo ""
-    cat "$TEMP_FILE"
-  } >"$EXPECTED_FILE"
-
-  if ! diff -q "$EXPECTED_FILE" DEPENDENCIES.md >/dev/null; then
-    echo "❌ DEPENDENCIES.md is out of date"
-    echo ""
-    echo "Diff:"
-    diff -u DEPENDENCIES.md "$EXPECTED_FILE" || true
-    echo ""
-    echo "💡 Run '$0 --fix' to update it"
-    exit 1
-  else
-    echo "✅ DEPENDENCIES.md is up to date"
-  fi
-fi
diff --git a/scripts/ci/render-node-licenses.mjs 
b/scripts/ci/render-node-licenses.mjs
new file mode 100755
index 000000000..173d9bf66
--- /dev/null
+++ b/scripts/ci/render-node-licenses.mjs
@@ -0,0 +1,225 @@
+#!/usr/bin/env node
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// Render or validate license-checker-rseidelsohn JSON output.
+//
+// Usage:
+//   render-node-licenses.mjs <license-checker-json>             render mode
+//   render-node-licenses.mjs --validate-only <json>             validate mode
+//
+// Render mode emits a LICENSE-binary manifest on stdout, embedding the
+// full LICENSE file text per package.
+//
+// Validate mode parses each package's SPDX expression, compares it
+// against the allow-list below, and exits non-zero on disallowed
+// licenses with a per-package report on stderr. Disjunctions (`OR`)
+// pass if ANY operand is in the allow-list, matching cargo-about's
+// permissive disjunction semantics. Conjunctions (`AND`) require ALL
+// operands to be in the allow-list. Unknown / UNLICENSED licenses
+// fail.
+
+import { readFileSync, existsSync } from 'node:fs';
+
+// Allow-list mirrors about.toml (Apache Iggy / ASF policy). Update both
+// in lockstep when adding a new accepted license. SPDX identifiers
+// only; expressions are tokenised before matching against this list.
+const ALLOWED_LICENSES = new Set([
+  'Apache-2.0',
+  'Apache-2.0 WITH LLVM-exception',
+  'MIT',
+  'BSD-2-Clause',
+  'BSD-3-Clause',
+  'BSD-3-Clause-Clear',
+  'ISC',
+  'Zlib',
+  'Unicode-3.0',
+  'Unicode-DFS-2016',
+  'MPL-2.0',
+  'CC0-1.0',
+  'OpenSSL',
+  'BSL-1.0',
+  'NCSA',
+  // Common npm-only SPDX identifiers used by widely-bundled packages.
+  // CC-BY-4.0 is a Cat-A documentation license; some npm packages
+  // declare it for embedded asset metadata. Acceptable per ASF
+  // resolved.html.
+  'CC-BY-4.0',
+  '0BSD',
+]);
+
+const args = process.argv.slice(2);
+const validateOnly = args[0] === '--validate-only';
+const inputPath = validateOnly ? args[1] : args[0];
+
+if (!inputPath) {
+  console.error('Usage: render-node-licenses.mjs [--validate-only] 
<license-checker-json>');
+  process.exit(1);
+}
+
+const data = JSON.parse(readFileSync(inputPath, 'utf8'));
+
+if (validateOnly) {
+  validate(data);
+} else {
+  render(data);
+}
+
+function normalizeIdent(ident) {
+  // license-checker-rseidelsohn appends `*` to identifiers it inferred
+  // heuristically (e.g. `MIT*` when the SPDX expression is missing but
+  // a LICENSE-MIT file was found). Treat them as the underlying SPDX
+  // for allow-list comparison.
+  return ident.trim().replace(/\*$/, '');
+}
+
+function tokenizeSpdx(expr) {
+  // Strip parens, split on AND/OR, drop empty tokens. Preserve
+  // operator structure by returning a flat list along with the
+  // outermost operator found. This is a best-effort parser; cargo-about
+  // does the same simplification (full SPDX evaluator is overkill here
+  // and the ASF only requires that AT LEAST one acceptable license
+  // applies).
+  const cleaned = String(expr).replace(/[()]/g, ' ').trim();
+  if (!cleaned) return { op: 'NONE', operands: [] };
+
+  const hasOr = /\bOR\b/i.test(cleaned);
+  const hasAnd = /\bAND\b/i.test(cleaned);
+
+  // If only one operator type appears, split on it.
+  if (hasOr && !hasAnd) {
+    return {
+      op: 'OR',
+      operands: cleaned.split(/\s+OR\s+/i).map(s => s.trim()).filter(Boolean),
+    };
+  }
+  if (hasAnd && !hasOr) {
+    return {
+      op: 'AND',
+      operands: cleaned.split(/\s+AND\s+/i).map(s => s.trim()).filter(Boolean),
+    };
+  }
+  if (hasOr && hasAnd) {
+    // Mixed expression. Treat conservatively: split on OR first, each
+    // operand may contain AND. The expression passes if any OR operand
+    // (a conjunction) is fully allowed.
+    return {
+      op: 'OR',
+      operands: cleaned.split(/\s+OR\s+/i).map(s => s.trim()).filter(Boolean),
+    };
+  }
+  return { op: 'SINGLE', operands: [cleaned] };
+}
+
+function isAllowed(licensesField) {
+  if (!licensesField) return false;
+  const value = Array.isArray(licensesField) ? licensesField.join(' OR ') : 
String(licensesField);
+  if (!value) return false;
+  if (/^UNKNOWN$|^UNLICENSED$/i.test(value.trim())) return false;
+
+  const { op, operands } = tokenizeSpdx(value);
+  if (operands.length === 0) return false;
+
+  switch (op) {
+    case 'OR':
+      return operands.some(operand => {
+        // Each operand may itself be an AND expression.
+        if (/\bAND\b/i.test(operand)) {
+          return operand.split(/\s+AND\s+/i).every(t => 
ALLOWED_LICENSES.has(normalizeIdent(t)));
+        }
+        return ALLOWED_LICENSES.has(normalizeIdent(operand));
+      });
+    case 'AND':
+      return operands.every(t => ALLOWED_LICENSES.has(normalizeIdent(t)));
+    case 'SINGLE':
+      return ALLOWED_LICENSES.has(normalizeIdent(operands[0]));
+    default:
+      return false;
+  }
+}
+
+function validate(pkgs) {
+  const violations = [];
+  for (const [pkg, info] of Object.entries(pkgs)) {
+    if (!isAllowed(info.licenses)) {
+      violations.push({ pkg, licenses: info.licenses ?? '(unknown)' });
+    }
+  }
+  if (violations.length > 0) {
+    console.error(`Disallowed npm license(s) detected (${violations.length} 
package(s)):`);
+    for (const v of violations) {
+      console.error(`  - ${v.pkg}: ${v.licenses}`);
+    }
+    console.error('');
+    console.error('Allowed SPDX identifiers are listed at the top of');
+    console.error('scripts/ci/render-node-licenses.mjs (mirrors about.toml).');
+    process.exit(1);
+  }
+  console.log(`OK: ${Object.keys(pkgs).length} npm package(s) validated 
against the SPDX allow-list.`);
+}
+
+function render(pkgs) {
+  const out = [];
+  out.push('Apache Iggy (incubating) - Third-Party License Manifest (Node)');
+  out.push('================================================================');
+  out.push('');
+  out.push('The following npm production dependencies are bundled into this');
+  out.push('Apache Iggy (incubating) convenience binary artifact. Packages 
are');
+  out.push('grouped by license; the canonical license text appears once per');
+  out.push('group as required by the Apache Software Foundation release 
policy.');
+  out.push('');
+  out.push('Generated by license-checker-rseidelsohn from the package 
manifest');
+  out.push('at build time. Does not apply to the official Apache source 
release.');
+  out.push('');
+
+  // Group packages by license. Use the raw `licenses` field as the
+  // grouping key so that compound expressions ("(MIT OR Apache-2.0)")
+  // and Custom URLs each form their own bucket. Within a bucket the
+  // first package's license file text is treated as canonical; the
+  // others just contribute to the USED BY listing.
+  const groups = new Map();
+  for (const [pkg, info] of Object.entries(pkgs).sort()) {
+    const key = String(info.licenses ?? '(unknown)');
+    if (!groups.has(key)) {
+      groups.set(key, { canonicalText: null, members: [] });
+    }
+    const g = groups.get(key);
+    if (g.canonicalText === null && info.licenseFile && 
existsSync(info.licenseFile)) {
+      g.canonicalText = readFileSync(info.licenseFile, 'utf8').trimEnd();
+    }
+    g.members.push({ pkg, info });
+  }
+
+  // Emit groups in stable order (sorted by SPDX key).
+  for (const [licenseKey, group] of Array.from(groups.entries()).sort((a, b) 
=> a[0].localeCompare(b[0]))) {
+    
out.push('================================================================================');
+    out.push(`LICENSE: ${licenseKey} - used by ${group.members.length} 
package(s)`);
+    out.push('USED BY:');
+    for (const { pkg, info } of group.members) {
+      let line = `  - ${pkg}`;
+      if (info.repository) line += ` (${info.repository})`;
+      out.push(line);
+    }
+    
out.push('================================================================================');
+    out.push('');
+    out.push(group.canonicalText ?? '(no license text available; see SPDX 
identifier above)');
+    out.push('');
+    out.push('');
+  }
+
+  process.stdout.write(out.join('\n'));
+}
diff --git a/scripts/ci/third-party-licenses.sh 
b/scripts/ci/third-party-licenses.sh
new file mode 100755
index 000000000..93a6f0178
--- /dev/null
+++ b/scripts/ci/third-party-licenses.sh
@@ -0,0 +1,269 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Validate or generate a LICENSE-binary manifest for a convenience
+# binary artifact (Docker image, PyPI wheel, etc.). ASF release policy
+# requires that each artifact bundling third-party code carries a
+# license enumeration of the packages it actually bundles. This script
+# drives cargo-about (Rust) and license-checker-rseidelsohn (Node) to
+# produce that enumeration.
+#
+# Usage: third-party-licenses.sh <action> --manifest <path> [--manifest <path> 
...] [--output <file>]
+#
+# Actions (exactly one required):
+#   --validate   Verify deps satisfy the accept list. No file written.
+#                Exits non-zero on disallowed license.
+#   --generate   Render the manifest to --output.
+#
+# --manifest accepts:
+#   * Path to a Cargo.toml                          -> Rust ecosystem
+#   * Path to a directory containing package.json   -> Node ecosystem
+#
+# Multiple --manifest flags are supported. Multiple Rust manifests are
+# rendered as a deduplicated union via a synthetic root crate. Multiple
+# Node manifests are concatenated. Mixed ecosystems concatenate the
+# Rust block first, Node block second.
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
+REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
+
+ACTION=""
+MANIFESTS=()
+OUTPUT=""
+
+usage() {
+  sed -n '/^# Usage:/,/^set -euo/{/^set -euo/d;p}' "$0" | sed 's/^# \{0,1\}//' 
>&2
+}
+
+die() {
+  echo "error: $*" >&2
+  exit 1
+}
+
+while (($# > 0)); do
+  case "$1" in
+    --validate)
+      [[ -n "$ACTION" ]] && die "actions --validate and --generate are 
mutually exclusive"
+      ACTION="validate"
+      shift
+      ;;
+    --generate)
+      [[ -n "$ACTION" ]] && die "actions --validate and --generate are 
mutually exclusive"
+      ACTION="generate"
+      shift
+      ;;
+    --manifest)
+      [[ $# -lt 2 ]] && die "--manifest requires a path argument"
+      MANIFESTS+=("$2")
+      shift 2
+      ;;
+    --output)
+      [[ $# -lt 2 ]] && die "--output requires a file argument"
+      OUTPUT="$2"
+      shift 2
+      ;;
+    -h|--help)
+      usage
+      exit 0
+      ;;
+    *)
+      die "unknown argument: $1"
+      ;;
+  esac
+done
+
+[[ -z "$ACTION" ]] && { usage; die "missing action (--validate or 
--generate)"; }
+[[ ${#MANIFESTS[@]} -eq 0 ]] && die "at least one --manifest is required"
+[[ "$ACTION" == "generate" && -z "$OUTPUT" ]] && die "--generate requires 
--output"
+
+# Classify each manifest by ecosystem.
+RUST_MANIFESTS=()
+NODE_DIRS=()
+for m in "${MANIFESTS[@]}"; do
+  if [[ -f "$m" && "$(basename "$m")" == "Cargo.toml" ]]; then
+    RUST_MANIFESTS+=("$m")
+  elif [[ -d "$m" && -f "$m/package.json" ]]; then
+    NODE_DIRS+=("$m")
+  else
+    die "manifest does not look like a Cargo.toml or a directory containing 
package.json: $m"
+  fi
+done
+
+require_cmd() {
+  command -v "$1" >/dev/null 2>&1 || die "required command not installed: $1"
+}
+
+SYNTH_DIR=""
+TMP_OUT=""
+NODE_FMT_FILE=""
+NODE_JSON_FILE=""
+
+cleanup() {
+  [[ -n "$SYNTH_DIR" && -d "$SYNTH_DIR" ]] && rm -rf "$SYNTH_DIR"
+  [[ -n "$TMP_OUT" && -f "$TMP_OUT" ]] && rm -f "$TMP_OUT"
+  [[ -n "$NODE_FMT_FILE" && -f "$NODE_FMT_FILE" ]] && rm -f "$NODE_FMT_FILE"
+  [[ -n "$NODE_JSON_FILE" && -f "$NODE_JSON_FILE" ]] && rm -f "$NODE_JSON_FILE"
+  return 0
+}
+trap cleanup EXIT
+
+# Resolve the Cargo.toml that cargo-about should target. For a single
+# Rust manifest, return it as-is. For multiple Rust manifests, build a
+# synthetic root crate under /tmp that path-deps onto each requested
+# member; cargo-about then renders the deduplicated union in a single
+# pass. The empty [workspace] table prevents the synthetic root from
+# attaching to any ancestor workspace.
+build_rust_target_manifest() {
+  local count=${#RUST_MANIFESTS[@]}
+  if (( count == 1 )); then
+    echo "${RUST_MANIFESTS[0]}"
+    return
+  fi
+
+  SYNTH_DIR="$(mktemp -d -t iggy-license-root-XXXXXX)"
+
+  {
+    printf '[workspace]\n\n'
+    printf '[package]\n'
+    printf 'name = "iggy-license-union"\n'
+    printf 'version = "0.0.0"\n'
+    printf 'edition = "2021"\n'
+    printf 'license = "Apache-2.0"\n'
+    printf 'publish = false\n\n'
+    printf '[dependencies]\n'
+    for m in "${RUST_MANIFESTS[@]}"; do
+      local crate_dir crate_name
+      crate_dir="$(cd "$(dirname "$m")" && pwd)"
+      crate_name="$(awk -F'"' '/^\[package\]/{p=1; next} p && /^name *= 
*"/{print $2; exit}' "$m")"
+      [[ -z "$crate_name" ]] && die "could not extract package.name from $m"
+      printf '%s = { path = "%s" }\n' "$crate_name" "$crate_dir"
+    done
+  } > "$SYNTH_DIR/Cargo.toml"
+
+  mkdir -p "$SYNTH_DIR/src"
+  : > "$SYNTH_DIR/src/lib.rs"
+
+  echo "$SYNTH_DIR/Cargo.toml"
+}
+
+# Run cargo-about against the prepared manifest, writing the result to
+# the supplied path. Always invoked from REPO_ROOT so that
+# `--config about.toml` and the about.hbs template resolve correctly.
+# `--fail` makes a disallowed license abort with a non-zero exit code.
+run_cargo_about() {
+  local target_manifest="$1"
+  local out="$2"
+  require_cmd cargo-about
+
+  ( cd "$REPO_ROOT" && \
+    cargo about generate \
+      --config about.toml \
+      --manifest-path "$target_manifest" \
+      --fail \
+      -o "$out" \
+      about.hbs )
+}
+
+# Run license-checker-rseidelsohn against an npm package directory and
+# pipe the JSON through render-node-licenses.mjs in either render or
+# validate-only mode.
+run_node_about() {
+  local pkg_dir="$1"
+  local mode="$2"   # render | validate
+  local out="$3"
+  require_cmd node
+  require_cmd npx
+
+  NODE_FMT_FILE="$(mktemp)"
+  NODE_JSON_FILE="$(mktemp)"
+
+  echo '{"licenseFile": ""}' > "$NODE_FMT_FILE"
+
+  # Exclude the root package itself from the manifest: it is the
+  # artifact we are licensing, not a third-party dependency. Without
+  # this, an UNLICENSED root (private app workspace) would fail
+  # validation against the third-party allow-list.
+  local pkg_dir_abs root_pkg
+  pkg_dir_abs="$(cd "$pkg_dir" && pwd)"
+  root_pkg="$(node -e "const p=require('$pkg_dir_abs/package.json'); 
process.stdout.write(p.name+'@'+p.version)")"
+
+  npx -y license-checker-rseidelsohn@latest \
+    --production \
+    --json \
+    --start "$pkg_dir" \
+    --excludePackages "$root_pkg" \
+    --customPath "$NODE_FMT_FILE" > "$NODE_JSON_FILE"
+
+  if [[ "$mode" == "validate" ]]; then
+    node "$SCRIPT_DIR/render-node-licenses.mjs" --validate-only 
"$NODE_JSON_FILE"
+  else
+    node "$SCRIPT_DIR/render-node-licenses.mjs" "$NODE_JSON_FILE" >> "$out"
+  fi
+}
+
+case "$ACTION" in
+  validate)
+    TMP_OUT="$(mktemp)"
+    failures=()
+
+    if (( ${#RUST_MANIFESTS[@]} > 0 )); then
+      target="$(build_rust_target_manifest)"
+      echo "Validating Rust manifests: ${RUST_MANIFESTS[*]}"
+      if ! run_cargo_about "$target" "$TMP_OUT"; then
+        failures+=("rust: ${RUST_MANIFESTS[*]}")
+      fi
+    fi
+
+    for d in "${NODE_DIRS[@]}"; do
+      echo "Validating Node manifest: $d"
+      if ! run_node_about "$d" validate "$TMP_OUT"; then
+        failures+=("node: $d")
+      fi
+    done
+
+    if (( ${#failures[@]} > 0 )); then
+      echo "" >&2
+      echo "Validation failed for:" >&2
+      for f in "${failures[@]}"; do
+        echo "  - $f" >&2
+      done
+      exit 1
+    fi
+    echo "All manifests pass third-party license validation."
+    ;;
+
+  generate)
+    : > "$OUTPUT"
+
+    if (( ${#RUST_MANIFESTS[@]} > 0 )); then
+      target="$(build_rust_target_manifest)"
+      echo "Generating Rust manifest section: ${RUST_MANIFESTS[*]}"
+      run_cargo_about "$target" "$OUTPUT"
+    fi
+
+    for d in "${NODE_DIRS[@]}"; do
+      echo "Generating Node manifest section: $d"
+      run_node_about "$d" render "$OUTPUT"
+    done
+
+    echo "Done. Wrote $OUTPUT"
+    ;;
+esac
diff --git a/scripts/prepare-release.sh b/scripts/prepare-release.sh
index 6a24ff88f..8e289f070 100755
--- a/scripts/prepare-release.sh
+++ b/scripts/prepare-release.sh
@@ -50,11 +50,12 @@ ARCHIVE_NAME="iggy-${VERSION}-incubating-src.tar.gz"
 RELEASE_PATHS=(
   "Cargo.lock"
   "Cargo.toml"
-  "DEPENDENCIES.md"
   "DISCLAIMER"
   "Dockerfile"
   "LICENSE"
   "NOTICE"
+  "about.hbs"
+  "about.toml"
   "docker-compose.yml"
   "justfile"
   "bdd"
diff --git a/web/.dockerignore b/web/.dockerignore
index e448e6fc5..d0660c087 100644
--- a/web/.dockerignore
+++ b/web/.dockerignore
@@ -12,6 +12,5 @@ node_modules/
 *.log
 docker-compose.yml
 Dockerfile
-LICENSE
 makefile
-README.md
\ No newline at end of file
+README.md
diff --git a/web/Dockerfile b/web/Dockerfile
index 6ebd70079..f7348223d 100644
--- a/web/Dockerfile
+++ b/web/Dockerfile
@@ -27,26 +27,52 @@
 # or stability of the code, it does indicate that the project has yet to be
 # fully endorsed by the ASF.
 
+# Build context for this Dockerfile is the repository root (NOT web/), so
+# that the consolidated scripts/ci/third-party-licenses.sh and its renderer
+# are reachable. See .github/actions/utils/docker-buildx/action.yml.
+
 FROM node:lts-alpine AS deps
 WORKDIR /app
-COPY package*.json ./
+COPY web/package*.json ./
 RUN npm ci --prefer-offline --no-audit
 
 FROM node:lts-alpine AS builder
 WORKDIR /app
 
+# bash required by scripts/ci/third-party-licenses.sh; node:lts-alpine
+# ships only ash by default. curl + tar used to fetch cargo-about
+# (third-party-licenses.sh autodetects rust manifests vs node manifest;
+# the web Dockerfile only feeds it a node manifest, so cargo-about is
+# not actually invoked here, but bash is.)
+RUN apk add --no-cache bash
+
 COPY --from=deps /app/node_modules ./node_modules
-COPY . .
+COPY web/ ./
 
 RUN npm run build
+
+# Generate LICENSE-binary for the production npm dependencies bundled
+# into this image. Required by ASF release policy: convenience binaries
+# that bundle third-party code MUST include the full license text of
+# every bundled package inside the artifact. Uses the same consolidated
+# script and SPDX allow-list that the pre-merge `--validate` gate uses,
+# so the published image cannot diverge from policy.
+COPY scripts/ci/third-party-licenses.sh 
/opt/iggy/scripts/ci/third-party-licenses.sh
+COPY scripts/ci/render-node-licenses.mjs 
/opt/iggy/scripts/ci/render-node-licenses.mjs
+RUN /opt/iggy/scripts/ci/third-party-licenses.sh --generate \
+      --manifest /app \
+      --output /app/LICENSE-binary
+
 FROM node:lts-alpine AS production
 
 WORKDIR /app
 
-COPY package*.json ./
+COPY web/package*.json ./
 RUN npm ci --production --prefer-offline --no-audit
 
 COPY --from=builder /app/build ./build
+COPY --from=builder /app/LICENSE-binary 
/usr/share/doc/iggy-web-ui/LICENSE-binary
+COPY LICENSE NOTICE /usr/share/doc/iggy-web-ui/
 USER node
 
 EXPOSE 3050
diff --git a/web/LICENSE b/web/LICENSE
deleted file mode 100644
index 9c8f3ea08..000000000
--- a/web/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "{}"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright {yyyy} {name of copyright owner}
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
\ No newline at end of file
diff --git a/web/NOTICE b/web/NOTICE
deleted file mode 100644
index 61a3be1eb..000000000
--- a/web/NOTICE
+++ /dev/null
@@ -1,19 +0,0 @@
-Apache Iggy (Incubating)
-Copyright 2026 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-================================================================
-
-This product includes various dependencies and code components that are 
subject to separate copyright notices and license terms.
-Your use of these components is governed by their respective licenses.
-For a complete list of dependencies, including their licenses and repository 
links,
-please refer to the DEPENDENCIES file.
-
-================================================================
-
-The Iggy project code was originally created, designed, developed by Piotr 
Gankiewicz in April 2023.
-It was released as an open-source project under MIT License, later converted 
to Apache 2.0 License,
-and donated by LaserData, Inc. to the Apache Software Foundation (ASF) in 
February 2025.
-Copyright April 2023 - February 2025 Piotr Gankiewicz, LaserData, Inc.
diff --git a/web/package-lock.json b/web/package-lock.json
index 3aa3aad33..231c138e7 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -12,7 +12,6 @@
         "@tailwindcss/postcss": "^4.2.4",
         "d3-interpolate": "^3.0.1",
         "date-fns": "^4.1.0",
-        "gsap": "^3.15.0",
         "json-bigint": "^1.0.0",
         "parse-duration": "^2.1.6",
         "svelte-headlessui": "^0.0.46",
@@ -3046,12 +3045,6 @@
       "integrity": 
"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
       "license": "ISC"
     },
-    "node_modules/gsap": {
-      "version": "3.15.0",
-      "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.15.0.tgz";,
-      "integrity": 
"sha512-dMW4CWBTUK1AEEDeZc1g4xpPGIrSf9fJF960qbTZmN/QwZIWY5wgliS6JWl9/25fpTGJrMRtSjGtOmPnfjZB+A==",
-      "license": "Standard 'no charge' license: 
https://gsap.com/standard-license.";
-    },
     "node_modules/hasown": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz";,
diff --git a/web/package.json b/web/package.json
index 5064352ee..4ced8892e 100644
--- a/web/package.json
+++ b/web/package.json
@@ -49,7 +49,6 @@
     "@tailwindcss/postcss": "^4.2.4",
     "d3-interpolate": "^3.0.1",
     "date-fns": "^4.1.0",
-    "gsap": "^3.15.0",
     "json-bigint": "^1.0.0",
     "parse-duration": "^2.1.6",
     "svelte-headlessui": "^0.0.46",

Reply via email to