diff --git a/README.md b/README.md
index 3fec66740df7b2ca35c4aed906c986b7b0189cde..858677828712c692381c73a7a42366d7a343b5df 100644
--- a/README.md
+++ b/README.md
@@ -20,9 +20,9 @@ This script will run Cesium Desktop, taking care of installing Cesium + Nw.js if
 
 The release script use some Vagrant, and a VM running into VirtualBox.
 
-- Install VirtualBox
+- Install VirtualBox version 6 (not tested under version 7)
 - Install the VirtualBox Extension Pack (need by OSx build, for USB support).
-- Install vagrant : `sudo apt-get install vagrant`
+- Install vagrant : `sudo apt install vagrant`
 
 ### Execute release script
 
diff --git a/arch/linux/Vagrantfile b/arch/linux/Vagrantfile
index cb70dda3e43fa609d3bb7d6a5886a8c87fe653d7..40e3b353c932676f13f3639e0b35846f8bb14bda 100644
--- a/arch/linux/Vagrantfile
+++ b/arch/linux/Vagrantfile
@@ -2,9 +2,8 @@
 # vi: set ft=ruby :
 
 Vagrant.configure("2") do |config|
-  config.vm.define "cesium-release-ubuntu"
-  config.vm.box = "duniter/cesium_trusty64"
-  config.vm.box_url = "https://s3.eu-central-1.amazonaws.com/duniter/vagrant/duniter_trusty64.box"
+  config.vm.define "cesium-release-debian"
+  config.vm.box = "debian/bookworm64"
 
   config.vm.provision :shell, path: "bootstrap.sh"
 
