Skip to content

build: full dependency update pass (backend + frontend)#390

Merged
streamer45 merged 8 commits into
mainfrom
devin/1777577813-deps-update
May 1, 2026
Merged

build: full dependency update pass (backend + frontend)#390
streamer45 merged 8 commits into
mainfrom
devin/1777577813-deps-update

Conversation

@staging-devin-ai-integration
Copy link
Copy Markdown
Contributor

@staging-devin-ai-integration staging-devin-ai-integration Bot commented Apr 30, 2026

Summary

Full dependency update pass across backend (Cargo) and frontend (Bun) workspaces.

Backend (Cargo)

Version spec bumps:

  • serde-saphyr 0.0.23 → 0.0.25 (workspace + api)
  • toml 1.0 → 1.1 (skit, skit-cli)
  • sha2 0.10 → 0.11 (skit)
  • rustls 0.23.36 → 0.23 (skit — loosen spec)
  • moq-native 0.13.12 → 0.13.13 (skit, nodes)
  • moq-lite 0.15.13 → 0.15.15 (skit, nodes)
  • hang 0.15.7 → 0.15.8 (nodes)
  • wasmtime + wasmtime-wasi 43.0.1 → 44.0.1 (plugin-wasm)
  • shiguredo_nvcodec 2025.2 → 2026.1 (nodes)

Lock-only updates via cargo update: axum, clap, reqwest, semver, tracing-appender, aws-lc-rs, vk-video, cc, pkg-config, and transitive deps.

Code changes for moq-lite 0.15.15 API:

  • moq_config.bind type changed from SocketAddr to String → added .to_string()
  • next_group() deprecated → replaced with next_group_ordered() (maintains sequence order for media streaming)

Code changes for shiguredo_nvcodec 2026.1 API:

  • DecoderConfig: add codec, max_num_decode_surfaces, surface_format fields; remove Default usage
  • Decoder::new_av1()Decoder::new() (codec specified in config)
  • EncoderConfig: fps_numeratorframerate_num, fps_denominatorframerate_den, target_bitrateaverage_bitrate; move idr_period/profile into CodecConfig::Av1(Av1EncoderConfig); add buffer_format
  • Encoder::new_av1()Encoder::new() (codec specified in config)
  • Encoder::encode() now takes an EncodeOptions parameter

Frontend (Bun)

