diff --git a/package.json b/package.json
index 971fd74..03a2a88 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
     "make-link": "node --no-warnings ./scripts/make_dev_link.js",
     "make-link-win": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File ./scripts/elevate.ps1 -scriptPath ./scripts/make_dev_link.js",
     "dev": "vite build --watch",
+    "update-version": "node --no-warnings ./scripts/update_version.js",
     "build": "vite build",
     "make-install": "vite build && node --no-warnings ./scripts/make_install.js"
   },
diff --git a/scripts/update_version.js b/scripts/update_version.js
new file mode 100644
index 0000000..775c98a
--- /dev/null
+++ b/scripts/update_version.js
@@ -0,0 +1,141 @@
+// const fs = require('fs');
+// const path = require('path');
+// const readline = require('readline');
+import fs from 'node:fs';
+import path from 'node:path';
+import readline from 'node:readline';
+
+// Utility to read JSON file
+function readJsonFile(filePath) {
+    return new Promise((resolve, reject) => {
+        fs.readFile(filePath, 'utf8', (err, data) => {
+            if (err) return reject(err);
+            try {
+                const jsonData = JSON.parse(data);
+                resolve(jsonData);
+            } catch (e) {
+                reject(e);
+            }
+        });
+    });
+}
+
+// Utility to write JSON file
+function writeJsonFile(filePath, jsonData) {
+    return new Promise((resolve, reject) => {
+        fs.writeFile(filePath, JSON.stringify(jsonData, null, 2), 'utf8', (err) => {
+            if (err) return reject(err);
+            resolve();
+        });
+    });
+}
+
+// Utility to prompt the user for input
+function promptUser(query) {
+    const rl = readline.createInterface({
+        input: process.stdin,
+        output: process.stdout
+    });
+    return new Promise((resolve) => rl.question(query, (answer) => {
+        rl.close();
+        resolve(answer);
+    }));
+}
+
+// Function to parse the version string
+function parseVersion(version) {
+    const [major, minor, patch] = version.split('.').map(Number);
+    return { major, minor, patch };
+}
+
+// Function to auto-increment version parts
+function incrementVersion(version, type) {
+    let { major, minor, patch } = parseVersion(version);
+
+    switch (type) {
+        case 'major':
+            major++;
+            minor = 0;
+            patch = 0;
+            break;
+        case 'minor':
+            minor++;
+            patch = 0;
+            break;
+        case 'patch':
+            patch++;
+            break;
+        default:
+            break;
+    }
+
+    return `${major}.${minor}.${patch}`;
+}
+
+// Main script
+(async function () {
+    try {
+        const pluginJsonPath = path.join(process.cwd(), 'plugin.json');
+        const packageJsonPath = path.join(process.cwd(), 'package.json');
+
+        // Read both JSON files
+        const pluginData = await readJsonFile(pluginJsonPath);
+        const packageData = await readJsonFile(packageJsonPath);
+
+        // Get the current version from both files (assuming both have the same version)
+        const currentVersion = pluginData.version || packageData.version;
+        console.log(`\n🌟  Current version: \x1b[36m${currentVersion}\x1b[0m\n`);
+
+        // Calculate potential new versions for auto-update
+        const newPatchVersion = incrementVersion(currentVersion, 'patch');
+        const newMinorVersion = incrementVersion(currentVersion, 'minor');
+        const newMajorVersion = incrementVersion(currentVersion, 'major');
+
+        // Prompt the user with formatted options
+        console.log('šŸ”„  How would you like to update the version?\n');
+        console.log(`   1ļøāƒ£  Auto update \x1b[33mpatch\x1b[0m version   (new version: \x1b[32m${newPatchVersion}\x1b[0m)`);
+        console.log(`   2ļøāƒ£  Auto update \x1b[33mminor\x1b[0m version   (new version: \x1b[32m${newMinorVersion}\x1b[0m)`);
+        console.log(`   3ļøāƒ£  Auto update \x1b[33mmajor\x1b[0m version   (new version: \x1b[32m${newMajorVersion}\x1b[0m)`);
+        console.log(`   4ļøāƒ£  Input version \x1b[33mmanually\x1b[0m`);
+        // Press 0 to skip version update
+        console.log('   0ļøāƒ£  Quit without updating\n');
+
+        const updateChoice = await promptUser('šŸ‘‰  Please choose (1/2/3/4): ');
+
+        let newVersion;
+
+        switch (updateChoice.trim()) {
+            case '1':
+                newVersion = newPatchVersion;
+                break;
+            case '2':
+                newVersion = newMinorVersion;
+                break;
+            case '3':
+                newVersion = newMajorVersion;
+                break;
+            case '4':
+                newVersion = await promptUser('āœļø  Please enter the new version (in a.b.c format): ');
+                break;
+            case '0':
+                console.log('\nšŸ›‘  Skipping version update.');
+                return;
+            default:
+                console.log('\nāŒ  Invalid option, no version update.');
+                return;
+        }
+
+        // Update the version in both plugin.json and package.json
+        pluginData.version = newVersion;
+        packageData.version = newVersion;
+
+        // Write the updated JSON back to files
+        await writeJsonFile(pluginJsonPath, pluginData);
+        await writeJsonFile(packageJsonPath, packageData);
+
+        console.log(`\nāœ…  Version successfully updated to: \x1b[32m${newVersion}\x1b[0m\n`);
+
+    } catch (error) {
+        console.error('āŒ  Error:', error);
+    }
+})();