diff --git a/src-tauri/src/config/mod.rs b/src-tauri/src/config/mod.rs
new file mode 100644
index 0000000000000000000000000000000000000000..27a78e38f3ab70785a547a0fff5fe99b4a11f20a
--- /dev/null
+++ b/src-tauri/src/config/mod.rs
@@ -0,0 +1 @@
+pub mod verge;
diff --git a/src-tauri/src/config/verge.rs b/src-tauri/src/config/verge.rs
new file mode 100644
index 0000000000000000000000000000000000000000..726bacb3b6752f53708357b08ed910ee467e112d
--- /dev/null
+++ b/src-tauri/src/config/verge.rs
@@ -0,0 +1,41 @@
+use serde::{Deserialize, Serialize};
+
+/// Define the verge.yaml's schema
+#[derive(Default, Debug, Clone, Deserialize, Serialize)]
+pub struct VergeConfig {
+  /// current profile's name
+  pub current: Option<u32>,
+
+  /// profile list
+  pub profiles: Option<Vec<ProfileData>>,
+}
+
+#[derive(Default, Debug, Clone, Deserialize, Serialize)]
+pub struct ProfileData {
+  /// profile name
+  pub name: Option<String>,
+  /// profile file
+  pub file: Option<String>,
+  /// current mode
+  pub mode: Option<String>,
+  /// source url
+  pub url: Option<String>,
+  /// selected infomation
+  pub selected: Option<Vec<ProfileSelected>>,
+  /// user info
+  pub user_info: Option<ProfileUserInfo>,
+}
+
+#[derive(Default, Debug, Clone, Deserialize, Serialize)]
+pub struct ProfileSelected {
+  pub name: Option<String>,
+  pub now: Option<String>,
+}
+
+#[derive(Default, Debug, Clone, Copy, Deserialize, Serialize)]
+pub struct ProfileUserInfo {
+  pub upload: u64,
+  pub download: u64,
+  pub total: u64,
+  pub expire: u64,
+}