diff --git a/.gitignore b/.gitignore
index 564cdcf..f511669 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,7 @@
 
 # Auto-generated files
 node_modules
-/db
\ No newline at end of file
+
+# User configuration
+/db
+/config/config.js
diff --git a/config/config.sample.js b/config/config.sample.js
new file mode 100644
index 0000000..71c607a
--- /dev/null
+++ b/config/config.sample.js
@@ -0,0 +1,15 @@
+module.exports = {
+	/*
+	  Copy this file to `config.js`, and add options here.
+	  They'll override the options from `utils/constants.js`.
+	  For example, uncommenting the next block would change the default instance.
+	*/
+
+	/*
+	user_settings: {
+		instance: {
+			default: "https://example.com"
+		}
+	}
+	*/
+}
diff --git a/package-lock.json b/package-lock.json
index 53fcb93..74f9c75 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -442,6 +442,11 @@
         "minipass": "^2.9.0"
       }
     },
+    "mixin-deep": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-2.0.1.tgz",
+      "integrity": "sha512-imbHQNRglyaplMmjBLL3V5R6Bfq5oM+ivds3SKgc6oRtzErEnBUUc5No11Z2pilkUvl42gJvi285xTNswcKCMA=="
+    },
     "mkdirp": {
       "version": "0.5.5",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
diff --git a/package.json b/package.json
index e096af5..a29e840 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
     "better-sqlite3": "^7.1.0",
     "cookie": "^0.4.1",
     "denque": "^1.4.1",
+    "mixin-deep": "^2.0.1",
     "node-fetch": "^2.6.0",
     "pinski": "git+https://git.sr.ht/~cadence/nodejs-pinski#04cd72482574f689b78670b7f2b80209f5449a21"
   }
diff --git a/utils/constants.js b/utils/constants.js
index fae1253..e8d367e 100644
--- a/utils/constants.js
+++ b/utils/constants.js
@@ -1,4 +1,6 @@
-const constants = {
+const mixin = require("mixin-deep")
+
+let constants = {
 	user_settings: {
 		instance: {
 			type: "string",
@@ -34,4 +36,11 @@ const constants = {
 	}
 }
 
+try {
+	const overrides = require("../config/config.js")
+	constants = mixin(constants, overrides)
+} catch (e) {
+	console.log("Note: overrides file `config/config.js` ignored, file not found.")
+}
+
 module.exports = constants