Build options

By default, Snapcraft uses LXD or Multipass to simplify the build process and to confine the build environment within a virtual machine. For most developers, this happens transparently and is the best way to build snaps.

But to cater for different operating systems, environments and requirements, Snapcraft also offers a number of flexible options for how it can be run. These are outlined below.

Currently supported

Command Description Requirements
snapcraft
default
Uses LXD or Multipass to builds the snap within an instantiated VM to ensure a clean, isolated, build environment. Nested VMs require accelerated/nested VM functionality. Any supported system with VM capabilities.
snapcraft remote-build Remote build runs a multi-architecture build process on remote servers using Launchpad. Prospective snaps need to be open source as the code will be publicly available by default, plus a Launchpad account.
Build from GitHub Build from GitHub is another remote build option, triggering automatic snap builds from your developer account. Requires snap source hosted on a public GitHub repository, and account linking between GitHub and your developer account.
electron-builder -l snap Electron builder integration enables Electron app developers to easily create snaps with a simple modification to package.json . Requires Electron-builder with Linux or macOS snapcraft from the Snap Store or brew.

Snaps build on the bases core, core18, and core20 default to using Multipass as the build provider. core22 snaps use LXD on linux systems. Other systems (macOS and Windows) use Multipass.

ⓘ See this page for details on how to configure snapcraft to use either LXD or Multipass and other build provider-specific details.

Build environment options

Snapcraft can optionally use the following arguments to modify the build environment.

Snapcraft argument Description Requirements
--destructive-mode Destructive mode. Designed to be used in temporary/short-lived environments, such as on a CI system, because the build could contaminate the host build environment. The build environment should match the snap base. For example, a core24 snap should be built inside an Ubuntu 24.04 environment.
--use-lxd LXD container. Builds the snap using LXD, rather than Multipass. This can potentially reduce resource usage, especially from a VM.
Set SNAPCRAFT_BUILD_ENVIRONMENT=lxd to use LXD by default.
Requires LXD
--http-proxy <http-proxy> Configures HTTP proxy. Snapcraft will honour http_proxy environment flag as well. None
--https-proxy <https-proxy> Configures HTTPS proxy. Snapcraft will honour https_proxy environment flag as well. None
--add-ca-certificates <path> Adds trusted CAs in Snapcraft-created build environments. May be a CA certificate file or directory containing certificate files.
Not currently compatible with Snapcraft 7.x
LXD, Multipass
--bind-ssh Bind ~/.ssh directory to local build instance. LXD, Multipass
--ua-token Configure build environment with ESM using specified UA token. LXD, Multipass

Deprecated build options

Command Description Requirements
snapcraft cleanbuild Cleanbuild. Legacy non-bases method for building snaps in a LXD container. Deprecated with the release of Snapcraft 3.x and no longer supported.
apt install snapcraft Snapcraft deb package. Originally used to install snapcraft on Ubuntu-based Linux distributions (and Debian). Outdated and no longer supported. See Snapcraft overview for current installation instructions.
snapcraft --offline Allow snapcraft to build snaps on a system without a network connection provided that 1) the build environment is prepared, and 2) all sources and packages required by the parts are already on the local system (that usually means that snapcraft pull was successfully executed when networking was still available). None

Deprecated Snapcraft argument

Snapcraft argument Description Requirements
--enable-manifest Deprecated and removed in core24. Add the build manifest to the snap package in snap/manifest.yaml. This contains the specific sources and packages used to build the snap and allows the Snap Store to automatically check your Snap for security issues. Setting the environment variable SNAPCRAFT_BUILD_INFO=1 to add build manifest is still supported. Snaps built on Launchpad will have this set automatically. None

A supported Linux system is a host or VM running a snap-capable Linux distribution. See Installing snapd for details.

4 Likes

This page probably needs updating for Snapcraft 7, as the default is now LXD (not Multipass). Also, destructive mode can be set via env var SNAPCRAFT_BUILD_ENVIRONMENT=host. Among other things.

The default is only LXD if you’re using core22 as your base snap, IIRC?

Hmmm … that might be correct, I will check.

@lucyllewy is correct. I updated the docs.

1 Like

Should this page include the recent “snapcraft try” command?

I don’t think “–enable-manifest” is in development anymore, is it? It’s pretty much stable.

Thanks, and I think you’re right. I’ll also add something on snapcraft try.

This option does not seem to be supported using snapcraft 7.3.1:

snapcraft --add-ca-certificates /usr/local/share/ca-certificates...
Usage: snapcraft [options] command [args]...
Try 'snapcraft pack -h' for help.

Error: unrecognized arguments: --add-ca-certificates
1 Like

Hi @nicolasbock,

We’re tracking that bug here: https://bugs.launchpad.net/snapcraft/+bug/2004072

1 Like

The rendered page at https://snapcraft.io/docs/build-options has some kind of style which makes the run-on text turn into ellipses instead of wrapping to the next line. Not sure if other pages are affected.

Here’s what I see on my monitor:

Thanks so much for letting us know. It looks like the rendering style for the table output changed. We have no direct control over this, or the cell widths in a table, but I’ll bring it up with the web team.

For now, I’ve edited the table so the ellipses should no longer be needed/generated.

1 Like

Is this set of requirements for --destructive-mode outdated?

Good catch, I updated it.

1 Like