diff --git a/snap/helpers/app.ini b/snap/helpers/app.ini
deleted file mode 100644
index dd7fa3c88f..0000000000
--- a/snap/helpers/app.ini
+++ /dev/null
@@ -1,66 +0,0 @@
-APP_NAME    = Gitea: Go Git Service
-RUN_USER    = root
-RUN_MODE    = prod
-CUSTOM_PATH = SNAP_DIR_DATA/custom
-
-[server]
-DOMAIN            = localhost
-PROTOCOL          = http
-HTTP_PORT         = 3001
-ROOT_URL          = http://localhost:3001/
-DISABLE_SSH       = false
-SSH_PORT          = 22
-STATIC_ROOT_PATH  = SNAP_DIR_DATA/static
-APP_DATA_PATH     = SNAP_DIR_COMMON/data
-SSH_ROOT          = SNAP_DIR_COMMON/ssh
-SSH_KEY_TEST_PATH = SNAP_DIR_DATA/sshkeytest
-
-[database]
-DB_TYPE  = sqlite3
-PATH     = SNAP_DIR_COMMON/gitea.db
-
-[repository]
-ROOT = SNAP_DIR_COMMON/repositories/data
-
-[repository.upload]
-ENABLED = true
-ALLOWED_TYPES = "image/jpeg|image/png"
-FILE_MAX_SIZE = 10
-MAX_FILES = 5
-TEMP_PATH = SNAP_DIR_COMMON/repositories/tmp
-
-[release.attachment]
-PATH = SNAP_DIR_COMMON/releases/attachments
-
-[smartypants]
-ENABLED = true
-
-[indexer]
-ISSUE_INDEXER_PATH = SNAP_DIR_COMMON/indexers/issues.bleve
-
-
-[mailer]
-ENABLED = false
-
-[service]
-REGISTER_EMAIL_CONFIRM = false
-ENABLE_NOTIFY_MAIL     = false
-DISABLE_REGISTRATION   = false
-ENABLE_CAPTCHA         = false
-REQUIRE_SIGNIN_VIEW    = false
-
-[picture]
-AVATAR_UPLOAD_PATH      = SNAP_DIR_COMMON/pictures/avatars
-DISABLE_GRAVATAR        = true
-ENABLE_FEDERATED_AVATAR = false
-
-[attachment]
-PATH = SNAP_DIR_COMMON/attachments
-
-[session]
-PROVIDER = memory
-
-[log]
-MODE      = file
-LEVEL     = Trace
-ROOT_PATH = SNAP_DIR_COMMON/log
diff --git a/snap/helpers/configuration.sh b/snap/helpers/configuration.sh
deleted file mode 100755
index 34b7fc7af4..0000000000
--- a/snap/helpers/configuration.sh
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/bash
-if snapctl get gitea.snap.custom; then
-  cdir=$(snapctl get gitea.snap.custom)
-else
-  cdir=$SNAP_COMMON
-fi
-
-cfg="$cdir/conf/app.ini"
-bak="$cdir/conf/app.ini.bak-$(date -Ins)"
-basecfg="$SNAP/snap/helpers/app.ini"
-smp="$SNAP/gitea/custom/conf/app.ini.sample"
-
-function toSnap() {
-OIFS=$IFS
-IFS='
-'
-  category="none"
-  src="$cfg"
-  [[ "$1" = "init" ]] && src="$smp"
-  [[ "$1" = "snap" ]] && src="$basecfg"
-
-  for l in $(sed 's_;\([A-Z]*\)_\1_g' $src | grep -v -e '^;' -e '^$'); do
-    if echo $l | grep -q '^[[]'; then
-      category=$(CatToSnap "$l")
-    elif echo $l | grep -q '^[A-Z]'; then
-      option=$(OptToSnap "$l")
-      value=$(ValToSnap "$l")
-      if [[ $category = "none" ]]; then
-        snapctl set "$option=$value"
-      else
-        snapctl set "$category.$option=$value"
-      fi
-    fi
-  done
-IFS=$OIFS
-}
-
-function toIni() {
-OIFS=$IFS
-IFS='
-'
-  category="none"; option="none"; catUnset=true
-  src=$smp
-  [[ -f $cfg ]] && src="$cfg"
-  tmpIni="$cfg.tmp"
-  [[ -f $src ]] && cp "$src" "$tmpIni"
-  cp $tmpIni $bak
-  echo '' > $cfg
-  for l in $(grep -v -e '^;' -e '^$' $tmpIni); do
-    if echo $l | grep -q '^[[]'; then
-      category=$(CatToSnap "$l")
-      catUnset=true
-    elif echo $l | grep -q '^[A-Z]'; then
-      option=$(OptToSnap "$l")
-      if [[ $category = "none" ]]; then
-        value=$(snapctl get $option)
-        echo $(OptToIni "$option") = $value >> $cfg
-      else
-        value=$(snapctl get $category.$option)
-        if $catUnset; then
-          echo "" >> $cfg
-          echo "[$(CatToIni "$category")]" >> $cfg
-          catUnset=false
-        fi
-        echo $(OptToIni "$option") = $value >> $cfg
-      fi
-    fi
-  done;
-  IFS=$OIFS
-}
-
-function CatToSnap {
-  ret=$(echo "$1"                             \
-         | grep -oP '[A-Za-z0-9._]+'          \
-         | sed 's|\.|-|g'                     \
-         | sed 's|_|99|g')
-  echo $ret
-}
-function OptToSnap {
-  ret=$(echo "$1"                             \
-         | grep -oP '^[A-Z_]+'                \
-         | tr '[:upper:]' '[:lower:]'         \
-         | sed 's|_|-|g')
-  echo $ret
-}
-function ValToSnap {
-  ret=$(echo "$1"                             \
-         | grep -oP '=.*$'                    \
-         | sed 's_^= __g'                     \
-         | sed 's_^=__g'                      \
-         | sed "s|SNAP_DIR_DATA|$SDATA|g"     \
-         | sed "s|SNAP_DIR_COMMON|$SCOMMON|g" \
-         | sed 's|{}||g')
-  echo $ret
-}
-
-function CatToIni {
-  ret=$(echo "$1"                             \
-         | sed 's|-|.|g'                      \
-         | sed 's|\ |_|g'                     \
-         | sed 's|99|_|g')
-  echo $ret
-}
-function OptToIni {
-  ret=$(echo "$1"                             \
-         | tr '[:lower:]' '[:upper:]'         \
-         | sed 's|-|_|g')
-  echo $ret
-}
-
-[[ "$1" = "configure" ]]             \
-  && toIni                           \
-  && exit 0
-
-[[ "$1" = "install" ]]               \
-  && echo "Initial Configuration..." \
-  && mkdir -p $SNAP_COMMON/conf      \
-  && toSnap init                     \
-  && toSnap snap                     \
-  && toIni sample                    \
-  && exit 0
-
-[[ "$1" = "save" ]]                  \
-  && echo "Saving current config..." \
-  && toSnap                          \
-  && exit 0
diff --git a/snap/helpers/simple_launcher.sh b/snap/helpers/simple_launcher.sh
deleted file mode 100755
index 8a12e3b8dd..0000000000
--- a/snap/helpers/simple_launcher.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-if ! env | grep -q root; then
-  echo "
-   +----------------------------------------+
-   | You are not running gitea as root.     |
-   | This is required for the snap package. |
-   | Please re-run as root.                 |
-   +----------------------------------------+
-"
-  $SNAP/gitea/gitea --help
-  exit 1
-fi
-
-# Set usernames for gitea
-export USERNAME=root
-export USER=root
-
-export GITEA_WORK_DIR=$(snapctl get gitea.snap.workdir)
-export GITEA_CUSTOM=$(snapctl get gitea.snap.custom)
-
-$SNAP/bin/gconfig save
-cd $SNAP/gitea; ./gitea $@
diff --git a/snap/hooks/configure b/snap/hooks/configure
deleted file mode 100755
index fd7bc3da18..0000000000
--- a/snap/hooks/configure
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-$SNAP/bin/gconfig configure
diff --git a/snap/hooks/install b/snap/hooks/install
deleted file mode 100755
index dea6c268fb..0000000000
--- a/snap/hooks/install
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/bash
-
-export SDATA=$(echo $SNAP_DATA | sed "s|$SNAP_REVISION|current|")
-export SCOMMON="$SNAP_COMMON"
-export isRoot=`true`
-snapctl set gitea.snap.workdir="$SDATA/custom"
-snapctl set gitea.snap.custom="$SCOMMON"
-
-function mkDirCommon(){
-  for dir in $@; do
-    mkdir -p "$SCOMMON/$dir"
-  done
-}
-
-function mkdirData(){
-  for dir in $@; do
-    mkdir -p "$SDATA/$dir"
-    if [ -d $SNAP/$dir ]; then
-      cp -r --preserve=mode           \
-            $SNAP/$dir/*              \
-            $SNAP/$dir/.[a-zA-Z0-9-]* \
-            $SDATA/$dir/ 2> $SCOMMON/log/snap-mkdirData.log
-    fi
-  done
-}
-
-mkDirCommon pictures           \
-            repositories       \
-            attachments        \
-            data               \
-            log
-
-mkdirData   certs              \
-            sshkeytest         \
-            custom/conf        \
-            static/templates   \
-            static/scripts     \
-            static/public
-
-[[ -f $SNAP_COMMON/conf/app.ini ]] || $SNAP/bin/gconfig install
-
-# Configure Git to use the right templates
-mkdir -p $SDATA/git/
-cp -r --preserve=mode $SNAP/usr/share/git-core/templates $SDATA/git/
-$SNAP/usr/bin/git config --global init.templateDir $SDATA/git/templates/
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index b4441805bc..b60d720370 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -6,93 +6,55 @@ description: |
   an independent binary distribution across ALL platforms that Go supports,
   including Linux, Mac OS X, Windows and ARM.
 
-type: app
 icon: public/img/gitea-lg.png
 confinement: strict
-grade: stable
+base: core18
+adopt-info: gitea
 
-version: 'git'
+environment:
+  GITEA_CUSTOM: "$SNAP_COMMON"
+  GITEA_WORK_DIR: "$SNAP_DATA"
 
 apps:
   gitea:
-    command: bin/gitea
+    command: gitea
     plugs: [network, network-bind]
   web:
-    command: bin/gitea web
+    command: gitea web
     daemon: simple
     plugs: [network, network-bind]
-  serv:
-    command: bin/gitea serv
-    plugs: [network, network-bind]
-  admin:
-    command: bin/gitea admin
-    plugs: [network, network-bind]
-  cert:
-    command: bin/gitea cert
-  hook:
-    command: bin/gitea hook
-    plugs: [network, network-bind]
   dump:
-    command: bin/gitea dump
+    command: gitea dump
     plugs: [home]
-  help:
-    command: bin/gitea --help
   version:
-    command: bin/gitea --version
+    command: gitea --version
   sqlite:
     command: usr/bin/sqlite3
 
 parts:
-  go:
-    source-tag: go1.8.3
-    prime:
-      - -*
 
   gitea:
-    plugin: nil
+    plugin: make
     source: .
-    source-type: git
-    after: [ go ]
     stage-packages: [ git, sqlite3, openssh-client ]
-    build-packages: [ libpam0g-dev, libsqlite3-dev]
-    prepare: |
-      export PATH=$SNAPCRAFT_PART_INSTALL/../../go/install/bin:$PATH
-      export GOPATH=$SNAPCRAFT_PART_INSTALL/../go
-      export bld=$SNAPCRAFT_PART_INSTALL/../build
-      export src=$SNAPCRAFT_PART_INSTALL/../src
-      mkdir -p $GOPATH/src/code.gitea.io/gitea
-      cp -r $src/* $GOPATH/src/code.gitea.io/gitea
-    build: |
-      export PATH=$SNAPCRAFT_PART_INSTALL/../go/bin/:$SNAPCRAFT_PART_INSTALL/../../go/install/bin:$PATH
-      export GOPATH=$SNAPCRAFT_PART_INSTALL/../go
-      cd $GOPATH/src/code.gitea.io/gitea
+    build-packages: [ git, libpam0g-dev, libsqlite3-dev]
+    build-snaps: [ go, node/14/stable ]
+    build-environment:
+      - LDFLAGS: ""
+    override-pull: |
+      snapcraftctl pull
+
+      version="$(git describe --always | sed -e 's/-/+git/;y/-/./')"
+      [ -n "$(echo $version | grep "+git")" ] && grade=devel || grade=stable
+      snapcraftctl set-version "$version"
+      snapcraftctl set-grade "$grade"
+
+    override-build: |
+      set -x
       TAGS="bindata sqlite sqlite_unlock_notify pam cert" make build
-    install: |
-      # Set Convenience Variables
-      src=$SNAPCRAFT_PART_INSTALL/../go/src/code.gitea.io/gitea
-      giteaBase=$SNAPCRAFT_PART_INSTALL/gitea
-      scurrent=/var/snap/$SNAPCRAFT_PROJECT_NAME/current
-      scommon=/var/snap/$SNAPCRAFT_PROJECT_NAME/common
-      # Copy build artifact and necessary files
-      mkdir -p $giteaBase/conf
-      # Workaround for gitea ignoring APP_DATA_PATH in app.ini after snap update.
-      ln -s $scurrent/custom $giteaBase/custom
-      ln -s $scommon/data $giteaBase/data
-      # Workaround for cmd/certs not knowing how to put files somewhere else
-      ln -s $scurrent/cert.pem $giteaBase/cert.pem
-      ln -s $scurrent/key.pem $giteaBase/key.pem
-      # Copy static content
-      mkdir -p $SNAPCRAFT_PART_INSTALL/static
-      cp    $src/gitea             $giteaBase/
-      cp -r $src/LICENSE \
-            $src/templates \
-            $src/public \
-            $src/scripts \
-            $SNAPCRAFT_PART_INSTALL/static/
-      cp -r $src/README.md \
-            $src/LICENSE  \
-            $src/custom \
-            $SNAPCRAFT_PART_INSTALL/
+      install -D gitea "${SNAPCRAFT_PART_INSTALL}/gitea"
+      cp -r options "${SNAPCRAFT_PART_INSTALL}/"
+
     prime:
       - -etc
       - -usr/lib/systemd
@@ -101,20 +63,7 @@ parts:
       - -usr/lib/x86_64-linux-gnu/krb5
       - -usr/share/apport
       - -usr/share/bash-completion
-      - -usr/share/doc
       - -usr/share/git-core/contrib
       - -usr/share/man
       - -usr/share/upstart
       - -var
-
-  helpers:
-    plugin: dump
-    source: snap/helpers
-    organize:
-      simple_launcher.sh: bin/gitea
-      app.ini: gitea/snapApp.ini
-      configuration.sh: bin/gconfig
-    prime:
-      - bin/gitea
-      - bin/gconfig
-      - gitea/snapApp.ini