::: tip 🥱TL;DR
We have released a brand new version of Speckle Manager! Check it out from our downloads page, and keep reading to know how we got there 🙇.
:::

Context

Deploying desktop applications comes with its own unique set of challenges.

On the web, we have pipelines that automagically handle everything, we can ship new versions of our server and services in minutes, and users don’t even notice when this happens!

On the contrary, in desktopland, things are more complicated as we have to work within an environment we do not control: the end users’ systems.

In our specific case, when deploying Connectors for Speckle, we need to make sure of a few things:

And this is where Manager comes into play, it’s a solution to most of the above; it lets users install Connectors with ease and manage their Speckle Accounts from one single place.

The Old Manager 🧓

The very first iteration of Manager was developed in 2019 for Speckle v1 using Electron.

At the time, there were not many cross-platform frameworks, and the idea of being able to use JavaScript and web UI components was quite appealing - it was definitely the best choice at that time, and it has served us well for many years now.

However, with time, we started seeing some of its shortcomings as well:

The New Manager 👮‍♂️

Being Manager such a critical piece of our infrastructure and Speckle’s distribution, we decided to set off and try to improve things. We first started by looking at what new cross-platform frameworks had been developed; here are a few of the most notable ones:

Ultimately, given the progress in .NET Core, advances in the Avalonia framework, and our team was already familiar with it, we decided to set on that.

In just two weeks, we had an early alpha version of Manager, rewritten entirely from scratch in C#, ready for some internal testing.

After some additional refinement, we got:

Challenges

Most of the challenges came from parts of the application that previously were handled automatically by Electron; we now had to write most of these ourselves, such as installation and automatic updates.

Automatic Updates were resolved with a brilliant NuGet Package called NetSparkle that works cross-platform and took very little time to implement.

Installation on Windows was taken care of by InnoSetup, while on Mac, we just opted to create a classic dmg with another NuGet Package. An unexpected hiccup was supporting both the Intel and ARM chips on Macs, but luckily we found a tool called lipo that allowed us to create a Universal Binary release and not have two separate installers for Mac.

Conclusion

We feel like this transition has been worth it, although users are just starting to migrate, so we’ll only know fully in some weeks.

We’re also quite confident about the stack we chose; it is probably the best choice for us at this stage - but it doesn’t mean it’ll be in 5 years. Like all things, it’s crucial never to be afraid of experimenting and iterating!

Now, what are you waiting for?


Lots of kudos to all the open-source projects that have made this possible, just to name a few: