diff --git a/package.json b/package.json
index 226fa5dd827227923215729fcec9308279e45ba4..86474dc24d124ca6cc0c75cf3dbf4fe667196a75 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
     "@fontsource/open-sans": "^4.4.5",
     "@hcaptcha/react-hcaptcha": "^0.3.6",
     "@preact/preset-vite": "^2.0.0",
+    "@rollup/plugin-replace": "^2.4.2",
     "@styled-icons/bootstrap": "^10.34.0",
     "@styled-icons/feather": "^10.34.0",
     "@styled-icons/simple-icons": "^10.33.0",
diff --git a/src/pages/settings/Settings.module.scss b/src/pages/settings/Settings.module.scss
index 2540c1c0fc1f8232e3e9d2fa351ff0389698f4e3..4f095c0ecde1216f584871c0b95f49c1a08f64ce 100644
--- a/src/pages/settings/Settings.module.scss
+++ b/src/pages/settings/Settings.module.scss
@@ -104,6 +104,10 @@
                 display: flex;
                 flex-direction: column;
             }
+
+            .revision a:hover {
+                text-decoration: underline;
+            }
         }
 
         scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
diff --git a/src/pages/settings/Settings.tsx b/src/pages/settings/Settings.tsx
index a4115c906ed0c94e112f54a3f5cb566aee6a9b76..a8713521d8c832b29ad4ced111430ae871642af4 100644
--- a/src/pages/settings/Settings.tsx
+++ b/src/pages/settings/Settings.tsx
@@ -20,6 +20,7 @@ import {
     User
 } from "@styled-icons/feather";
 import { Megaphone } from "@styled-icons/bootstrap";
+import { GIT_REVISION, REPO_URL } from "../../revision";
 import LineDivider from "../../components/ui/LineDivider";
 import RequiresOnline from "../../context/revoltjs/RequiresOnline";
 import ButtonItem from "../../components/navigation/items/ButtonItem";
@@ -142,6 +143,11 @@ export default function Settings() {
                 </ButtonItem>,
                 <div className={styles.version}>
                     <div>
+                        <span className={styles.revision}>
+                            <a href={`${REPO_URL}/${GIT_REVISION}`} target="_blank">
+                                { GIT_REVISION.substr(0, 7) }
+                            </a>
+                        </span>
                         <span>Stable {APP_VERSION}</span>
                         <span>API: {client.configuration?.revolt ?? "N/A"}</span>
                         <span>revolt.js: {LIBRARY_VERSION}</span>
diff --git a/src/revision.ts b/src/revision.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ab519af021427865bdf0bb9915aa2a1d299d4313
--- /dev/null
+++ b/src/revision.ts
@@ -0,0 +1,2 @@
+export const GIT_REVISION = '__GIT_REVISION__';
+export const REPO_URL = 'https://gitlab.insrt.uk/revolt/revite/-/commit';
diff --git a/vite.config.ts b/vite.config.ts
index 372f38d435de02caf5103f0677001cd72eca95bf..dca74704954e7ca34a317a7cff0fbd9a5330af4e 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,9 +1,24 @@
 import { resolve } from 'path'
+import { readFileSync } from 'fs'
 import { defineConfig } from 'vite'
 import preact from '@preact/preset-vite'
 import { VitePWA } from 'vite-plugin-pwa'
+import replace from '@rollup/plugin-replace'
+
+function getGitRevision() {
+  try {
+    const rev = readFileSync('.git/HEAD').toString().trim();
+    if (rev.indexOf(':') === -1) {
+      return rev;
+    } else {
+      return readFileSync('.git/' + rev.substring(5)).toString().trim();
+    }
+  } catch (err) {
+    console.error('Failed to get Git revision.');
+    return '?';
+  }
+}
 
-// https://vitejs.dev/config/
 export default defineConfig({
   plugins: [
     preact(),
@@ -31,6 +46,10 @@ export default defineConfig({
         ]
       },
       workbox: { }
+    }),
+    replace({
+      __GIT_REVISION__: getGitRevision(),
+      preventAssignment: true
     })
   ],
   build: {
diff --git a/yarn.lock b/yarn.lock
index a08e2b0489e4db207a71a570333022cd1b034b84..fbae6d6b60994eebe9481a9496cf8a244be84794 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1057,7 +1057,7 @@
     is-module "^1.0.0"
     resolve "^1.19.0"
 
-"@rollup/plugin-replace@^2.4.1":
+"@rollup/plugin-replace@^2.4.1", "@rollup/plugin-replace@^2.4.2":
   version "2.4.2"
   resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
   integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==