Bringing Electron applications to millions of Linux users

Electron is one of the most popular frameworks for creating cross-platform desktop applications right now. Many developers use electron-builder to do the heavy-lifting of package management for their Electron apps.

electron-builder has support for creating snap packages out of the box. Bringing your Electron desktop app to Linux can be as simple as a one-line change in your package.json. Here we’ll use an existing application – BitWarden – to show you how.

BitWarden is a cross-platform password store featuring secure cloud sync across their desktop and mobile clients. The desktop client is available for Linux in the snap store.

BitWarden

The source for BitWarden is on GitHub, but that’s not a requirement for building snaps. It just makes it easier for us to point out how they implemented the snap build. BitWarden are currently using electron builder 20.8.1 or later,

"devDependencies": {
⋮
"electron-builder": "^20.8.1",
⋮
}

In the "linux" section of the package.json the BitWarden developers added a 'snap' build target. This is alongside the other build targets the developers have chosen to support.

"linux": {
"category": "Utility",
"synopsis": "A secure and free password manager for all of your devices.",
"target": [
"deb",
"freebsd",
"rpm",
"AppImage",
"snap"
]
}

For many electron applications this one line is enough to generate a working snap! Simply build as you normally do either locally or using a remote service such as Travis or CircleCI and this will produce a snap.

electron-builder exposes additional snap features via an optional 'snap' stanza in the package.json. For example the BitWarden application requires an additional interface to access the password management service, and an additional package to be staged inside the snap.

Interfaces are comprised of plugs and slots at each end, so the term ‘plugs’ allows you to specify a list of interfaces you want to enable in the snap. The 'stagePackages' section allows you to specify debs from the Ubuntu 16.04 archive which will be pulled into the snap at build time.

"snap": {
"confinement": "strict",
"plugs": [
"default",
"password-manager-service"
],
"stagePackages": [
"default",
"libsecret-1-0"
]
}

That’s it! The full package.json can be found in the BitWarden GitHub repo.

The community of developers building snap, snapcraft and snaps hang out on the snapcraft forums. Join us!

Ubuntu desktop

Learn how the Ubuntu desktop operating system powers millions of PCs and laptops around the world.

Newsletter signup

Select topics you’re
interested in

In submitting this form, I confirm that I have read and agree to Canonical’s Privacy Notice and Privacy Policy.

Related posts

CMake leverages the Snapcraft Summit with Travis CI to build snaps

CMake is an open-source, cross-platform family of tools designed to build, test and package software. It is used to control the software compilation process and generate native makefiles and workspaces that can be used in any …

Handy snapcraft features: Remote build

As you probably know, there are many ways you can build snaps: locally using snapcraft, with CI systems like Travis, through Launchpad, and also via the free online Snapcraft Build Service. Now, a new preview feature …

Octave turns to snaps to reduce dependency on Linux distribution maintainers

Octave is a numerical computing environment largely compatible with MATLAB. As free software, Octave runs on GNU/Linux, macOS, BSD, and Windows. At the 2019 Snapcraft Summit, Mike Miller and Jordi Gutiérrez Hermoso of the Octave team …