Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
An extension is an optional piece that can be plugged into a filesystem. They can be created for both applications and runtimes and are used for several purposes:
- To separate translations and debug information from each application. Since these parts can be large and are not always wanted, it makes sense to allow them to be optionally installed alongside the application.
- For software components that need to be distributed separately from an application or library. Primary examples of this include GL libraries (which need to be provided by the host) and GStreamer plugins (which can't always be distributed for legal reasons).
Like runtimes, extensions are declared in the metadata of an application. They are then mounted by flatpak inside the application's sandbox. A typical extension section in a metadata file looks like this::
[Extension org.gnome.Platform.GL] version=1.4 directory=lib/GL
More complicated extension points can accept multiple extensions that are mounted below a single directory. For example, the
org.freedesktop.Platform runtime defines an extension point for GStreamer::
[Extension org.freedesktop.Platform.GStreamer] version=1.4 directory=lib/extensions/gstreamer-1.0 subdirectories=true
subdirectories=true key means that an extension with the
org.freedesktop.Platform.GStreamer.mp3 ID would be mounted within
/usr/lib/extensions/gstreamer-1.0/mp3 in the sandbox. This is how the
org.freedesktop.Platform knows where to look for GStreamer plugins.