ui/ — Bumped all patch/minor versions: @commitlint/*, @typescript-eslint/*, @vitest/*, vite, vitest, @codemirror/view, @moq/*, lucide-react, @tanstack/react-query, react-router-dom, uuid, jsdom, knip. Regenerated lockfile to deduplicate @codemirror/view. Added "types": ["node"] to tsconfig.json (required after @tanstack/react-query fixed @types/node type leak in 5.95.2+; the project was previously relying on this unintentional leak for Node ambient types in test files).

e2e/@playwright/test 1.58.2 → 1.59.1, @types/node 25.5.0 → 25.6.0, typescript 6.0.2 → 6.0.3.

docs/mermaid 11.13.0 → 11.14.0. Astro/Starlight major bumps deferred to a separate PR.

Deferred

  • blake2 0.10.6 → 0.11 (still rc, no stable release)
  • uuid v14 (drops Node 18 support)
  • Astro 6 / Starlight 0.38 (major bumps, separate PR)

Review & Testing Checklist for Human

  • Verify MoQ streaming still works end-to-end: the next_group()next_group_ordered() change and bind type change are the only moq code modifications — confirm a MoQ publish/subscribe flow works correctly
  • Verify NVENC/NVDEC AV1 encoding/decoding on a GPU machine: the shiguredo_nvcodec 2026.1 update changed struct layouts, constructors, and the encode() signature
  • Spot-check the @tanstack/react-query upgrade: confirm React Query hooks behave normally in the UI (query caching, refetching, error states)

Notes

  • All 551 UI tests pass, all Rust workspace tests pass (excluding pre-existing GPU and plugin integration test failures that also fail on main)
  • just lint passes cleanly (Rust fmt/clippy + UI prettier/eslint/tsc)
  • The tsconfig.json change ("types": ["node"]) is necessary because @tanstack/react-query versions prior to 5.95.2 accidentally leaked @types/node into consuming projects via build config files included in their DTS rollup. This was fixed upstream, meaning projects that relied on the leak need to explicitly declare their Node type dependency

Link to Devin session: https://staging.itsdev.in/sessions/ca8a8de716e54a7fafbe321164ed2c8a
Requested by: @streamer45


Devin Review

Status Commit
🟢 Reviewed 9678e7b
Open in Devin Review (Staging)

streamkit-devin and others added 5 commits April 30, 2026 20:37
- serde-saphyr 0.0.23 → 0.0.25 (workspace + api)
- toml 1.0 → 1.1 (skit, skit-cli)
- sha2 0.10 → 0.11 (skit)
- rustls 0.23.36 → 0.23 (skit, loosen spec)
- moq-native 0.13.12 → 0.13.13 (skit, nodes)
- moq-lite 0.15.13 → 0.15.15 (skit, nodes)
- hang 0.15.7 → 0.15.8 (nodes)
- wasmtime/wasmtime-wasi 43.0.1 → 44.0.1 (plugin-wasm)
- shiguredo_nvcodec 2025.2 → 2026.1 (nodes)
- cargo update for all lock-only patch bumps

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
- moq_config.bind type changed from SocketAddr to String
- next_group() deprecated in favor of next_group_ordered()

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
- Bump patch/minor versions for all dev and runtime deps
- Add types: ["node"] to tsconfig.json (required after
  @tanstack/react-query fixed @types/node type leak in 5.95.2+)
- Regenerate bun.lock to deduplicate @codemirror/view

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
- @playwright/test 1.58.2 → 1.59.1
- @types/node 25.5.0 → 25.6.0
- typescript 6.0.2 → 6.0.3

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
- mermaid 11.13.0 → 11.14.0
- Defer Astro/Starlight major bumps to separate PR

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
@staging-devin-ai-integration
Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

Copy link
Copy Markdown
Contributor Author

@staging-devin-ai-integration staging-devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 4 potential issues.

Open in Devin Review (Staging)
Debug

Playground

Comment thread ui/package.json
"@radix-ui/react-tabs": "^1.1.13",
"@radix-ui/react-tooltip": "^1.2.8",
"@tanstack/react-query": ">=5.91.3 <5.95.2",
"@tanstack/react-query": "^5.100.6",
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 Removal of deliberately-placed @tanstack/react-query version cap

The previous PR (commit 0c52c92) explicitly capped @tanstack/react-query at <5.95.2 with the note: ">=5.95.2 breaks Node.js type resolution". This PR removes that cap and jumps to ^5.100.6. The lockfile resolves to 5.100.6. If TanStack fixed the type resolution issue upstream (which is likely given the many versions between 5.95.2 and 5.100.6), this is correct. However, the cap was deliberate and its removal is not documented in the PR — worth confirming that tsc --noEmit passes cleanly in CI before merging.

Open in Devin Review (Staging)

Was this helpful? React with 👍 or 👎 to provide feedback.

Debug

Playground

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The cap was placed because versions 5.91.0–5.91.2 leaked @types/node into browser projects via build config files included in the DTS rollup. The fix landed in 5.91.3 (TanStack/query#10302) and was extended in TanStack/query#10358. However, removing the leak means projects that relied on it (like ours) lose ambient Node types.

Rather than keeping the cap, this PR adds "types": ["node"] to tsconfig.json — which is the proper fix. The tsc --noEmit check passes cleanly both locally and in CI (see the "UI / Lint, Test & Build" check).

Comment thread apps/skit/Cargo.toml
# For built-in authentication
jsonwebtoken = { version = "10.2.0", default-features = false, features = ["aws_lc_rs"] }
sha2 = "0.10"
sha2 = "0.11"
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: sha2 0.10→0.11 upgrade was previously explicitly deferred

The previous dependency update PR (commit 0c52c92) explicitly deferred this upgrade with the note: "sha2 0.10→0.11 (blake2 0.11 not stable, would split digest versions)". This PR now does the upgrade, resulting in two digest crate versions in the dependency tree: digest 0.10.7 (from blake2 0.10.6) and digest 0.11.2 (from sha2 0.11.0). I verified this is not a correctness issue — marketplace.rs imports Digest from blake2, while auth/mod.rs and marketplace_installer.rs import Digest from sha2, and there's no cross-module trait interaction. The only downside is slightly increased binary size from duplicate digest implementations. Consider updating blake2 to 0.11 when it stabilizes to unify the digest version.

Open in Devin Review (Staging)

Was this helpful? React with 👍 or 👎 to provide feedback.

Debug

Playground

tokio::select! {
biased;
group_result = track_consumer.next_group() => {
group_result = track_consumer.next_group_ordered() => {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: next_group() → next_group_ordered() migration is complete

The moq-lite 0.15.15 API renamed next_group() to next_group_ordered(). I verified both call sites in the codebase were updated: crates/nodes/src/transport/moq/peer/mod.rs:1739 and crates/nodes/src/transport/moq/pull.rs:313. No remaining references to the old next_group() method exist in Rust source files. The behavioral change (ordered group delivery) aligns with the MoQ protocol's expected semantics for these consumer paths.

Open in Devin Review (Staging)

Was this helpful? React with 👍 or 👎 to provide feedback.

Debug

Playground

Comment thread ui/tsconfig.json
"DOM"
],
"skipLibCheck": true,
"types": ["node"],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: tsconfig types field restricts global type inclusion

Adding "types": ["node"] to ui/tsconfig.json restricts which @types/* packages are automatically included for global type resolution. This means only @types/node globals (like process, Buffer, setTimeout) are available globally. Other @types/* packages (@types/react, @types/lodash-es, @types/js-yaml) still work fine through module resolution when imported. This change is likely needed for TypeScript 6.0 compatibility where automatic @types/node inclusion behavior may have changed.

Open in Devin Review (Staging)

Was this helpful? React with 👍 or 👎 to provide feedback.

Debug

Playground

- DecoderConfig: add codec, max_num_decode_surfaces, surface_format
  fields; remove Default usage
- Decoder::new_av1() → Decoder::new() (codec in config)
- EncoderConfig: fps_numerator → framerate_num,
  fps_denominator → framerate_den, target_bitrate → average_bitrate;
  move idr_period/profile into CodecConfig::Av1(Av1EncoderConfig)
- Encoder::new_av1() → Encoder::new() (codec in config)
- Encoder::encode() now takes EncodeOptions parameter
- Add buffer_format field to EncoderConfig

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
Copy link
Copy Markdown
Contributor Author

@staging-devin-ai-integration staging-devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 new potential issues.

Open in Devin Review (Staging)
Debug

Playground

Comment on lines +582 to +589
let encode_options = shiguredo_nvcodec::EncodeOptions {
force_intra: false,
force_idr: false,
output_spspps: false,
};

self.encoder
.encode(&nv12_data)
.encode(&nv12_data, &encode_options)
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: Hardcoded EncodeOptions with all-false flags preserves prior behavior but disables per-frame keyframe forcing

The new shiguredo_nvcodec 2026.1 API adds per-frame EncodeOptions (force_intra, force_idr, output_spspps). The PR hardcodes all three to false at crates/nodes/src/video/nv_av1.rs:582-586, which preserves the behavior of the old encode(&data) API that had no per-frame overrides. However, this means the encoder cannot be dynamically instructed to emit a keyframe on demand (e.g., in response to a viewer joining). The keyframe schedule is entirely driven by gop_length/idr_period in the config. This is fine for now but worth noting if on-demand keyframe insertion is needed later.

Open in Devin Review (Staging)

Was this helpful? React with 👍 or 👎 to provide feedback.

Debug

Playground

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct — EncodeOptions { false, false, false } is equivalent to the old encode(&data) which had no per-frame override capability. On-demand keyframe insertion would be a feature addition on top of this dependency update.

Comment thread crates/nodes/src/video/nv_av1.rs
The previous shiguredo_nvcodec DecoderConfig::default() used 20.
Preserves prior behavior to avoid decoding stalls with bitstreams
that require more reference frames.

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
Copy link
Copy Markdown
Contributor Author

@staging-devin-ai-integration staging-devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

Open in Devin Review (Staging)
Debug

Playground


let mut moq_config = MoqServerConfig::default();
moq_config.bind = Some(addr);
moq_config.bind = Some(addr.to_string());
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: moq_config.bind type changed from SocketAddr to String

The moq_config.bind field changed from Option<SocketAddr> to Option<String> at apps/skit/src/server/mod.rs:4703. The addr variable is a SocketAddr (parsed at line 4662), so .to_string() produces a valid ip:port format. This is a safe conversion, though it introduces a redundant parse round-trip (string → SocketAddr → string) that the moq-native library will then parse back. No functional issue.

Open in Devin Review (Staging)

Was this helpful? React with 👍 or 👎 to provide feedback.

Debug

Playground

Signed-off-by: StreamKit Devin <devin@streamkit.dev>
Co-Authored-By: Claudio Costa <cstcld91@gmail.com>
Copy link
Copy Markdown
Contributor Author

@staging-devin-ai-integration staging-devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

Open in Devin Review (Staging)
Debug

Playground

Comment on lines +18 to +19
wasmtime = { version = "44.0.1", features = ["component-model", "async"] }
wasmtime-wasi = "44.0.1"
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: wasmtime 43 → 44 bump with no source changes

The wasmtime bump from 43.0.1 to 44.0.1 only changes the Cargo.toml version — no source files in crates/plugin-wasm/src/ were modified. Wasmtime minor releases (43→44) can include breaking API changes. If any source-level incompatibilities exist, they will manifest as compilation errors caught by CI. The plugin-wasm crate uses wasmtime's component-model and async features, plus wasmtime-wasi, which are the areas most likely to have API churn between versions.

Open in Devin Review (Staging)

Was this helpful? React with 👍 or 👎 to provide feedback.

Debug

Playground

@streamer45 streamer45 merged commit 1a9d491 into main May 1, 2026
17 checks passed
@streamer45 streamer45 deleted the devin/1777577813-deps-update branch May 1, 2026 08:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants