Skip to content

device_info_plus capped at ^12.3.0 holds win32 at ^5 for the whole dependency tree #1145

Description

@gg-d41

Summary

livekit_client constrains device_info_plus: ^12.3.0. Since device_info_plus 13.0.0 moved to win32: ^6.0.1, that cap transitively holds win32 at ^5.x for the entire dependency tree of any app that depends on livekit_client — including apps that never target Windows.

Would you consider widening it to something like >=12.3.0 <14.0.0?

Why it has a wider blast radius than it looks

win32 is a common transitive dependency, so pinning it at ^5 blocks any package that has already moved to ^6. In our tree that currently means:

Package Latest its win32 Blocked for us?
device_info_plus 13.2.0 ^6.0.1 yes — directly capped
share_plus 13.3.0 ^6.0.1 yes — via the win32 pin
geolocator 14.0.3 ^6 (via geolocator_linuxpackage_info_plus) yes
package_info_plus 10.2.1 ^6.0.1 yes
flutter_secure_storage_windows 4.2.2 ^6.0.1 held at 4.1.0
win32_registry 3.0.3 ^6.0.0 held at 2.1.0

Every one of those has published a win32 ^6-compatible release. As far as we can tell from our own dependency graph, livekit_client's device_info_plus cap is the last remaining constraint holding win32 at ^5.

Why dependency_overrides isn't a workaround

The obvious escape — dependency_overrides: win32: ^6 — resolves, passes flutter analyze, and produces a working flutter build web --release. It then fails to compile under flutter test, because the test harness compiles the full dependency graph on the host, including platform implementations that a web build tree-shakes away:

device_info_plus-12.4.0/lib/src/device_info_plus_windows.dart:105:37:
  Error: The getter 'wReserved' isn't defined for the type 'OSVERSIONINFOEX'.
   - 'OSVERSIONINFOEX' is from 'package:win32/src/structs.g.dart' (win32-6.3.0)

Also overriding win32_registry to ^3.0.3 doesn't resolve it — device_info_plus 12.x's Windows implementation is simply not win32-6 compatible, and the only fix is device_info_plus 13.x, which the cap excludes. So downstream apps can't work around this locally.

Cap history

The constraint has been unchanged across every release from 2.6.5 through 2.9.0 (latest, published 2026-07-28), including the 2.9.0-dev.0 prerelease:

2.6.3        ^12.2.0
2.6.4        ^12.2.0
2.6.5        ^12.3.0
2.7.0        ^12.3.0
2.8.0        ^12.3.0
2.8.1        ^12.3.0
2.9.0-dev.0  ^12.3.0
2.9.0        ^12.3.0

Question

Is there a known incompatibility with device_info_plus 13.x that the cap is deliberately guarding, or is it simply that the range hasn't been revisited? If it's the latter, I'm happy to open a PR widening the constraint — just let me know the range you'd prefer.

Environment

  • livekit_client 2.9.0
  • Flutter 3.44.2 / Dart 3.12
  • Target platforms: web (shipped), Android and iOS planned. No desktop targets.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions