diff --git a/src-tauri/src/cmds.rs b/src-tauri/src/cmds.rs
index 9e9749f92fd03889518dd4ec0f482c2e9173d750..33de5e67a1b54947daa884494b272765a0cca39e 100644
--- a/src-tauri/src/cmds.rs
+++ b/src-tauri/src/cmds.rs
@@ -202,6 +202,13 @@ pub fn open_app_dir() -> CmdResult<()> {
     wrap_err!(open::that(app_dir))
 }
 
+#[tauri::command]
+pub fn open_core_dir() -> CmdResult<()> {
+    let core_dir = wrap_err!(tauri::utils::platform::current_exe())?;
+    let core_dir = core_dir.parent().ok_or(format!("failed to get core dir"))?;
+    wrap_err!(open::that(core_dir))
+}
+
 #[tauri::command]
 pub fn open_logs_dir() -> CmdResult<()> {
     let log_dir = wrap_err!(dirs::app_logs_dir())?;
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index abe0e7d77f504481d5fc3819547f21815f800483..a3ff8665d55f2fca3642359303d4ca10b7f0d5f0 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -33,6 +33,7 @@ fn main() -> std::io::Result<()> {
             cmds::open_app_dir,
             cmds::open_logs_dir,
             cmds::open_web_url,
+            cmds::open_core_dir,
             // cmds::kill_sidecar,
             cmds::restart_sidecar,
             // clash
diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx
index 7cf83131776acfe90cfdef52e4286563545ad097..ed43fa5c2aaa8761b59eb9664f5d0500cf0c167c 100644
--- a/src/components/setting/setting-verge.tsx
+++ b/src/components/setting/setting-verge.tsx
@@ -7,7 +7,7 @@ import {
   Switch,
   Typography,
 } from "@mui/material";
-import { openAppDir, openLogsDir, patchVergeConfig } from "@/services/cmds";
+import { openAppDir, openCoreDir, openLogsDir } from "@/services/cmds";
 import { ArrowForward } from "@mui/icons-material";
 import { useVerge } from "@/hooks/use-verge";
 import { version } from "@root/package.json";
@@ -94,7 +94,7 @@ const SettingVerge = ({ onError }: Props) => {
           onCatch={onError}
           onFormat={onSwitchFormat}
           onChange={(e) => onChangeData({ traffic_graph: e })}
-          onGuard={(e) => patchVergeConfig({ traffic_graph: e })}
+          onGuard={(e) => patchVerge({ traffic_graph: e })}
         >
           <Switch edge="end" />
         </GuardState>
@@ -155,6 +155,17 @@ const SettingVerge = ({ onError }: Props) => {
         </IconButton>
       </SettingItem>
 
+      <SettingItem label={t("Open Core Dir")}>
+        <IconButton
+          color="inherit"
+          size="small"
+          sx={{ my: "2px" }}
+          onClick={openCoreDir}
+        >
+          <ArrowForward />
+        </IconButton>
+      </SettingItem>
+
       <SettingItem label={t("Open Logs Dir")}>
         <IconButton
           color="inherit"
diff --git a/src/locales/en.json b/src/locales/en.json
index 9c139c9ebb2ad5c48b38dcf2564f2549068525ea..93111e2fc1b3d359f66348b0f43e36297650b817 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -78,6 +78,7 @@
   "Traffic Graph": "Traffic Graph",
   "Language": "Language",
   "Open App Dir": "Open App Dir",
+  "Open Core Dir": "Open Core Dir",
   "Open Logs Dir": "Open Logs Dir",
   "Verge Version": "Verge Version",
   "theme.light": "Light",
diff --git a/src/locales/zh.json b/src/locales/zh.json
index d836e5c01bba936e702e74cb3f75086e88cce3e7..25a621228027b683131538a5f2eeb88b83bb274b 100644
--- a/src/locales/zh.json
+++ b/src/locales/zh.json
@@ -82,6 +82,7 @@
   "Traffic Graph": "流量图显",
   "Language": "语言设置",
   "Open App Dir": "应用目录",
+  "Open Core Dir": "内核目录",
   "Open Logs Dir": "日志目录",
   "Verge Version": "应用版本",
   "theme.light": "浅色",
diff --git a/src/services/cmds.ts b/src/services/cmds.ts
index 9bed83e9607719316419b0683d1616a704826f7a..d6bbca530b1681c583b1a02b4700cd62feaa836b 100644
--- a/src/services/cmds.ts
+++ b/src/services/cmds.ts
@@ -133,6 +133,12 @@ export async function openAppDir() {
   );
 }
 
+export async function openCoreDir() {
+  return invoke<void>("open_core_dir").catch((err) =>
+    Notice.error(err?.message || err.toString(), 1500)
+  );
+}
+
 export async function openLogsDir() {
   return invoke<void>("open_logs_dir").catch((err) =>
     Notice.error(err?.message || err.toString(), 1500)