diff --git a/Makefile.packaging b/Makefile.packaging
index f6f5a607497d81a7a104da6c38ffe4a2a1306348..5544c57620a790f77f2c20189134549194b083b0 100644
--- a/Makefile.packaging
+++ b/Makefile.packaging
@@ -46,6 +46,7 @@ DEBIAN_OCI_PKG_DIR:="packaging/rules/debian-one-click-install"
 #####################
 TMPDIR := $(shell mktemp -d)
 CURRENT_UID:=$(shell id -u)
+CURRENT_GID:=$(shell id -g)
 
 #############################
 ## Release tarball targets ##
@@ -118,13 +119,25 @@ package-all: package-debian_9 \
              package-opensuse-leap_15.1 \
              package-opensuse-leap_15.2 \
              package-opensuse-tumbleweed \
-             package-gentoo
+             package-gentoo \
+             package-snap
+
 
 # Append the output of make-packaging-target to this Makefile
 # see Makefile.packaging.distro_targets
 $(shell scripts/make-packaging-target.py --generate-all > Makefile.packaging.distro_targets)
 include Makefile.packaging.distro_targets
 
+docker/Dockerfile_snap: patches/docker-snap-build-scripts.patch
+	if patch -p1 -fR --dry-run < $< >/dev/null 2>&1; then \
+	  echo "Patching $@... skipped (already patched)"; \
+	else \
+	  echo "Patching $@..."; \
+	  patch -p1 -Ns < $< || { echo "Patching $@... failed" >&2 && exit 1; }; \
+	  echo "Patching $@... done"; \
+	fi
+.PHONY: docker/Dockerfile_snap
+
 ###################
 ## Other targets ##
 ###################