diff --git a/arch/linux/appimage/appimage.yml b/arch/linux/appimage/appimage.yml
new file mode 100644
index 0000000000000000000000000000000000000000..64442523624d213ad2e2202b68441822c203d314
--- /dev/null
+++ b/arch/linux/appimage/appimage.yml
@@ -0,0 +1,24 @@
+app: cesium-desktop
+
+ingredients:
+  script:
+    - rm -rf cesium-desktop.AppDir/opt/cesium
+    - mkdir -p cesium-desktop.AppDir/opt/cesium
+    - TGZ_FILE=$(ls ../cesium-desktop-v*-linux-x64.tar.gz | sort -V | tail -n 1)
+    - tar xzf $TGZ_FILE -C cesium-desktop.AppDir/opt/cesium
+script:
+  - cat > cesium.desktop <<EOF
+  - [Desktop Entry]
+  - Type=Application
+  - Name=Cesium Äž1
+  - Exec=cesium
+  - StartupNotify=true
+  - Icon=cesium
+  - Categories=Utility;
+  - EOF
+  - ln -s opt/cesium/nw/nw usr/bin/cesium
+  - mkdir -p usr/share/icons/hicolor/256x256/apps
+  - cp opt/cesium/nw/cesium/img/logo_256px.png usr/share/icons/hicolor/256x256/apps/cesium.png
+  - cp usr/share/icons/hicolor/256x256/apps/cesium.png ./app.png
+  - chmod ugo+r -R opt/cesium
+  - chmod ugo+x -R opt/cesium/nw/nw opt/cesium/nw/lib opt/cesium/nw/locales
diff --git a/arch/linux/appimage/pkg2appimage b/arch/linux/appimage/pkg2appimage
new file mode 100755
index 0000000000000000000000000000000000000000..e0ace5993867ed1d07a863ee31b498f4243abee5
--- /dev/null
+++ b/arch/linux/appimage/pkg2appimage
@@ -0,0 +1,490 @@
+#!/usr/bin/env bash
+
+HERE="$(dirname "$(readlink -f "${0}")")"
+
+export PATH="${HERE}"/usr/bin/:"${HERE}"/usr/sbin/:"${HERE}"/usr/games/:"${HERE}"/bin/:"${HERE}"/sbin/:"${PATH}"
+export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/usr/lib32/:"${HERE}"/usr/lib64/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${HERE}"/lib32/:"${HERE}"/lib64/:"${LD_LIBRARY_PATH}"
+export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
+
+
+# Specify a certain commit if you do not want to use master
+# by using:
+# export PKG2AICOMMIT=<git sha>
+if [ -z "$PKG2AICOMMIT" ] ; then
+  PKG2AICOMMIT=master
+fi
+
+usage() {
+  if [ -z "$APPIMAGE" ]  ; then
+    MYSELF="$0"
+  else
+    MYSELF="$APPIMAGE"
+  fi
+  echo "usage:"
+  echo "  $MYSELF [--di] META-NAME|YAMLFILE"
+  echo ""
+  echo "options:"
+  echo "  --di    enable legacy desktop integration (unsupported)"
+  exit 1
+}
+
+check_dependencies() {
+  for executable in $@; do
+    which "${executable}" >/dev/null 2>&1 || {
+      (echo "${executable} missing"; exit 1)
+    }
+  done
+}
+
+if [ $# -eq 0 ] || [ "x${!#}" = "x--di" ] ; then
+  usage
+fi
+if [ $# -eq 2 ] && [ "x$1" != "x--di" ] ; then
+  usage
+fi
+
+if [ "x$1" = "x--di" ] ; then
+  ENABLE_DI="yes"
+else
+  ENABLE_DI="no"
+fi
+
+# Halt on errors
+set -e
+set -x
+
+# Check dependencies
+check_dependencies \
+  dpkg \
+  dpkg-deb \
+  convert \
+  wget \
+  grep \
+  sed \
+  cut \
+  file \
+  desktop-file-validate \
+  strings
+
+# If the yaml file doesn't exist locally, get it from GitHub
+if [ ! -f "${!#}" ] ; then
+  YAMLFILE=/tmp/_recipe.yml
+  rm -f "$YAMLFILE"
+  wget -q "https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/recipes/${!#}.yml" -O "$YAMLFILE"
+else
+  YAMLFILE=$(readlink -f "${!#}")
+fi
+
+# Lightweight bash-only dpkg-scanpackages replacement
+scanpackages() {
+  for deb in *.deb ; do
+    dpkg -I $deb | sed 's/^ *//g' | grep -i -E '(package|version|installed-size|architecture|depends|priority):'
+    echo "Filename: $(readlink -f $deb)"
+    echo "MD5sum: $(md5sum -b $deb | cut -d' ' -f1)"
+    echo "SHA1: $(sha1sum -b $deb | cut -d' ' -f1)"
+    echo "SHA256: $(sha256sum -b $deb | cut -d' ' -f1)"
+    echo
+  done
+}
+
+# Function to parse yaml
+# https://gist.github.com/epiloque/8cf512c6d64641bde388
+# based on https://gist.github.com/pkuczynski/8665367
+parse_yaml() {
+    local prefix=$2
+    local s
+    local w
+    local fs
+    s='[[:blank:]]*'
+    w='[a-zA-Z0-9_]*'
+    fs="$(echo @|tr @ '\034')"
+    sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
+        -e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" "$1" |
+    awk -F"$fs" '{
+    indent = length($1)/2;
+    vname[indent] = $2;
+    for (i in vname) {if (i > indent) {delete vname[i]}}
+        if (length($3) > 0) {
+            vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
+            printf("%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, $3);
+        }
+    }' | sed 's/_=/+=/g'
+}
+
+# Read yaml file
+parse_yaml $YAMLFILE "_"
+eval $(parse_yaml $YAMLFILE "_")
+
+if [ ! -z $_enable_di ]; then
+    ENABLE_DI="$_enable_di"
+fi
+
+# Execute multiple script lines together as one
+# shell_execute filename key_of_group_of_commands
+shell_execute() {
+  if [ -f /tmp/recipe_script ] ; then
+    rm /tmp/recipe_script
+  fi
+  parse_yaml $YAMLFILE "_" | grep "^$2+=" > /tmp/recipe_script
+  sed -i -e 's|^'$2'+=("||g' /tmp/recipe_script
+  sed -i -e 's|")$||g' /tmp/recipe_script
+  bash -ex /tmp/recipe_script
+  rm /tmp/recipe_script
+}
+
+APP=$_app
+LOWERAPP=${APP,,}
+if [ ! -z $_lowerapp ] ; then
+  LOWERAPP=$_lowerapp
+fi
+
+mkdir -p ./$APP/$APP.AppDir/usr/lib
+cd ./$APP/
+
+if [ -d "./$APP.AppDir/" ] ; then
+  rm -rf ./$APP.AppDir/
+fi
+
+# Source the bundled functions.sh if it exists
+# in "${HERE}/usr/share/pkg2appimage/functions.sh"
+# or source a user-provided functions.sh if the environment
+# variable FUNCTIONS_SH was set and the file exists
+if [ -e "${HERE}/usr/share/pkg2appimage/functions.sh" ] ; then
+  . "${HERE}/usr/share/pkg2appimage/functions.sh"
+elif [ -z "$FUNCTIONS_SH" ] ; then
+  if [ ! -e functions.sh ] ; then
+    wget -q https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/functions.sh -O ./functions.sh
+  fi
+  . ./functions.sh
+else
+  if [ -e "$FUNCTIONS_SH" ] ; then
+    . "$FUNCTIONS_SH"
+  fi
+fi
+
+# If there is an ARCH environment variable, then use that
+# architecture to for apt-get. Not that for the AppImage to be
+# operable, we also need to embed a matching AppImage runtime
+# and ingredients of that architecture. Debian packages
+# should be available for most architectures, e.g., oldstable
+# has "armhf"
+if [ ! -z "$ARCH" ] ; then
+  OPTIONS="$OPTIONS -o APT::Architecture=$ARCH"
+fi
+
+if [ ! -z "${_ingredients_ghreleases[0]}" ] ; then
+  for GHREPO in "${_ingredients_ghreleases[@]}" ; do
+    wget -q "https://github.com/${GHREPO}/releases/" -O /tmp/gh-release.html
+    DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep x86_64 | head -n 1 | cut -d '"' -f 2)
+    if [ -z "$DEB" ] ; then
+      DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep amd64 | head -n 1 | cut -d '"' -f 2)
+    fi
+    if [ -z "$DEB" ] ; then
+      DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep x64 | head -n 1 | cut -d '"' -f 2)
+    fi
+    if [ -z "$DEB" ] ; then
+      DEB=$(cat /tmp/gh-release.html | grep ".deb" | grep linux64 | head -n 1 | cut -d '"' -f 2)
+    fi
+    rm /tmp/gh-release.html
+    wget -c "https://github.com/${DEB}"
+  done
+fi
+
+if [ ! -z "${_ingredients_dist}" ] ; then
+  rm status 2>/dev/null || true
+  generate_status
+
+  # Some packages depend on packages which we do not want to bundle,
+  # in addition to the global excludes defined in excludedeblist.
+  # Use
+  # ingredients:
+  #   exclude:
+  #     - packagename
+  if [ ! -z "${_ingredients_exclude[0]}" ] ; then
+    for PACKAGE in "${_ingredients_exclude[@]}" ; do
+      printf "Package: $PACKAGE\nStatus: install ok installed\nArchitecture: all\nVersion: 9:999.999.999\n\n" >> status
+    done
+  fi
+
+  # Some packages depend on an exact version of a dependency to be installed.
+  # Use
+  # ingredients:
+  #   pretend:
+  #     - packagename version_to_be_pretended
+  if [ ! -z "${_ingredients_pretend[0]}" ] ; then
+    for PRETEND in "${_ingredients_pretend[@]}" ; do
+      P_PKG=$(echo "$PRETEND" | cut -d " " -f 1)
+      P_VER=$(echo "$PRETEND" | cut -d " " -f 2)
+      cat status | tr '\n' '@' | sed -e 's|@@|\n\n|g' | sed -e 's|Package: '"$P_PKG"'@Status: install ok installed@Architecture: all@Version: 9:999.999.999|Package: '"$P_PKG"'@Status: install ok installed@Architecture: all@Version: '"$P_VER"'|g' | sed -e 's|@|\n|g' > status.temp
+      mv status.temp status
+    done
+  fi
+
+  if [ -e sources.list ] ; then
+    rm sources.list
+  fi
+  for PPA in "${_ingredients_ppas[@]}" ; do
+    echo "deb http://ppa.launchpad.net/${PPA}/ubuntu/ ${_ingredients_dist} main" >> sources.list
+  done
+  for SOURCE in "${_ingredients_sources[@]}" ; do
+    echo "${SOURCE}" >> sources.list
+  done
+  for DEBFILE in "${_ingredients_debs[@]}" ; do
+    cp ${DEBFILE} .
+  done
+  # Use libcurl-slim to reduce AppImage size, thanks darealshinji
+  # Not really compiled on xenial but CentOS 6, https://github.com/AppImage/AppImages/issues/187
+  echo "deb http://ppa.launchpad.net/djcj/libcurl-slim/ubuntu xenial main" >> sources.list
+  # Use gnutls-patched to have libgnutls look in various distributions' places for certificates,
+  # https://github.com/darealshinji/vlc-AppImage/issues/1#issuecomment-321041496
+  # echo "deb http://ppa.launchpad.net/djcj/gnutls-patched/ubuntu ${_ingredients_dist} main" >> sources.list
+  ### echo "deb http://ppa.launchpad.net/djcj/gnutls-patched/ubuntu trusty main" >> sources.list # https://github.com/AppImage/pkg2appimage/issues/345
+fi
+
+if [ ! -z "${_ingredients_script[0]}" ] ; then
+  # Execute extra steps defined in recipe
+  shell_execute $YAMLFILE _ingredients_script
+fi
+
+if [ ! -z "${_ingredients_dist}" ] ; then
+  # Some projects provide raw .deb files without a repository
+  # hence we create our own local repository as part of
+  # the AppImage creation process in order to "install"
+  # the package using apt-get as normal
+  if [ ! -z "${_ingredients_debs[0]}" ] ; then
+    for DEB in "${_ingredients_debs[@]}" ; do
+      if [ ! -f $(basename "$DEB") ] ; then
+        wget -c $DEB
+      fi
+    done
+  fi
+  scanpackages | gzip -9c > Packages.gz
+  echo "deb file:$(readlink -e $PWD) ./" >> sources.list
+
+  INSTALL=$LOWERAPP
+  if [ ! -z "${_ingredients_package}" ] ; then
+    INSTALL="${_ingredients_package}"
+  fi
+  if [ ! -z "${_ingredients_packages}" ] ; then
+    INSTALL=""
+  fi
+
+  # If packages are specifically listed, only install these, not a package with the name of the app
+  if [ ! -z "${_ingredients_packages[0]}" ] ; then
+    INSTALL=${_ingredients_packages[@]}
+  fi
+
+#  apt-get -o Acquire::AllowInsecureRepositories=true -o Acquire::Languages="none" -o Acquire::AllowDowngradeToInsecureRepositories=true $OPTIONS update || true
+#  URLS=$(apt-get --allow-unauthenticated -o Apt::Get::AllowUnauthenticated=true $OPTIONS -y install --print-uris $INSTALL | cut -d "'" -f 2 | grep -e "^http") || true
+#  if which aria2c &>/dev/null; then
+#    dltool=aria2c
+#  else
+#    dltool=wget
+#  fi
+
+#  $dltool -c -i- <<<"$URLS"
+  set +x
+  apt-get.update
+
+  INSTALL=$(echo "${INSTALL}" | sed "s| |\n|g")
+
+  for pkg in ${INSTALL}; do
+    apt-get.do-download ${pkg}
+  done
+  set -x
+fi
+
+if [ ! -z "${_ingredients_post_script[0]}" ] ; then
+  # Execute extra steps defined in recipe
+  shell_execute $YAMLFILE _ingredients_post_script
+fi
+
+mkdir -p ./$APP.AppDir/
+cd ./$APP.AppDir/
+
+mkdir -p usr/bin usr/lib
+find ../*.deb -exec dpkg-deb -X {} . \; || true
+
+unset LD_PRELOAD
+
+# Try to copy icons to standard locations where appimaged can pick them up
+mkdir -p usr/share/icons/hicolor/{22x22,24x24,32x32,48x48,64x64,128x128,256x256,512x512}/apps/
+find . -path *icons* -path *22* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/22x22/apps/ \; || true
+find . -path *icons* -path *24* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/24x24/apps/ \; || true
+find . -path *icons* -path *32* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/32x32/apps/ \; || true
+find . -path *icons* -path *48* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/48x48/apps/ \; || true
+find . -path *icons* -path *64* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/64x64/apps/ \; || true
+find . -path *icons* -path *128* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/128x128/apps/ \; || true
+find . -path *icons* -path *256* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/256x256/apps/ \; || true
+find . -path *icons* -path *512* -name "*$LOWERAPP*" -exec cp {} usr/share/icons/hicolor/512x512/apps/ \; || true
+
+get_icon
+
+if [ -z "${_union}" ] ; then
+  get_apprun
+else
+cat > AppRun <<\EOF
+#!/bin/sh
+HERE="$(dirname "$(readlink -f "${0}")")"
+export UNION_PRELOAD="${HERE}"
+export LD_PRELOAD="${HERE}/libunionpreload.so"
+export PATH="${HERE}"/usr/bin/:"${HERE}"/usr/sbin/:"${HERE}"/usr/games/:"${HERE}"/bin/:"${HERE}"/sbin/:"${PATH}"
+export LD_LIBRARY_PATH="${HERE}"/usr/lib/:"${HERE}"/usr/lib/i386-linux-gnu/:"${HERE}"/usr/lib/x86_64-linux-gnu/:"${HERE}"/usr/lib32/:"${HERE}"/usr/lib64/:"${HERE}"/lib/:"${HERE}"/lib/i386-linux-gnu/:"${HERE}"/lib/x86_64-linux-gnu/:"${HERE}"/lib32/:"${HERE}"/lib64/:"${LD_LIBRARY_PATH}"
+export PYTHONPATH="${HERE}"/usr/share/pyshared/:"${PYTHONPATH}"
+export PYTHONHOME="${HERE}"/usr/
+export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
+export PERLLIB="${HERE}"/usr/share/perl5/:"${HERE}"/usr/lib/perl5/:"${PERLLIB}"
+export GSETTINGS_SCHEMA_DIR="${HERE}"/usr/share/glib-2.0/schemas/:"${GSETTINGS_SCHEMA_DIR}"
+export QT_PLUGIN_PATH="${HERE}"/usr/lib/qt4/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt4/plugins/:"${HERE}"/usr/lib32/qt4/plugins/:"${HERE}"/usr/lib64/qt4/plugins/:"${HERE}"/usr/lib/qt5/plugins/:"${HERE}"/usr/lib/i386-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib/x86_64-linux-gnu/qt5/plugins/:"${HERE}"/usr/lib32/qt5/plugins/:"${HERE}"/usr/lib64/qt5/plugins/:"${QT_PLUGIN_PATH}"
+EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2- | sed -e 's|%.||g')
+exec ${EXEC} "$@"
+EOF
+chmod a+x AppRun
+fi
+
+get_desktop
+
+# Prevent Qt from loading plugins from the system
+unset QTPATH
+QTPATH=$(find usr/lib -type d -name qt4 -or -name qt5 | sed -e 's|usr/|../|g')
+if [ ! -z $QTPATH ] ; then
+cat > usr/bin/qt.conf <<EOF
+[Paths]
+Prefix = $QTPATH
+EOF
+fi
+
+# http://www.mono-project.com/docs/advanced/assemblies-and-the-gac/
+# At runtime, Mono looks in three places for assemblies necessary
+# to run a program. It first searches the location of the executing assembly.
+# For this to work without setting $MONO_PATH, we need to move the
+# main *.exe to usr/lib/mono/exe, because we move all "assemblies" (sic)
+# there in this script
+
+if [ -e usr/lib/mono ] ; then
+  # Force all so files referenced in config files into LD_LIBRARY_PATH
+  find . -name "*.dll.config" -exec cat {} > temp \;
+  # Remove all absolute paths
+  sed -i -E 's|target=\"\/(.*\/)([a-z0-9].*?)>|target=\"\2>|g' temp
+  SONAMES=$(cat temp | cut -d '"' -f 4  | grep ".so" || true)
+  if [ "" != "$SONAMES" ] ; then
+    for SONAME in $SONAMES; do
+      find . -name "$SONAME" -exec mv {} usr/lib \;
+    done
+  fi
+  rm temp
+  PATH_OF_THE_EXE="usr/lib/mono/exe"
+  mkdir -p "$PATH_OF_THE_EXE"
+  # Force all dll files into PATH_OF_THE_EXE (or MONO_PATH which we would have to set)
+  find . -name "*.dll" -and -not -name "mscorlib.dll" -exec mv {} "$PATH_OF_THE_EXE" \;
+  # Edit all config files in place to remove absolute paths
+  find . -name "*.dll.config" -exec sed -i -E 's|target=\"\/(.*\/)([a-z0-9].*?)>|target=\"\2>|g' {} \;
+  # Force all config files into the PATH_OF_THE_EXE (or MONO_PATH which we would have to set)
+  find . -name "*.dll.config" -exec mv {} "$PATH_OF_THE_EXE" \;
+  # Remove gac, we are not using it since it is convoluted
+  rm -rf usr/lib/mono/gac/
+fi
+
+if [ -d "./usr/lib/x86_64-linux-gnu/gstreamer-1.0/" ] ; then
+  mv ./usr/lib/x86_64-linux-gnu/gstreamer-1.0/* ./usr/lib/x86_64-linux-gnu/
+  rm -r ./usr/lib/x86_64-linux-gnu/gstreamer-1.0
+fi
+
+if [ -d "./usr/lib/x86_64-linux-gnu/pulseaudio/" ] ; then
+  mv ./usr/lib/x86_64-linux-gnu/pulseaudio/* ./usr/lib/x86_64-linux-gnu/
+  rm -r ./usr/lib/x86_64-linux-gnu/pulseaudio
+fi
+
+# Execute extra steps defined in recipe
+if [ ! -z "${_script}" ] ; then
+  shell_execute $YAMLFILE _script
+fi
+
+DESKTOP=$(find . -name '*.desktop' | sort | head -n 1)
+
+# desktop-file-validate complains about missing trailing semicolons for some
+# keys although the format definition says that they are optional
+fix_desktop "$DESKTOP"
+
+# Some non-distribution provided applications have an absolute
+# path in the Exec= line which we remove for relocateability
+if [ -z "$DESKTOP" ] ; then
+  echo "desktop file not found, aborting"
+  exit 1
+else
+  desktop-file-validate "$DESKTOP" || exit 1
+  ORIG=$(grep -o "^Exec=.*$" "${DESKTOP}" | head -n 1| cut -d " " -f 1)
+  REPL=$(basename $(grep -o "^Exec=.*$" "${DESKTOP}" | head -n 1 | cut -d " " -f 1 | sed -e 's|Exec=||g'))
+  sed -i -e 's|'"${ORIG}"'|Exec='"${REPL}"'|g' "${DESKTOP}"
+fi
+
+# Compile GLib schemas if the subdirectory is present in the AppImage
+# AppRun has to export GSETTINGS_SCHEMA_DIR for this to work
+if [ -d usr/share/glib-2.0/schemas/ ] ; then
+  ( cd usr/share/glib-2.0/schemas/ ; glib-compile-schemas . )
+fi
+
+if [ -f ../VERSION ] ; then
+  VERSION=$(cat ../VERSION)
+else
+  get_version || true
+fi
+
+# patch_usr
+# Patching only the executable files seems not to be enough for some apps
+if [ ! -z "${_binpatch}" ] ; then
+  find usr/ -type f -exec sed -i -e 's|/usr|././|g' {} \;
+  find usr/ -type f -exec sed -i -e 's@././/bin/env@/usr/bin/env@g' {} \;
+fi
+
+# Don't suffer from NIH; use LD_PRELOAD to override calls to /usr paths
+if [ ! -z "${_union}" ] ; then
+  mkdir -p usr/src/
+  wget -q "https://raw.githubusercontent.com/mikix/deb2snap/master/src/preload.c" -O - | \
+  sed -e 's|SNAPPY|UNION|g' | sed -e 's|SNAPP|UNION|g' | sed  -e 's|SNAP|UNION|g' | \
+  sed -e 's|snappy|union|g' > usr/src/libunionpreload.c
+  gcc -shared -fPIC usr/src/libunionpreload.c -o libunionpreload.so -ldl -DUNION_LIBNAME=\"libunionpreload.so\"
+  strip libunionpreload.so
+fi
+
+delete_blacklisted
+
+if [ "$ENABLE_DI" = "yes" ] ; then
+  get_desktopintegration $LOWERAPP
+fi
+
+# Fix desktop files that have file endings for icons
+sed -i -e 's|\.png||g' *.desktop || true
+sed -i -e 's|\.svg||g' *.desktop || true
+sed -i -e 's|\.svgz||g' *.desktop || true
+sed -i -e 's|\.xpm||g' *.desktop || true
+
+# Setting PYTHONHOME instead
+# Fix Python imports,
+# https://github.com/AppImage/AppImages/issues/172
+# SITECUSTOMIZEFILES=$(find . -name "sitecustomize.py")
+# for SITECUSTOMIZEFILE in $SITECUSTOMIZEFILES ; do
+# rm $SITECUSTOMIZEFILE # Remove symlinks, replace by files
+# cat > $SITECUSTOMIZEFILE <<\EOF
+# import sys,os
+# if sys.version_info[0] < 3:
+#     prefix = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(sys.path[0]))))
+#     sys.path = [ prefix+s for s in sys.path if not s.startswith(prefix) ]
+# EOF
+# done
+
+# Execute extra steps defined in recipe
+if [ ! -z "${_post_script[0]}" ] ; then
+  shell_execute $YAMLFILE _post_script
+fi
+
+# Go out of AppImage
+cd ..
+
+if [ -z "${_updateinformation}" ] ; then
+  generate_type2_appimage
+else
+  generate_type2_appimage -u "${_updateinformation}"
+fi
+
+ls -lh ../out/*.AppImage
diff --git a/arch/linux/bootstrap.sh b/arch/linux/bootstrap.sh
old mode 100644
new mode 100755
index b2a874495bf99af946a7283a898f33404f9b81fd..37003997b3b606816d47b1e26a6174059f716636
--- a/arch/linux/bootstrap.sh
+++ b/arch/linux/bootstrap.sh
@@ -1,12 +1,11 @@
 #!/bin/bash
 
-# Yarn
-curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
-echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
-
 # System tools
-apt-get update
-apt-get install --yes git curl yarn python-minimal zip
+apt update
+# Deps need for tar.gz and .deb build
+apt install --yes git curl python3-minimal zip fakeroot
+# Deps need for AppImage build
+apt install --yes imagemagick desktop-file-utils binutils
 
 # User installation
 sudo su vagrant -c "bash /vagrant/user-bootstrap.sh"
diff --git a/arch/linux/build-deb.sh b/arch/linux/build-deb.sh
old mode 100644
new mode 100755
index 2fd4a9569005018ecd4cef87b784bf1b760fdbac..19f639fcea0b14b0205cd48b0eaac9db48dff798
--- a/arch/linux/build-deb.sh
+++ b/arch/linux/build-deb.sh
@@ -10,7 +10,7 @@ export NVM_DIR="$HOME/.nvm"
 
 # Prepare
 NVER=$(node -v)
-NW_VERSION=0.42.2
+NW_VERSION=0.83.0
 NW_RELEASE=v${NW_VERSION}
 NW_BASENAME=nwjs
 #NW_BASENAME=nwjs-sdk
@@ -37,7 +37,7 @@ if [ ! -d "${DOWNLOADS}/${PROJECT_NAME}_src" ]; then
   cd ${PROJECT_NAME}_src
 else
   cd ${PROJECT_NAME}_src
-  git fetch origin
+  git fetch origin --tags
   git reset HEAD
 fi
 
@@ -58,10 +58,10 @@ fi
 if [ ! -d "${DOWNLOADS}/${WEB_ZIP_FILE}" ]; then
   cd ${DOWNLOADS}
   echo "Downloading ${WEB_ZIP_FILE} into ${DOWNLOADS} ..."
-  wget -kL "${REPO_PUBLIC_URL}/releases/download/v${PROJECT_VERSION}/${WEB_ZIP_FILE}"
+  wget -q "${REPO_PUBLIC_URL}/releases/download/v${PROJECT_VERSION}/${WEB_ZIP_FILE}"
 
-  rm -rf ${PROJECT_NAME} && mkdir -p ${PROJECT_NAME} || exit 1
-  unzip -o ${WEB_ZIP_FILE} -d "${DOWNLOADS}/${PROJECT_NAME}"
+  rm -rf ${PROJECT_NAME} && mkdir -p ${PROJECT_NAME} || exit 1
+  unzip -q -o ${WEB_ZIP_FILE} -d "${DOWNLOADS}/${PROJECT_NAME}"
   rm ${WEB_ZIP_FILE}
 fi
 
@@ -69,8 +69,8 @@ fi
 if [[ ! -d "${DOWNLOADS}/${NW}" ]]; then
   cd ${DOWNLOADS}
   echo "Downloading ${NW_GZ}..."
-  wget -kL http://dl.nwjs.io/${NW_RELEASE}/${NW_GZ}
-  tar xvzf ${NW_GZ}
+  wget -q "http://dl.nwjs.io/${NW_RELEASE}/${NW_GZ}"
+  tar xzf ${NW_GZ}
 fi
 
 # -----------
@@ -78,15 +78,16 @@ fi
 # -----------
 
 # Clean previous artifacts
-rm -rf "/vagrant/${OUTPUT_BASENAME}.deb"
 rm -rf "/vagrant/${OUTPUT_BASENAME}.tar.gz"
+rm -rf "/vagrant/${OUTPUT_BASENAME}.deb"
+rm -rf "/vagrant/${OUTPUT_BASENAME}.AppImage"
 
 # Clean previous releases directory
 rm -rf "${RELEASES}"
 mkdir -p "${RELEASES}"
 
 # Releases builds
-mv "${DOWNLOADS}/${PROJECT_NAME}" "${RELEASES}/" && cd "${RELEASES}/${PROJECT_NAME}" || exit 1
+mv "${DOWNLOADS}/${PROJECT_NAME}" "${RELEASES}/" && cd "${RELEASES}/${PROJECT_NAME}" || exit 1
 
 # Remove git files
 rm -Rf .git
@@ -112,10 +113,10 @@ cp -r "${RELEASES}/${PROJECT_NAME}" "${RELEASES}/desktop_release/nw/"
 ls "${RELEASES}/desktop_release/nw/"
 
 # Copy Cesium desktop sources files
-cp -r /vagrant/package.json "${RELEASES}/desktop_release/nw/"
-cp -r /vagrant/yarn.lock "${RELEASES}/desktop_release/nw/"
 cp -r /vagrant/cesium-desktop.js "${RELEASES}/desktop_release/nw"
 cp -r /vagrant/splash.html "${RELEASES}/desktop_release/nw"
+cp -r /vagrant/package.json "${RELEASES}/desktop_release/nw/"
+cp -r /vagrant/package-lock.json "${RELEASES}/desktop_release/nw/"
 
 # Injection
 sed -i 's/<script src="config.js"[^>]*><\/script>/<script src="config.js"><\/script><script src="..\/cesium-desktop.js"><\/script>/' ${RELEASES}/desktop_release/nw/${PROJECT_NAME}/index*.html || exit 1
@@ -125,9 +126,8 @@ cd "${RELEASES}/desktop_release/nw"
 npm install
 
 # Releases
-cp -R "${RELEASES}/desktop_release" "${RELEASES}/desktop_release_tgz"
-cd "${RELEASES}/desktop_release_tgz"
-tar czf /vagrant/${OUTPUT_BASENAME}.tar.gz * --exclude ".git" --exclude "coverage" --exclude "test"
+cd "${RELEASES}/desktop_release"
+tar czf "/vagrant/${OUTPUT_BASENAME}.tar.gz" *
 
 # -------------------------------------------------
 # Build Desktop version .deb
@@ -138,15 +138,30 @@ cp -r "/vagrant/package" "${RELEASES}/${PROJECT_NAME}-x64" || exit 1
 mkdir -p "${RELEASES}/${PROJECT_NAME}-x64/opt/${PROJECT_NAME}/" || exit 1
 chmod 755 ${RELEASES}/${PROJECT_NAME}-x64/DEBIAN/post*
 chmod 755 ${RELEASES}/${PROJECT_NAME}-x64/DEBIAN/pre*
-sed -i "s/Version:.*/Version:${PROJECT_VERSION}/g" ${RELEASES}/${PROJECT_NAME}-x64/DEBIAN/control || exit 1
+sed -i "s/Version:.*/Version: ${PROJECT_VERSION}/g" "${RELEASES}/${PROJECT_NAME}-x64/DEBIAN/control" || exit 1
+gzip --best -n ${RELEASES}/${PROJECT_NAME}-x64/usr/share/doc/${PROJECT_NAME}-desktop/changelog.* || exit 1
+
 cd "${RELEASES}/desktop_release/nw" || exit 1
 zip -qr "${RELEASES}/${PROJECT_NAME}-x64/opt/${PROJECT_NAME}/nw.nwb" *
 
