diff --git a/.github/workflows/offline_bundle.yml b/.github/workflows/offline_bundle.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4e29d5daa1a47f77f989d22a2ae5dc69bbcc0e41
--- /dev/null
+++ b/.github/workflows/offline_bundle.yml
@@ -0,0 +1,49 @@
+name: Offline Bundle
+
+on:
+  push:
+    branches: [main]
+  release:
+    types: [published]
+  schedule:
+    - cron:  '0 0 1 * *'
+
+jobs:
+  Bundle:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Move files
+        run: |
+          sudo mkdir /srv/PVEDD &&
+          sudo chown $USER:$USER /srv/PVEDD &&
+          cp $GITHUB_WORKSPACE/PVEDiscordDark.sh /srv/PVEDD/ &&
+          mkdir /srv/PVEDD/offline &&
+          cp -r $GITHUB_WORKSPACE/meta /srv/PVEDD/offline &&
+          mkdir /srv/PVEDD/offline/PVEDiscordDark &&
+          cp -r $GITHUB_WORKSPACE/PVEDiscordDark/images /srv/PVEDD/offline/PVEDiscordDark/ &&
+          cp -r $GITHUB_WORKSPACE/PVEDiscordDark/js /srv/PVEDD/offline/PVEDiscordDark/ &&
+          mkdir /srv/PVEDD/offline/PVEDiscordDark/sass
+          cp $GITHUB_WORKSPACE/PVEDiscordDark/sass/PVEDiscordDark.css /srv/PVEDD/offline/PVEDiscordDark/sass/
+      - name: Upload artifact
+        uses: actions/upload-artifact@v3
+        with:
+          name: PVEDiscordDark
+          path: /srv/PVEDD/
+      - name: Install zip
+        if: ${{ github.event_name == 'release' }}
+        uses: montudor/action-zip@v0.1.0
+      - name: Package folder
+        if: ${{ github.event_name == 'release' }}
+        run: zip -qq -r PVEDiscordDark.zip PVEDiscordDark.sh offline
+        working-directory: /srv/PVEDD
+      - name: Upload to release
+        if:  ${{ github.event_name == 'release' }}
+        uses: actions/upload-release-asset@v1
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ github.event.release.upload_url }}
+          asset_path: /srv/PVEDD/PVEDiscordDark.zip
+          asset_name: PVEDiscordDark.zip
+          asset_content_type: application/zip
\ No newline at end of file
diff --git a/README.md b/README.md
index 8e473a1b7b7f8e5ee0d470e2740f9023dfe4ba4a..94c87b4b1846fbf6f34fd664bba9153670bb31bd 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,13 @@ Furthermore, you will be able to provide the environment variables `REPO` and `T
 `REPO` is in format `Username/Repository` and defaults to `Weilbyte/PVEDiscordDark` (this repository).    
 `TAG` defaults to `master`, but it is strongly recommended to use the SHA-1 commit hash for security.
 
+## Offline bundle
+If desired, the installation utility can be run offline. Upon detecting a folder called `offline` in the current working directory, the script will enter offline mode and use the resources within that folder instead of retrieving them from GitHub.    
+
+The `offline` folder must have the following files: `meta/[imagelist, supported]`, `PVEDiscordDark/images/*`, `PVEDiscordDark/js/PVEDiscordDark.js`, `PVEDiscordDark/sass/PVEDiscordDark.css`
+
+You can find a zip containing the installer and offline folder under the artifact section of the GitHub Actions under this repository or as an asset attached to releases.
+
 ## Notes
 Thanks to [jonasled](https://github.com/jonasled) for helping out with the old version, and thanks to [SmallEngineMechanic](https://github.com/smallenginemechanic) for catching bugs for the rewrite!