Snapcraft Guide (Linux)

    Together with the broader Linux community, Canonical aims to fix many of the common software installation problems with the snapcraft project. Snaps are containerized software packages that include required dependencies, auto-update, and work on all major Linux distributions without system modification.

    There are three ways to create a .snap file:

    1) Using or electron-builder, both tools that come with snap support out of the box. This is the easiest option. 2) Using electron-installer-snap, which takes electron-packager‘s output. 3) Using an already created .deb package.

    In some cases, you will need to have the snapcraft tool installed. Instructions to install snapcraft for your particular distribution are available .

    Package the application using electron-packager (or a similar tool). Make sure to remove node_modules that you don’t need in your final application, since any module you don’t actually need will increase your application’s size.

    The output should look roughly like this:

    1. .
    2. └── dist
    3. └── app-linux-x64
    4. ├── LICENSE
    5. ├── LICENSES.chromium.html
    6. ├── content_shell.pak
    7. ├── app
    8. ├── icudtl.dat
    9. ├── libgcrypt.so.11
    10. ├── libnode.so
    11. ├── locales
    12. ├── resources
    13. ├── v8_context_snapshot.bin
    14. └── version

    Step 2: Running electron-installer-snap

    From a terminal that has snapcraft in its PATH, run electron-installer-snap with the only required parameter --src, which is the location of your packaged Electron application created in the first step.

    1. npx electron-installer-snap --src=out/myappname-linux-x64

    If you have an existing build pipeline, you can use electron-installer-snap programmatically. For more information, see the Snapcraft API docs.

    1. name: electron-packager-hello-world
    2. version: '0.1'
    3. summary: Hello World Electron app
    4. description: |
    5. Simple Hello World Electron app as an example
    6. base: core18
    7. confinement: strict
    8. grade: stable
    9. electron-packager-hello-world:
    10. extensions: [gnome-3-34]
    11. plugs:
    12. - browser-support
    13. - network
    14. - network-bind
    15. environment:
    16. # Correct the TMPDIR path for Chromium Framework/Electron to ensure
    17. # libappindicator has readable resources.
    18. TMPDIR: $XDG_RUNTIME_DIR
    19. parts:
    20. electron-quick-start:
    21. plugin: nil
    22. source: https://github.com/electron/electron-quick-start.git
    23. override-build: |
    24. npm install electron electron-packager
    25. npx electron-packager . --overwrite --platform=linux --output=release-build --prune=true
    26. cp -rv ./electron-quick-start-linux-* $SNAPCRAFT_PART_INSTALL/electron-quick-start
    27. build-snaps:
    28. - node/14/stable
    29. build-packages:
    30. - unzip
    31. stage-packages:
    32. - libnss3
    33. - libnspr4

    If you want to apply this example to an existing project:

    • Replace source: https://github.com/electron/electron-quick-start.git with source: ..
    • Replace all instances of electron-quick-start with your project’s name.

    Step 2: Build the snap

    1. $ snapcraft
    2. <output snipped>
    3. Snapped electron-packager-hello-world_0.1_amd64.snap

    Step 4: Run the snap

    1. electron-packager-hello-world

    Snapcraft is capable of taking an existing .deb file and turning it into a .snap file. The creation of a snap is configured using a snapcraft.yaml file that describes the sources, dependencies, description, and other core building blocks.

    If you do not already have a .deb package, using electron-installer-snap might be an easier path to create snap packages. However, multiple solutions for creating Debian packages exist, including , electron-builder or .

    Step 2: Create a snapcraft.yaml

    For more information on the available configuration options, see the . Let’s look at an example:

    1. name: myApp
    2. version: '2.0.0'
    3. summary: A little description for the app.
    4. description: |
    5. You know what? This app is amazing! It does all the things
    6. grade: stable
    7. confinement: classic
    8. parts:
    9. slack:
    10. plugin: dump
    11. source: my-deb.deb
    12. source-type: deb
    13. after:
    14. - desktop-gtk3
    15. stage-packages:
    16. - libasound2
    17. - libnotify4
    18. - libnspr4
    19. - libnss3
    20. - libpcre3
    21. - libpulse0
    22. - libxss1
    23. - libxtst6
    24. electron-launch:
    25. plugin: dump
    26. source: files/
    27. prepare: |
    28. chmod +x bin/electron-launch
    29. apps:
    30. myApp:
    31. command: bin/electron-launch $SNAP/usr/lib/myApp/myApp
    32. desktop: usr/share/applications/myApp.desktop
    33. # Correct the TMPDIR path for Chromium Framework/Electron to ensure
    34. # libappindicator has readable resources.
    35. environment:
    36. TMPDIR: $XDG_RUNTIME_DIR

    Alternatively, if you’re building your snap with strict confinement, you can use the desktop-launch command:

    1. apps:
    2. myApp:
    3. # Correct the TMPDIR path for Chromium Framework/Electron to ensure
    4. # libappindicator has readable resources.
    5. command: env TMPDIR=$XDG_RUNTIME_DIR PATH=/usr/local/bin:${PATH} ${SNAP}/bin/desktop-launch $SNAP/myApp/desktop