From f442831301971f4c74f88e450b6d77d4e6245a04 Mon Sep 17 00:00:00 2001 From: Kevin Boos Date: Tue, 2 Jun 2026 14:06:15 -0700 Subject: [PATCH 1/3] Use `cargo-about` to generate third-party license notices This adds a little CI action that uses `cargo-about` to analyze the full dependency tree of Robrix and open a new PR with the updated licensing info if it has changed. The two key files that get generated are in `licenses/`. To run things locally locally: ```sh cargo install cargo-about --features cli cargo about generate --fail about.hbs -o licenses/THIRD-PARTY-NOTICES.html cargo about generate --fail about.md.hbs -o licenses/THIRD-PARTY-LICENSES.md ``` --- .github/workflows/licenses.yml | 102 + about.hbs | 70 + about.md.hbs | 23 + about.toml | 80 + licenses/THIRD-PARTY-LICENSES.md | 633 ++ licenses/THIRD-PARTY-NOTICES.html | 9493 +++++++++++++++++++++++++++++ 6 files changed, 10401 insertions(+) create mode 100644 .github/workflows/licenses.yml create mode 100644 about.hbs create mode 100644 about.md.hbs create mode 100644 about.toml create mode 100644 licenses/THIRD-PARTY-LICENSES.md create mode 100644 licenses/THIRD-PARTY-NOTICES.html diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml new file mode 100644 index 000000000..d7302aab5 --- /dev/null +++ b/.github/workflows/licenses.yml @@ -0,0 +1,102 @@ +# Third-party license notices +# +# Keeps licenses/THIRD-PARTY-NOTICES.html (full license texts) and +# licenses/THIRD-PARTY-LICENSES.md (summary) in sync with the dependency graph, +# without burdening contributors and without ever committing to main directly. +# +# Runs ONLY on pushes to main (after PRs merge). It regenerates both files with +# `cargo about` (config: about.toml; templates: about.hbs / about.md.hbs) and, +# if anything changed, opens or updates a single rolling pull request with the +# refreshed files for a human to review and merge. It never pushes to main. +# +# This is intentionally NOT a check on contributor PRs: deps merge with briefly +# stale notices, then this workflow refreshes them in a follow-up PR. +# +# If a dependency uses a license not accepted in about.toml, `--fail` aborts the +# run (no PR is opened) — a new license type needs a human to vet it and add it +# to about.toml. You'll see this as a failed run on main. + +name: Third-party licenses + +on: + push: + branches: + - main + paths: + - Cargo.toml + - Cargo.lock + - about.toml + - about.hbs + - about.md.hbs + - .github/workflows/licenses.yml + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +permissions: + contents: write # push the bot's PR branch (never main) + pull-requests: write # open / update the pull request + +env: + CARGO_TERM_COLOR: always + RUST_BACKTRACE: 1 + +jobs: + licenses: + name: Refresh third-party notices + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + + - uses: Swatinem/rust-cache@v2 + with: + cache-all-crates: "true" + + # cargo-about is pinned to the version that generated the committed files; + # a different version can render the output differently. When bumping this + # pin, regenerate and commit both files in the same change. + - name: Cache cargo-about + id: cache-cargo-about + uses: actions/cache@v4 + with: + path: ~/.cargo/bin/cargo-about + key: cargo-about-0.9.0-${{ runner.os }} + + - name: Install cargo-about + if: steps.cache-cargo-about.outputs.cache-hit != 'true' + run: cargo install cargo-about --version 0.9.0 --features cli + + - name: Regenerate notices + run: | + cargo about generate --fail about.hbs -o licenses/THIRD-PARTY-NOTICES.html + cargo about generate --fail about.md.hbs -o licenses/THIRD-PARTY-LICENSES.md + + # Opens a PR only if the files actually changed; otherwise it's a no-op. + # Re-runs update the same branch/PR instead of opening new ones. + # Requires "Allow GitHub Actions to create and approve pull requests" + # (Settings -> Actions -> General). If main's branch protection requires + # status checks, swap `token` for a PAT/GitHub App token so the PR's + # checks run (GITHUB_TOKEN-created PRs don't trigger other workflows). + - name: Open or update license-notices PR + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + base: main + branch: chore/update-third-party-licenses + add-paths: | + licenses/THIRD-PARTY-NOTICES.html + licenses/THIRD-PARTY-LICENSES.md + commit-message: "chore: update third-party license notices" + title: "chore: update third-party license notices" + body: | + Automated update of the third-party license notices to match the + current dependency graph on `main`. + + Generated by `cargo about` (config `about.toml`, templates + `about.hbs` / `about.md.hbs`) via the **Third-party licenses** + workflow. Do not edit these files by hand. + delete-branch: true diff --git a/about.hbs b/about.hbs new file mode 100644 index 000000000..04999520e --- /dev/null +++ b/about.hbs @@ -0,0 +1,70 @@ + + + + + + + +
+
+

Robrix — Third Party Licenses

+

This page lists the full license text of every third-party crate compiled into Robrix.

+
+ +

Overview of licenses:

+ + +

All license text:

