Do you ever forget to commit a crucial file and end up with a broken build? Or your latest work is on your desktop, and you can't continue working on your laptop because you forgot to push? These are common challenges for developers, and we want to fix those with HighFlux.
HighFlux is a tool that automates git so that your code gets synchronized to GitHub automatically, similar to how Dropbox synchronizes your files as you change them.
Using HighFlux is simple and straightforward. After installing it, you can start creating automated feature branches (which we call WIPs, Works in Progress) to manage your code. Every WIP has a name, which will become the commit message once the branch gets merged.
After creating the WIP, you can start writing code as usual. If you notice a typo or want to make a change unrelated to your current WIP, you can easily create a new WIP and switch between them. HighFlux synchronizes your code to the local and remote git repository all the time, so you don't have to worry about stashing; a switch is always immediate.
The real-time synchronization also makes it easy for your colleagues to see what you're working on, if necessary. And when you're ready to submit your code for review, you can open the GitHub pull request with one click on the “Create Review” button.
With HighFlux, git becomes easy and hassle-free. Give it a try and see how it can improve your workflow.
This year, we built HighFlux, a transformative git client that synchronizes code to the cloud while a developer is writing it. As a team with experience in mobile and web app development, building a desktop app was a new and exciting challenge for us. Here, we want to share the decisions we made and what we learned along the way.
When we started, we needed to choose which core technology to use. We wanted a lightweight and fast solution that would not consume too much CPU or memory. Developers frequently run multiple programs, like an IDE, development servers, and potentially docker images, and HighFlux should leave as much CPU and RAM as possible available for those tools.
To meet these requirements we rejected garbage-collected technology like a JVM language (Kotlin would have been our preferred technology given our previous experience) or Go. Almost all information on the internet points in one direction: Rust is the modern non-garbage collected multi-platform language of choice right now.
For the GUI, we chose the Tauri platform on which we built a React frontend. Tauri reuses an already installed browser on your system, so the app stays lightweight. Our final app is less than 20MB for all three platforms we’re targeting (Windows, macOS, and Linux).
Rust took a short while to get used to, but once we got the hang of the borrow checker and the tokio async runtime, development was productive and pleasant, with (libgit2)[https://github.com/rust-lang/git2-rs] as a big help in implementing our fully git-compatible code.
Supporting Windows, macOS and Linux from the start
We considered doing a single platform launch first, but as between the three founders we use 2 out of the 3 platforms already, we decided we could launch for all three. With Windows being the least used platform by us as developers, that platform required the most tweaking: named pipes work differently than on UNIX platforms, UNC pathnames sometimes break stuff (thankfully, there’s a crate called dunce crate that simplifies this), and we ran into some issues with the maximum length of pathnames.
Apple macOS required sending our builds to Apple for signing and notarizing to prevent users from having to click through a big scary security warning, and this also took some time to set up.
We ended up with one Rust codebase with a limited number of #[cfg(unix)] and #[cfg(windows)] classifiers for OS-specific code. The UI is a node React project without special cases for the different OSes.
We use Rudderstack to log essential usage metrics to analyze our app's usage and make improvements. Rudderstack allows us to choose where we view our user events flexibly, and at this moment, we can view them in Google Analytics and Mixpanel.
We created an in-app notification when there’s a newer version of our software that users can upgrade to. Unfortunately, there’s no good mechanism to automate the upgrade for the user yet. Upgrading software is a no-brainer in the web app and mobile app world, and, unfortunately, desktop apps don’t have a method that’s just as easy.
Overall, building a desktop app with Rust, Tauri, and React was a great experience. Rust's performance and safety made it a perfect fit, while Tauri and React allowed us to quickly develop a modern, lightweight GUI. Supporting all three platforms required some extra effort, but it was worth it to reach a wider audience.