packagekit_dart
Dart FFI bindings for PackageKit, the cross-distro Linux package manager. Search, install, update, and remove packages via D-Bus with async streams.
0.5.0
17K downloads/mo
#2349 most downloaded on pub.dev
jwinarske/packagekit_dart
What this package is like to depend on
Last release 10 days ago
13 Aug 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 8 of 8 stable releases
Nothing withdrawn
no release was ever pulled
4 months old
8 releases · first in 2026
8 releases in the last 12 months
see the full history below
Release timeline
8 releases · Apr 2026 to Aug 2026Releases
latest 8-
0.5.013 Aug 2026Release notes
Open source →- Breaking: migrate the native build hook from
hooks1.x to 2.x (and
code_assetsto 1.2.x). hooks 2.x requires Dart >=3.10, so the SDK lower
bound rises from 3.6.0 — consumers on Dart 3.6–3.9 should stay on 0.4.x. The
hook's behaviour is unchanged (it still buildslibpackagekit_nc.sovia CMake
and skips cleanly when cmake/ninja/sd-bus are absent); the migration is a
dependency bump only, verified end to end against a consumer build. - Drop the
native_toolchain_cdependency: it was declared but never imported
(the hook drives CMake directly rather thanCBuilder).
Release notes
Open source →- Breaking: migrate the native build hook from
hooks1.x to 2.x (andcode_assetsto 1.2.x). hooks 2.x requires Dart >=3.10, so the SDK lower bound rises from 3.6.0 — consumers on Dart 3.6–3.9 should stay on 0.4.x. The hook's behaviour is unchanged (it still buildslibpackagekit_nc.sovia CMake and skips cleanly when cmake/ninja/sd-bus are absent); the migration is a dependency bump only, verified end to end against a consumer build. - Drop the
native_toolchain_cdependency: it was declared but never imported (the hook drives CMake directly rather thanCBuilder).
- Breaking: migrate the native build hook from
-
0.4.313 Aug 2026Release notes
Open source →A build-hook fix so the package installs on hosts that lack the native-bridge
toolchain.- Skip the native bridge cleanly when its build prerequisites are absent.
The bridge needs a C++ toolchain (cmake + ninja) and libsystemd's sd-bus;
on Alpine/OpenRC, a minimal image, or any non-systemd host, the build hook
now probes for these up front and returns without building — the PackageKit
backend is simply unavailable, which is fine where it is unused. Previously a
missing tool threwProcessException(only a present-but-failing tool was
handled), failing the whole build hook and blockingdart pub get/ install
for every consumer on such a host. Probing first also avoids a needless
sdbus-cpp clone.
Release notes
Open source →A build-hook fix so the package installs on hosts that lack the native-bridge toolchain.
- Skip the native bridge cleanly when its build prerequisites are absent.
The bridge needs a C++ toolchain (cmake + ninja) and libsystemd's sd-bus;
on Alpine/OpenRC, a minimal image, or any non-systemd host, the build hook
now probes for these up front and returns without building — the PackageKit
backend is simply unavailable, which is fine where it is unused. Previously a
missing tool threw
ProcessException(only a present-but-failing tool was handled), failing the whole build hook and blockingdart pub get/ install for every consumer on such a host. Probing first also avoids a needless sdbus-cpp clone.
- Skip the native bridge cleanly when its build prerequisites are absent.
-
0.4.203 Aug 2026Release notes
Open source →Documentation only — no code change.
- Lead the WSL guidance with the polkit rule rather than running as root.
Recommending root to library consumers pushes them to relay that to their
own users, and most tools keep caches or configuration under$HOME, where
running as root leaves artifacts the user can no longer modify. Keeping the
client unprivileged is what PackageKit exists to make possible. - Document that the suggested rule covers only install/remove/update.
refreshCachemaps tosystem-sources-refresh, which needs no
authorization for a caller in a login session but does for one without —
the CI and WSL case.
Release notes
Open source →Documentation only — no code change.
- Lead the WSL guidance with the polkit rule rather than running as root.
Recommending root to library consumers pushes them to relay that to their
own users, and most tools keep caches or configuration under
$HOME, where running as root leaves artifacts the user can no longer modify. Keeping the client unprivileged is what PackageKit exists to make possible. - Document that the suggested rule covers only install/remove/update.
refreshCachemaps tosystem-sources-refresh, which needs no authorization for a caller in a login session but does for one without — the CI and WSL case.
- Lead the WSL guidance with the polkit rule rather than running as root.
-
0.4.103 Aug 2026Release notes
Open source →Documentation only — no code change. Released so the README rendered on
pub.dev stops handing out a polkit rule that does nothing on Debian/Ubuntu.- Fix the documented polkit rule, which granted only to
wheel— the admin
group on Fedora/RHEL/Arch but not on Debian/Ubuntu, where it issudo. A
wheel-only rule silently does nothing on Debian and is hard to diagnose,
because the rule looks installed and the error is unchanged. Match both. - Document that installing the rule is not sufficient: you must be in the
group, passwordlesssudois not the same thing, andusermoddoes not
affect a running session. All three produce the same unchanged denial.
Release notes
Open source →Documentation only — no code change. Released so the README rendered on pub.dev stops handing out a polkit rule that does nothing on Debian/Ubuntu.
- Fix the documented polkit rule, which granted only to
wheel— the admin group on Fedora/RHEL/Arch but not on Debian/Ubuntu, where it issudo. Awheel-only rule silently does nothing on Debian and is hard to diagnose, because the rule looks installed and the error is unchanged. Match both. - Document that installing the rule is not sufficient: you must be in the
group, passwordless
sudois not the same thing, andusermoddoes not affect a running session. All three produce the same unchanged denial.
- Fix the documented polkit rule, which granted only to
-
0.4.003 Aug 2026Release notes
Open source →- Send the
interactivehint on every transaction. The daemon treats an
absent hint as false, which stripsALLOW_USER_INTERACTIONfrom its polkit
check — so any transaction needing authorization failed synchronously with
PkError.notAuthorizedand a 0 ms runtime, on any host where the polkit
action isauth_adminand the caller is not root. - Add
PkClient.connect({bool interactive = true})and the matching
PkClient.interactivegetter. Interactive is the default: transactions that
need authorization now prompt instead of failing. Passinteractive: false
for unattended callers that must fail fast rather than block on a prompt —
it suppresses the prompt, it does not grant authorization. - Document authorization on WSL, where polkit cannot reliably prompt because
a logind session owned by the calling user is often absent. Recommends
running as root, with a narrowly scoped polkit rule as an opt-in
alternative, plus how to tell a session problem from a real denial. - C ABI change:
pk_transaction_set_hintstakes a third parameter,
bool interactive. Consumers linkinglibpackagekit_ncdirectly must
update their declaration; consumers using the build hook are unaffected,
as it compiles the library from source.
Release notes
Open source →- Send the
interactivehint on every transaction. The daemon treats an absent hint as false, which stripsALLOW_USER_INTERACTIONfrom its polkit check — so any transaction needing authorization failed synchronously withPkError.notAuthorizedand a 0 ms runtime, on any host where the polkit action isauth_adminand the caller is not root. - Add
PkClient.connect({bool interactive = true})and the matchingPkClient.interactivegetter. Interactive is the default: transactions that need authorization now prompt instead of failing. Passinteractive: falsefor unattended callers that must fail fast rather than block on a prompt — it suppresses the prompt, it does not grant authorization. - Document authorization on WSL, where polkit cannot reliably prompt because a logind session owned by the calling user is often absent. Recommends running as root, with a narrowly scoped polkit rule as an opt-in alternative, plus how to tell a session problem from a real denial.
- C ABI change:
pk_transaction_set_hintstakes a third parameter,bool interactive. Consumers linkinglibpackagekit_ncdirectly must update their declaration; consumers using the build hook are unaffected, as it compiles the library from source.
- Send the
-
0.3.216 Jun 2026Release notes
Open source →- Point
repositoryandissue_trackerat the jwinarske fork, fixing
pub.dev repository verification.
Release notes
Open source →- Point
repositoryandissue_trackerat the jwinarske fork, fixing pub.dev repository verification.
- Point
-
0.3.003 Apr 2026Release notes
Open source →- Extract TransactionDispatcher and dispatchManagerEvent for testable
message dispatch without a live daemon - 102 unit tests covering all codec discriminators, model constructors,
enum round-trips, dispatcher paths, and error handling - ~98% coverage on testable Dart code (FFI glue excluded)
- Remove unused generated sdbus-cpp proxy headers and D-Bus XML interfaces
- Remove go_router; use index-based navigation for instant screen switching
- Fix CI: add libclang-rt-19-dev for ASAN, exclude test/ from clang-tidy,
add dart pub get before format check, add flutter analyze step - Lower Dart coverage threshold to 10% (FFI-heavy package)
- Add Flutter example screenshot to README
- Fix detail pane overlay on screen switch and package selection
Release notes
Open source →- Extract TransactionDispatcher and dispatchManagerEvent for testable message dispatch without a live daemon
- 102 unit tests covering all codec discriminators, model constructors, enum round-trips, dispatcher paths, and error handling
- ~98% coverage on testable Dart code (FFI glue excluded)
- Remove unused generated sdbus-cpp proxy headers and D-Bus XML interfaces
- Remove go_router; use index-based navigation for instant screen switching
- Fix CI: add libclang-rt-19-dev for ASAN, exclude test/ from clang-tidy, add dart pub get before format check, add flutter analyze step
- Lower Dart coverage threshold to 10% (FFI-heavy package)
- Add Flutter example screenshot to README
- Fix detail pane overlay on screen switch and package selection
- Extract TransactionDispatcher and dispatchManagerEvent for testable
-
0.2.003 Apr 2026Release notes
Open source →- Native build hook (
hook/build.dart) usingpackage:hooksand
package:code_assets— automatically compiles libpackagekit_nc.so via
CMake at build time and bundles it as a CodeAsset - Auto-clone sdbus-cpp at pinned commit when submodule is unavailable
(pub.dev installs) - Flutter example app (
example/packagekit_catalog/) — Material 3 desktop
catalog with Riverpod state management, GoRouter navigation, search,
installed packages, updates, and repository views - Codecov integration with 60% threshold enforcement
- Dart and C++ coverage collection in CI
Release notes
Open source →- Native build hook (
hook/build.dart) usingpackage:hooksandpackage:code_assets— automatically compiles libpackagekit_nc.so via CMake at build time and bundles it as a CodeAsset - Auto-clone sdbus-cpp at pinned commit when submodule is unavailable (pub.dev installs)
- Flutter example app (
example/packagekit_catalog/) — Material 3 desktop catalog with Riverpod state management, GoRouter navigation, search, installed packages, updates, and repository views - Codecov integration with 60% threshold enforcement
- Dart and C++ coverage collection in CI
- Native build hook (