diff --git a/scripts/github.sh b/scripts/github.sh
new file mode 100755
index 0000000000000000000000000000000000000000..415dcb796f51e4e3437199566ab2dda8f7e83a11
--- /dev/null
+++ b/scripts/github.sh
@@ -0,0 +1,140 @@
+#!/bin/bash
+
+# Get to the root project
+if [[ "_" == "_${PROJECT_DIR}" ]]; then
+  SCRIPT_DIR=$(dirname $0)
+  PROJECT_DIR=$(cd ${SCRIPT_DIR}/.. && pwd)
+  export PROJECT_DIR
+fi;
+
+cd ${PROJECT_DIR}
+
+### Control that the script is run on `dev` branch
+branch=$(git rev-parse --abbrev-ref HEAD)
+if [[ ! "$branch" = "master" ]];
+then
+  echo ">> This script must be run under \`master\` branch"
+  exit 1
+fi
+
+### Get version to release
+current=$(grep -P "version\": \"\d+.\d+.\d+(\w*)" package.json | grep -m 1 -oP "\d+.\d+.\d+(\w*)")
+if [[ "_$current" == "_" ]]; then
+  echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
+  exit 1;
+fi
+echo "Current version: $current"
+
+### Get repo URL
+PROJECT_NAME=cesium
+REPO="duniter/cesium"
+REPO_API_URL="https://api.github.com/repos/${REPO}"
+REPO_PUBLIC_URL="https://github.com/${REPO}"
+
+###  get auth token
+GITHUB_TOKEN=$(cat ~/.config/${PROJECT_NAME}/.github)
+if [[ "_$GITHUB_TOKEN" != "_" ]]; then
+    GITHUT_AUTH="Authorization: token $GITHUB_TOKEN"
+else
+    echo "ERROR: Unable to find github authentication token file: "
+    echo " - You can create such a token at https://github.com/settings/tokens > 'Generate a new token'."
+    echo " - Then copy the token and paste it in the file '~/.config/${PROJECT_NAME}/.github' using a valid token."
+    exit 1
+fi
+
+case "$1" in
+  del)
+    result=$(curl -i "$REPO_API_URL/releases/tags/v$current")
+    release_url=$(echo "$result" | grep -P "\"url\": \"[^\"]+"  | grep -oP "$REPO_API_URL/releases/\d+")
+    if [[ $release_url != "" ]]; then
+        echo "Deleting existing release..."
+        curl -H 'Authorization: token $GITHUB_TOKEN'  -XDELETE $release_url
+    fi
+  ;;
+
+  pre|rel)
+    if [[ "_$2" != "_" ]]; then
+
+      if [[ $1 = "pre" ]]; then
+        prerelease="true"
+      else
+        prerelease="false"
+      fi
+
+      description=$(echo $2)
+      if [[ "_$description" = "_" ]]; then
+          description="Release v$current"
+      fi
+
+      result=$(curl -s -H ''"$GITHUT_AUTH"'' "$REPO_API_URL/releases/tags/v$current")
+      release_url=$(echo "$result" | grep -P "\"url\": \"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+/releases/\d+")
+      if [[ "_$release_url" != "_" ]]; then
+        echo "Deleting existing release... $release_url"
+        result=$(curl -H ''"$GITHUT_AUTH"'' -s -XDELETE $release_url)
+        if [[ "_$result" != "_" ]]; then
+            error_message=$(echo "$result" | grep -P "\"message\": \"[^\"]+" | grep -oP ": \"[^\"]+\"")
+            echo "Delete existing release failed with error$error_message"
+            exit 1
+        fi
+      else
+        echo "Release not exists yet on github."
+      fi
+
+      echo "Creating new release..."
+      echo " - tag: v$current"
+      echo " - description: $description"
+      result=$(curl -H ''"$GITHUT_AUTH"'' -s $REPO_API_URL/releases -d '{"tag_name": "v'"$current"'","target_commitish": "master","name": "'"$current"'","body": "'"$description"'","draft": false,"prerelease": '"$prerelease"'}')
+      #echo "DEBUG - $result"
+      upload_url=$(echo "$result" | grep -P "\"upload_url\": \"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
+
+      if [[ "_$upload_url" = "_" ]]; then
+        echo "Failed to create new release for repo $REPO."
+        echo "Server response:"
+        echo "$result"
+        exit 1
+      fi
+
+      ###  Sending files
+      echo "Uploading files to ${upload_url} ..."
+      dirname=$(pwd)
+
+      ZIP_FILE="$dirname/dist/web/build/${PROJECT_NAME}-v$current-web.zip"
+      if [[ -f "${ZIP_FILE}" ]]; then
+        result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/zip' -T "${ZIP_FILE}" "${upload_url}?name=${PROJECT_NAME}-v${current}-web.zip")
+        browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
+        ZIP_SHA256=$(sha256sum "${ZIP_FILE}")
+        echo " - ${browser_download_url}  | SHA256 Checksum: ${ZIP_SHA256}"
+      else
+        echo " - ERROR: Web release (ZIP) not found! Skipping."
+      fi
+
+      APK_FILE="${dirname}/platforms/android/build/outputs/apk/release/android-release.apk"
+      if [[ -f "${APK_FILE}" ]]; then
+        result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/vnd.android.package-archive' -T "${APK_FILE}" "${upload_url}?name=${PROJECT_NAME}-v${current}-android.apk")
+        browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+"  | grep -oP "https://[A-Za-z0-9/.-]+")
+        APK_SHA256=$(sha256sum "${APK_FILE}")
+        echo " - ${browser_download_url}  | SHA256 Checksum: ${APK_SHA256}"
+      else
+        echo "- ERROR: Android release (APK) not found! Skipping."
+      fi
+
+      echo "-----------------------------------------"
+      echo "Successfully uploading files !"
+      echo " -> Release url: ${REPO_PUBLIC_URL}/releases/tag/v${current}"
+      exit 0
+    else
+      echo "Wrong arguments"
+      echo "Usage:"
+      echo " > ./github.sh del|pre|rel <release_description>"
+      echo "With:"
+      echo " - del: delete existing release"
+      echo " - pre: use for pre-release"
+      echo " - rel: for full release"
+      exit 1
+    fi
+    ;;
+  *)
+    echo "No task given"
+    exit 1
+    ;;
+esac
diff --git a/www/js/config.js b/www/js/config.js
index ac7a5cfd2da897a7eb28a09bfe7d75e2abcb933b..f7e02d5647183717532d4a9c165222337286760d 100644
--- a/www/js/config.js
+++ b/www/js/config.js
@@ -94,7 +94,7 @@ angular.module("cesium.config", [])
 		}
 	},
 	"version": "1.4.15",
-	"build": "2019-12-27T19:18:15.352Z",
+	"build": "2019-12-27T19:18:59.204Z",
 	"newIssueUrl": "https://git.duniter.org/clients/cesium-grp/cesium/issues/new"
 })