DEV Community

Cover image for Package All the Things
CrabNebula for CrabNebulaDev

Posted on • Originally published at crabnebula.dev

Package All the Things

TLDR: We published cargo-packager, a tool for bundling apps in any ecosystem, that we are building in public.

When Tauri 1.0 was released, there was one strict criterion that the core team had: there needed to be a way for users to update their apps. It sounds trivial, but updating is a measure of the health of any framework and the maturity of the engineering effort behind it.

Anyone can cargo build --release, but there wasn’t (and still isn’t) a standard method for creating, shipping, and verifying updates for GUI apps. So the Tauri Working Group (of which many employees of CrabNebula are members) built one. They even created an open source GitHub action to make it easy to manufacture and ship bundles and their updates.

You can probably imagine the challenges of integrating such a system in a robust way that does a good job and improves on the status quo. We felt like the Tauri implementation worked well for Tauri apps. But there’s a problem: it was so tightly coupled to Tauri that the work couldn’t be enjoyed by other projects (not even the ones like Dioxus who were using Tauri’s underlying technology of Tao + Wry).

So obviously we had to do something about that.

“The CrabNebula team has always been at the forefront of improving the application development experience in the Rust ecosystem. Now with cargo-packager, the nightmare of generating installers or app bundles will fade away. We look forward to its adoption by the community.”

Aurindam Jana (slint.dev)

Today we are pleased to share cargo-packager. It is Apache-2/MIT licensed, available as a Cargo subcommand, and even as a library so it can be easily integrated into any workflow. You can configure it with a json file, a toml file, with CLI flags, or as [package.metadata.packager] metadata in a Cargo.toml file. To make sure it works, we have tested it with a few examples of frameworks you might already have heard about:

List of examples including deno, dioxus, egui, slint, Tauri, and Wry.

Soon we will also offer precompiled binaries for not only CI performance, but also for those without the amazing and blazing rustlang installed. We are even going so far as to just accept electron-packager and electron-builder config objects for dead-simple migration.

What’s next?

  • Support for mobile apps and the greater JavaScript ecosystem
  • One-click deploy for bundles via CrabNebula’s distribution platform
  • We’ll be building an “extreme-security” variant to serve our most security conscious customers
  • Adding /examples for more frameworks! (!Marc, please submit your own!)
  • The express desire to to work closely with the Cargo maintainers and the Rust community, stay tuned!

Feel free to check out the GitHub repository, star it, clone it, fork it, file issues about edge cases, and PR your examples!

And be sure to reach out and let us know what you are shipping!


Authors:

  • Daniel Thompson-Yvetot, Chief Executive Officer at CrabNebula
  • Amr Bashir, Senior Software Engineer at CrabNebula

Top comments (0)