diff --git a/client-gnome b/client-gnome
index 9bada8a43cf9fec860da2b2b2d2fc8d242220e33..6b2855169a16078fb7062ab5d6bf2305f42cac33 160000
--- a/client-gnome
+++ b/client-gnome
@@ -1 +1 @@
-Subproject commit 9bada8a43cf9fec860da2b2b2d2fc8d242220e33
+Subproject commit 6b2855169a16078fb7062ab5d6bf2305f42cac33
diff --git a/daemon b/daemon
index d265e691dbd5250731451402ec42c1193a2b2c70..324d49ce4d04b3067e6f0d2382c4e6dfd385f56b 160000
--- a/daemon
+++ b/daemon
@@ -1 +1 @@
-Subproject commit d265e691dbd5250731451402ec42c1193a2b2c70
+Subproject commit 324d49ce4d04b3067e6f0d2382c4e6dfd385f56b
diff --git a/docker/Dockerfile_snap b/docker/Dockerfile_snap
new file mode 100644
index 0000000000000000000000000000000000000000..28371943e1131a43ef873304475778abe89e4b8d
--- /dev/null
+++ b/docker/Dockerfile_snap
@@ -0,0 +1,55 @@
+FROM ubuntu:xenial as builder
+
+# Grab dependencies
+RUN apt-get update
+RUN apt-get dist-upgrade --yes
+RUN apt-get install --yes \
+      curl \
+      jq \
+      squashfs-tools
+
+# Grab the core snap (for backwards compatibility) from the stable channel and
+# unpack it in the proper place.
+RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core' | jq '.download_url' -r) --output core.snap
+RUN mkdir -p /snap/core
+RUN unsquashfs -d /snap/core/current core.snap
+
+# Grab the core18 snap (which snapcraft uses as a base) from the stable channel
+# and unpack it in the proper place.
+RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/core18' | jq '.download_url' -r) --output core18.snap
+RUN mkdir -p /snap/core18
+RUN unsquashfs -d /snap/core18/current core18.snap
+
+# Grab the snapcraft snap from the stable channel and unpack it in the proper
+# place.
+RUN curl -L $(curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/snapcraft?channel=stable' | jq '.download_url' -r) --output snapcraft.snap
+RUN mkdir -p /snap/snapcraft
+RUN unsquashfs -d /snap/snapcraft/current snapcraft.snap
+
+# Create a snapcraft runner (TODO: move version detection to the core of
+# snapcraft).
+RUN mkdir -p /snap/bin
+RUN echo "#!/bin/sh" > /snap/bin/snapcraft
+RUN snap_version="$(awk '/^version:/{print $2}' /snap/snapcraft/current/meta/snap.yaml)" && echo "export SNAP_VERSION=\"$snap_version\"" >> /snap/bin/snapcraft
+RUN echo 'exec "$SNAP/usr/bin/python3" "$SNAP/bin/snapcraft" "$@"' >> /snap/bin/snapcraft
+RUN chmod +x /snap/bin/snapcraft
+
+# Multi-stage build, only need the snaps from the builder. Copy them one at a
+# time so they can be cached.
+FROM ubuntu:xenial
+COPY --from=builder /snap/core /snap/core
+COPY --from=builder /snap/core18 /snap/core18
+COPY --from=builder /snap/snapcraft /snap/snapcraft
+COPY --from=builder /snap/bin/snapcraft /snap/bin/snapcraft
+
+# Generate locale and install dependencies.
+RUN apt-get update && apt-get dist-upgrade --yes && apt-get install --yes snapd sudo locales && locale-gen en_US.UTF-8
+
+# Set the proper environment.
+ENV LANG="en_US.UTF-8"
+ENV LANGUAGE="en_US:en"
+ENV LC_ALL="en_US.UTF-8"
+ENV PATH="/snap/bin:$PATH"
+ENV SNAP="/snap/snapcraft/current"
+ENV SNAP_NAME="snapcraft"
+ENV SNAP_ARCH="amd64"
diff --git a/docker/README.md b/docker/README.md
index b63826fcfe05e42de93c8c4bfb4e723c29248cc0..7618fe4e18e5d521ff2ebaa459ae2f7d555af9af 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -25,3 +25,12 @@ hub organization. These images are generated with the following method:
 ### Fedora
 
 TODO
+
+### Snap
+
+`Dockerfile_snap` is from [stable.Dockerfile](stable.Dockerfile)
+upstream, under GPLv3-only, and is not considered part of the project.
+It is patched with `../patches/docker-snap-build-scripts.patch` to
+add and invoke our build script.
+
+[stable.Dockerfile]: https://raw.githubusercontent.com/snapcore/snapcraft/master/docker/stable.Dockerfile
diff --git a/lrc b/lrc
index efad3d4ef8870c1b14b3d90d35e195ba65078f14..4381acbf375488f0619056607e90d5ad34655071 160000
--- a/lrc
+++ b/lrc
@@ -1 +1 @@
-Subproject commit efad3d4ef8870c1b14b3d90d35e195ba65078f14
+Subproject commit 4381acbf375488f0619056607e90d5ad34655071
diff --git a/make-ring.py b/make-ring.py
index 1ed9fd76ad3ab79bed62ded205f6da68964f1e58..932ed7eb4b56d5173b7988e3b0ef66894f311fde 100755
--- a/make-ring.py
+++ b/make-ring.py
@@ -22,9 +22,7 @@ OSX_DISTRIBUTION_NAME = "osx"
 ANDROID_DISTRIBUTION_NAME = "android"
 WIN32_DISTRIBUTION_NAME = "win32"
 
-# Qt 5.15 is currently only available using the maintenance tool.
 QT5_VERSION = "5.15.0"
-DEFAULT_QT_PATH = "~/Qt/{0}/gcc_64".format(QT5_VERSION)
 
 # vs vars
 win_sdk_default = '10.0.16299.0'
@@ -46,7 +44,7 @@ PACMAN_BASED_DISTROS = [
 ]
 
 ZYPPER_BASED_DISTROS = [
-    'opensuse-leap',
+    'opensuse-leap', 'opensuse-tumbleweed',
 ]
 
 FLATPAK_BASED_RUNTIMES = [
@@ -91,16 +89,24 @@ ZYPPER_DEPENDENCIES = [
     'curl', 'gzip', 'bzip2',
     # daemon
     'speexdsp-devel', 'speex-devel', 'libdbus-c++-devel', 'jsoncpp-devel', 'yaml-cpp-devel',
-    'yasm', 'libuuid-devel', 'libnettle-devel', 'libopus-devel',
+    'yasm', 'libuuid-devel', 'libnettle-devel', 'libopus-devel', 'libexpat-devel',
     'libgnutls-devel', 'msgpack-devel', 'libavcodec-devel', 'libavdevice-devel', 'pcre-devel',
     'alsa-devel', 'libpulse-devel', 'libudev-devel', 'libva-devel', 'libvdpau-devel',
-    'libopenssl-devel',
+    'libopenssl-devel', 'libavutil-devel',
     # lrc
     'libQt5Core-devel', 'libQt5DBus-devel', 'libqt5-linguist-devel',
-    # gnome client
-    'gtk3-devel', 'clutter-gtk-devel', 'qrencode-devel',
-    'gettext-tools', 'libnotify-devel', 'libappindicator3-devel', 'webkit2gtk3-devel',
-    'NetworkManager-devel', 'libcanberra-gtk3-devel'
+    # client gnome / qt
+    'qrencode-devel', 'NetworkManager-devel'
+]
+
+ZYPPER_CLIENT_GNOME_DEPENDENCIES = [
+    'gtk3-devel', 'clutter-gtk-devel', 'gettext-tools', 'libnotify-devel', 'libappindicator3-devel',
+    'webkit2gtk3-devel', 'libcanberra-gtk3-devel'
+]
+
+ZYPPER_CLIENT_QT_DEPENDENCIES = [
+    'libqt5-qtsvg-devel', 'libqt5-qtwebengine-devel', 'libqt5-qtmultimedia-devel',
+    'libqt5-qtdeclarative-devel', 'libQt5QuickControls2-devel', 'libqt5-qtquickcontrols'
 ]
 
 DNF_DEPENDENCIES = [
@@ -111,11 +117,20 @@ DNF_DEPENDENCIES = [
     'speex-devel', 'chrpath', 'check', 'astyle', 'uuid-c++-devel', 'gettext-devel',
     'gcc-c++', 'which', 'alsa-lib-devel', 'systemd-devel', 'libuuid-devel',
     'uuid-devel', 'gnutls-devel', 'nettle-devel', 'opus-devel', 'speexdsp-devel',
-    'yaml-cpp-devel', 'qt5-qtbase-devel', 'swig', 'qrencode-devel', 'jsoncpp-devel',
-    'gtk3-devel', 'clutter-devel', 'clutter-gtk-devel',
-    'libnotify-devel', 'libappindicator-gtk3-devel', 'patch', 'libva-devel', 'openssl-devel',
-    'webkitgtk4-devel', 'NetworkManager-libnm-devel', 'libvdpau-devel', 'msgpack-devel', 'libcanberra-devel',
-    'sqlite-devel', 'openssl-static', 'pandoc', 'nasm'
+    'yaml-cpp-devel', 'qt5-qtbase-devel', 'swig', 'jsoncpp-devel',
+    'patch', 'libva-devel', 'openssl-devel', 'libvdpau-devel', 'msgpack-devel',
+    'sqlite-devel', 'openssl-static', 'pandoc', 'nasm', 'qrencode-devel', 'NetworkManager-libnm-devel',
+    'bzip2'
+]
+
+DNF_CLIENT_GNOME_DEPENDENCIES = [
+    'gtk3-devel', 'clutter-devel', 'clutter-gtk-devel', 'libnotify-devel','libappindicator-gtk3-devel',
+    'webkitgtk4-devel', 'libcanberra-devel'
+]
+
+DNF_CLIENT_QT_DEPENDENCIES = [
+    'qt5-qtsvg-devel', 'qt5-qtwebengine-devel', 'qt5-qtmultimedia-devel', 'qt5-qtdeclarative-devel',
+    'qt5-qtquickcontrols2-devel', 'qt5-qtquickcontrols'
 ]
 
 APT_DEPENDENCIES = [
@@ -128,9 +143,22 @@ APT_DEPENDENCIES = [
     'libopus-dev', 'libpcre3-dev', 'libpulse-dev', 'libssl-dev',
     'libspeex-dev', 'libspeexdsp-dev', 'libswscale-dev', 'libtool',
     'libudev-dev', 'libyaml-cpp-dev', 'qtbase5-dev', 'libqt5sql5-sqlite', 'sip-tester', 'swig',
-    'uuid-dev', 'yasm', 'libqrencode-dev', 'libjsoncpp-dev', 'libappindicator3-dev',
-    'libva-dev', 'libwebkit2gtk-4.0-dev', 'libnm-dev', 'libvdpau-dev', 'libmsgpack-dev', 'libcanberra-gtk3-dev',
-    'pandoc', 'nasm'
+    'uuid-dev', 'yasm', 'libjsoncpp-dev', 'libva-dev', 'libvdpau-dev', 'libmsgpack-dev',
+    'pandoc', 'nasm', 'libqrencode-dev', 'libnm-dev', 'dpkg-dev'
+]
+
+APT_CLIENT_GNOME_DEPENDENCIES = [
+    'libwebkit2gtk-4.0-dev', 'libappindicator3-dev', 'libcanberra-gtk3-dev'
+]
+
+APT_CLIENT_QT_DEPENDENCIES = [
+    'qtmultimedia5-dev', 'libqt5svg5-dev', 'qtwebengine5-dev', 'qtdeclarative5-dev',
+    'qtquickcontrols2-5-dev', 'qml-module-qtquick2', 'qml-module-qtquick-controls',
+    'qml-module-qtquick-controls2', 'qml-module-qtquick-dialogs',
+    'qml-module-qtquick-layouts', 'qml-module-qtquick-privatewidgets',
+    'qml-module-qtquick-shapes', 'qml-module-qtquick-window2',
+    'qml-module-qtquick-templates2', 'qml-module-qt-labs-platform',
+    'qml-module-qtwebengine', 'qml-module-qtwebchannel'
 ]
 
 PACMAN_DEPENDENCIES = [
@@ -190,12 +218,12 @@ def run_powersell_cmd(cmd):
     return
 
 
-def write_qt_conf(path):
+def write_qt_conf(path, qt5version=QT5_VERSION):
     # Add a configuration that can be supplied to qmake
     # e.g. `qmake -qt=5.15 [mode] [options] [files]`
     if path == '':
         return
-    with open('/usr/share/qtchooser/' + QT5_VERSION + '.conf', 'w+') as fd:
+    with open('/usr/share/qtchooser/' + qt5version + '.conf', 'w+') as fd:
         fd.write(path.rstrip('/') + '/bin\n')
         fd.write(path.rstrip('/') + '/lib\n')
     return
@@ -203,19 +231,27 @@ def write_qt_conf(path):
 
 def run_dependencies(args):
     if args.qt is not None:
-        write_qt_conf(args.qt)
+        write_qt_conf(args.qt, args.qtver)
 
     if args.distribution == WIN32_DISTRIBUTION_NAME:
         run_powersell_cmd(
             'Set-ExecutionPolicy Unrestricted; .\\scripts\\install-deps-windows.ps1')
 
     elif args.distribution in APT_BASED_DISTROS:
+        if args.qt is None:
+            APT_DEPENDENCIES.extend(APT_CLIENT_GNOME_DEPENDENCIES)
+        else:
+            APT_DEPENDENCIES.extend(APT_CLIENT_QT_DEPENDENCIES)
         execute_script(
             APT_INSTALL_SCRIPT,
             {"packages": ' '.join(map(shlex.quote, APT_DEPENDENCIES))}
         )
 
     elif args.distribution in DNF_BASED_DISTROS:
+        if args.qt is None:
+            DNF_DEPENDENCIES.extend(DNF_CLIENT_GNOME_DEPENDENCIES)
+        else:
+            DNF_DEPENDENCIES.extend(DNF_CLIENT_QT_DEPENDENCIES)
         execute_script(
             RPM_INSTALL_SCRIPT,
             {"packages": ' '.join(map(shlex.quote, DNF_DEPENDENCIES))}
@@ -228,6 +264,10 @@ def run_dependencies(args):
         )
 
     elif args.distribution in ZYPPER_BASED_DISTROS:
+        if args.qt is None:
+            ZYPPER_DEPENDENCIES.extend(ZYPPER_CLIENT_GNOME_DEPENDENCIES)
+        else:
+            ZYPPER_DEPENDENCIES.extend(ZYPPER_CLIENT_QT_DEPENDENCIES)
         execute_script(
             ZYPPER_INSTALL_SCRIPT,
             {"packages": ' '.join(map(shlex.quote, ZYPPER_DEPENDENCIES))}
@@ -352,11 +392,8 @@ def run_install(args):
             install_args += ("-c", "client-gnome")
         else:
             install_args += ("-c", "client-qt")
-            install_args += ("-q", QT5_VERSION)
-            if args.qt == '':
-                install_args += ("-Q", DEFAULT_QT_PATH)
-            else:
-                install_args += ("-Q", args.qt)
+            install_args += ("-q", args.qtver)
+            install_args += ("-Q", args.qt)
 
     return subprocess.run(["./scripts/install.sh"] + install_args, env=environ, check=True)
 
@@ -525,7 +562,9 @@ def parse_args():
     ap.add_argument('--no-priv-install', dest='priv_install',
                     default=True, action='store_false')
     ap.add_argument('--qt', nargs='?', const='', type=str,
-                    help='Build the Qt client with the Qt 5.15 path supplied')
+                    help='Build the Qt client with the Qt path supplied')
+    ap.add_argument('--qtver', default=QT5_VERSION,
+                    help='Sets the Qt version to build with')
 
     dist = choose_distribution()
     if dist == WIN32_DISTRIBUTION_NAME:
@@ -533,8 +572,6 @@ def parse_args():
                         help='Windows use only, specify Visual Studio toolset version')
         ap.add_argument('--sdk', default=win_sdk_default, type=str,
                         help='Windows use only, specify Windows SDK version')
-        ap.add_argument('--qtver', default=QT5_VERSION,
-                        help='Sets the Qt version to build with')
 
     parsed_args = ap.parse_args()
 
diff --git a/packaging/rules/snap/icons/jami.svg b/packaging/rules/snap/icons/jami.svg
new file mode 100644
index 0000000000000000000000000000000000000000..808f1327f1d9841c3587bf54b4a2ec147870c9ff
--- /dev/null
+++ b/packaging/rules/snap/icons/jami.svg
@@ -0,0 +1,340 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 116.3 116.3" style="enable-background:new 0 0 116.3 116.3;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:url(#SVGID_1_);}
+	.st1{fill:url(#SVGID_2_);}
+	.st2{fill:url(#SVGID_3_);}
+	.st3{fill:url(#SVGID_4_);}
+	.st4{fill:url(#SVGID_5_);}
+	.st5{fill:url(#SVGID_6_);}
+	.st6{opacity:0.4;fill:url(#SVGID_7_);enable-background:new    ;}
+	.st7{fill:url(#SVGID_8_);}
+	.st8{fill:url(#SVGID_9_);}
+	.st9{fill:url(#SVGID_10_);}
+	.st10{fill:url(#SVGID_11_);}
+	.st11{fill:url(#SVGID_12_);}
+	.st12{fill:url(#SVGID_13_);}
+	.st13{fill:url(#SVGID_14_);}
+	.st14{fill:url(#SVGID_15_);}
+	.st15{fill:url(#SVGID_16_);}
+	.st16{opacity:0.2;fill:url(#SVGID_17_);enable-background:new    ;}
+	.st17{fill:url(#SVGID_18_);}
+	.st18{fill:url(#SVGID_19_);}
+	.st19{opacity:0.25;fill:url(#SVGID_20_);enable-background:new    ;}
+	.st20{fill:url(#SVGID_21_);}
+	.st21{fill:url(#SVGID_22_);}
+	.st22{opacity:0.2;fill:url(#SVGID_23_);enable-background:new    ;}
+	.st23{fill:url(#SVGID_24_);}
+</style>
+<g>
+	<g>
+		
+			<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="69.0328" y1="454.9245" x2="64.4435" y2="449.5703" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2B3B6A"/>
+			<stop offset="1" style="stop-color:#2B3B6A"/>
+		</linearGradient>
+		<polygon class="st0" points="54.9,55.8 62,55.6 58.4,62.2   "/>
+		
+			<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="108.534" y1="457.2333" x2="108.534" y2="494.0327" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2B3B6A"/>
+			<stop offset="7.040000e-02" style="stop-color:#2D4576"/>
+			<stop offset="0.2165" style="stop-color:#2E5589"/>
+			<stop offset="0.3608" style="stop-color:#2B5E97"/>
+			<stop offset="0.5" style="stop-color:#29629C"/>
+			<stop offset="0.6392" style="stop-color:#2B5E97"/>
+			<stop offset="0.7835" style="stop-color:#2E5589"/>
+			<stop offset="0.9296" style="stop-color:#2D4576"/>
+			<stop offset="1" style="stop-color:#2B3B6A"/>
+		</linearGradient>
+		<path class="st1" d="M85.5,57.5c26.1,4.2,29.8,10.7,29.8,10.7c0,0.4,0,0.8,0,1.2c0,0.2-0.1,0.4-0.2,0.7c-0.1,0.3-2.7,5.7-19.6,9.3    L85.5,57.5z"/>
+		
+			<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="26.7686" y1="496.8278" x2="38.7091" y2="475.5678" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#252B59"/>
+			<stop offset="8.590000e-02" style="stop-color:#2B3A69"/>
+			<stop offset="0.2267" style="stop-color:#2E4A7C"/>
+			<stop offset="0.3658" style="stop-color:#2E5487"/>
+			<stop offset="0.5" style="stop-color:#2D578C"/>
+			<stop offset="0.6342" style="stop-color:#2E5487"/>
+			<stop offset="0.7733" style="stop-color:#2E4A7C"/>
+			<stop offset="0.9141" style="stop-color:#2B3A69"/>
+			<stop offset="1" style="stop-color:#252B59"/>
+		</linearGradient>
+		<path class="st2" d="M19.8,78.5c-5.9,15.7-2.9,20.6-2.7,21c0.1,0.2,0.2,0.4,0.4,0.5c0.4,0,0.8-0.1,1.2-0.2c0,0,10.7-0.5,23.2-18.3    L19.8,78.5z"/>
+		
+			<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="60.8512" y1="424.6486" x2="41.0872" y2="401.5905" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#181844"/>
+			<stop offset="2.840000e-02" style="stop-color:#1E1E4C"/>
+			<stop offset="0.1353" style="stop-color:#283261"/>
+			<stop offset="0.2468" style="stop-color:#2D4172"/>
+			<stop offset="0.3647" style="stop-color:#2E4A7C"/>
+			<stop offset="0.5" style="stop-color:#2E4D7F"/>
+			<stop offset="0.6177" style="stop-color:#2D4576"/>
+			<stop offset="0.8125" style="stop-color:#273160"/>
+			<stop offset="1" style="stop-color:#181844"/>
+		</linearGradient>
+		<path class="st3" d="M58.8,18.6C44.5,2.9,37.5,3.8,37.1,3.9c-0.2,0-0.5,0.1-0.7,0.2c-0.5,0.2-1,1.8-1,1.8s-3,8.7,9.1,31.9    L58.8,18.6z"/>
+		
+			<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="99.9721" y1="499.3526" x2="84.7036" y2="450.1664" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#181844"/>
+			<stop offset="2.840000e-02" style="stop-color:#1E1E4C"/>
+			<stop offset="0.1353" style="stop-color:#283261"/>
+			<stop offset="0.2468" style="stop-color:#2D4172"/>
+			<stop offset="0.3647" style="stop-color:#2E4A7C"/>
+			<stop offset="0.5" style="stop-color:#2E4D7F"/>
+			<stop offset="0.6177" style="stop-color:#2D4576"/>
+			<stop offset="0.8125" style="stop-color:#273160"/>
+			<stop offset="1" style="stop-color:#181844"/>
+		</linearGradient>
+		<path class="st4" d="M71.2,78.8C90.6,101,97.4,99.8,97.4,99.8c0.4,0.1,0.9,0.2,1.3,0.2c0.2-0.1,0.3-0.3,0.4-0.5    c0.3-0.4,5.8-9.4-12.8-41.8L71.2,78.8z"/>
+		
+			<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="31.6447" y1="457.2331" x2="31.6447" y2="494.0317" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2B3B6A"/>
+			<stop offset="7.040000e-02" style="stop-color:#2D4576"/>
+			<stop offset="0.2165" style="stop-color:#2E5589"/>
+			<stop offset="0.3608" style="stop-color:#2B5E97"/>
+			<stop offset="0.5" style="stop-color:#29629C"/>
+			<stop offset="0.6392" style="stop-color:#2B5E97"/>
+			<stop offset="0.7835" style="stop-color:#2E5589"/>
+			<stop offset="0.9296" style="stop-color:#2D4576"/>
+			<stop offset="1" style="stop-color:#2B3B6A"/>
+		</linearGradient>
+		<path class="st5" d="M46.1,82.2c-40-1.7-44.8-11.6-45-12.1C1.1,69.9,1,69.7,1,69.5c0.1-0.7,1.5-2,1.5-2s10.6-6.5,28.3-10    L46.1,82.2z"/>
+		
+			<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="51.8906" y1="421.1236" x2="66.337" y2="421.1236" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2B3B6A"/>
+			<stop offset="1" style="stop-color:#2B3B6A"/>
+		</linearGradient>
+		<path class="st6" d="M57.6,17.4c-5,5.4-9.6,11.2-13.8,17.2h1c3.1-3.9,10.8-13.7,13.4-16.5L57.6,17.4z"/>
+		
+			<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="70.9709" y1="436.4003" x2="70.9709" y2="401.6908" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#252B59"/>
+			<stop offset="0.5" style="stop-color:#2D578C"/>
+			<stop offset="0.6934" style="stop-color:#2D5588"/>
+			<stop offset="0.8038" style="stop-color:#2E4F80"/>
+			<stop offset="0.8932" style="stop-color:#2D4474"/>
+			<stop offset="0.971" style="stop-color:#283463"/>
+			<stop offset="1" style="stop-color:#252B59"/>
+		</linearGradient>
+		<path class="st7" d="M73.8,35.4C84.2,10.7,80.2,5,80.2,5c-0.1-0.3-0.2-0.7-0.3-1c-0.2-0.1-0.4-0.1-0.7-0.2    c-0.5-0.1-11.4-1.5-34.4,30.7L73.8,35.4z"/>
+		
+			<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="39.2669" y1="503.7654" x2="102.6764" y2="407.9172" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2867A2"/>
+			<stop offset="8.239999e-02" style="stop-color:#177EBC"/>
+			<stop offset="0.1675" style="stop-color:#0E91D1"/>
+			<stop offset="0.2527" style="stop-color:#10A2E1"/>
+			<stop offset="0.337" style="stop-color:#18ACEA"/>
+			<stop offset="0.42" style="stop-color:#24B1ED"/>
+			<stop offset="0.5" style="stop-color:#28B1ED"/>
+			<stop offset="0.58" style="stop-color:#24B1ED"/>
+			<stop offset="0.663" style="stop-color:#18ACEA"/>
+			<stop offset="0.7473" style="stop-color:#10A2E1"/>
+			<stop offset="0.8325" style="stop-color:#0E91D1"/>
+			<stop offset="0.9176" style="stop-color:#177EBC"/>
+			<stop offset="1" style="stop-color:#2867A2"/>
+		</linearGradient>
+		<path class="st8" d="M58,97.4c-14.2,15.4-21,14.5-21.4,14.5c-0.6-0.2-1.2-0.5-1.7-0.8l-17.3-11c7.3-1.6,16.3-10.2,25.7-21.3    L58,97.4z"/>
+		
+			<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="33.568" y1="505.6873" x2="58.683" y2="483.2007" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2C5D95"/>
+			<stop offset="8.220001e-02" style="stop-color:#246EAB"/>
+			<stop offset="0.1808" style="stop-color:#1B79B9"/>
+			<stop offset="0.3007" style="stop-color:#1080C2"/>
+			<stop offset="0.5" style="stop-color:#0E81C5"/>
+			<stop offset="0.6993" style="stop-color:#1080C2"/>
+			<stop offset="0.8192" style="stop-color:#1B79B9"/>
+			<stop offset="0.9178" style="stop-color:#246EAB"/>
+			<stop offset="1" style="stop-color:#2C5D95"/>
+		</linearGradient>
+		<path class="st9" d="M58.6,98c-14.2,15.4-21,14.5-21.4,14.5c-0.6-0.2-1.2-0.5-1.7-0.8L17.6,100c7.3-1.6,16.9-9.6,26.3-20.7    L58.6,98z"/>
+		
+			<linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="31.3212" y1="407.2591" x2="89.6399" y2="504.4568" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2C5D95"/>
+			<stop offset="1.760000e-02" style="stop-color:#2A6199"/>
+			<stop offset="0.1407" style="stop-color:#1C79B7"/>
+			<stop offset="0.2631" style="stop-color:#0A8CCA"/>
+			<stop offset="0.3837" style="stop-color:#0B97D4"/>
+			<stop offset="0.5" style="stop-color:#0E9AD8"/>
+			<stop offset="0.6163" style="stop-color:#0B97D4"/>
+			<stop offset="0.7369" style="stop-color:#0A8CCA"/>
+			<stop offset="0.8593" style="stop-color:#1C79B7"/>
+			<stop offset="0.9824" style="stop-color:#2A6199"/>
+			<stop offset="1" style="stop-color:#2C5D95"/>
+		</linearGradient>
+		<path class="st10" d="M20.7,38c-6.3-16.2-3.2-21.3-3-21.6c0.4-0.5,0.9-0.9,1.4-1.2l17.3-11c-1.5,7.1,2.3,18,8.2,30.7L20.7,38z"/>
+		
+			<linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="94.4028" y1="503.8655" x2="56.9038" y2="456.6339" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2C5D95"/>
+			<stop offset="2.570000e-02" style="stop-color:#2A6199"/>
+			<stop offset="0.2053" style="stop-color:#1C79B7"/>
+			<stop offset="0.384" style="stop-color:#0A8CCA"/>
+			<stop offset="0.5599" style="stop-color:#0B97D4"/>
+			<stop offset="0.7296" style="stop-color:#0E9AD8"/>
+			<stop offset="0.7925" style="stop-color:#0B97D4"/>
+			<stop offset="0.8577" style="stop-color:#0A8CCA"/>
+			<stop offset="0.9239" style="stop-color:#1C79B7"/>
+			<stop offset="0.9905" style="stop-color:#2A6199"/>
+			<stop offset="1" style="stop-color:#2C5D95"/>
+		</linearGradient>
+		<path class="st11" d="M57.2,57.2c-8.7,0-17.4,0.7-26,1.9c0.3,0.5,4.3,7.2,7.2,11.7c27.8,42.8,40.8,41.1,41.4,41    c0.6-0.2,1.2-0.5,1.7-0.8l17.3-11C87,97.5,70.6,78.2,57.2,57.2z"/>
+		
+			<linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="40.2175" y1="431.0724" x2="32.9164" y2="404.7886" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2C5D95"/>
+			<stop offset="8.220001e-02" style="stop-color:#246EAB"/>
+			<stop offset="0.1808" style="stop-color:#1B79B9"/>
+			<stop offset="0.3007" style="stop-color:#1080C2"/>
+			<stop offset="0.5" style="stop-color:#0E81C5"/>
+			<stop offset="0.6993" style="stop-color:#1080C2"/>
+			<stop offset="0.8192" style="stop-color:#1B79B9"/>
+			<stop offset="0.9178" style="stop-color:#246EAB"/>
+			<stop offset="1" style="stop-color:#2C5D95"/>
+		</linearGradient>
+		<path class="st12" d="M20.1,38.5c-6.3-16.2-3.2-21.3-3-21.6c0.4-0.5,0.9-0.9,1.4-1.2L36.5,4.1c-1.5,7.1,1.7,18.6,7.6,31.2    L20.1,38.5z"/>
+		
+			<linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="122.9025" y1="448.7971" x2="9.1479" y2="448.7971" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2867A2"/>
+			<stop offset="1.280000e-02" style="stop-color:#256BA7"/>
+			<stop offset="0.1121" style="stop-color:#0B83C3"/>
+			<stop offset="0.2115" style="stop-color:#1797D8"/>
+			<stop offset="0.3099" style="stop-color:#25A3E2"/>
+			<stop offset="0.4066" style="stop-color:#27ABE7"/>
+			<stop offset="0.5" style="stop-color:#2AAEEA"/>
+			<stop offset="0.5934" style="stop-color:#27ABE7"/>
+			<stop offset="0.6901" style="stop-color:#25A3E2"/>
+			<stop offset="0.7885" style="stop-color:#1797D8"/>
+			<stop offset="0.8879" style="stop-color:#0B83C3"/>
+			<stop offset="0.9872" style="stop-color:#256BA7"/>
+			<stop offset="1" style="stop-color:#2867A2"/>
+		</linearGradient>
+		<path class="st13" d="M85.5,59.6c13.5,1.9,24.7,4.7,29.8,9.8V48.9c0-0.6-0.1-1.3-0.2-1.9c-0.1-0.3-2.7-5.6-19-9.1L85.5,59.6z"/>
+		
+			<linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="90.2941" y1="447.1362" x2="122.8074" y2="448.8884" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2E5284"/>
+			<stop offset="6.100000e-03" style="stop-color:#2E5486"/>
+			<stop offset="9.120000e-02" style="stop-color:#29649D"/>
+			<stop offset="0.1876" style="stop-color:#236FAD"/>
+			<stop offset="0.3049" style="stop-color:#1D77B6"/>
+			<stop offset="0.5" style="stop-color:#1C78B9"/>
+			<stop offset="0.6951" style="stop-color:#1D77B6"/>
+			<stop offset="0.8124" style="stop-color:#236FAD"/>
+			<stop offset="0.9088" style="stop-color:#29649D"/>
+			<stop offset="0.9939" style="stop-color:#2E5486"/>
+			<stop offset="1" style="stop-color:#2E5284"/>
+		</linearGradient>
+		<path class="st14" d="M85.5,58.8c13.5,1.9,24.7,5.5,29.8,10.6V48.1c0-0.6-0.1-1.3-0.2-1.9c-0.1-0.3-2.7-5.6-19-9.1L85.5,58.8z"/>
+		
+			<linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="9.0577" y1="447.1912" x2="67.7186" y2="447.1912" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2867A2"/>
+			<stop offset="2.250000e-02" style="stop-color:#256BA7"/>
+			<stop offset="0.1971" style="stop-color:#0B83C3"/>
+			<stop offset="0.3718" style="stop-color:#1797D8"/>
+			<stop offset="0.5447" style="stop-color:#25A3E2"/>
+			<stop offset="0.7147" style="stop-color:#27ABE7"/>
+			<stop offset="0.8788" style="stop-color:#2AAEEA"/>
+			<stop offset="0.9015" style="stop-color:#27ABE7"/>
+			<stop offset="0.9249" style="stop-color:#25A3E2"/>
+			<stop offset="0.9487" style="stop-color:#1797D8"/>
+			<stop offset="0.9728" style="stop-color:#0B83C3"/>
+			<stop offset="0.9969" style="stop-color:#256BA7"/>
+			<stop offset="1" style="stop-color:#2867A2"/>
+		</linearGradient>
+		<path class="st15" d="M73.2,35.1c-3-0.1-9.5-0.4-15.1-0.4C7.1,34.7,1.4,46.5,1.2,47C1,47.6,1,48.3,1,48.9v20.6    c5-5,15.9-7.7,29.2-9.7c8.6-1.2,17.2-1.9,25.9-2c1.6,0,3.2,0,4.8,0C60.8,57.8,76.3,35.2,73.2,35.1z"/>
+		
+			<linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="50.3126" y1="432.0108" x2="28.2664" y2="428.9106" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2B3B6A"/>
+			<stop offset="1" style="stop-color:#2B3B6A"/>
+		</linearGradient>
+		<path class="st16" d="M44.1,33.5c-10.7,0.5-18.4,1.3-24.8,3.1l0.3,0.8c0.6-0.1,1.3-0.3,1.9-0.4c7.7-1.2,15.4-2,23.1-2.3L44.1,33.5    z"/>
+		
+			<linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="72.7451" y1="450.8669" x2="10.4435" y2="442.1056" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2867A2"/>
+			<stop offset="3.820000e-02" style="stop-color:#2174B1"/>
+			<stop offset="0.1177" style="stop-color:#0B86C4"/>
+			<stop offset="0.2081" style="stop-color:#0A94D2"/>
+			<stop offset="0.3177" style="stop-color:#0C9BDB"/>
+			<stop offset="0.5" style="stop-color:#109EDE"/>
+			<stop offset="0.6823" style="stop-color:#0C9BDB"/>
+			<stop offset="0.7919" style="stop-color:#0A94D2"/>
+			<stop offset="0.8823" style="stop-color:#0B86C4"/>
+			<stop offset="0.9618" style="stop-color:#2174B1"/>
+			<stop offset="1" style="stop-color:#2867A2"/>
+		</linearGradient>
+		<path class="st17" d="M73.2,34.3c-3-0.1-9.5-0.4-15.1-0.4c-51.1,0-56.7,11.8-57,12.4C1,46.8,1,47.5,1,48.1v21.4    c5-5,15.9-8.5,29.2-10.5c8.6-1.2,17.2-1.9,25.9-2c1.6,0,3.2,0,4.8,0C63.2,57.1,76.3,34.4,73.2,34.3z"/>
+		
+			<linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="101.6202" y1="407.733" x2="71.9933" y2="458.7571" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2867A2"/>
+			<stop offset="0.1238" style="stop-color:#177EBC"/>
+			<stop offset="0.2516" style="stop-color:#0E91D1"/>
+			<stop offset="0.3797" style="stop-color:#10A2E1"/>
+			<stop offset="0.5064" style="stop-color:#18ACEA"/>
+			<stop offset="0.631" style="stop-color:#24B1ED"/>
+			<stop offset="0.7513" style="stop-color:#28B1ED"/>
+			<stop offset="0.7911" style="stop-color:#24B1ED"/>
+			<stop offset="0.8324" style="stop-color:#18ACEA"/>
+			<stop offset="0.8743" style="stop-color:#10A2E1"/>
+			<stop offset="0.9167" style="stop-color:#0E91D1"/>
+			<stop offset="0.959" style="stop-color:#177EBC"/>
+			<stop offset="1" style="stop-color:#2867A2"/>
+		</linearGradient>
+		<path class="st18" d="M58.2,58.8C72.1,37.9,82.4,16,79.8,4.1l17.3,11c0.5,0.3,1,0.7,1.4,1.2c0.3,0.5,7.1,11.7-20.7,54.5    c-2,3.2-3.9,6.9-4.6,7.2c-4.1-4-12.6-15.6-14.7-18.5C58.3,59.1,58.2,58.8,58.2,58.8z"/>
+		
+			<linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="105.3445" y1="433.3988" x2="94.5575" y2="453.6416" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2B3B6A"/>
+			<stop offset="1" style="stop-color:#2B3B6A"/>
+		</linearGradient>
+		<path class="st19" d="M96.6,37.2c-3.1,7.8-6.8,15.3-11.1,22.4l1.3,0.2c5.5-9.5,8.7-16.5,10.9-22.4L96.6,37.2z"/>
+		
+			<linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="100.6479" y1="408.8533" x2="70.927" y2="464.6275" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2867A2"/>
+			<stop offset="3.820000e-02" style="stop-color:#2174B1"/>
+			<stop offset="0.1177" style="stop-color:#0B86C4"/>
+			<stop offset="0.2081" style="stop-color:#0A94D2"/>
+			<stop offset="0.3177" style="stop-color:#0C9BDB"/>
+			<stop offset="0.5" style="stop-color:#109EDE"/>
+			<stop offset="0.6823" style="stop-color:#0C9BDB"/>
+			<stop offset="0.7919" style="stop-color:#0A94D2"/>
+			<stop offset="0.8823" style="stop-color:#0B86C4"/>
+			<stop offset="0.9618" style="stop-color:#2174B1"/>
+			<stop offset="1" style="stop-color:#2867A2"/>
+		</linearGradient>
+		<path class="st20" d="M78.5,71.4c27.8-42.8,21-54,20.7-54.5c-0.4-0.5-0.9-0.9-1.4-1.2L79.8,4.1c2.5,11.8-7.4,34.6-21.2,55.5    c4.6,7.1,9.4,14,14.5,19.9C74.1,78.3,76.7,74.3,78.5,71.4z"/>
+		
+			<linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="102.9539" y1="410.1097" x2="72.9714" y2="466.375" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2867A2"/>
+			<stop offset="3.820000e-02" style="stop-color:#2174B1"/>
+			<stop offset="0.1177" style="stop-color:#0B86C4"/>
+			<stop offset="0.2081" style="stop-color:#0A94D2"/>
+			<stop offset="0.3177" style="stop-color:#0C9BDB"/>
+			<stop offset="0.5" style="stop-color:#109EDE"/>
+			<stop offset="0.6823" style="stop-color:#0C9BDB"/>
+			<stop offset="0.7919" style="stop-color:#0A94D2"/>
+			<stop offset="0.8823" style="stop-color:#0B86C4"/>
+			<stop offset="0.9618" style="stop-color:#2174B1"/>
+			<stop offset="1" style="stop-color:#2867A2"/>
+		</linearGradient>
+		<path class="st21" d="M72.6,80.2c0.1-0.1,0.2-0.1,0.2-0.2c-5.3-6.2-10.2-12.8-14.7-19.7c-0.1,0.1-0.2,0.2-0.2,0.4    C57.9,60.6,67.6,75.9,72.6,80.2z"/>
+		
+			<linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="54.5637" y1="474.0854" x2="62.254" y2="494.9197" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2B3B6A"/>
+			<stop offset="1" style="stop-color:#2B3B6A"/>
+		</linearGradient>
+		<path class="st22" d="M58.2,98.4C57.9,98.1,47.7,86.1,43.1,79l-0.8,0.9C46.9,86.6,52,93,57.6,99L58.2,98.4z"/>
+		
+			<linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="69.1674" y1="452.6575" x2="78.2209" y2="509.0225" gradientTransform="matrix(1 0 0 1 -8.0854 -395.1333)">
+			<stop offset="0" style="stop-color:#2E5284"/>
+			<stop offset="2.440000e-02" style="stop-color:#2C5C92"/>
+			<stop offset="8.880000e-02" style="stop-color:#2075B1"/>
+			<stop offset="0.1599" style="stop-color:#0B86C4"/>
+			<stop offset="0.2403" style="stop-color:#0A94D2"/>
+			<stop offset="0.3378" style="stop-color:#0E9CDA"/>
+			<stop offset="0.5" style="stop-color:#109EDE"/>
+			<stop offset="0.6718" style="stop-color:#0C9BDB"/>
+			<stop offset="0.7751" style="stop-color:#0A94D2"/>
+			<stop offset="0.8603" style="stop-color:#0B86C4"/>
+			<stop offset="0.9351" style="stop-color:#2174B1"/>
+			<stop offset="1" style="stop-color:#2C5D95"/>
+		</linearGradient>
+		<path class="st23" d="M72.9,79.9c-5.3-6.2-10.2-12.8-14.7-19.7c-0.5-0.8-1.1-1.6-1.6-2.4c-8.7,0-17.4,0.7-26,1.9    c0.3,0.5,4.3,7.2,7.2,11.7c27.8,42.8,40.8,41.1,41.4,41c0.6-0.2,1.2-0.5,1.7-0.8L98.8,100C91.4,98.4,82.1,90.6,72.9,79.9z"/>
+	</g>
+</g>
+</svg>
\ No newline at end of file
diff --git a/packaging/rules/snap/scripts/jami-gnome-wrapper b/packaging/rules/snap/scripts/jami-gnome-wrapper
new file mode 100755
index 0000000000000000000000000000000000000000..bb1dd0432a3943fef7bd9bd108fac55616a77e3d
--- /dev/null
+++ b/packaging/rules/snap/scripts/jami-gnome-wrapper
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+$SNAP/usr/lib/ring/dring -cd &
+exec "$@"
diff --git a/packaging/rules/snap/snapcraft.yaml b/packaging/rules/snap/snapcraft.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..8b68fd85172b0ce29f2a002b47bc940298660d4e
--- /dev/null
+++ b/packaging/rules/snap/snapcraft.yaml
@@ -0,0 +1,339 @@
+# Copyright (C) 2019-2020 Savoir-faire Linux Inc.
+#
+# Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
+# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+# This file is based on earlier work by Daniel Llewellyn, under the
+# Expat License (also referred to as "the MIT License"), per the
+# following notice:
+
+# Copyright (C) 2017-2020 Daniel Llewellyn <daniel@bowlhat.net>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
+name: jami
+version: "RELEASE_VERSION"
+adopt-info: jami
+icon: icons/jami.svg
+summary: 'Jami: secure, distributed communication software & SIP client'
+description: >
+  Jami is free software which allows its users to communicate in multiple ways.
+
+  * A telephone: a simple tool to connect, communicate and share.
+  * A teleconferencing tool: easily join calls to create conferences with multiple participants.
+  * A media sharing tool: Jami supports a variety of video input options, including mutliple cameras and image and video files, and the selection of audio inputs and outputs; all this is supported by multiple high quality audio and video codecs.
+  * A messenger: send text messeges during calls or out of calls (as long as your peer is connected).
+  * A building block for your IoT project: re-use the universal communications technology of Jami with its portable library on your system of choice.
+
+confinement: strict
+grade: stable
+base: core18
+
+plugs:
+  gnome-3-28-1804:
+    interface: content
+    target: $SNAP/gnome-platform
+    default-provider: gnome-3-28-1804:gnome-3-28-1804
+  gtk-3-themes:
+    interface: content
+    target: $SNAP/data-dir/themes
+    default-provider: gtk-common-themes:gtk-3-themes
+  icon-themes:
+    interface: content
+    target: $SNAP/data-dir/icons
+    default-provider: gtk-common-themes:icon-themes
+  sound-themes:
+    interface: content
+    target: $SNAP/data-dir/sounds
+    default-provider: gtk-common-themes:sounds-themes
+
+slots:
+  dbus-jami:
+    interface: dbus
+    bus: session
+    name: net.jami.Jami
+  dbus-ring:
+    interface: dbus
+    bus: session
+    name: cx.ring.Ring
+  dbus-jamignome:
+    interface: dbus
+    bus: session
+    name: cx.ring.RingGnome
+
+layout:
+  /usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0:
+    bind: $SNAP/gnome-platform/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0
+  /usr/lib/$SNAPCRAFT_ARCH_TRIPLET/alsa-lib:
+    bind: $SNAP/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/alsa-lib
+  /usr/local/share/jami-gnome:
+    bind: $SNAP/usr/share/jami-gnome
+
+environment:
+  DISABLE_WAYLAND: 'true'
+  XDG_CURRENT_DESKTOP: Unity
+
+apps:
+  jami:
+    command: usr/bin/jami-gnome
+    command-chain:
+    - bin/desktop-launch
+    - snap/command-chain/alsa-launch
+    - bin/jami-gnome-wrapper
+    common-id: net.jami.Jami
+    desktop: usr/share/applications/jami-gnome.desktop
+    slots:
+    - dbus-jami
+    - dbus-ring
+    - dbus-jamignome
+    plugs:
+    - audio-playback
+    - audio-record
+    - browser-support
+    - camera
+    - desktop
+    - desktop-legacy
+    - gsettings
+    - hardware-observe
+    - home
+    - network
+    - network-bind
+    - opengl
+    - removable-media
+    - unity7
+    - wayland
+    - x11
+
+parts:
+  desktop-launch:
+    source: https://github.com/ubuntu/snapcraft-desktop-helpers.git
+    plugin: nil
+    build-packages:
+    - gcc-8
+    - qtbase5-dev
+    - dpkg-dev
+    stage-packages:
+    - libqt5gui5
+    - libqt5svg5 # for loading icon themes which are svg
+    - try: [appmenu-qt5] # not available on core18
+    override-pull: |
+      snapcraftctl pull
+      sed -i -E 's|\. \$SNAP/flavor-select|USE_gtk3=true|' gtk/launcher-specific
+      sed -i -E 's|\. \$SNAP/flavor-select|USE_qt5=true|' qt/launcher-specific
+      sed -i -E 's|(append_dir GTK_PATH \$RUNTIME/usr/lib/\$ARCH/gtk-2.0)|#\1|' qt/launcher-specific
+      sed -i -E 's|\$RUNTIME|$SNAP|g' qt/launcher-specific
+      sed -i -E 's|\$WITH_RUNTIME|no|g' qt/launcher-specific
+    override-build: |
+      snapcraftctl build
+      gcc -Wall -O2 -o bindtextdomain.so -fPIC -shared src/bindtextdomain.c -ldl
+
+      echo "#!/bin/bash" > desktop-launch
+      cat common/init >> desktop-launch
+
+      cat qt/runtime-exports >> desktop-launch
+      cat gtk/runtime-exports >> desktop-launch
+
+      cat common/desktop-exports >> desktop-launch
+
+      cat qt/launcher-specific >> desktop-launch
+      cat gtk/launcher-specific >> desktop-launch
+
+      cat common/mark-and-exec >> desktop-launch
+
+      install -D -m755 desktop-launch $SNAPCRAFT_PART_INSTALL/bin/desktop-launch
+      install -D -m644 bindtextdomain.so $SNAPCRAFT_PART_INSTALL/lib/bindtextdomain.so
+
+      mkdir -pv $SNAPCRAFT_PART_INSTALL/gnome-platform
+
+  scripts:
+    plugin: dump
+    source: scripts
+    organize:
+      jami-gnome-wrapper: bin/jami-gnome-wrapper
+
+  alsa-mixin:
+    plugin: dump
+    source: https://github.com/diddlesnaps/snapcraft-alsa.git
+    source-subdir: snapcraft-assets
+    build-packages:
+      - libasound2-dev
+    stage-packages:
+      - libasound2
+      - libasound2-plugins
+
+  jami:
+    after: [alsa-mixin]
+    source: ../../..
+    source-type: local
+    plugin: nil
+    parse-info: [usr/share/metainfo/jami-gnome.appdata.xml]
+    override-pull: |
+      snapcraftctl pull
+      sed -i -E 's|(tmpName) << (PACKAGE_NAME << "_shm_")|\1 << "snap.jami." << \2|' daemon/src/media/video/sinkclient.cpp
+      for file in jami-gnome.desktop jami-gnome.desktop.autostart; do
+        sed -i -E 's|^Icon=.*|Icon=${SNAP}/usr/share/icons/hicolor/scalable/apps/jami.svg|' client-gnome/$file
+      done
+    override-build: |
+      update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 10
+      update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 20
+      update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 10
+      update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 20
+
+      cd $SNAPCRAFT_PART_BUILD/daemon/contrib
+      mkdir -p native
+      cd native
+      ../bootstrap
+      make .ffmpeg
+      make
+
+      cd $SNAPCRAFT_PART_BUILD/daemon
+      ./autogen.sh
+      ./configure --prefix=/usr --disable-shared
+      make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT
+      DESTDIR=$SNAPCRAFT_PART_INSTALL make install
+
+      cd $SNAPCRAFT_PART_BUILD/lrc
+      mkdir build
+      cd build
+      cmake .. -DCMAKE_INSTALL_PREFIX=/usr \
+               -DCMAKE_PREFIX_PATH=$SNAPCRAFT_PART_INSTALL/usr \
+               -DRING_BUILD_DIR=$SNAPCRAFT_PART_BUILD/daemon/src
+      make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT
+      DESTDIR=$SNAPCRAFT_PART_INSTALL make install
+
+      sed -i "s|/usr|$SNAPCRAFT_PART_INSTALL/usr|g" $SNAPCRAFT_PART_INSTALL/usr/lib/cmake/LibRingClient/LibRingClientConfig.cmake
+
+      cd $SNAPCRAFT_PART_BUILD/client-gnome
+      mkdir build
+      cd build
+      cmake .. -DCMAKE_INSTALL_PREFIX=/usr \
+               -DCMAKE_PREFIX_PATH=$SNAPCRAFT_PART_INSTALL/usr \
+               -DLibRingClient_DIR=$SNAPCRAFT_PART_INSTALL/usr/lib/cmake/LibRingClient
+      make -j$SNAPCRAFT_PARALLEL_BUILD_COUNT
+      DESTDIR=$SNAPCRAFT_PART_INSTALL make install
+    build-packages:
+    - autoconf
+    - autoconf-archive
+    - automake
+    - autopoint
+    - bzip2
+    - cmake
+    - curl
+    - g++-8
+    - gettext
+    - gnome-icon-theme-symbolic
+    - gzip
+    - libappindicator3-dev
+    - libayatana-appindicator3-dev
+    - libasound2-dev
+    - libavcodec-dev
+    - libavdevice-dev
+    - libavformat-dev
+    - libboost-dev
+    - libcanberra-gtk3-dev
+    - libclutter-gtk-1.0-dev
+    - libdbus-1-dev
+    - libdbus-c++-dev
+    - libexpat1-dev
+    - libgnutls28-dev
+    - libgsm1-dev
+    - libgtk-3-dev
+    - libjack-jackd2-dev
+    - libjsoncpp-dev
+    - libnotify-dev
+    - libopus-dev
+    - libpcre3-dev
+    - libpulse-dev
+    - libqrencode-dev
+    - libsamplerate0-dev
+    - libsndfile1-dev
+    - libspeex-dev
+    - libspeexdsp-dev
+    - libsrtp0-dev
+    - libswscale-dev
+    - libtool
+    - libudev-dev
+    - libupnp-dev
+    - libva-dev
+    - libvdpau-dev
+    - libwebkit2gtk-4.0-dev
+    - libyaml-cpp-dev
+    - nasm # seems to be needed for building libvpx on an 18.04 base
+    - qtbase5-dev
+    - qttools5-dev
+    - uuid-dev
+    - yasm
+    stage-packages:
+    - freeglut3
+    - libappindicator3-1
+    - libayatana-appindicator3-1
+    - libavcodec-extra
+    - libavcodec57
+    - libavdevice57
+    - libavformat57
+    - libdbus-1-3
+    - libdbus-c++-1-0v5
+    - libebook-1.2-19
+    - libexpat1
+    - libglu1-mesa
+    - libgnutls30
+    - libgsm1
+    - libjack-jackd2-0
+    - libjsoncpp1
+    - libopus0
+    - libpcre3
+    - libqrencode3
+    - libqt5core5a
+    - libqt5dbus5
+    - libqt5gui5
+    - libqt5sql5
+    - libqt5sql5-sqlite
+    - libsamplerate0
+    - libslang2
+    - libsndfile1
+    - libspeex1
+    - libspeexdsp1
+    - libswscale4
+    - libudev1
+    - libupnp6
+    - libuuid1
+    - libva-drm2
+    - libva-glx2
+    - libva-wayland2
+    - libva2
+    - libvdpau-va-gl1
+    - libvdpau1
+    - va-driver-all
diff --git a/patches/docker-snap-build-scripts.patch b/patches/docker-snap-build-scripts.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4dcc0f93e1497bedd8f693b9612c9364e2587cc9
--- /dev/null
+++ b/patches/docker-snap-build-scripts.patch
@@ -0,0 +1,30 @@
+Description: add and run our build script
+ Also, use bionic (18.04) as the base image, since xenial lacks
+ libayatana-appindicator3-dev.
+Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
+
+--- ../docker/Dockerfile_snap.original	2020-11-23 15:51:17.211591055 -0500
++++ ../docker/Dockerfile_snap	2020-11-23 15:52:29.247759416 -0500
+@@ -1,4 +1,4 @@
+-FROM ubuntu:xenial as builder
++FROM ubuntu:bionic as builder
+ 
+ # Grab dependencies
+ RUN apt-get update
+@@ -36,7 +36,7 @@
+ 
+ # Multi-stage build, only need the snaps from the builder. Copy them one at a
+ # time so they can be cached.
+-FROM ubuntu:xenial
++FROM ubuntu:bionic
+ COPY --from=builder /snap/core /snap/core
+ COPY --from=builder /snap/core18 /snap/core18
+ COPY --from=builder /snap/snapcraft /snap/snapcraft
+@@ -53,3 +53,7 @@
+ ENV SNAP="/snap/snapcraft/current"
+ ENV SNAP_NAME="snapcraft"
+ ENV SNAP_ARCH="amd64"
++
++ADD scripts/build-package-snap.sh /opt/build-package-snap.sh
++
++CMD /opt/build-package-snap.sh
diff --git a/scripts/build-package-snap.sh b/scripts/build-package-snap.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e637595deccb56da56a8eb40c1669b53ed222163
--- /dev/null
+++ b/scripts/build-package-snap.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+#
+# Copyright (C) 2020 Savoir-faire Linux Inc.
+#
+# Author: Amin Bandali <amin.bandali@savoirfairelinux.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# This script is used in the packaging containers to build a snap
+# package on an ubuntu base distro.
+
+
+set -e
+
+cp -rp /opt/ring-project-ro /opt/ring-project
+cd /opt/ring-project/packaging/rules/snap/
+
+# set the version and tarball filename
+sed -i "s/RELEASE_VERSION/${RELEASE_VERSION}/g" snapcraft.yaml
+
+snapcraft
+
+# move the built snap to output
+mv *.snap /opt/output/
+chown ${CURRENT_UID}:${CURRENT_GID} /opt/output/*.snap
diff --git a/scripts/deploy-packages.sh b/scripts/deploy-packages.sh
index 893d4f3183e66bb073f5d1955824fe35e579e1f6..676747e304965cd294f7acbf9779b5864a4f07a7 100755
--- a/scripts/deploy-packages.sh
+++ b/scripts/deploy-packages.sh
@@ -182,6 +182,33 @@ EOF
 }
 
 
+####################
+## Snap packaging ##
+####################
+
+function package_snap()
+{
+    echo "####################"
+    echo "## deploying snap ##"
+    echo "####################"
+
+    if [[ "${CHANNEL:0:19}" == "internal_experiment" ]];
+    then
+        DISTRIBUTION_REPOSITOIRY_FOLDER=$(realpath repositories)/${DISTRIBUTION}
+        mkdir -p ${DISTRIBUTION_REPOSITOIRY_FOLDER}
+        cp packages/${DISTRIBUTION}*/*.snap ${DISTRIBUTION_REPOSITOIRY_FOLDER}/
+    elif [[ "${CHANNEL:0:7}" == "nightly" ]];
+    then
+        snapcraft login --with ${SNAPCRAFT_LOGIN}
+        snapcraft push packages/${DISTRIBUTION}*/*.snap --release edge
+    elif [[ "${CHANNEL:0:6}" == "stable" ]];
+    then
+        snapcraft login --with ${SNAPCRAFT_LOGIN}
+        snapcraft push packages/${DISTRIBUTION}*/*.snap --release stable
+    fi
+}
+
+
 ################################################
 ## Deploy packages on given remote repository ##
 ################################################
@@ -221,6 +248,9 @@ function package()
     elif [[ "${DISTRIBUTION:0:6}" == "fedora" || "${DISTRIBUTION:0:4}" == "rhel" || "${DISTRIBUTION:0:13}" == "opensuse-leap" || "${DISTRIBUTION:0:19}" == "opensuse-tumbleweed" ]];
     then
         package_rpm
+    elif [[ "${DISTRIBUTION:0:4}" == "snap" ]];
+    then
+        package_snap
     else
         echo "ERROR: Distribution '${DISTRIBUTION}' is unsupported"
     fi
@@ -257,6 +287,10 @@ case $i in
     SSH_IDENTIY_FILE="${i#*=}"
     shift
     ;;
+    --snapcraft-login=*)
+    SNAPCRAFT_LOGIN="${i#*=}"
+    shift
+    ;;
     *)
     echo "Unrecognized option ${i}"
     exit 1
diff --git a/scripts/install.sh b/scripts/install.sh
index f02f3b10267599e5fa480acd85b09a5ef1fc114e..132d0f022ff25223a5a7d3afe43becba722d6d16 100755
--- a/scripts/install.sh
+++ b/scripts/install.sh
@@ -13,6 +13,9 @@ export OSTYPE
 
 set -ex
 
+# Qt_MIN_VER required for client-qt
+QT5_MIN_VER="5.14"
+
 global=false
 static=''
 client=''
@@ -104,6 +107,33 @@ fi
 make -j"${proc}"
 make_install "${global}" "${priv_install}"
 
+
+# For the client-qt, verify system's version if no path provided
+if [ "${client}" = "client-qt" ] && [ -z "$qt5path" ]; then
+    sys_qt5ver=""
+    if command -v qmake &> /dev/null; then
+        sys_qt5ver=$(qmake -v)
+    elif command -v qmake-qt5 &> /dev/null; then
+        sys_qt5ver=$(qmake-qt5 -v)   # Fedora
+    else
+        echo "No valid Qt found"; exit 1;
+    fi
+
+    sys_qt5ver=${sys_qt5ver#*Qt version}
+    sys_qt5ver=${sys_qt5ver%\ in\ *}
+
+    installed_qt5ver=$(echo $sys_qt5ver| cut -d'.' -f 2)
+    required_qt5ver=$(echo $QT5_MIN_VER| cut -d'.' -f 2)
+
+    if [[ $installed_qt5ver -ge $required_qt5ver ]] ; then
+        # Disable qt5path and qt5ver in order to use system's Qt
+        qt5path=""
+        qt5ver=""
+    else
+        echo "No valid Qt found"; exit 1;
+    fi
+fi
+
 # libringclient
 cd "${TOP}/lrc"
 mkdir -p "${BUILDDIR}"
@@ -113,12 +143,12 @@ if [ "${global}" = "true" ]; then
     cmake .. -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
              -DCMAKE_BUILD_TYPE=Debug \
              -DCMAKE_INSTALL_PREFIX="${prefix}" $static \
-             -DQT_MIN_VER="${qt5ver}" \
+             -DQT5_VER="${qt5ver}" \
              -DQT5_PATH="${qt5path}"
   else
     cmake .. -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
              -DCMAKE_BUILD_TYPE=Debug $static \
-             -DQT_MIN_VER="${qt5ver}" \
+             -DQT5_VER="${qt5ver}" \
              -DQT5_PATH="${qt5path}"
   fi
 else
@@ -126,7 +156,7 @@ else
             -DCMAKE_BUILD_TYPE=Debug \
             -DCMAKE_INSTALL_PREFIX="${INSTALL}/lrc" \
             -DRING_BUILD_DIR="${DAEMON}/src" $static \
-            -DQT_MIN_VER="${qt5ver}" \
+            -DQT5_VER="${qt5ver}" \
             -DQT5_PATH="${qt5path}"
 fi
 make -j"${proc}"
@@ -137,24 +167,18 @@ cd "${TOP}/${client}"
 mkdir -p "${BUILDDIR}"
 cd "${BUILDDIR}"
 if [ "${client}" = "client-qt" ]; then
-    echo building client-qt using Qt ${qt5ver}
-    if ! command -v qmake &> /dev/null; then
-      eval ${qt5path}/bin/qmake PREFIX="${INSTALL}/${client}" ..
+    if [ -z ${qt5path} ]; then
+        if command -v qmake &> /dev/null; then
+            echo "Build client-qt with $(qmake -v)"
+            qmake PREFIX="${INSTALL}/${client}" ..
+        else
+            echo "Build client-qt with $(qmake-qt5 -v)" # Fedora
+            qmake-qt5 PREFIX="${INSTALL}/${client}" ..
+        fi
     else
-      # Extract installed Qt version and compare with minimum required
-      sys_qt5ver=$(qmake -v)
-      sys_qt5ver=${sys_qt5ver#*Qt version}
-      sys_qt5ver=${sys_qt5ver%\ in\ *}
-
-      installed_qt5ver=$(echo $sys_qt5ver| cut -d'.' -f 2)
-      required_qt5ver=$(echo $qt5ver| cut -d'.' -f 2)
-
-      if [[ $installed_qt5ver -ge $required_qt5ver ]] ; then
-        qmake PREFIX="${INSTALL}/${client}" ..
-      else
+        echo "Build client-qt using Qt ${qt5path}"
         eval ${qt5path}/bin/qmake PREFIX="${INSTALL}/${client}" ..
-      fi
-   fi
+    fi
 else
     if [ "${global}" = "true" ]; then
       if [ "${prefix+set}" ]; then
diff --git a/scripts/make-packaging-target.py b/scripts/make-packaging-target.py
index d901820652df071dad047c83b7c8477694c75fb9..43ff9c821a67e98f0ad032691d9f4371fd217ca6 100755
--- a/scripts/make-packaging-target.py
+++ b/scripts/make-packaging-target.py
@@ -47,6 +47,7 @@ PACKAGE_%(distribution)s_DOCKER_RUN_COMMAND = docker run \\
     -e DEBIAN_VERSION=%(version)s \\
     -e DEBIAN_PACKAGING_OVERRIDE=%(debian_packaging_override)s \\
     -e CURRENT_UID=$(CURRENT_UID) \\
+    -e CURRENT_GID=$(CURRENT_GID) \\
     -e DISTRIBUTION=%(distribution)s \\
     -v $(CURDIR):/opt/ring-project-ro:ro \\
     -v $(CURDIR)/packages/%(distribution)s:/opt/output \\
@@ -400,6 +401,12 @@ def run_generate_all(parsed_args):
             "debian_packaging_override": "",
             "output_file": ".packages-built",
         },
+        # Snap
+        {
+            "distribution": "snap",
+            "debian_packaging_override": "",
+            "output_file": ".packages-built",
+        },
 
     ]