diff --git a/libre b/libre
new file mode 100755
index 0000000000000000000000000000000000000000..4d0a16f4b0ba741dfe235fc5221a0ba3c3670e29
--- /dev/null
+++ b/libre
@@ -0,0 +1,94 @@
+#!/bin/bash
+export NS=`pwd | rev | cut -d'/' -f 2 | rev | sed 's/\./-/'`
+export DOMAIN=`pwd | rev | cut -d'/' -f 2 | rev`
+export SUBDOMAIN=`pwd | rev | cut -d'/' -f 1 | rev`
+export FQDN=${SUBDOMAIN}-${NS}
+export FQDN_DOTS=${SUBDOMAIN}.`echo $DOMAIN | sed 's/\(.*\)-/\1./'`
+export PG_DOMAIN=$NS
+export EPOCH=`date "+%s"`
+export NUAGE_URL=`kubectl -n $NS get ing -o custom-columns=HOST:spec.rules[*].host --selector=app.kubernetes.io/name=nextcloud --no-headers=true`
+export BUCKET=${FQDN}
+
+export S3_SECRET=${NS}-dumps
+
+for key in `kubectl -n ${NS} get secrets ${S3_SECRET} -o json | jq -r '.data | keys | .[]'`; do
+  #echo "loading $key into env..."
+  export $key=`kubectl -n ${NS} get secrets ${S3_SECRET} -o json | jq -r ".data.$key" | base64 -d`
+  #echo "done."
+done
+
+
+function show_usage {
+  echo "Usage:"
+  echo " - apply"
+  echo " - diff"
+  echo " - update"
+  echo " - changens"
+  exit 1
+}
+
+if [ $# -eq 0 ]; then
+  show_usage
+fi
+
+export VERSION=stable
+source ./.env
+if [ "${APP}" = "nextcloud" ]; then
+  if [ "${VERSION}" = "alpha" ]; then
+    #cat ./version.php | grep 'array(' | cut -d\( -f2 | cut -d\) -f1 | sed 's/,/\./g'
+    export NC_VERSION=21.0.2.1
+    export NC_IMAGE_TAG=21.0.2-2021-07-06
+    export NC_WEB_IMAGE_TAG=21.0.2-web-2021-07-06
+  else
+    export NC_VERSION=20.0.11.1
+    export NC_IMAGE_TAG=20.0.11-2021-08-03
+    export NC_WEB_IMAGE_TAG=20.0.11-web-2021-08-03
+  fi
+fi
+
+create_update_job_nc () {
+  if [ "${APP}" = "nextcloud" ]; then
+    kubectl -n $NS delete job update-nc
+    libre apply ../../common/nextcloud/other-manifests/update-job.yml
+  fi
+}
+
+case "$1" in
+  apply|diff)
+    if [ -z "$2" ]; then
+      manifest="../../common/$APP/manifests/app.yml"
+      if [ -f "$manifest" ]; then
+        cat "${manifest}" | envsubst '$BUCKET $NC_VERSION $NC_IMAGE_TAG $NC_WEB_IMAGE_TAG $ALLOWED_HOSTS $NS $EPOCH $NUAGE_URL $PG_DOMAIN $DOMAIN $SUBDOMAIN $FQDN $FQDN_DOTS $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY'| /home/deploy/libre-cli -t - | kubectl -n ${NS} $1 -f -
+      else
+        echo "Manifest $manifest not found"
+        exit
+      fi
+    else
+      cat "${@:2}" | envsubst '$BUCKET $NC_VERSION $NC_IMAGE_TAG $NC_WEB_IMAGE_TAG $ALLOWED_HOSTS $NS $EPOCH $NUAGE_URL $PG_DOMAIN $DOMAIN $SUBDOMAIN $FQDN $FQDN_DOTS $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY'| /home/deploy/libre-cli -t - | kubectl -n ${NS} $1 -f -
+    fi;;
+  update)
+    echo $FQDN_DOTS 
+    libre diff > /tmp/diff
+    retVal=$? # returns 1 if diff
+    if [ $retVal -ne 0 ]; then # if diff
+      if [ "$2" = "--batch" ]; then
+        cat /tmp/diff | grep -v "value:\|image\|generation\|+++\|---\|@@\|diff" | grep "^+\|^-"
+        retVal=$? # returns 1 if grep
+        if [ $retVal -ne 1 ]; then
+          read -p "Ctrl-c to not apply the diff"
+        fi 
+      else
+        cat /tmp/diff
+        read -p "Ctrl-c to not apply the diff"
+      fi
+      libre apply
+      create_update_job_nc
+    else
+      echo "Nothing to update, good job!"
+    fi;;
+  changens)
+    kubens $NS;;
+  *)
+    show_usage
+esac
+