A Flutter implementation of Velopack using flutter_rust_bridge for automated desktop app updates.
Flutter currently lacks a robust solution for distributing auto-updates for desktop applications, aside from the Microsoft and Mac App Stores. Velopack addresses this gap by providing a cross-platform installation and auto-update framework for desktop applications.
Learn more about Velopack at https://velopack.io/
This project leverages flutter_rust_bridge to interface with the Rust implementation of Velopack.
- Add the velopack_flutter dependency to your
pubspec.yaml
:
dependencies:
velopack_flutter: ^0.0.1
- Import the package, initialize the Rust library and handle Velopack app hooks in your
main.dart
:
import 'package:flutter/material.dart';
import 'package:velopack_flutter/velopack_flutter.dart';
Future<void> main() async {
await RustLib.init();
final veloCommands = ['--veloapp-install', '--veloapp-updated', '--veloapp-obsolete', '--veloapp-uninstall'];
if (veloCommands.any((cmd) => args.contains(cmd))) {
exit(0);
}
runApp(const MyApp());
}
Function | Description |
---|---|
isUpdateAvailable(String url) |
Checks the specified URL for an update and returns a boolean. |
updateAndRestart(String url) |
Checks for an update, downloads and applies it, then restarts the app. |
updateAndExit(String url) |
Checks for an update, downloads and applies it, then exits the app. |
waitExitThenUpdate(String url) |
Checks for an update, downloads it, and applies it after the app has been closed. Will close automatically after 60 seconds. |
- Install .NET Core SDK 6.0 and the
vpk
tool:
dotnet tool update -g vpk
- Build your Flutter app:
flutter build [windows|macos|linux] --release
- Navigate to your release build directory:
cd build/windows/x64/runner
- Package your app using
vpk
:
vpk pack --packId YourAppId --packVersion 1.0.0 --packDir Release --mainExe YourApp.exe
Your release package will be generated in the Releases
directory.
For more information on packaging and distribution, refer to:
- The Linux implementation is currently untested. Contributions and feedback from Linux users are welcome.
- The API may differ from Velopack implementations in other languages and is not feature-complete. In the long-term it would make sense to keep these consistent, however I didn't have time for this yet. Feel free to open a PR!
If you encounter issues, have suggestions, or want to contribute code, please open an issue or submit a pull request on this GitHub repository.