+ +
+ + + diff --git a/about.md.hbs b/about.md.hbs new file mode 100644 index 000000000..1d4a8af9c --- /dev/null +++ b/about.md.hbs @@ -0,0 +1,23 @@ +# Robrix — Third-Party Dependency Licenses + + + +Summary of the third-party crates compiled into Robrix's default build (the +experimental `tsp` feature is excluded). The **full license texts** of every +crate are in [THIRD-PARTY-NOTICES.html](THIRD-PARTY-NOTICES.html). + +## License summary + +| Crates | License | SPDX | +|-------:|---------|------| +{{#each overview}}| {{count}} | {{{name}}} | `{{id}}` | +{{/each}} + +## All dependencies + +| Crate | Version | License | +|-------|---------|---------| +{{#each crates}}| `{{package.name}}` | {{package.version}} | {{{license}}} | +{{/each}} diff --git a/about.toml b/about.toml new file mode 100644 index 000000000..0f8ba7eb9 --- /dev/null +++ b/about.toml @@ -0,0 +1,80 @@ +# Configuration for `cargo about generate`, which produces a verified +# THIRD-PARTY-NOTICES file with the full text of every dependency's license. +# +# cargo about generate --fail about.hbs -o licenses/THIRD-PARTY-NOTICES.html +# +# This covers Robrix's default build. The experimental `tsp` feature is NOT +# included; to also document its deps, append `--features tsp`. + +# An empty `targets` (the default) applies NO platform filter, so the notice +# covers the full dependency graph across every platform — the comprehensive, +# compliance-safe superset. To scope the notice to only the platforms Robrix +# actually ships on (a smaller, distribution-accurate set), uncomment below. +targets = [] +# targets = [ +# "x86_64-unknown-linux-gnu", +# "x86_64-pc-windows-msvc", +# "aarch64-apple-darwin", +# "x86_64-apple-darwin", +# "aarch64-linux-android", +# "armv7-linux-androideabi", +# "aarch64-apple-ios", +# ] + +# Include build-dependencies; they ship in source distributions and their +# attribution is cheap to keep. Dev-dependencies are not distributed. +ignore-build-dependencies = false +ignore-dev-dependencies = true + +# Every license expression that appears in the graph. For dual/multi licenses +# (e.g. "MIT OR Apache-2.0") cargo-about satisfies the expression with the +# first accepted license it can find text for. +accepted = [ + "MIT", + "MIT-0", + "Apache-2.0", + "Apache-2.0 WITH LLVM-exception", + "BSD-1-Clause", + "BSD-2-Clause", + "BSD-3-Clause", + "ISC", + "Zlib", + "Unicode-3.0", + "MPL-2.0", + "Unlicense", + "0BSD", + "BSL-1.0", + "CC0-1.0", + "CDLA-Permissive-2.0", + "OpenSSL", + "LGPL-2.1-or-later", +] + +# Built-in clarifications cargo-about ships for crates whose license metadata +# is hard to harvest automatically. Unmatched names are harmless no-ops. +workarounds = [ + "ring", + "rustls", + "chrono", + "clap", + "rustix", + "unicode-ident", + "bitvec", + "cocoa", + "wasmtime", +] + +# The two Makepad sub-crates below omit the `license` field in their own +# Cargo.toml. The Makepad project ships a single MIT LICENSE at its repo root +# (Copyright 2023 Makepad B.V.); point the harvester at it explicitly. +[makepad-latex-math.clarify] +license = "MIT" +[[makepad-latex-math.clarify.files]] +path = "../../LICENSE" +checksum = "3855d73a873244ec424ac5781d5d8fc8e2a789ff9d2f1cb804bec585a64ea88f" + +[makepad-regex.clarify] +license = "MIT" +[[makepad-regex.clarify.files]] +path = "../../LICENSE" +checksum = "3855d73a873244ec424ac5781d5d8fc8e2a789ff9d2f1cb804bec585a64ea88f" diff --git a/licenses/THIRD-PARTY-LICENSES.md b/licenses/THIRD-PARTY-LICENSES.md new file mode 100644 index 000000000..37626a8f2 --- /dev/null +++ b/licenses/THIRD-PARTY-LICENSES.md @@ -0,0 +1,633 @@ +# Robrix — Third-Party Dependency Licenses + + + +Summary of the third-party crates compiled into Robrix's default build (the +experimental `tsp` feature is excluded). The **full license texts** of every +crate are in [THIRD-PARTY-NOTICES.html](THIRD-PARTY-NOTICES.html). + +## License summary + +| Crates | License | SPDX | +|-------:|---------|------| +| 525 | MIT License | `MIT` | +| 24 | Apache License 2.0 | `Apache-2.0` | +| 19 | Unicode License v3 | `Unicode-3.0` | +| 12 | Mozilla Public License 2.0 | `MPL-2.0` | +| 6 | BSD 3-Clause "New" or "Revised" License | `BSD-3-Clause` | +| 5 | ISC License | `ISC` | +| 5 | zlib License | `Zlib` | +| 2 | Community Data License Agreement Permissive 2.0 | `CDLA-Permissive-2.0` | +| 2 | MIT No Attribution | `MIT-0` | +| 1 | BSD 2-Clause "Simplified" License | `BSD-2-Clause` | +| 1 | Boost Software License 1.0 | `BSL-1.0` | +| 1 | Creative Commons Zero v1.0 Universal | `CC0-1.0` | +| 1 | OpenSSL License | `OpenSSL` | + +## All dependencies + +| Crate | Version | License | +|-------|---------|---------| +| `ab_glyph_rasterizer` | 0.1.8 | Apache-2.0 | +| `adler2` | 2.0.1 | 0BSD OR MIT OR Apache-2.0 | +| `aead` | 0.5.2 | MIT OR Apache-2.0 | +| `aes` | 0.8.4 | MIT OR Apache-2.0 | +| `aho-corasick` | 1.1.3 | Unlicense OR MIT | +| `allocator-api2` | 0.2.21 | MIT OR Apache-2.0 | +| `android-build` | 0.1.3 | MIT | +| `android_system_properties` | 0.1.5 | MIT OR Apache-2.0 | +| `anstream` | 0.6.20 | MIT OR Apache-2.0 | +| `anstyle` | 1.0.11 | MIT OR Apache-2.0 | +| `anstyle-parse` | 0.2.7 | MIT OR Apache-2.0 | +| `anstyle-query` | 1.1.4 | MIT OR Apache-2.0 | +| `anstyle-wincon` | 3.0.10 | MIT OR Apache-2.0 | +| `anyhow` | 1.0.100 | MIT OR Apache-2.0 | +| `anymap2` | 0.13.0 | MIT OR Apache-2.0 | +| `aquamarine` | 0.6.0 | MIT | +| `archery` | 1.2.1 | MPL-2.0 | +| `arrayref` | 0.3.9 | BSD-2-Clause | +| `arrayvec` | 0.7.6 | MIT OR Apache-2.0 | +| `as_variant` | 1.3.0 | MPL-2.0 | +| `ash` | 0.38.0+1.3.281 | MIT OR Apache-2.0 | +| `assign` | 1.1.1 | MIT | +| `async-channel` | 2.5.0 | Apache-2.0 OR MIT | +| `async-compression` | 0.4.31 | MIT OR Apache-2.0 | +| `async-once-cell` | 0.5.4 | MIT OR Apache-2.0 | +| `async-rx` | 0.1.3 | MPL-2.0 | +| `async-stream` | 0.3.6 | MIT | +| `async-stream-impl` | 0.3.6 | MIT | +| `async-trait` | 0.1.89 | MIT OR Apache-2.0 | +| `async_cell` | 0.2.3 | MIT | +| `atomic-waker` | 1.1.2 | Apache-2.0 OR MIT | +| `autocfg` | 1.5.0 | Apache-2.0 OR MIT | +| `aws-lc-rs` | 1.14.1 | ISC AND (Apache-2.0 OR ISC) | +| `aws-lc-sys` | 0.32.0 | ISC AND (Apache-2.0 OR ISC) AND OpenSSL | +| `axum` | 0.8.4 | MIT | +| `axum-core` | 0.5.2 | MIT | +| `backon` | 1.6.0 | Apache-2.0 | +| `base64` | 0.22.1 | MIT OR Apache-2.0 | +| `base64ct` | 1.8.0 | Apache-2.0 OR MIT | +| `bindgen` | 0.72.1 | BSD-3-Clause | +| `bit-set` | 0.8.0 | Apache-2.0 OR MIT | +| `bit-vec` | 0.8.0 | Apache-2.0 OR MIT | +| `bitflags` | 2.10.0 | MIT OR Apache-2.0 | +| `bitflags` | 2.10.0 | MIT OR Apache-2.0 | +| `bitmaps` | 3.2.1 | MPL-2.0+ | +| `blake3` | 1.8.2 | CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception | +| `block-buffer` | 0.10.4 | MIT OR Apache-2.0 | +| `block-padding` | 0.3.3 | MIT OR Apache-2.0 | +| `block2` | 0.6.1 | MIT | +| `blurhash` | 0.2.3 | Apache-2.0 OR MIT | +| `bs58` | 0.5.1 | MIT OR Apache-2.0 | +| `bumpalo` | 3.19.0 | MIT OR Apache-2.0 | +| `bytemuck` | 1.25.0 | Zlib OR Apache-2.0 OR MIT | +| `bytemuck` | 1.25.0 | Zlib OR Apache-2.0 OR MIT | +| `byteorder` | 1.5.0 | Unlicense OR MIT | +| `byteorder` | 1.5.0 | Unlicense OR MIT | +| `byteorder-lite` | 0.1.0 | Unlicense OR MIT | +| `bytes` | 1.11.1 | MIT | +| `bytesize` | 2.3.1 | Apache-2.0 | +| `cbc` | 0.1.2 | MIT OR Apache-2.0 | +| `cc` | 1.2.38 | MIT OR Apache-2.0 | +| `cesu8` | 1.1.0 | Apache-2.0 OR MIT | +| `cexpr` | 0.6.0 | Apache-2.0 OR MIT | +| `cfg-if` | 1.0.4 | MIT OR Apache-2.0 | +| `cfg_aliases` | 0.2.1 | MIT | +| `chacha20` | 0.9.1 | Apache-2.0 OR MIT | +| `chacha20` | 0.10.0 | MIT OR Apache-2.0 | +| `chacha20poly1305` | 0.10.1 | Apache-2.0 OR MIT | +| `chrono` | 0.4.42 | Apache-2.0 OR MIT | +| `cipher` | 0.4.4 | MIT OR Apache-2.0 | +| `clang-sys` | 1.8.1 | Apache-2.0 | +| `clap` | 4.5.48 | MIT OR Apache-2.0 | +| `clap_builder` | 4.5.48 | MIT OR Apache-2.0 | +| `clap_derive` | 4.5.47 | MIT OR Apache-2.0 | +| `clap_lex` | 0.7.5 | MIT OR Apache-2.0 | +| `cmake` | 0.1.54 | MIT OR Apache-2.0 | +| `codespan-reporting` | 0.12.0 | Apache-2.0 | +| `colorchoice` | 1.0.4 | MIT OR Apache-2.0 | +| `combine` | 4.6.7 | MIT | +| `compression-codecs` | 0.4.30 | MIT OR Apache-2.0 | +| `compression-core` | 0.4.29 | MIT OR Apache-2.0 | +| `concurrent-queue` | 2.5.0 | Apache-2.0 OR MIT | +| `const_panic` | 0.2.15 | Zlib | +| `constant_time_eq` | 0.3.1 | CC0-1.0 OR MIT-0 OR Apache-2.0 | +| `convert_case` | 0.6.0 | MIT | +| `core-foundation` | 0.10.1 | MIT OR Apache-2.0 | +| `core-foundation-sys` | 0.8.7 | MIT OR Apache-2.0 | +| `cpufeatures` | 0.2.17 | MIT OR Apache-2.0 | +| `cpufeatures` | 0.3.0 | MIT OR Apache-2.0 | +| `crc32fast` | 1.5.0 | MIT OR Apache-2.0 | +| `crossbeam-channel` | 0.5.15 | MIT OR Apache-2.0 | +| `crossbeam-queue` | 0.3.12 | MIT OR Apache-2.0 | +| `crossbeam-utils` | 0.8.21 | MIT OR Apache-2.0 | +| `crunchy` | 0.2.4 | MIT | +| `crypto-common` | 0.1.6 | MIT OR Apache-2.0 | +| `ctor` | 0.2.9 | Apache-2.0 OR MIT | +| `ctr` | 0.9.2 | MIT OR Apache-2.0 | +| `ctrlc` | 3.5.2 | MIT OR Apache-2.0 | +| `curve25519-dalek` | 4.1.3 | BSD-3-Clause | +| `curve25519-dalek-derive` | 0.1.1 | MIT OR Apache-2.0 | +| `date_header` | 1.0.5 | MIT OR Apache-2.0 | +| `deadpool` | 0.13.0 | MIT OR Apache-2.0 | +| `deadpool-runtime` | 0.3.1 | MIT OR Apache-2.0 | +| `deadpool-sync` | 0.2.0 | MIT OR Apache-2.0 | +| `decancer` | 3.3.3 | MIT | +| `deranged` | 0.5.3 | MIT OR Apache-2.0 | +| `digest` | 0.10.7 | MIT OR Apache-2.0 | +| `dirs-sys` | 0.5.0 | MIT OR Apache-2.0 | +| `dispatch2` | 0.3.0 | Zlib OR Apache-2.0 OR MIT | +| `displaydoc` | 0.2.5 | MIT OR Apache-2.0 | +| `downcast-rs` | 1.2.1 | MIT OR Apache-2.0 | +| `dunce` | 1.0.5 | CC0-1.0 OR MIT-0 OR Apache-2.0 | +| `ed25519` | 2.2.3 | Apache-2.0 OR MIT | +| `ed25519-dalek` | 2.2.0 | BSD-3-Clause | +| `either` | 1.15.0 | MIT OR Apache-2.0 | +| `emojis` | 0.8.0 | MIT OR Apache-2.0 | +| `equivalent` | 1.0.2 | Apache-2.0 OR MIT | +| `errno` | 0.3.14 | MIT OR Apache-2.0 | +| `event-listener` | 5.4.1 | Apache-2.0 OR MIT | +| `event-listener-strategy` | 0.5.4 | Apache-2.0 OR MIT | +| `eyeball` | 0.8.8 | MPL-2.0 | +| `eyeball-im` | 0.8.0 | MPL-2.0 | +| `eyeball-im-util` | 0.10.0 | MPL-2.0 | +| `fallible-iterator` | 0.3.0 | MIT OR Apache-2.0 | +| `fallible-streaming-iterator` | 0.1.9 | MIT OR Apache-2.0 | +| `fastrand` | 2.3.0 | Apache-2.0 OR MIT | +| `fdeflate` | 0.3.7 | MIT OR Apache-2.0 | +| `fiat-crypto` | 0.2.9 | MIT OR Apache-2.0 OR BSD-1-Clause | +| `find-msvc-tools` | 0.1.2 | MIT OR Apache-2.0 | +| `flate2` | 1.1.2 | MIT OR Apache-2.0 | +| `fnv` | 1.0.7 | Apache-2.0 OR MIT | +| `foldhash` | 0.1.5 | Zlib | +| `foldhash` | 0.2.0 | Zlib | +| `form_urlencoded` | 1.2.2 | MIT OR Apache-2.0 | +| `fs_extra` | 1.3.0 | MIT | +| `futures` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-channel` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-core` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-executor` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-io` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-macro` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-sink` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-task` | 0.3.31 | MIT OR Apache-2.0 | +| `futures-util` | 0.3.31 | MIT OR Apache-2.0 | +| `fuzzy-matcher` | 0.3.7 | MIT | +| `fxhash` | 0.2.1 | Apache-2.0 OR MIT | +| `generator` | 0.8.7 | MIT OR Apache-2.0 | +| `generic-array` | 0.14.7 | MIT | +| `getrandom` | 0.2.16 | MIT OR Apache-2.0 | +| `getrandom` | 0.3.3 | MIT OR Apache-2.0 | +| `getrandom` | 0.4.2 | MIT OR Apache-2.0 | +| `glob` | 0.3.3 | MIT OR Apache-2.0 | +| `gloo-timers` | 0.3.0 | MIT OR Apache-2.0 | +| `growable-bloom-filter` | 2.1.1 | MIT | +| `h2` | 0.4.12 | MIT | +| `half` | 2.7.1 | MIT OR Apache-2.0 | +| `hashbrown` | 0.15.5 | MIT OR Apache-2.0 | +| `hashbrown` | 0.16.1 | MIT OR Apache-2.0 | +| `hashlink` | 0.10.0 | MIT OR Apache-2.0 | +| `heck` | 0.5.0 | MIT OR Apache-2.0 | +| `hermit-abi` | 0.5.2 | MIT OR Apache-2.0 | +| `hexf-parse` | 0.2.1 | CC0-1.0 | +| `hilog-sys` | 0.1.7 | Apache-2.0 | +| `hkdf` | 0.12.4 | MIT OR Apache-2.0 | +| `hmac` | 0.12.1 | MIT OR Apache-2.0 | +| `html5ever` | 0.39.0 | MIT OR Apache-2.0 | +| `htmlize` | 1.0.6 | MIT OR Apache-2.0 | +| `http` | 1.3.1 | MIT OR Apache-2.0 | +| `http-body` | 1.0.1 | MIT | +| `http-body-util` | 0.1.3 | MIT | +| `httparse` | 1.10.1 | MIT OR Apache-2.0 | +| `httpdate` | 1.0.3 | MIT OR Apache-2.0 | +| `hyper` | 1.7.0 | MIT | +| `hyper-rustls` | 0.27.7 | Apache-2.0 OR ISC OR MIT | +| `hyper-util` | 0.1.17 | MIT | +| `iana-time-zone` | 0.1.64 | MIT OR Apache-2.0 | +| `iana-time-zone-haiku` | 0.1.2 | MIT OR Apache-2.0 | +| `icu_collections` | 2.0.0 | Unicode-3.0 | +| `icu_locale_core` | 2.0.0 | Unicode-3.0 | +| `icu_normalizer` | 2.0.0 | Unicode-3.0 | +| `icu_normalizer_data` | 2.0.0 | Unicode-3.0 | +| `icu_properties` | 2.0.1 | Unicode-3.0 | +| `icu_properties_data` | 2.0.1 | Unicode-3.0 | +| `icu_provider` | 2.0.0 | Unicode-3.0 | +| `idna` | 1.1.0 | MIT OR Apache-2.0 | +| `idna_adapter` | 1.2.1 | Apache-2.0 OR MIT | +| `image` | 0.25.10 | MIT OR Apache-2.0 | +| `imbl` | 6.1.0 | MPL-2.0+ | +| `imbl-sized-chunks` | 0.1.3 | MPL-2.0+ | +| `imghdr` | 0.7.0 | Apache-2.0 OR MIT | +| `include_dir` | 0.7.4 | MIT | +| `include_dir_macros` | 0.7.4 | MIT | +| `indexmap` | 2.13.0 | Apache-2.0 OR MIT | +| `inout` | 0.1.4 | MIT OR Apache-2.0 | +| `ipnet` | 2.11.0 | MIT OR Apache-2.0 | +| `iri-string` | 0.7.8 | MIT OR Apache-2.0 | +| `is_terminal_polyfill` | 1.70.1 | MIT OR Apache-2.0 | +| `itertools` | 0.10.5 | MIT OR Apache-2.0 | +| `itertools` | 0.13.0 | MIT OR Apache-2.0 | +| `itertools` | 0.14.0 | MIT OR Apache-2.0 | +| `itoa` | 1.0.15 | MIT OR Apache-2.0 | +| `jni` | 0.21.1 | MIT OR Apache-2.0 | +| `jni-sys` | 0.3.0 | MIT OR Apache-2.0 | +| `jobserver` | 0.1.34 | MIT OR Apache-2.0 | +| `js-sys` | 0.3.94 | MIT OR Apache-2.0 | +| `js_int` | 0.2.2 | MIT | +| `js_option` | 0.2.0 | MIT | +| `konst` | 0.4.3 | Zlib | +| `language-tags` | 0.3.2 | MIT OR Apache-2.0 | +| `lazy_static` | 1.5.0 | MIT OR Apache-2.0 | +| `libc` | 0.2.186 | MIT OR Apache-2.0 | +| `libloading` | 0.8.8 | ISC | +| `libm` | 0.2.15 | MIT | +| `libredox` | 0.1.10 | MIT | +| `libsqlite3-sys` | 0.35.0 | MIT | +| `linkify` | 0.10.0 | MIT OR Apache-2.0 | +| `linux-raw-sys` | 0.11.0 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `litemap` | 0.8.0 | Unicode-3.0 | +| `lock_api` | 0.4.13 | MIT OR Apache-2.0 | +| `log` | 0.4.28 | MIT OR Apache-2.0 | +| `loom` | 0.7.2 | MIT | +| `makepad-android-state` | 0.1.0 | MIT | +| `makepad-apple-sys` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-byteorder-lite` | 0.1.0 | Unlicense OR MIT | +| `makepad-code-editor` | 2.0.0 | MIT OR Apache-2.0 | +| `makepad-derive-wasm-bridge` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-derive-widget` | 2.0.0 | MIT OR Apache-2.0 | +| `makepad-draw` | 2.0.0 | MIT OR Apache-2.0 | +| `makepad-error-log` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-filesystem-watcher` | 0.1.0 | MIT OR Apache-2.0 | +| `makepad-futures` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-futures-legacy` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-gif` | 0.1.0 | MIT OR Apache-2.0 | +| `makepad-html` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-jni-sys` | 0.4.0 | MIT OR Apache-2.0 | +| `makepad-latex-math` | 0.1.0 | MIT | +| `makepad-live-id` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-live-id-macros` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-live-reload-core` | 0.1.0 | MIT OR Apache-2.0 | +| `makepad-math` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-micro-proc-macro` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-micro-serde` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-micro-serde-derive` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-network` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-objc-sys` | 1.0.0 | MIT | +| `makepad-platform` | 2.0.0 | MIT OR Apache-2.0 | +| `makepad-regex` | 0.1.0 | MIT | +| `makepad-script` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-script-derive` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-script-std` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-shared-bytes` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-studio-protocol` | 0.1.0 | MIT OR Apache-2.0 | +| `makepad-svg` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-tsdf` | 0.1.0 | MIT OR Apache-2.0 | +| `makepad-wasm-bridge` | 1.0.0 | MIT OR Apache-2.0 | +| `makepad-webp` | 0.2.4 | MIT OR Apache-2.0 | +| `makepad-widgets` | 2.0.0 | MIT OR Apache-2.0 | +| `makepad-zune-core` | 0.5.1 | MIT OR Apache-2.0 OR Zlib | +| `makepad-zune-inflate` | 0.2.0 | MIT OR Apache-2.0 OR Zlib | +| `makepad-zune-jpeg` | 0.5.12 | MIT OR Apache-2.0 OR Zlib | +| `makepad-zune-png` | 0.5.1 | MIT OR Apache-2.0 OR Zlib | +| `maplit` | 1.0.2 | MIT OR Apache-2.0 | +| `markup5ever` | 0.39.0 | MIT OR Apache-2.0 | +| `matchers` | 0.2.0 | MIT | +| `matchit` | 0.8.4 | MIT AND BSD-3-Clause | +| `matrix-pickle` | 0.2.1 | MIT | +| `matrix-pickle-derive` | 0.2.1 | MIT | +| `matrix-sdk` | 0.16.0 | Apache-2.0 | +| `matrix-sdk-base` | 0.16.0 | Apache-2.0 | +| `matrix-sdk-common` | 0.16.0 | Apache-2.0 | +| `matrix-sdk-crypto` | 0.16.0 | Apache-2.0 | +| `matrix-sdk-sqlite` | 0.16.0 | Apache-2.0 | +| `matrix-sdk-store-encryption` | 0.16.0 | Apache-2.0 | +| `matrix-sdk-ui` | 0.16.0 | Apache-2.0 | +| `memchr` | 2.7.6 | Unlicense OR MIT | +| `memchr` | 2.7.6 | Unlicense OR MIT | +| `mime` | 0.3.17 | MIT OR Apache-2.0 | +| `mime2ext` | 0.1.54 | MIT | +| `mime_guess` | 2.0.5 | MIT | +| `minimal-lexical` | 0.2.1 | MIT OR Apache-2.0 | +| `miniz_oxide` | 0.8.9 | MIT OR Zlib OR Apache-2.0 | +| `mio` | 1.0.4 | MIT | +| `moxcms` | 0.8.1 | BSD-3-Clause OR Apache-2.0 | +| `naga` | 27.0.3 | MIT OR Apache-2.0 | +| `napi-derive-backend-ohos` | 0.0.7 | MIT | +| `napi-derive-ohos` | 0.0.9 | MIT | +| `napi-ohos` | 0.1.3 | MIT | +| `napi-sys-ohos` | 0.0.1 | MIT | +| `ndk-context` | 0.1.1 | MIT OR Apache-2.0 | +| `new_debug_unreachable` | 1.0.6 | MIT | +| `nix` | 0.31.2 | MIT | +| `nom` | 7.1.3 | MIT | +| `nu-ansi-term` | 0.50.1 | MIT | +| `num-conv` | 0.2.0 | MIT OR Apache-2.0 | +| `num-traits` | 0.2.19 | MIT OR Apache-2.0 | +| `num_cpus` | 1.17.0 | MIT OR Apache-2.0 | +| `oauth2` | 5.0.0 | MIT OR Apache-2.0 | +| `oauth2-reqwest` | 0.1.0-alpha.3 | MIT | +| `objc2` | 0.6.2 | MIT | +| `objc2-app-kit` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | +| `objc2-authentication-services` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | +| `objc2-core-foundation` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | +| `objc2-core-location` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | +| `objc2-encode` | 4.1.0 | MIT | +| `objc2-foundation` | 0.3.1 | MIT | +| `objc2-photos-ui` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | +| `objc2-ui-kit` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | +| `objc2-uniform-type-identifiers` | 0.3.1 | Zlib OR Apache-2.0 OR MIT | +| `ohos-sys` | 0.2.2 | Apache-2.0 | +| `once_cell` | 1.21.3 | MIT OR Apache-2.0 | +| `once_cell_polyfill` | 1.70.1 | MIT OR Apache-2.0 | +| `opaque-debug` | 0.3.1 | MIT OR Apache-2.0 | +| `openssl-probe` | 0.2.1 | MIT OR Apache-2.0 | +| `option-ext` | 0.2.0 | MPL-2.0 | +| `parking` | 2.2.1 | Apache-2.0 OR MIT | +| `parking_lot` | 0.12.4 | MIT OR Apache-2.0 | +| `parking_lot_core` | 0.9.11 | MIT OR Apache-2.0 | +| `paste` | 1.0.15 | MIT OR Apache-2.0 | +| `pastey` | 0.1.1 | MIT OR Apache-2.0 | +| `pbkdf2` | 0.12.2 | MIT OR Apache-2.0 | +| `percent-encoding` | 2.3.2 | MIT OR Apache-2.0 | +| `phf` | 0.13.1 | MIT | +| `phf_codegen` | 0.13.1 | MIT | +| `phf_generator` | 0.13.1 | MIT | +| `phf_shared` | 0.13.1 | MIT | +| `pin-project-lite` | 0.2.16 | Apache-2.0 OR MIT | +| `pin-utils` | 0.1.0 | MIT OR Apache-2.0 | +| `pkg-config` | 0.3.32 | MIT OR Apache-2.0 | +| `png` | 0.18.1 | MIT OR Apache-2.0 | +| `pollster` | 0.4.0 | Apache-2.0 OR MIT | +| `poly1305` | 0.8.0 | Apache-2.0 OR MIT | +| `potential_utf` | 0.1.3 | Unicode-3.0 | +| `powerfmt` | 0.2.0 | MIT OR Apache-2.0 | +| `ppv-lite86` | 0.2.21 | MIT OR Apache-2.0 | +| `precomputed-hash` | 0.1.1 | MIT | +| `prettyplease` | 0.2.37 | MIT OR Apache-2.0 | +| `proc-macro-crate` | 3.4.0 | MIT OR Apache-2.0 | +| `proc-macro-error-attr2` | 2.0.0 | MIT OR Apache-2.0 | +| `proc-macro-error2` | 2.0.1 | MIT OR Apache-2.0 | +| `proc-macro2` | 1.0.101 | MIT OR Apache-2.0 | +| `prost` | 0.13.5 | Apache-2.0 | +| `prost-derive` | 0.13.5 | Apache-2.0 | +| `pulldown-cmark` | 0.12.2 | MIT | +| `pulldown-cmark` | 0.13.0 | MIT | +| `pulldown-cmark-escape` | 0.11.0 | MIT | +| `pxfm` | 0.1.29 | BSD-3-Clause OR Apache-2.0 | +| `quote` | 1.0.40 | MIT OR Apache-2.0 | +| `r-efi` | 5.3.0 | MIT OR Apache-2.0 OR LGPL-2.1-or-later | +| `r-efi` | 6.0.0 | MIT OR Apache-2.0 OR LGPL-2.1-or-later | +| `rand` | 0.8.5 | MIT OR Apache-2.0 | +| `rand` | 0.9.2 | MIT OR Apache-2.0 | +| `rand` | 0.10.0 | MIT OR Apache-2.0 | +| `rand_chacha` | 0.3.1 | MIT OR Apache-2.0 | +| `rand_chacha` | 0.9.0 | MIT OR Apache-2.0 | +| `rand_core` | 0.6.4 | MIT OR Apache-2.0 | +| `rand_core` | 0.9.3 | MIT OR Apache-2.0 | +| `rand_core` | 0.10.0 | MIT OR Apache-2.0 | +| `rand_xoshiro` | 0.7.0 | MIT OR Apache-2.0 | +| `rangemap` | 1.6.0 | MIT OR Apache-2.0 | +| `raw-window-handle` | 0.6.2 | MIT OR Apache-2.0 OR Zlib | +| `readlock` | 0.1.9 | MPL-2.0 | +| `readlock-tokio` | 0.1.4 | MPL-2.0 | +| `redox_syscall` | 0.5.17 | MIT | +| `redox_users` | 0.5.2 | MIT | +| `regex` | 1.12.2 | MIT OR Apache-2.0 | +| `regex-automata` | 0.4.13 | MIT OR Apache-2.0 | +| `regex-syntax` | 0.8.6 | MIT OR Apache-2.0 | +| `reqwest` | 0.13.2 | MIT OR Apache-2.0 | +| `rfd` | 0.17.2 | MIT | +| `rmp` | 0.8.14 | MIT | +| `rmp-serde` | 1.3.0 | MIT | +| `robius-android-env` | 0.2.0 | MIT | +| `robius-directories` | 6.0.0 | MIT OR Apache-2.0 | +| `robius-file-picker` | 0.2.0 | MIT | +| `robius-location` | 0.2.0 | MIT | +| `robius-open` | 0.2.0 | MIT | +| `robius-use-makepad` | 0.1.1 | MIT | +| `robius-web-auth-session` | 0.2.0 | MIT | +| `robrix` | 1.0.0-alpha.1 | MIT | +| `ruma` | 0.14.1 | MIT | +| `ruma-client-api` | 0.22.1 | MIT | +| `ruma-common` | 0.17.1 | MIT | +| `ruma-events` | 0.32.1 | MIT | +| `ruma-html` | 0.6.0 | MIT | +| `ruma-identifiers-validation` | 0.12.0 | MIT | +| `ruma-macros` | 0.17.1 | MIT | +| `rusqlite` | 0.37.0 | MIT | +| `rustc-hash` | 1.1.0 | Apache-2.0 OR MIT | +| `rustc-hash` | 2.1.1 | Apache-2.0 OR MIT | +| `rustc_version` | 0.4.1 | MIT OR Apache-2.0 | +| `rustix` | 1.1.2 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `rustls` | 0.23.37 | Apache-2.0 OR MIT OR ISC | +| `rustls-native-certs` | 0.8.3 | Apache-2.0 OR ISC OR MIT | +| `rustls-pki-types` | 1.14.0 | MIT OR Apache-2.0 | +| `rustls-platform-verifier` | 0.6.2 | MIT OR Apache-2.0 | +| `rustls-platform-verifier-android` | 0.1.1 | MIT OR Apache-2.0 | +| `rustls-webpki` | 0.103.6 | ISC | +| `rustversion` | 1.0.22 | MIT OR Apache-2.0 | +| `rustybuzz` | 0.18.0 | MIT | +| `ryu` | 1.0.20 | Apache-2.0 OR BSL-1.0 | +| `same-file` | 1.0.6 | Unlicense OR MIT | +| `sanitize-filename` | 0.6.0 | MIT | +| `schannel` | 0.1.28 | MIT | +| `scoped-tls` | 1.0.1 | MIT OR Apache-2.0 | +| `scopeguard` | 1.2.0 | MIT OR Apache-2.0 | +| `sdfer` | 0.2.1 | MIT | +| `security-framework` | 3.5.0 | MIT OR Apache-2.0 | +| `security-framework-sys` | 2.15.0 | MIT OR Apache-2.0 | +| `semver` | 1.0.27 | MIT OR Apache-2.0 | +| `serde` | 1.0.228 | MIT OR Apache-2.0 | +| `serde_bytes` | 0.11.17 | MIT OR Apache-2.0 | +| `serde_core` | 1.0.228 | MIT OR Apache-2.0 | +| `serde_derive` | 1.0.228 | MIT OR Apache-2.0 | +| `serde_html_form` | 0.2.8 | MIT | +| `serde_json` | 1.0.149 | MIT OR Apache-2.0 | +| `serde_path_to_error` | 0.1.20 | MIT OR Apache-2.0 | +| `serde_spanned` | 1.1.1 | MIT OR Apache-2.0 | +| `serde_urlencoded` | 0.7.1 | MIT OR Apache-2.0 | +| `sha2` | 0.10.9 | MIT OR Apache-2.0 | +| `sharded-slab` | 0.1.7 | MIT | +| `shlex` | 1.3.0 | MIT OR Apache-2.0 | +| `signature` | 2.2.0 | Apache-2.0 OR MIT | +| `simd-adler32` | 0.3.8 | MIT | +| `simd-adler32` | 0.3.9 | MIT | +| `siphasher` | 1.0.1 | MIT OR Apache-2.0 | +| `slab` | 0.4.11 | MIT | +| `smallvec` | 1.15.1 | MIT OR Apache-2.0 | +| `smallvec` | 1.15.1 | MIT OR Apache-2.0 | +| `socket2` | 0.6.0 | MIT OR Apache-2.0 | +| `spirv` | 0.3.0+sdk-1.3.268.0 | Apache-2.0 | +| `stable_deref_trait` | 1.2.0 | MIT OR Apache-2.0 | +| `string_cache` | 0.9.0 | MIT OR Apache-2.0 | +| `string_cache_codegen` | 0.6.1 | MIT OR Apache-2.0 | +| `strsim` | 0.11.1 | MIT | +| `subtle` | 2.6.1 | BSD-3-Clause | +| `syn` | 2.0.106 | MIT OR Apache-2.0 | +| `sync_wrapper` | 1.0.2 | Apache-2.0 | +| `synstructure` | 0.13.2 | MIT | +| `tempfile` | 3.23.0 | MIT OR Apache-2.0 | +| `tendril` | 0.5.0 | MIT OR Apache-2.0 | +| `thiserror` | 1.0.69 | MIT OR Apache-2.0 | +| `thiserror` | 2.0.17 | MIT OR Apache-2.0 | +| `thiserror-impl` | 1.0.69 | MIT OR Apache-2.0 | +| `thiserror-impl` | 2.0.17 | MIT OR Apache-2.0 | +| `thread_local` | 1.1.9 | MIT OR Apache-2.0 | +| `time` | 0.3.47 | MIT OR Apache-2.0 | +| `time-core` | 0.1.8 | MIT OR Apache-2.0 | +| `tinystr` | 0.8.1 | Unicode-3.0 | +| `tinyvec` | 1.10.0 | Zlib OR Apache-2.0 OR MIT | +| `tinyvec_macros` | 0.1.1 | MIT OR Apache-2.0 OR Zlib | +| `tokio` | 1.49.0 | MIT | +| `tokio-macros` | 2.6.0 | MIT | +| `tokio-rustls` | 0.26.3 | MIT OR Apache-2.0 | +| `tokio-stream` | 0.1.17 | MIT | +| `tokio-util` | 0.7.18 | MIT | +| `toml` | 1.1.2+spec-1.1.0 | MIT OR Apache-2.0 | +| `toml_datetime` | 0.7.3 | MIT OR Apache-2.0 | +| `toml_datetime` | 1.1.1+spec-1.1.0 | MIT OR Apache-2.0 | +| `toml_edit` | 0.23.4 | MIT OR Apache-2.0 | +| `toml_parser` | 1.1.2+spec-1.1.0 | MIT OR Apache-2.0 | +| `toml_writer` | 1.1.1+spec-1.1.0 | MIT OR Apache-2.0 | +| `tower` | 0.5.2 | MIT | +| `tower-http` | 0.6.8 | MIT | +| `tower-layer` | 0.3.3 | MIT | +| `tower-service` | 0.3.3 | MIT | +| `tracing` | 0.1.41 | MIT | +| `tracing-attributes` | 0.1.30 | MIT | +| `tracing-core` | 0.1.34 | MIT | +| `tracing-log` | 0.2.0 | MIT | +| `tracing-subscriber` | 0.3.20 | MIT | +| `try-lock` | 0.2.5 | MIT | +| `ttf-parser` | 0.24.1 | MIT OR Apache-2.0 | +| `typenum` | 1.18.0 | MIT OR Apache-2.0 | +| `typewit` | 1.14.2 | Zlib | +| `ulid` | 1.2.1 | MIT | +| `unicase` | 2.8.1 | MIT OR Apache-2.0 | +| `unicase` | 2.9.0 | MIT OR Apache-2.0 | +| `unicode-bidi` | 0.3.18 | MIT OR Apache-2.0 | +| `unicode-bidi-mirroring` | 0.3.0 | MIT OR Apache-2.0 | +| `unicode-ccc` | 0.3.0 | MIT OR Apache-2.0 | +| `unicode-ident` | 1.0.19 | (MIT OR Apache-2.0) AND Unicode-3.0 | +| `unicode-linebreak` | 0.1.5 | Apache-2.0 | +| `unicode-normalization` | 0.1.25 | MIT OR Apache-2.0 | +| `unicode-properties` | 0.1.4 | MIT OR Apache-2.0 | +| `unicode-script` | 0.5.8 | MIT OR Apache-2.0 | +| `unicode-segmentation` | 1.12.0 | MIT OR Apache-2.0 | +| `unicode-segmentation` | 1.12.0 | MIT OR Apache-2.0 | +| `unicode-width` | 0.2.2 | MIT OR Apache-2.0 | +| `universal-hash` | 0.5.1 | MIT OR Apache-2.0 | +| `untrusted` | 0.9.0 | ISC | +| `url` | 2.5.7 | MIT OR Apache-2.0 | +| `urlencoding` | 2.1.3 | MIT | +| `utf-8` | 0.7.6 | MIT OR Apache-2.0 | +| `utf8_iter` | 1.0.4 | Apache-2.0 OR MIT | +| `utf8parse` | 0.2.2 | Apache-2.0 OR MIT | +| `uuid` | 1.18.1 | Apache-2.0 OR MIT | +| `vcpkg` | 0.2.15 | MIT OR Apache-2.0 | +| `version_check` | 0.9.5 | MIT OR Apache-2.0 | +| `vodozemac` | 0.9.0 | Apache-2.0 | +| `walkdir` | 2.5.0 | Unlicense OR MIT | +| `want` | 0.3.1 | MIT | +| `wasi` | 0.11.1+wasi-snapshot-preview1 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `wasi` | 0.14.7+wasi-0.2.4 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `wasip2` | 1.0.1+wasi-0.2.4 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `wasip3` | 0.4.0+wasi-0.3.0-rc-2026-01-06 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `wasm-bindgen` | 0.2.117 | MIT OR Apache-2.0 | +| `wasm-bindgen-futures` | 0.4.67 | MIT OR Apache-2.0 | +| `wasm-bindgen-macro` | 0.2.117 | MIT OR Apache-2.0 | +| `wasm-bindgen-macro-support` | 0.2.117 | MIT OR Apache-2.0 | +| `wasm-bindgen-shared` | 0.2.117 | MIT OR Apache-2.0 | +| `wasm-streams` | 0.5.0 | MIT OR Apache-2.0 | +| `wayland-backend` | 0.3.12 | MIT | +| `wayland-client` | 0.31.12 | MIT | +| `wayland-egl` | 0.32.9 | MIT | +| `wayland-protocols` | 0.32.10 | MIT | +| `wayland-sys` | 0.31.8 | MIT | +| `web-sys` | 0.3.94 | MIT OR Apache-2.0 | +| `web-time` | 1.1.0 | MIT OR Apache-2.0 | +| `web_atoms` | 0.2.3 | MIT OR Apache-2.0 | +| `webpki-root-certs` | 1.0.6 | CDLA-Permissive-2.0 | +| `webpki-roots` | 1.0.6 | CDLA-Permissive-2.0 | +| `weezl` | 0.1.12 | MIT OR Apache-2.0 | +| `wildmatch` | 2.6.1 | MIT | +| `winapi-util` | 0.1.11 | Unlicense OR MIT | +| `windows` | 0.56.0 | MIT OR Apache-2.0 | +| `windows` | 0.61.3 | MIT OR Apache-2.0 | +| `windows` | 0.62.2 | MIT OR Apache-2.0 | +| `windows-collections` | 0.2.0 | MIT OR Apache-2.0 | +| `windows-collections` | 0.3.2 | MIT OR Apache-2.0 | +| `windows-core` | 0.56.0 | MIT OR Apache-2.0 | +| `windows-core` | 0.61.2 | MIT OR Apache-2.0 | +| `windows-core` | 0.62.2 | MIT OR Apache-2.0 | +| `windows-future` | 0.2.1 | MIT OR Apache-2.0 | +| `windows-future` | 0.3.2 | MIT OR Apache-2.0 | +| `windows-implement` | 0.56.0 | MIT OR Apache-2.0 | +| `windows-implement` | 0.60.1 | MIT OR Apache-2.0 | +| `windows-interface` | 0.56.0 | MIT OR Apache-2.0 | +| `windows-interface` | 0.59.2 | MIT OR Apache-2.0 | +| `windows-link` | 0.1.3 | MIT OR Apache-2.0 | +| `windows-link` | 0.2.0 | MIT OR Apache-2.0 | +| `windows-link` | 0.2.1 | MIT OR Apache-2.0 | +| `windows-numerics` | 0.2.0 | MIT OR Apache-2.0 | +| `windows-result` | 0.1.2 | MIT OR Apache-2.0 | +| `windows-result` | 0.3.4 | MIT OR Apache-2.0 | +| `windows-result` | 0.4.1 | MIT OR Apache-2.0 | +| `windows-strings` | 0.4.2 | MIT OR Apache-2.0 | +| `windows-strings` | 0.5.1 | MIT OR Apache-2.0 | +| `windows-sys` | 0.45.0 | MIT OR Apache-2.0 | +| `windows-sys` | 0.52.0 | MIT OR Apache-2.0 | +| `windows-sys` | 0.59.0 | MIT OR Apache-2.0 | +| `windows-sys` | 0.60.2 | MIT OR Apache-2.0 | +| `windows-sys` | 0.61.1 | MIT OR Apache-2.0 | +| `windows-targets` | 0.42.2 | MIT OR Apache-2.0 | +| `windows-targets` | 0.52.6 | MIT OR Apache-2.0 | +| `windows-targets` | 0.53.4 | MIT OR Apache-2.0 | +| `windows-threading` | 0.1.0 | MIT OR Apache-2.0 | +| `windows_aarch64_gnullvm` | 0.42.2 | MIT OR Apache-2.0 | +| `windows_aarch64_gnullvm` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_aarch64_gnullvm` | 0.53.0 | MIT OR Apache-2.0 | +| `windows_aarch64_msvc` | 0.42.2 | MIT OR Apache-2.0 | +| `windows_aarch64_msvc` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_aarch64_msvc` | 0.53.0 | MIT OR Apache-2.0 | +| `windows_i686_gnu` | 0.42.2 | MIT OR Apache-2.0 | +| `windows_i686_gnu` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_i686_gnu` | 0.53.0 | MIT OR Apache-2.0 | +| `windows_i686_gnullvm` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_i686_gnullvm` | 0.53.0 | MIT OR Apache-2.0 | +| `windows_i686_msvc` | 0.42.2 | MIT OR Apache-2.0 | +| `windows_i686_msvc` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_i686_msvc` | 0.53.0 | MIT OR Apache-2.0 | +| `windows_x86_64_gnu` | 0.42.2 | MIT OR Apache-2.0 | +| `windows_x86_64_gnu` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_x86_64_gnu` | 0.53.0 | MIT OR Apache-2.0 | +| `windows_x86_64_gnullvm` | 0.42.2 | MIT OR Apache-2.0 | +| `windows_x86_64_gnullvm` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_x86_64_gnullvm` | 0.53.0 | MIT OR Apache-2.0 | +| `windows_x86_64_msvc` | 0.42.2 | MIT OR Apache-2.0 | +| `windows_x86_64_msvc` | 0.52.6 | MIT OR Apache-2.0 | +| `windows_x86_64_msvc` | 0.53.0 | MIT OR Apache-2.0 | +| `winnow` | 0.7.13 | MIT | +| `winnow` | 1.0.1 | MIT | +| `winresource` | 0.1.31 | MIT | +| `wit-bindgen` | 0.46.0 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `wit-bindgen` | 0.51.0 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | +| `writeable` | 0.6.1 | Unicode-3.0 | +| `x25519-dalek` | 2.0.1 | BSD-3-Clause | +| `xxhash-rust` | 0.8.15 | BSL-1.0 | +| `yoke` | 0.8.0 | Unicode-3.0 | +| `yoke-derive` | 0.8.0 | Unicode-3.0 | +| `zerocopy` | 0.8.27 | BSD-2-Clause OR Apache-2.0 OR MIT | +| `zerocopy-derive` | 0.8.27 | BSD-2-Clause OR Apache-2.0 OR MIT | +| `zerofrom` | 0.1.6 | Unicode-3.0 | +| `zerofrom-derive` | 0.1.6 | Unicode-3.0 | +| `zeroize` | 1.8.2 | Apache-2.0 OR MIT | +| `zeroize_derive` | 1.4.2 | Apache-2.0 OR MIT | +| `zerotrie` | 0.2.2 | Unicode-3.0 | +| `zerovec` | 0.11.4 | Unicode-3.0 | +| `zerovec-derive` | 0.11.1 | Unicode-3.0 | +| `zmij` | 1.0.14 | MIT | +| `zune-core` | 0.5.1 | MIT OR Apache-2.0 OR Zlib | +| `zune-jpeg` | 0.5.15 | MIT OR Apache-2.0 OR Zlib | diff --git a/licenses/THIRD-PARTY-NOTICES.html b/licenses/THIRD-PARTY-NOTICES.html new file mode 100644 index 000000000..a44c43ed3 --- /dev/null +++ b/licenses/THIRD-PARTY-NOTICES.html @@ -0,0 +1,9493 @@ + + + + + + + +
+
+