-sed -i "s/Package: .*/Package: ${PROJECT_NAME}-desktop/g" "${RELEASES}/${PROJECT_NAME}-x64/DEBIAN/control" || exit 1
-cd ${RELEASES}/ || exit 1
+cd "${RELEASES}/" || exit 1
 fakeroot dpkg-deb --build "${PROJECT_NAME}-x64" || exit 1
 mv "${PROJECT_NAME}-x64.deb" "/vagrant/${OUTPUT_BASENAME}.deb" || exit 1
 
+rm -rf "${RELEASES}/${PROJECT_NAME}-x64" || exit 1
+
+# -------------------------------------------------
+# Build Desktop version .AppImage
+# -------------------------------------------------
+
+cp -f /vagrant/appimage/* "${RELEASES}/" || exit 1
+cp -f /vagrant/${OUTPUT_BASENAME}.tar.gz "${RELEASES}/" || exit 1
+cd "${RELEASES}"
+bash -ex ./pkg2appimage appimage.yml || exit 1
+
+OUTPUT_APPIMAGE=$(ls "./out/*.AppImage" | sort -V | tail -n 1)
+mv "${OUTPUT_APPIMAGE}" "/vagrant/${OUTPUT_BASENAME}.AppImage" || exit 1
+
 # -------------------------------------------------
 # Build Desktop sha256 files
 # -------------------------------------------------
@@ -154,3 +169,10 @@ mv "${PROJECT_NAME}-x64.deb" "/vagrant/${OUTPUT_BASENAME}.deb" || exit 1
 cd "/vagrant" || exit 1
 sha256sum ${OUTPUT_BASENAME}.tar.gz > ${OUTPUT_BASENAME}.tar.gz.sha256
 sha256sum ${OUTPUT_BASENAME}.deb > ${OUTPUT_BASENAME}.deb.sha256
+sha256sum ${OUTPUT_BASENAME}.AppImage > ${OUTPUT_BASENAME}.AppImage.sha256
+
+# -------------------------------------------------
+# Clean release files
+# -------------------------------------------------
+
+rm -rf "${RELEASES}"
diff --git a/arch/linux/package/DEBIAN/conffiles b/arch/linux/package/DEBIAN/conffiles
new file mode 100644
index 0000000000000000000000000000000000000000..cd7e3f611e2ef561f2e58b1a91c417921ac799aa
--- /dev/null
+++ b/arch/linux/package/DEBIAN/conffiles
@@ -0,0 +1 @@
+/usr/share/metainfo/cesium.metainfo.xml
diff --git a/arch/linux/package/DEBIAN/control b/arch/linux/package/DEBIAN/control
index 8116e66d2fb7e3ccc3709ae8cd5e3ccd775f5689..b29634ef88fc4d696d018f1af118279f6226291c 100644
--- a/arch/linux/package/DEBIAN/control
+++ b/arch/linux/package/DEBIAN/control
@@ -1,12 +1,17 @@
-Package: cesium
-Version: 1.4.0
-Section: misc
-Priority: optional
+Package: cesium-desktop
+Version: 1.7.12
 Architecture: all
-Installed-Size: 235351
 Maintainer: Duniter Team <contact@duniter.org>
+Installed-Size: 235351
+Depends: libgconf-2-4 (>= 3.2.0), libatomic1
+Conflicts: cesium, cesium-desktop
+Replaces: cesium, cesium-desktop
+Provides: cesium-desktop
+Section: contrib/misc
+Priority: optional
+Homepage: https://www.cesium.app
+Package-Type: deb
 Description: Cesium Wallet for G1 currency
  Cesium is a wallet (client-software) for G1 a libre currency.
  Please visit https://www.duniter.org for more information on G1 and libre currencies.
-Depends: libgconf-2-4 (>= 3.2.0), libatomic1
-Homepage: https://www.cesium.app
+ License AGPL-3
diff --git a/arch/linux/package/DEBIAN/postinst b/arch/linux/package/DEBIAN/postinst
index 083d22b83ba6bbaf1514181edccb2587dc457a94..f23125c1e8e766273e08110dd4f4dc5b67acad63 100755
--- a/arch/linux/package/DEBIAN/postinst
+++ b/arch/linux/package/DEBIAN/postinst
@@ -1,34 +1,33 @@
 #!/bin/bash
 
 CESIUM_ROOT=/opt/cesium
-CESIUM_G1_TEST=/opt/cesium-g1-test
-CESIUM_NW=$CESIUM_ROOT/nw
-
-if [[ -f $CESIUM_ROOT/nw.nwb ]]; then
-  unzip -q -d $CESIUM_NW $CESIUM_ROOT/nw.nwb
-  chmod +x $CESIUM_NW/nw $CESIUM_NW/lib $CESIUM_NW/locales
-  ln -s $CESIUM_NW/nw /usr/bin/cesium
-fi
+CESIUM_TEST=/opt/cesium-test
 
 chmod +r -R $CESIUM_ROOT
 
+if [[ -f "$CESIUM_ROOT/nw.nwb" ]]; then
+  echo "Unpack nw.nwb ..."
+  unzip -q -d "$CESIUM_ROOT/nw" "$CESIUM_ROOT/nw.nwb"
+  chmod +x $CESIUM_ROOT/nw/nw $CESIUM_ROOT/nw/lib $CESIUM_ROOT/nw/locales
+  ln -s $CESIUM_ROOT/nw/nw /usr/bin/cesium
+fi
+
 # Create a Cesium for G1-Test
 cd /opt
-cp -r "$CESIUM_ROOT" "$CESIUM_G1_TEST"
-cd "$CESIUM_G1_TEST/nw/"
-sed -i 's/"cesium"/"cesium-g1-test"/g' package.json
-ln -s "$CESIUM_G1_TEST/nw/nw" /usr/bin/cesium-g1-test
+cp -r "$CESIUM_ROOT" "$CESIUM_TEST"
+cd "$CESIUM_TEST/nw/"
+sed -i 's/"cesium"/"cesium-test"/g' package.json
+ln -s "$CESIUM_TEST/nw/nw" /usr/bin/cesium-test
 
 # Change title of Cesium test
 sed -i 's/Cesium/Cesium Äž1-Test/g' splash.html
 sed -i 's/Cesium/Cesium Äž1-Test/g' cesium/index.html
-#sed -i 's/config\.js/config-test.js/g' cesium/index.html
-sed -i 's/g1\.duniter/g1-test.duniter/g' cesium/config.js
-sed -i 's/g1\.data/g1-test.data/g' cesium/config.js
-sed -i 's/"g1"/"g1-test"/g' cesium-desktop.js
-sed -i 's/.config\/cesium\//.config\/cesium-g1-test\//g' cesium-desktop.js
+sed -i 's/config\.js/config-test.js/g' cesium/index.html
+sed -i 's/"cesium"/"cesium-test"/g' cesium-desktop.js
+sed -i 's/"Cesium"/"Cesium Äž1-Test"/g' cesium-desktop.js
 
 # Change title of Cesium classic
 cd "$CESIUM_ROOT/nw/"
 sed -i 's/Cesium/Cesium Äž1/g' splash.html
 sed -i 's/Cesium/Cesium Äž1/g' cesium/index.html
+sed -i 's/"Cesium"/"Cesium Äž1"/g' cesium-desktop.js
diff --git a/arch/linux/package/DEBIAN/prerm b/arch/linux/package/DEBIAN/prerm
index ec1572df4c25254e9f9fa5e0ac967b2c471ab339..34290dd55bb68bca05353d7747807e8c0b07ada6 100755
--- a/arch/linux/package/DEBIAN/prerm
+++ b/arch/linux/package/DEBIAN/prerm
@@ -1,7 +1,6 @@
 #!/bin/bash
 
 [[ -f /usr/bin/cesium ]] && rm /usr/bin/cesium
-[[ -f /usr/bin/cesium-g1-test ]] && rm /usr/bin/cesium-g1-test
-[[ -f /usr/bin/cesium-desktop ]] && rm -f /usr/bin/cesium-desktop
+[[ -f /usr/bin/cesium-test ]] && rm /usr/bin/cesium-test
 [[ -d /opt/cesium ]] && rm -Rf /opt/cesium
-[[ -d /opt/cesium-g1-test ]] && rm -Rf /opt/cesium-g1-test
+[[ -d /opt/cesium-test ]] && rm -Rf /opt/cesium-test
diff --git a/arch/linux/package/usr/share/applications/cesium-g1-test.desktop b/arch/linux/package/usr/share/applications/cesium-test.desktop
similarity index 84%
rename from arch/linux/package/usr/share/applications/cesium-g1-test.desktop
rename to arch/linux/package/usr/share/applications/cesium-test.desktop
index 06784418a353c397d9cd6b5886fb7e8a10528afa..5ce5dc48bba522d503812caf798ca96e62b76c46 100644
--- a/arch/linux/package/usr/share/applications/cesium-g1-test.desktop
+++ b/arch/linux/package/usr/share/applications/cesium-test.desktop
@@ -1,6 +1,6 @@
 [Desktop Entry]
 Name=Cesium Äž1-Test
-Exec=cesium-g1-test
+Exec=cesium-test
 Icon=/opt/cesium/nw/cesium/img/logo.png
 Type=Application
 Categories=Utility
diff --git a/arch/linux/package/usr/share/applications/cesium.desktop b/arch/linux/package/usr/share/applications/cesium.desktop
index e47053f3e70fddbda99a5b67e08fe2fd4e6a927e..6e21e9667d3d3429635238a9b9647d8285c699a5 100644
--- a/arch/linux/package/usr/share/applications/cesium.desktop
+++ b/arch/linux/package/usr/share/applications/cesium.desktop
@@ -1,6 +1,6 @@
 [Desktop Entry]
+Type=Application
 Name=Cesium Äž1
 Exec=cesium
 Icon=/opt/cesium/nw/cesium/img/logo.png
-Type=Application
 Categories=Utility
diff --git a/arch/linux/package/usr/share/doc/cesium-desktop/changelog.Debian b/arch/linux/package/usr/share/doc/cesium-desktop/changelog.Debian
new file mode 100644
index 0000000000000000000000000000000000000000..80817c41b202235b90bbdc3b807ec009ac0a181c
--- /dev/null
+++ b/arch/linux/package/usr/share/doc/cesium-desktop/changelog.Debian
@@ -0,0 +1,6 @@
+cesium-desktop (1.7.12) stable; urgency=low
+
+  [ Duniter Team ]
+  * Upgrade to NW.js v0.83.0 (Chromium 120)
+
+ -- Duniter Team <contact@duniter.org>  Wed,  3 Jan 2024 11:30:00 +0100
diff --git a/arch/linux/package/usr/share/doc/cesium-desktop/copyright b/arch/linux/package/usr/share/doc/cesium-desktop/copyright
new file mode 100644
index 0000000000000000000000000000000000000000..2035c6e1c3af8b1507eddb89a6c2b8fa671a204f
--- /dev/null
+++ b/arch/linux/package/usr/share/doc/cesium-desktop/copyright
@@ -0,0 +1,14 @@
+cesium-desktop
+
+Copyright: 2024 Duniter Team <contact@duniter.org>
+
+2024-01-01
+
+The entire code base may be distributed under the terms of the GNU General
+Public License (GPL), which appears immediately below.  Alternatively, all
+of the source code as any code derived from that code may instead be
+distributed under the GNU Lesser General Public License (LGPL), at the
+choice of the distributor. The complete text of the LGPL appears at the
+bottom of this file.
+
+See /usr/share/common-licenses/GPL-3
diff --git a/arch/linux/package/usr/share/doc/cesium/copyright b/arch/linux/package/usr/share/doc/cesium/copyright
deleted file mode 100644
index 4b006016d087f0ad09d02714db29c724b4b39412..0000000000000000000000000000000000000000
--- a/arch/linux/package/usr/share/doc/cesium/copyright
+++ /dev/null
@@ -1,7 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: Cesium
-Upstream-Contact: Duniter Team <contact@duniter.org>
-Source: https://git.duniter.org/clients/cesium-grp/cesium
-Copyright: 2017-2020 Benoit Lavenier
-License: GPL-3+
-Files: *
diff --git a/arch/linux/package/usr/share/metainfo/cesium.metainfo.xml b/arch/linux/package/usr/share/metainfo/cesium.metainfo.xml
new file mode 100644
index 0000000000000000000000000000000000000000..570d263d644f74cf14b745498a4fa31d7b8b3488
--- /dev/null
+++ b/arch/linux/package/usr/share/metainfo/cesium.metainfo.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop">
+  <id>cesium-desktop</id>
+  <launchable type="desktop-id">cesium.desktop</launchable>
+  <metadata_license>GPL-3.0+ o GFDL-1.3-only</metadata_license>
+  <project_license>GPL-3.0+</project_license>
+
+  <name>Cesium</name>
+  <summary>Wallet for Äž1 Currency</summary>
+  <description>
+    <p>
+      Cesium is a wallet (client-software) for Äž1, a libre currency. It allows
+      users to manage their G1 accounts, send and receive transactions, and view
+      the history of their operations. Please visit https://www.duniter.org for
+      more information on G1 and libre currencies.
+    </p>
+  </description>
+
+  <screenshots>
+    <screenshot type="default">
+      <image>https://cesium.app/i18n/en_GB/contents/home/Cesium-G1-mockup.png</image>
+      <caption>Main interface</caption>
+    </screenshot>
+    <screenshot>
+      <image>https://cesium.app/i18n/en_GB/contents/features/signup.png</image>
+      <caption>Create your account</caption>
+    </screenshot>
+    <screenshot>
+      <image>https://cesium.app/i18n/en_GB/contents/features/receive-libre-money.png</image>
+      <caption>Receive</caption>
+    </screenshot>
+    <screenshot>
+      <image>https://cesium.app/i18n/en_GB/contents/features/send-libre-money.png</image>
+      <caption>Send</caption>
+    </screenshot>
+  </screenshots>
+
+  <url type="homepage">https://cesium.app</url>
+  <url type="bugtracker">https://git.duniter.org/clients/cesium-grp/cesium/issues</url>
+  <url type="help">https://forum.duniter.org/c/support/cesium/37</url>
+  <url type="donation">https://cesium.app/en/merci</url>
+  <project_group>DUNITER</project_group>
+  <developer_name>Duniter Team</developer_name>
+  <update_contact>contact@duniter.org</update_contact>
+  <content_rating type="oars-1.1" />
+
+  <categories>
+    <category>Utility</category>
+    <category>Finance</category>
+  </categories>
+
+  <releases>
+    <release version="1.7.12" date="2024-01-01">
+      <description>
+        <p>New features in Cesium 1.7.12:</p>
+        <ul>
+          <li>Upgrade to NW.js v0.83.0 (Chromium 120).</li>
+        </ul>
+      </description>
+    </release>
+  </releases>
+</component>
diff --git a/arch/linux/user-bootstrap.sh b/arch/linux/user-bootstrap.sh
old mode 100644
new mode 100755
index 22d46e07b89427e90b9ed988c591d51186d8aa92..51338d1b05e91c48b36cc93e05fc36ffc2722192
--- a/arch/linux/user-bootstrap.sh
+++ b/arch/linux/user-bootstrap.sh
@@ -1,12 +1,12 @@
 #!/bin/bash
 
 # NVM
-curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
+curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
 export NVM_DIR="$HOME/.nvm"
 [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
 
 # Node.js
-nvm install 10
+nvm install 16
 
 # node-pre-gyp
 npm install -g nw-gyp node-pre-gyp
diff --git a/release.sh b/release.sh
index 6888a7339256907c57f4b67d696f547baa12fb9e..3d00c3a58ff2817ea7f7d05dcb56a4bb434a142c 100755
--- a/release.sh
+++ b/release.sh
@@ -3,7 +3,7 @@
 PROJECT_NAME=cesium
 REPO="duniter/cesium"
 REPO_PUBLIC_URL="https://github.com/${REPO}"
-NODEJS_VERSION=10
+NODEJS_VERSION=16
 TAG="$1"
 TAG_NAME="v$1"
 ARCH=`uname -m`
@@ -23,9 +23,7 @@ if [[ -z $TAG ]]; then
   echo ""
   echo "Examples:"
   echo ""
-  echo "  release.sh 1.2.3"
-  echo "  release.sh 1.4.0"
-  echo "  release.sh 1.4.1"
+  echo "  release.sh 1.7.12"
   echo ""
   exit 1
 fi
@@ -78,16 +76,14 @@ ZIP_BASENAME="${PROJECT_NAME}-${REMOTE_TAG}-web"
 if [[ ! -f "${DOWNLOADS}/${ZIP_BASENAME}.zip" ]]; then
     echo "Downloading ${PROJECT_NAME} web release..."
     mkdir -p ${DOWNLOADS} && cd ${DOWNLOADS} || exit 1
-    wget "${REPO_PUBLIC_URL}/releases/download/${REMOTE_TAG}/${ZIP_BASENAME}.zip"
-    if [[ $? -ne 0 ]]; then
-        exit 2
-    fi
+    wget -q "${REPO_PUBLIC_URL}/releases/download/${REMOTE_TAG}/${ZIP_BASENAME}.zip" || exit 2
     cd ${ROOT}
 fi
 
 if [[ "_$EXPECTED_ASSETS" == "_" ]]; then
-    EXPECTED_ASSETS="${PROJECT_NAME}-desktop-$REMOTE_TAG-linux-x64.deb
-${PROJECT_NAME}-desktop-$REMOTE_TAG-linux-x64.tar.gz
+    EXPECTED_ASSETS="${PROJECT_NAME}-desktop-$REMOTE_TAG-linux-x64.tar.gz
+${PROJECT_NAME}-desktop-$REMOTE_TAG-linux-x64.deb
+${PROJECT_NAME}-desktop-$REMOTE_TAG-linux-x64.AppImage
 ${PROJECT_NAME}-desktop-$REMOTE_TAG-windows-x64.exe"
 fi
 
@@ -104,7 +100,7 @@ for ASSET_BASENAME in $EXPECTED_ASSETS; do
   if [[ -z `echo $ASSETS | grep -F "$ASSET_BASENAME"` ]]; then
 
     # Debian
-    if [[ $ASSET_BASENAME == *"linux-x64.deb" ]] || [[ $ASSET_BASENAME == *"linux-x64.tar.gz" ]]; then
+    if [[ $ASSET_BASENAME == *"linux-x64.deb" ]] || [[ $ASSET_BASENAME == *"linux-x64.tar.gz" ]] || [[ $ASSET_BASENAME == *"linux-x64.AppImage" ]]; then
       if [[ $ARCH == "x86_64" ]]; then
 
         ASSET_PATH="$PWD/arch/linux/$ASSET_BASENAME"
@@ -125,6 +121,7 @@ for ASSET_BASENAME in $EXPECTED_ASSETS; do
 
         # Upload sha256 (if exists)
         if [[ -f "${ASSET_PATH}.sha256" ]]; then
+          echo "--- Uploading '${ASSET_BASENAME}.sha256' to github ..."
           node ./scripts/upload-release.js ${REMOTE_TAG} ${ASSET_PATH}.sha256
         fi
       else
diff --git a/src/package.json b/src/package.json
index f395e572f3c6aad59de76e5983eb4475dbd8bcf5..7ba40870de131fc650e4c0717d66c17d2208c8e7 100644
--- a/src/package.json
+++ b/src/package.json
@@ -17,10 +17,6 @@
   "dependencies": {
     "bs58": "^4.0.1",
     "cli-color": "^2.0.3",
-    "js-yaml": "^3.14.1",
-    "co": "^4.6.0",
-    "request": "^2.88.2",
-    "request-promise": "^4.2.6",
-    "stringstream": "^0.0.6"
+    "js-yaml": "^3.14.1"
   }
 }
diff --git a/src/yarn.lock b/src/yarn.lock
deleted file mode 100644
index f3573298589a08b4e605c75a94ba2339e909b092..0000000000000000000000000000000000000000
--- a/src/yarn.lock
+++ /dev/null
@@ -1,532 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-ajv@^6.5.5:
-  version "6.12.2"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
-  integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
-  dependencies:
-    fast-deep-equal "^3.1.1"
-    fast-json-stable-stringify "^2.0.0"
-    json-schema-traverse "^0.4.1"
-    uri-js "^4.2.2"
-
-ansi-regex@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-
-argparse@^1.0.7:
-  version "1.0.10"
-  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
-  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
-  dependencies:
-    sprintf-js "~1.0.2"
-
-asn1@~0.2.3:
-  version "0.2.4"
-  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
-  integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
-  dependencies:
-    safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-
-asynckit@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-aws-sign2@~0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-
-aws4@^1.8.0:
-  version "1.9.1"
-  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
-  integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
-
-base-x@^3.0.2:
-  version "3.0.8"
-  resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d"
-  integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==
-  dependencies:
-    safe-buffer "^5.0.1"
-
-bcrypt-pbkdf@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
-  integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
-  dependencies:
-    tweetnacl "^0.14.3"
-
-bluebird@^3.5.0:
-  version "3.7.2"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
-  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-bs58@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
-  integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=
-  dependencies:
-    base-x "^3.0.2"
-
-caseless@~0.12.0:
-  version "0.12.0"
-  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-
-cli-color@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.0.tgz#11ecfb58a79278cf6035a60c54e338f9d837897c"
-  integrity sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==
-  dependencies:
-    ansi-regex "^2.1.1"
-    d "^1.0.1"
-    es5-ext "^0.10.51"
-    es6-iterator "^2.0.3"
-    memoizee "^0.4.14"
-    timers-ext "^0.1.7"
-
-co@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-
-combined-stream@^1.0.6, combined-stream@~1.0.6:
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
-  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
-  dependencies:
-    delayed-stream "~1.0.0"
-
-core-util-is@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-d@1, d@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
-  integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
-  dependencies:
-    es5-ext "^0.10.50"
-    type "^1.0.1"
-
-dashdash@^1.12.0:
-  version "1.14.1"
-  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
-  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
-  dependencies:
-    assert-plus "^1.0.0"
-
-delayed-stream@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-ecc-jsbn@~0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
-  integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
-  dependencies:
-    jsbn "~0.1.0"
-    safer-buffer "^2.1.0"
-
-es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.51, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
-  version "0.10.53"
-  resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
-  integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
-  dependencies:
-    es6-iterator "~2.0.3"
-    es6-symbol "~3.1.3"
-    next-tick "~1.0.0"
-
-es6-iterator@^2.0.3, es6-iterator@~2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
-  integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
-  dependencies:
-    d "1"
-    es5-ext "^0.10.35"
-    es6-symbol "^3.1.1"
-
-es6-symbol@^3.1.1, es6-symbol@~3.1.3:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
-  integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
-  dependencies:
-    d "^1.0.1"
-    ext "^1.1.2"
-
-es6-weak-map@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
-  integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
-  dependencies:
-    d "1"
-    es5-ext "^0.10.46"
-    es6-iterator "^2.0.3"
-    es6-symbol "^3.1.1"
-
-esprima@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
-  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-
-event-emitter@^0.3.5:
-  version "0.3.5"
-  resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
-  integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
-  dependencies:
-    d "1"
-    es5-ext "~0.10.14"
-
-ext@^1.1.2:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
-  integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
-  dependencies:
-    type "^2.0.0"
-
-extend@~3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
-  integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-
-extsprintf@1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-
-extsprintf@^1.2.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
-  integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-
-fast-deep-equal@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
-  integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
-
-fast-json-stable-stringify@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
-  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-forever-agent@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-  integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-
-form-data@~2.3.2:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
-  integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
-  dependencies:
-    asynckit "^0.4.0"
-    combined-stream "^1.0.6"
-    mime-types "^2.1.12"
-
-getpass@^0.1.1:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
-  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
-  dependencies:
-    assert-plus "^1.0.0"
-
-har-schema@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-
-har-validator@~5.1.3:
-  version "5.1.3"
-  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
-  integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
-  dependencies:
-    ajv "^6.5.5"
-    har-schema "^2.0.0"
-
-http-signature@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
-  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
-  dependencies:
-    assert-plus "^1.0.0"
-    jsprim "^1.2.2"
-    sshpk "^1.7.0"
-
-is-promise@^2.1:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
-  integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
-
-is-typedarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-
-isstream@~0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-
-js-yaml@^3.13.1:
-  version "3.13.1"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
-  integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
-  dependencies:
-    argparse "^1.0.7"
-    esprima "^4.0.0"
-
-jsbn@~0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-
-json-schema-traverse@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
-  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-schema@0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-
-json-stringify-safe@~5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-jsprim@^1.2.2:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
-  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
-  dependencies:
-    assert-plus "1.0.0"
-    extsprintf "1.3.0"
-    json-schema "0.2.3"
-    verror "1.10.0"
-
-lodash@^4.17.15:
-  version "4.17.15"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
-  integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
-
-lru-queue@0.1:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
-  integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=
-  dependencies:
-    es5-ext "~0.10.2"
-
-memoizee@^0.4.14:
-  version "0.4.14"
-  resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57"
-  integrity sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==
-  dependencies:
-    d "1"
-    es5-ext "^0.10.45"
-    es6-weak-map "^2.0.2"
-    event-emitter "^0.3.5"
-    is-promise "^2.1"
-    lru-queue "0.1"
-    next-tick "1"
-    timers-ext "^0.1.5"
-
-mime-db@1.44.0:
-  version "1.44.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
-  integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
-
-mime-types@^2.1.12, mime-types@~2.1.19:
-  version "2.1.27"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
-  integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
-  dependencies:
-    mime-db "1.44.0"
-
-next-tick@1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
-  integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
-
-next-tick@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
-  integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
-
-oauth-sign@~0.9.0:
-  version "0.9.0"
-  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
-  integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-
-performance-now@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-
-psl@^1.1.28:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
-  integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
-
-punycode@^2.1.0, punycode@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
-  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-qs@~6.5.2:
-  version "6.5.2"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
-  integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-
-request-promise-core@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"
-  integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==
-  dependencies:
-    lodash "^4.17.15"
-
-request-promise@^4.2.5:
-  version "4.2.5"
-  resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.5.tgz#186222c59ae512f3497dfe4d75a9c8461bd0053c"
-  integrity sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg==
-  dependencies:
-    bluebird "^3.5.0"
-    request-promise-core "1.1.3"
-    stealthy-require "^1.1.1"
-    tough-cookie "^2.3.3"
-
-request@^2.88.2:
-  version "2.88.2"
-  resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
-  integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
-  dependencies:
-    aws-sign2 "~0.7.0"
-    aws4 "^1.8.0"
-    caseless "~0.12.0"
-    combined-stream "~1.0.6"
-    extend "~3.0.2"
-    forever-agent "~0.6.1"
-    form-data "~2.3.2"
-    har-validator "~5.1.3"
-    http-signature "~1.2.0"
-    is-typedarray "~1.0.0"
-    isstream "~0.1.2"
-    json-stringify-safe "~5.0.1"
-    mime-types "~2.1.19"
-    oauth-sign "~0.9.0"
-    performance-now "^2.1.0"
-    qs "~6.5.2"
-    safe-buffer "^5.1.2"
-    tough-cookie "~2.5.0"
-    tunnel-agent "^0.6.0"
-    uuid "^3.3.2"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.2:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
-  integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
-
-safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-sprintf-js@~1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-
-sshpk@^1.7.0:
-  version "1.16.1"
-  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
-  integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
-  dependencies:
-    asn1 "~0.2.3"
-    assert-plus "^1.0.0"
-    bcrypt-pbkdf "^1.0.0"
-    dashdash "^1.12.0"
-    ecc-jsbn "~0.1.1"
-    getpass "^0.1.1"
-    jsbn "~0.1.0"
-    safer-buffer "^2.0.2"
-    tweetnacl "~0.14.0"
-
-stealthy-require@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
-  integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
-
-stringstream@^0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
-  integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==
-
-timers-ext@^0.1.5, timers-ext@^0.1.7:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6"
-  integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==
-  dependencies:
-    es5-ext "~0.10.46"
-    next-tick "1"
-
-tough-cookie@^2.3.3, tough-cookie@~2.5.0:
-  version "2.5.0"
-  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
-  integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
-  dependencies:
-    psl "^1.1.28"
-    punycode "^2.1.1"
-
-tunnel-agent@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
-  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
-  dependencies:
-    safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
-  version "0.14.5"
-  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-
-type@^1.0.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
-  integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
-
-type@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
-  integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
-
-uri-js@^4.2.2:
-  version "4.2.2"
-  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
-  integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
-  dependencies:
-    punycode "^2.1.0"
-
-uuid@^3.3.2:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
-  integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
-
-verror@1.10.0:
-  version "1.10.0"
-  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
-  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
-  dependencies:
-    assert-plus "^1.0.0"
-    core-util-is "1.0.2"
-    extsprintf "^1.2.0"