# flatpak-build

## NAME



           flatpak-build - Build in a directory
    


## SYNOPSIS



    
           **flatpak build**[OPTION...] DIRECTORY [COMMAND [ARG...]]
    


## DESCRIPTION



           Runs a build command in a directory.  DIRECTORY must have been
           initialized with **flatpak build-init**.
    
           The sdk that is specified in the metadata file in the directory is
           mounted at /usr and the files and var subdirectories are mounted
           at /app and /var, respectively. They are writable, and their
           contents are preserved between build commands, to allow
           accumulating build artifacts there.
    


## OPTIONS



           The following options are understood:
    
           **-h** , **--help**
               Show help options and exit.
    
           **-v** , **--verbose**
               Print debug information during command processing.
    
           **--ostree-verbose**
               Print OSTree debug information during command processing.
    
           **-r** , **--runtime**
               Use the non-devel runtime that is specified in the application
               metadata instead of the devel runtime.
    
           **-p** , **--die-with-parent**
               Kill the build process and all children when the launching
               process dies.
    
           **--bind-mount=DEST=SOURCE**
               Add a custom bind mount in the build namespace. Can be
               specified multiple times.
    
           **--build-dir=PATH**
               Start the build in this directory (default is in the current
               directory).
    
           **--share=SUBSYSTEM**
               Share a subsystem with the host session. This overrides the
               Context section from the application metadata.  SUBSYSTEM must
               be one of: network, ipc. This option can be used multiple
               times.
    
           **--unshare=SUBSYSTEM**
               Don't share a subsystem with the host session. This overrides
               the Context section from the application metadata.  SUBSYSTEM
               must be one of: network, ipc. This option can be used multiple
               times.
    
           **--socket=SOCKET**
               Expose a well-known socket to the application. This overrides
               to the Context section from the application metadata.  SOCKET
               must be one of: x11, wayland, fallback-x11, pulseaudio,
               system-bus, session-bus, ssh-auth, pcsc, cups, gpg-agent,
               inherit-wayland-socket. This option can be used multiple
               times.
    
           **--nosocket=SOCKET**
               Don't expose a well-known socket to the application. This
               overrides to the Context section from the application
               metadata.  SOCKET must be one of: x11, wayland, fallback-x11,
               pulseaudio, system-bus, session-bus, ssh-auth, pcsc, cups,
               gpg-agent, inherit-wayland-socket. This option can be used
               multiple times.
    
           **--device=DEVICE**
               Expose a device to the application. This overrides to the
               Context section from the application metadata.  DEVICE must be
               one of: dri, input, usb, kvm, shm, all. This option can be
               used multiple times.
    
           **--nodevice=DEVICE**
               Don't expose a device to the application. This overrides to
               the Context section from the application metadata.  DEVICE
               must be one of: dri, input, usb, kvm, shm, all. This option
               can be used multiple times.
    
           **--allow=FEATURE**
               Allow access to a specific feature. This updates the [Context]
               group in the metadata.  FEATURE must be one of: devel,
               multiarch, bluetooth, canbus, per-app-dev-shm. This option can
               be used multiple times.
    
               See flatpak-build-finish(1) for the meaning of the various
               features.
    
           **--disallow=FEATURE**
               Disallow access to a specific feature. This updates the
               [Context] group in the metadata.  FEATURE must be one of:
               devel, multiarch, bluetooth, canbus, per-app-dev-shm. This
               option can be used multiple times.
    
           **--filesystem=FILESYSTEM[:ro|:create]**
               Allow the application access to a subset of the filesystem.
               This overrides to the Context section from the application
               metadata.  FILESYSTEM can be one of: home, host, host-os,
               host-etc, xdg-desktop, xdg-documents, xdg-download, xdg-music,
               xdg-pictures, xdg-public-share, xdg-templates, xdg-videos,
               xdg-run, xdg-config, xdg-cache, xdg-data, an absolute path, or
               a homedir-relative path like ~/dir or paths relative to the
               xdg dirs, like xdg-download/subdir. The optional :ro suffix
               indicates that the location will be read-only. The optional
               :create suffix indicates that the location will be read-write
               and created if it doesn't exist. This option can be used
               multiple times. See the "[Context] filesystems" list in
               flatpak-metadata(5) for details of the meanings of these
               filesystems.
    
           **--nofilesystem=FILESYSTEM**
               Remove access to the specified subset of the filesystem from
               the application. This overrides to the Context section from
               the application metadata.  FILESYSTEM can be one of: home,
               host, host-os, host-etc, xdg-desktop, xdg-documents,
               xdg-download, xdg-music, xdg-pictures, xdg-public-share,
               xdg-templates, xdg-videos, an absolute path, or a
               homedir-relative path like ~/dir. This option can be used
               multiple times.
    
           **--with-appdir**
               Expose and configure access to the per-app storage directory
               in $HOME/.var/app. This is not normally useful when building,
               but helps when testing built apps.
    
           **--add-policy=SUBSYSTEM.KEY=VALUE**
               Add generic policy option. For example,
               "--add-policy=subsystem.key=v1 --add-policy=subsystem.key=v2"
               would map to this metadata:
    
                   [Policy subsystem]
                   key=v1;v2;
    
               This option can be used multiple times.
    
           **--remove-policy=SUBSYSTEM.KEY=VALUE**
               Remove generic policy option. This option can be used multiple
               times.
    
           **--env=VAR=VALUE**
               Set an environment variable in the application. This overrides
               to the Context section from the application metadata. This
               option can be used multiple times.
    
           **--unset-env=VAR**
               Unset an environment variable in the application. This
               overrides the unset-environment entry in the [Context] group
               of the metadata, and the [Environment] group. This option can
               be used multiple times.
    
           **--env-fd=**_FD_
               Read environment variables from the file descriptor _FD_ , and
               set them as if via **--env**. This can be used to avoid
               environment variables and their values becoming visible to
               other users.
    
               Each environment variable is in the form _VAR_ =_VALUE_ followed by
               a zero byte. This is the same format used by env -0 and
               /proc/*/environ.
    
           **--own-name=NAME**
               Allow the application to own the well-known name NAME on the
               session bus. This overrides to the Context section from the
               application metadata. This option can be used multiple times.
    
           **--talk-name=NAME**
               Allow the application to talk to the well-known name NAME on
               the session bus. This overrides to the Context section from
               the application metadata. This option can be used multiple
               times.
    
           **--system-own-name=NAME**
               Allow the application to own the well-known name NAME on the
               system bus. This overrides to the Context section from the
               application metadata. This option can be used multiple times.
    
           **--system-talk-name=NAME**
               Allow the application to talk to the well-known name NAME on
               the system bus. This overrides to the Context section from the
               application metadata. This option can be used multiple times.
    
           **--persist=FILENAME**
               If the application doesn't have access to the real homedir,
               make the (homedir-relative) path FILENAME a bind mount to the
               corresponding path in the per-application directory, allowing
               that location to be used for persistent data. This overrides
               to the Context section from the application metadata. This
               option can be used multiple times.
    
           **--sdk-dir=DIR**
               Normally if there is a usr directory in the build dir, this is
               used for the runtime files (this can be created by
               **--writable-sdk** or **--type=runtime** arguments to build-init). If
               you specify **--sdk-dir** , this directory will be used instead.
               Use this if you passed **--sdk-dir** to build-init.
    
           **--readonly**
               Mount the normally writable destination directories read-only.
               This can be useful if you want to run something in the sandbox
               but guarantee that it doesn't affect the build results. For
               example tests.
    
           **--metadata=FILE**
               Use the specified filename as metadata in the exported app
               instead of the default file (called metadata). This is useful
               if you build multiple things from a single build tree (such as
               both a platform and a sdk).
    
           **--log-session-bus**
               Log session bus traffic. This can be useful to see what access
               you need to allow in your D-Bus policy.
    
           **--log-system-bus**
               Log system bus traffic. This can be useful to see what access
               you need to allow in your D-Bus policy.
    


## EXAMPLES



           **$ flatpak build /build/my-app rpmbuild my-app.src.rpm**
    


* * *