Robrix — Third Party Licenses

+

This page lists the full license text of every third-party crate compiled into Robrix.

+
+ +

Overview of licenses:

+ + +

All license text:

+ +
+ + + From e88225b23104c561930a26719b4f37d2441f997c Mon Sep 17 00:00:00 2001 From: Kevin Boos Date: Tue, 2 Jun 2026 14:52:49 -0700 Subject: [PATCH 2/3] Move licensing stuff out of the root dir and into `licenses/` --- .github/workflows/licenses.yml | 28 ++++++++++---------- licenses/THIRD-PARTY-LICENSES.md | 6 ++--- about.hbs => licenses/config/about.hbs | 0 about.md.hbs => licenses/config/about.md.hbs | 6 ++--- about.toml => licenses/config/about.toml | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) rename about.hbs => licenses/config/about.hbs (100%) rename about.md.hbs => licenses/config/about.md.hbs (65%) rename about.toml => licenses/config/about.toml (95%) diff --git a/.github/workflows/licenses.yml b/.github/workflows/licenses.yml index d7302aab5..4b183742b 100644 --- a/.github/workflows/licenses.yml +++ b/.github/workflows/licenses.yml @@ -5,16 +5,16 @@ # without burdening contributors and without ever committing to main directly. # # Runs ONLY on pushes to main (after PRs merge). It regenerates both files with -# `cargo about` (config: about.toml; templates: about.hbs / about.md.hbs) and, -# if anything changed, opens or updates a single rolling pull request with the -# refreshed files for a human to review and merge. It never pushes to main. +# `cargo about` (config + templates in licenses/config/) and, if anything +# changed, opens or updates a single rolling pull request with the refreshed +# files for a human to review and merge. It never pushes to main. # # This is intentionally NOT a check on contributor PRs: deps merge with briefly # stale notices, then this workflow refreshes them in a follow-up PR. # -# If a dependency uses a license not accepted in about.toml, `--fail` aborts the -# run (no PR is opened) — a new license type needs a human to vet it and add it -# to about.toml. You'll see this as a failed run on main. +# If a dependency uses a license not accepted in licenses/config/about.toml, +# `--fail` aborts the run (no PR is opened) — a new license type needs a human +# to vet it and add it there. You'll see this as a failed run on main. name: Third-party licenses @@ -25,9 +25,9 @@ on: paths: - Cargo.toml - Cargo.lock - - about.toml - - about.hbs - - about.md.hbs + - licenses/config/about.toml + - licenses/config/about.hbs + - licenses/config/about.md.hbs - .github/workflows/licenses.yml workflow_dispatch: @@ -72,8 +72,8 @@ jobs: - name: Regenerate notices run: | - cargo about generate --fail about.hbs -o licenses/THIRD-PARTY-NOTICES.html - cargo about generate --fail about.md.hbs -o licenses/THIRD-PARTY-LICENSES.md + cargo about generate --fail -c licenses/config/about.toml licenses/config/about.hbs -o licenses/THIRD-PARTY-NOTICES.html + cargo about generate --fail -c licenses/config/about.toml licenses/config/about.md.hbs -o licenses/THIRD-PARTY-LICENSES.md # Opens a PR only if the files actually changed; otherwise it's a no-op. # Re-runs update the same branch/PR instead of opening new ones. @@ -96,7 +96,7 @@ jobs: Automated update of the third-party license notices to match the current dependency graph on `main`. - Generated by `cargo about` (config `about.toml`, templates - `about.hbs` / `about.md.hbs`) via the **Third-party licenses** - workflow. Do not edit these files by hand. + Generated by `cargo about` (config + templates in + `licenses/config/`) via the **Third-party licenses** workflow. + Do not edit these files by hand. delete-branch: true diff --git a/licenses/THIRD-PARTY-LICENSES.md b/licenses/THIRD-PARTY-LICENSES.md index 37626a8f2..76a25360b 100644 --- a/licenses/THIRD-PARTY-LICENSES.md +++ b/licenses/THIRD-PARTY-LICENSES.md @@ -1,8 +1,8 @@ # Robrix — Third-Party Dependency Licenses - + Summary of the third-party crates compiled into Robrix's default build (the experimental `tsp` feature is excluded). The **full license texts** of every diff --git a/about.hbs b/licenses/config/about.hbs similarity index 100% rename from about.hbs rename to licenses/config/about.hbs diff --git a/about.md.hbs b/licenses/config/about.md.hbs similarity index 65% rename from about.md.hbs rename to licenses/config/about.md.hbs index 1d4a8af9c..264329e10 100644 --- a/about.md.hbs +++ b/licenses/config/about.md.hbs @@ -1,8 +1,8 @@ # Robrix — Third-Party Dependency Licenses - + Summary of the third-party crates compiled into Robrix's default build (the experimental `tsp` feature is excluded). The **full license texts** of every diff --git a/about.toml b/licenses/config/about.toml similarity index 95% rename from about.toml rename to licenses/config/about.toml index 0f8ba7eb9..c246be914 100644 --- a/about.toml +++ b/licenses/config/about.toml @@ -1,7 +1,7 @@ # Configuration for `cargo about generate`, which produces a verified # THIRD-PARTY-NOTICES file with the full text of every dependency's license. # -# cargo about generate --fail about.hbs -o licenses/THIRD-PARTY-NOTICES.html +# cargo about generate --fail -c licenses/config/about.toml licenses/config/about.hbs -o licenses/THIRD-PARTY-NOTICES.html # # This covers Robrix's default build. The experimental `tsp` feature is NOT # included; to also document its deps, append `--features tsp`. From 878e302c83c7fbcb86222a8f69eae36854aa5503 Mon Sep 17 00:00:00 2001 From: Kevin Boos Date: Tue, 2 Jun 2026 15:16:21 -0700 Subject: [PATCH 3/3] exclude auto-generated license files from `typos` checks --- .github/typos.toml | 10 ++++++++++ .github/workflows/main.yml | 2 ++ License Attributions.md => licenses/ATTRIBUTIONS.md | 0 3 files changed, 12 insertions(+) create mode 100644 .github/typos.toml rename License Attributions.md => licenses/ATTRIBUTIONS.md (100%) diff --git a/.github/typos.toml b/.github/typos.toml new file mode 100644 index 000000000..6f5c38c95 --- /dev/null +++ b/.github/typos.toml @@ -0,0 +1,10 @@ +# Skip the auto-generated third-party license artifacts when spell-checking: +# they contain third-party crate names (e.g. `flate2`, `writeable`) and verbatim +# upstream license text (e.g. the OpenSSL license's "aheared"/"rouines") that we +# neither control nor should edit. Hand-written files under licenses/ (e.g. +# ATTRIBUTIONS.md and the cargo-about config/templates) are still checked. +[files] +extend-exclude = [ + "licenses/THIRD-PARTY-NOTICES.html", + "licenses/THIRD-PARTY-LICENSES.md", +] diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c0dd613dc..7a98ab754 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,3 +67,5 @@ jobs: - uses: actions/checkout@v4 - name: Check for typos uses: crate-ci/typos@master + with: + config: .github/typos.toml diff --git a/License Attributions.md b/licenses/ATTRIBUTIONS.md similarity index 100% rename from License Attributions.md rename to licenses/ATTRIBUTIONS.md