diff --git a/src-tauri/src/core/mod.rs b/src-tauri/src/core/mod.rs
index 319857bc1..d2bc839ff 100644
--- a/src-tauri/src/core/mod.rs
+++ b/src-tauri/src/core/mod.rs
@@ -9,7 +9,8 @@ pub mod service;
pub mod sysopt;
pub mod timer;
pub mod tray;
+pub mod updater;
pub mod validate;
pub mod win_uwp;
-pub use self::{manager::CoreManager, timer::Timer};
+pub use self::{manager::CoreManager, timer::Timer, updater::SilentUpdater};
diff --git a/src-tauri/src/core/updater.rs b/src-tauri/src/core/updater.rs
new file mode 100644
index 000000000..10446d3c5
--- /dev/null
+++ b/src-tauri/src/core/updater.rs
@@ -0,0 +1,520 @@
+use crate::{config::Config, singleton, utils::dirs};
+use anyhow::Result;
+use chrono::Utc;
+use clash_verge_logging::{Type, logging};
+use parking_lot::RwLock;
+use serde::{Deserialize, Serialize};
+use std::{
+ path::PathBuf,
+ sync::atomic::{AtomicBool, Ordering},
+};
+use tauri_plugin_updater::{Update, UpdaterExt as _};
+
+pub struct SilentUpdater {
+ update_ready: AtomicBool,
+ pending_bytes: RwLock