diff --git a/.github/workflows/AppRun b/.github/workflows/AppRun
new file mode 100644
index 000000000..01d3d17c0
--- /dev/null
+++ b/.github/workflows/AppRun
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+mkdir -p $HOME/.local/share/icons/hicolor/scalable/apps && cp $APPDIR/yuzu.svg $HOME/.local/share/icons/hicolor/scalable/apps
+
+GITVER=`wget -qO- https://www.github.com/pineappleEA/pineapple-src/releases/tag/continuous | grep pineappleEA/pineapple-src/commit/ | cut -d '"' -f 2 | cut -d '/' -f 5 | awk '!x[$0]++'` 
+APPVER=`cat $APPDIR/version.txt`
+
+if [ "$GITVER" = "$APPVER" ]; then
+	$APPDIR/usr/bin/yuzu
+else
+	$APPDIR/update.sh
+fi
diff --git a/.github/workflows/appimage.sh b/.github/workflows/appimage.sh
new file mode 100644
index 000000000..73ee8a47c
--- /dev/null
+++ b/.github/workflows/appimage.sh
@@ -0,0 +1,71 @@
+#!/bin/bash -ex
+
+BUILDBIN=/yuzu/build/bin
+BINFILE=yuzu-x86_64.AppImage
+LOG_FILE=$HOME/curl.log
+BRANCH=`echo ${GITHUB_REF##*/}`
+
+# QT 5.14.2
+# source /opt/qt514/bin/qt514-env.sh
+QT_BASE_DIR=/opt/qt514
+export QTDIR=$QT_BASE_DIR
+export PATH=$QT_BASE_DIR/bin:$PATH
+export LD_LIBRARY_PATH=$QT_BASE_DIR/lib/x86_64-linux-gnu:$QT_BASE_DIR/lib:$LD_LIBRARY_PATH
+export PKG_CONFIG_PATH=$QT_BASE_DIR/lib/pkgconfig:$PKG_CONFIG_PATH
+
+cd /tmp
+	curl -sLO "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
+	curl -sLO "https://github.com/$GITHUB_REPOSITORY/raw/$BRANCH/.github/workflows/update.tar.gz"
+	tar -xzf update.tar.gz
+	chmod a+x linuxdeployqt*.AppImage
+./linuxdeployqt-continuous-x86_64.AppImage --appimage-extract
+cd $HOME
+mkdir -p squashfs-root/usr/bin
+cp -P "$BUILDBIN"/yuzu $HOME/squashfs-root/usr/bin/
+
+curl -sL https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$BRANCH/dist/yuzu.svg -o ./squashfs-root/yuzu.svg
+curl -sL https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$BRANCH/dist/yuzu.desktop -o ./squashfs-root/yuzu.desktop
+curl -sL https://github.com/AppImage/AppImageKit/releases/download/continuous/runtime-x86_64 -o ./squashfs-root/runtime
+mkdir -p squashfs-root/usr/share/applications && cp ./squashfs-root/yuzu.desktop ./squashfs-root/usr/share/applications
+mkdir -p squashfs-root/usr/share/icons && cp ./squashfs-root/yuzu.svg ./squashfs-root/usr/share/icons
+mkdir -p squashfs-root/usr/share/icons/hicolor/scalable/apps && cp ./squashfs-root/yuzu.svg ./squashfs-root/usr/share/icons/hicolor/scalable/apps
+mkdir -p squashfs-root/usr/share/pixmaps && cp ./squashfs-root/yuzu.svg ./squashfs-root/usr/share/pixmaps
+curl -sL "https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$BRANCH/.github/workflows/update.sh" -o $HOME/squashfs-root/update.sh
+chmod a+x ./squashfs-root/runtime
+chmod a+x ./squashfs-root/update.sh
+#cp /tmp/libssl.so.47 /tmp/libcrypto.so.45 /usr/lib/x86_64-linux-gnu/
+
+echo $GITHUB_SHA > $HOME/squashfs-root/version.txt
+
+unset QT_PLUGIN_PATH
+unset LD_LIBRARY_PATH
+unset QTDIR
+
+mkdir $HOME/artifacts/
+mkdir -p /yuzu/artifacts/version
+# Version AppImage
+curl -sL https://github.com/AppImage/AppImageKit/releases/download/continuous/AppRun-x86_64 -o $HOME/squashfs-root/AppRun
+chmod a+x ./squashfs-root/AppRun
+# /tmp/squashfs-root/AppRun $HOME/squashfs-root/usr/bin/yuzu -appimage -unsupported-allow-new-glibc -no-copy-copyright-files -no-translations -bundle-non-qt-libs
+/tmp/squashfs-root/AppRun $HOME/squashfs-root/usr/bin/yuzu -unsupported-allow-new-glibc -no-copy-copyright-files -no-translations -bundle-non-qt-libs
+export PATH=$(readlink -f /tmp/squashfs-root/usr/bin/):$PATH
+/tmp/squashfs-root/usr/bin/appimagetool $HOME/squashfs-root
+version=$(cat /yuzu/README.md | grep -o 'early-access [[:digit:]]*' | cut -c 14-17) 
+mv ./yuzu-x86_64.AppImage /yuzu/artifacts/version/Yuzu-EA-$version.AppImage
+
+# Continuous AppImage
+rm $HOME/squashfs-root/AppRun
+curl -sL "https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$BRANCH/.github/workflows/AppRun" -o $HOME/squashfs-root/AppRun
+chmod a+x ./squashfs-root/AppRun
+mv /tmp/update/AppImageUpdate $HOME/squashfs-root/usr/bin/
+mv /tmp/update/* $HOME/squashfs-root/usr/lib/
+/tmp/squashfs-root/usr/bin/appimagetool $HOME/squashfs-root -u "gh-releases-zsync|pineappleEA|pineapple-src|continuous|yuzu-x86_64.AppImage.zsync"
+
+mv yuzu-x86_64.AppImage* /yuzu/artifacts
+
+cp -R $HOME/artifacts/ /yuzu/
+cp "$BUILDBIN"/yuzu /yuzu/artifacts/version/
+chmod -R 777 /yuzu/artifacts
+cd /yuzu/artifacts
+ls -al /yuzu/artifacts/
+ls -al /yuzu/artifacts/version
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..a34f7ddd0
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,39 @@
+name: AppImage
+
+on: push
+
+jobs:
+  appimage:
+    name: pineapple bundled as appimage
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v2
+
+      - name: cache
+        uses: actions/cache@v2
+        with:
+          path: $HOME/.ccache
+          key: build-ccache
+          restore-keys: |
+            build-ccache
+      - name: Build binary
+        run: |
+              mkdir -p "$HOME/.ccache"
+              docker pull quriouspixel/yuzu:latest
+              docker run -u root -e ENABLE_COMPATIBILITY_REPORTING --env-file .github/workflows/docker.env -v $(pwd):/yuzu -v "$HOME/.ccache":/root/.ccache quriouspixel/yuzu:latest /bin/bash /yuzu/.github/workflows/docker.sh
+      - name: Package AppImage
+        run:  echo "Success!"
+      - name: Upload AppImage
+        run: |
+            ls -al artifacts/
+            wget -c https://github.com/tcnksm/ghr/releases/download/v0.13.0/ghr_v0.13.0_linux_amd64.tar.gz
+            tar xfv ghr_v0.13.0_linux_amd64.tar.gz      
+            version=$(ls artifacts/version |grep Yuzu-EA | cut -d "-" -f 3 | cut -d "." -f 1) 
+            ghr_v0.13.0_linux_amd64/ghr -recreate -n 'Continous build' -b "GitHub https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" continuous artifacts/
+            ghr_v0.13.0_linux_amd64/ghr -recreate -n "Continuous build (EA-$version)" -b "GitHub https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" EA-$version artifacts/version/
+    
+        env:
+          DEFAULT_BRANCH: main
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/docker.env b/.github/workflows/docker.env
new file mode 100644
index 000000000..3d63914b8
--- /dev/null
+++ b/.github/workflows/docker.env
@@ -0,0 +1,9 @@
+GITHUB_REF
+GITHUB_RUN_ID
+GITHUB_REPOSITORY
+GITHUB_SHA
+GITHUB_WORKSPACE
+
+# yuzu specific flags
+ENABLE_COMPATIBILITY_REPORTING
+USE_DISCORD_PRESENCE
diff --git a/.github/workflows/docker.sh b/.github/workflows/docker.sh
new file mode 100644
index 000000000..c2df5040f
--- /dev/null
+++ b/.github/workflows/docker.sh
@@ -0,0 +1,22 @@
+#!/bin/bash -ex
+
+BRANCH=`echo ${GITHUB_REF##*/}`
+
+ver=$(cat /yuzu/README.md | grep -o 'early-access [[:digit:]]*' | cut -c 14-17)
+title="yuzu Early Access $ver"
+
+
+yuzupatch=( $(ls -d patches/* ) )
+for i in "${yuzupatch[@]}"; do patch -p1 < "$i"; done
+
+mkdir build && cd build 
+
+cmake .. -G Ninja -DCMAKE_CXX_FLAGS="-W" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DTITLE_BAR_FORMAT_IDLE="$title" -DTITLE_BAR_FORMAT_RUNNING="$title | {3}" -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DGIT_BRANCH="HEAD" -DGIT_DESC="$msvc" -DUSE_DISCORD_PRESENCE=ON
+
+ninja
+
+
+cd /tmp
+curl -sLO "https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$BRANCH/.github/workflows/appimage.sh"
+chmod a+x appimage.sh
+./appimage.sh
diff --git a/.github/workflows/update.sh b/.github/workflows/update.sh
new file mode 100644
index 000000000..530838d35
--- /dev/null
+++ b/.github/workflows/update.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+zenity --question --timeout=10 --title="yuzu updater" --text="New update available. Update now?" --icon-name=yuzu --window-icon=yuzu.svg --height=80 --width=400
+answer=$?
+
+if [ "$answer" -eq 0 ]; then 
+	$APPDIR/usr/bin/AppImageUpdate $PWD/yuzu-x86_64.AppImage
+elif [ "$answer" -eq 1 ]; then
+	$APPDIR/usr/bin/yuzu
+elif [ "$answer" -eq 5 ]; then
+	$APPDIR/usr/bin/yuzu
+fi
+exit 0
diff --git a/.github/workflows/update.tar.gz b/.github/workflows/update.tar.gz
new file mode 100644
index 000000000..003952a53
Binary files /dev/null and b/.github/workflows/update.tar.gz differ
diff --git a/patches/fixvideocorewarns.patch b/patches/fixvideocorewarns.patch
new file mode 100644
index 000000000..42fc131f9
--- /dev/null
+++ b/patches/fixvideocorewarns.patch
@@ -0,0 +1,21 @@
+--- a/src/video_core/CMakeLists.txt
++++ b/src/video_core/CMakeLists.txt
+@@ -299,7 +299,6 @@
+         /we4457 # Declaration of 'identifier' hides function parameter
+         /we4458 # Declaration of 'identifier' hides class member
+         /we4459 # Declaration of 'identifier' hides global declaration
+-        /we4715 # 'function' : not all control paths return a value
+     )
+ else()
+     target_compile_options(video_core PRIVATE
+@@ -307,10 +305,8 @@
+         -Werror=shadow
+         -Werror=switch
+         -Werror=type-limits
+-        -Werror=unused-variable
+ 
+         $<$<CXX_COMPILER_ID:GNU>:-Werror=class-memaccess>
+         $<$<CXX_COMPILER_ID:GNU>:-Werror=unused-but-set-parameter>
+-        $<$<CXX_COMPILER_ID:GNU>:-Werror=unused-but-set-variable>
+     )
+ endif()