Elegant Auto Updates for Qt - Feedback Wanted
Dear fellow Qt developers,
first of all, I hope this is the right place for this topic. If not, I would like to apologize in advance.
I used to be a Qt Ambassador in the ol’ Nokia days but I’m still new to this forum :-)
I’ve been developing desktop apps with Qt (and other frameworks) for many years now and I found myself rewriting boilerplate code over and over: Every one of my applications needed auto updates.
Of course, there are frameworks like Sparkle that help you with that but none of them are really great when you’re trying to have a good user experience across multiple platforms.
So I came up with DBLSQD.
DBLSQD is a Release and Update server that provides your application with information about new releases.
You can use DBLSQD through a simple CLI tool that does all the work for you: Uploading a new release, creating a changelog, distributing it to existing users and creating a changelog.
You can either build your own UI around DBLSQD with the SDK or use the drop-in GUI.
I’m only just starting out with DBLSQD, so I’d love to hear your feedback and thoughts on it!
P.S: Here is what integrating DBLSQD into a Qt5 application with the drop-in GUI looks like:
#include "dblsqd-sdk-qt/feed.h" #include "dblsqd-sdk-qt/update_dialog.h" dblsqd::Feed* feed = new dblsqd::Feed("https://feeds.dblsqd.com/:app_token"); dblsqd::UpdateDialog* updateDialog = new dblsqd::UpdateDialog(feed);
Hi! To be honest, instead of adding another remote attack vector to the users' computers by having yet another half-baked self-updater, I'd very much prefer integration with the operating systems' native package managers.
I'd very much prefer integration with the operating systems' native package managers
That's not really an option in windows though.
I very much appreciate this project! Thanks! Will look into this seriously - we need such a thing for Mudlet too.
@VRonin If I understand this correctly, Windows 10 has a native package manager named "PackageManagement".
- Package managers only provide additional security when you limit yourself to software provided by the OS vendor.
- Package management is only really available on Linux, macOS doesn’t have any package management and OneGet on Windows isn’t really geared towards the general public.
So, in my mind, the best way to make sure users have easy access to the latest version of your software - and thus avoiding potential security problems with older versions - is using some sort of update mechanism like Sparkle or DBLSQD.
But I didn’t mean to start a discussion on Windows vs Linux or the utility of auto updates in general :-)
So, if anyone here still hasn’t been scared off and would like to give DBLSQD a try, I’d be happy to help them set it up and hear their feedback.
As I mentioned earlier I was pretty interested in this as nothing else with sufficiently good end-user experience exists in the Qt world. There is the Qt Installer Framework, but from what I've seen in Qt Creator, that is designed for developers - pulling people through wizards is not the way to go in 2017.
I've implemented DBLSQD in Mudlet, an open-source project (code available). We use DBLSQD handle the server-side part of running an updater - provide a feed clients can check for new versions, and parts of the client-side as well. On the client-side, it handles downloading of the new binaries, showing the update window, and a changelog window post-update.
Installing updates is complemented by Squirrel on Windows and since we use AppImage on Linux, no installation is necessary there. I did find it too difficult to integrate with Sparkle on macOS given by lack of Objective-C knowledge that Sparkle required, on macOS we use Sparkle entirely and DBLSQD provides the feed for Sparkle to work with.
So, overall, I'm super happy with this! Finally been able to add an updater to our application and @pentacent has been super helpful throughout the process. He's super responsive in communication, he adapted dblsqd to fit our needs, and he was also happy to include contributions we made to the clientside code. If I need an update solution for a commercial project, I would be more than happy to purchase a plan - the tech is good and support is top-notch.