跳到內容
Tauri

Tauri 2.0 穩定版本發布

我們非常自豪地宣布 Tauri 新主要版本的穩定發布。歡迎使用 Tauri 2.0!

什麼是 Tauri?

在 Tauri 應用程式中,前端是用您最喜愛的 Web 前端堆疊編寫的。它在作業系統 WebView 內運行,並與主要以 Rust 編寫的應用程式核心進行通訊。

a graph showing the IPC bridge between the Application Core and the System's WebView

我應該何時使用 Tauri?

如果您勾選以下 **任何** 一個方框,您應該使用 Tauri

  • 您是否想要一個適用於所有平台的單一 UI 程式碼庫?
  • 您是否希望盡可能多地接觸在其平台上的使用者(例如 Windows、macOS、Linux、Android、iOS)?
  • 您是前端 Web 開發人員,並且想要編寫原生應用程式嗎?
  • 您是 Rust 開發人員,正在尋找編寫具有美觀 UI 的應用程式,並可選擇用 Rust 來完成嗎?
  • 您是否擁有現有的 Web 開發團隊,並希望以較低的預先投資擴展到原生應用程式市場?
  • 您是否擁有現有的 Rustacean 團隊,並希望所有內容都用 Rust 編寫?

a graph showing the progression of Tauri GitHub stars over the years, starting with 0 at 2019 and continuing to grow past 80.000 in 2024

在 GitHub 上,Tauri 儲存庫在撰寫本文時已關閉約 4,878 個 Pull Request 和約 3,570 個 Issue,以及約 1000 個討論。若要獲得更詳細的見解,請查看 Tauri 儲存庫的 OSSinsight 分析。

我們的 Discord 伺服器目前擁有約 17,700 名成員。我們看到大量的個人使用者支援、關於 Tauri 本身的問題、直接向工作組提出的問題,或者只是 Tauri 應用程式開發人員之間的討論。

我們對積極且支持性的社群感到非常高興,並感謝所有在 Discord 或 GitHub 上回答或幫助其他人的社群成員。

我們在 awesome-tauri 上維護著一份精選的 Tauri 相關專案、應用程式、插件、指南等的清單。如果您想獲得靈感、看看其他人正在構建什麼,並理想地建立 PR 來新增您的專案,請查看此清單。

當然,這只是一個代表性的範例集,我們並不確切知道還有誰正在基於 Tauri 進行構建。

我們是如何達到 2.0 的?

在 2022 年 6 月,我們發布了 Tauri 1.0,對桌面作業系統市場以及跨平台應用程式的構建方式產生了巨大影響。

在 2022 年底,我們發布了 2.0 的初始 alpha 版本,以獲得初步回饋並測試行動裝置互動應如何定義。

在初始 alpha 版本之後,我們花了將近兩年的時間公開完善和更改 Tauri 的架構。在我們自己清楚地看到整體情況後,我們在今年 2 月發布了 beta 版本。同時,我們與外部安全審計員合作,檢查我們的決策、架構變更等等。

今年 8 月,我們發布了 2.0 的 release candidate 版本,以解決主要錯誤並從生產使用中獲得更多回饋。同時,外部審計也已完成並公開。

release candidate 的時間範圍相當短,主要包含高影響的錯誤修復和文件改進。我們在 release candidate 階段必須進行的一些重大變更已捆綁到最後,現在已包含在穩定版本中。如果您的主要關注點是從先前版本升級,請查看遷移部分。

總共我們花了兩年多的時間來改進、新增功能、錯誤修復、文件編寫、重寫以及大量的討論。

所有這些都發生在我們發布 Tauri 1.x 分支的 8 個次要版本,並在多個修補程式版本中回溯移植安全修復和其他重要錯誤修復的同時。

是誰讓這次發布成為可能?

這次發布和 Tauri 本身之所以成為可能,僅僅是因為 Lucas 的大量貢獻,多年來他不斷提供程式碼變更 ❤️。

Lucas' contribution graph, with 2744 commits, over 896.000 additions and 688.000 deletions.

顯然,Lucas 並不是唯一一個為 Tauri 工作和做出貢獻的人,但我們認為他非常值得特別提及,因為他多年來一直承擔、啟動和支持這個專案及其社群。

在 2.0 中,我們收到了來自 Amr、Fabian-Lars、Tony、Chip、Jason、YuWei、icb、Simon、Oliver Lemasle 和更多貢獻者(來源資料)對 Tauri 儲存庫的重大貢獻。

我們收到了越來越多的臨時貢獻者(一個或極少數 PR)。我們對此表示感謝,但如果列出所有人,這裡將會變成一個非常長的清單。

我們的組織中有很多(!)儲存庫,它們正在支持 Tauri 的成功,如果沒有社群和工作組的貢獻,Tauri 就不會達到今天的成就。非常感謝所有參與者!

另一個特別的致敬和感謝要獻給 Fabian-Lars 和 Simon,感謝他們持續參與社群。如果您參與過 Tauri 的 Discord 或 Github 討論,您很可能知道他們的名字或頭像。

如果您曾在 Google 或 YouTube 上搜尋過 Tauri,您可能已經看過 Jacob 的直播之一。如果沒有,請務必查看並訂閱,因為他的課程不僅僅是教育性的。

Tauri 委員會在我們心中也佔有特殊的地位,我們要特別表彰 Daniel Yvetot-Thompson,感謝他投入無數的時間、汗水、心血和奉獻精神,讓 Tauri 廣為人知並實現永續發展。

我們不應忘記的一件重要事情是,我們從這個開源專案的穩定合作夥伴那裡獲得了支持。

CrabNebula Logo

CrabNebula 授權給上面提到的多人以及這裡未提及的其他人,不僅在他們的私人時間,而且在工作時間也有特權參與 Tauri 生態系統的工作。您可以在我們的部落格上找到合作夥伴關係公告,並且在過去一年中,我們對這次合作感到非常高興。

僅在 2024 年,他們就為這個專案投入了超過 2,870 個工時,這極大地推動了進展,並使我們能夠在今天宣布穩定的 2.0 版本發布。

如果您還不了解 CrabNebula,請務必查看他們的產品和服務,如果您不僅對改進您的工作流程感興趣,而且還對支持 Tauri 生態系統感興趣,請考慮與 Tauri 的共生關係。

是什麼讓 2.0 如此出色?

透過這個主要版本,我們改進和變更了您可以構建、開發和發布 Tauri 應用程式的方式和地點的幾個方面。在以下章節中,我們將提供更詳細的見解。這並未涵蓋所有內容,但應該讓您對您可以從 Tauri 獲得什麼有一個大致的印象。

入門體驗

當您開始使用新的框架或工具時,您始終會經歷的一件事是初始入門或入門過程。

我們重視開發人員體驗 (DX),並嘗試使這個初始過程與構建和發布您的最終應用程式一樣無縫。

為此,我們創建了另一個專案,稱為 create-tauri-app,簡稱 CTA。這個工具允許開發人員從頭開始,並在幾分鐘而不是幾小時內獲得一個運行的 Tauri 應用程式。

sh <(curl https://create.tauri.app/sh)

當然,在開始構建應用程式之前,您需要在開發系統上安裝一些先決條件。為此,我們在我們的官方文件中提供了包含作業系統特定章節的詳細指南。

整個入門體驗得到了改進,現在還引導啟動 iOS 和 Android 的行動裝置開發範本。

熱模組替換

在初始入門之後,您將定期開發和除錯您的 Tauri 應用程式。我們已經在 Tauri 1.x 中考慮了哪些可以改進您的開發流程,並將熱模組替換 (HMR) 擴展到行動裝置和模擬器。

這表示對應用程式前端的所有變更都不需要重建整個應用程式,您可以即時預覽它在您正在開發的裝置或作業系統中的外觀。

插件

在 Tauri 2.0 中,我們構建了一個更進階的插件系統。我們將許多先前的功能轉移到我們的官方插件(請參閱 plugins-workspace),以便社群更容易參與 Tauri 的貢獻。我們也希望為插件吸引更多維護者,並加快實施新功能的過程。

轉向插件還有另一個好處。我們將能夠為 Tauri 的核心定義一個完成定義。我們希望穩定核心功能並提供一個穩定的框架,其中可移動的部分主要是提供對系統特定功能存取的插件。

您不再需要了解所有 Tauri 即可改進或實施特定功能。插件通常不依賴其他插件,但也有一些例外。這表示要實施新的檔案系統存取功能,只需貢獻 fs 插件而不是 Tauri 本身。

由於此版本也針對行動裝置平台,因此插件系統也支援行動裝置插件。您可以使用 Swift (iOS) 和 Kotlin (Android) 編寫或重複使用原生程式碼,並使用 Annotations(Android 上為 @Command)、實作 Subclass(iOS 上為 YourPluginClass: Plugin)或透過從基於 Rust 的 Tauri 命令調用 Swift 或 Kotlin 程式碼,將函數直接公開給 Tauri 前端。查看有關如何編寫自己的插件的文件。

由於我們將 Tauri 發布為 2.0,官方插件將遵循 Tauri 的主要版本,以便一目了然地看到與 Tauri 主要版本的相容性。但並非所有插件都像 Tauri 本身一樣穩定。

每個插件的穩定性都是針對每個插件定義的,並且(即將)記錄在插件文件中。插件 API 可能會在次要版本中發生重大變更,但我們將盡力將這些變更降至最低,尤其是對於被認為穩定的插件。

行動裝置支援

這次發布中非常受期待的部分是行動作業系統支援。先前版本的 Tauri 允許為桌面作業系統擁有單一 UI 程式碼庫,但現在這已擴展到 iOS 和 Android。

我們研究並實驗了不同的解決方案來支援行動裝置,並決定使用作業系統原生語言(Swift 和 Kotlin)來為 Rust 程式碼構建介面,並允許開發人員使用這些語言編寫部分功能。

這表示您可以重複使用與系統互動的 Swift 或 Kotlin 應用程式的現有邏輯,並將其公開給 Rust 或前端。目前,如上所述,這透過插件系統運作。

我們支援使用模擬器或真實裝置進行開發,並提供許多工具來使流程盡可能無縫。我們目前對開發人員體驗並不完全滿意,但正在積極改進以使其與桌面體驗相提並論。

在行動裝置上,並非所有官方插件都受支援。有些插件在設計上不適合行動裝置,有些插件尚未實作以支援行動裝置。如果您想在這部分做出貢獻,請查看本文的最後一部分。

許可清單已死,許可清單萬歲

是的,不再有許可清單,因為我們很快就觸及了這個系統的限制。我們將其專門用於 Tauri 核心功能,但它甚至沒有涵蓋 Tauri 的所有 API。我們的新系統不僅涵蓋了 Tauri 的所有核心 API 介面,還支援應用程式和插件開發人員使用統一的方法實作自己的存取控制和範圍界定。

我們實作的新系統使用權限 - 「Tauri 命令的開/關切換」、範圍 - 「Tauri 命令的參數驗證」和功能 - 「將權限和範圍附加到視窗和 WebView」,以創建一個靈活但易於使用的存取控制系統。

它允許創建命名的權限或範圍界定檔案,並將它們與其他命名的權限或範圍重複使用和組合。這使得構建更精細的描述性集合成為可能,其中包含多個簡單或複雜的權限和範圍。

作為插件開發人員,您可以將多個基本權限抽象化為預設權限。這可以基於您的預設安全假設和威脅模型。所有官方 Tauri 插件預設權限在預設情況下都是相當安全的。

作為應用程式開發人員,您可以使用、擴展或減少插件權限。當然,您也可以為自己的應用程式構建權限和範圍。

透過此新增功能,Tauri 的核心現在能夠理解是否允許來自前端 WebView 的命令調用訊息到達命令函數。它還可以將設定的範圍附加到訊息中。

命令實作負責解釋和強制執行範圍。您可以在我們的文件中閱讀更多關於我們的威脅模型和安全方法。

外部安全審計

v2 版本的主要變更和架構在 beta 和 release candidate 期間,由 Radically Open Security 獨立稽核。請花時間閱讀報告,並深入了解 @gronke@pcwizz 出色的工作成果。

整個稽核是由 NLNet 的優秀團隊透過 NGI 的資助來完成,我們非常感謝能有此榮幸獲得全額資助的外部安全稽核,以用於重大版本發布。

這次稽核的結果促使我們重寫了開發伺服器公開方式的部分程式碼,特別是針對行動裝置開發。若沒有稽核人員的協助和指導,這次的重寫是不可能實現的 ❤️。

此外,我們強化了 iFrame API 的暴露,修正了 fshttp 外掛的範圍驗證和資源識別碼存取,改善了跨程序通訊的穩定性,以及許多其他與安全性相關的修正和改進。

跨進程通訊 (IPC) 重寫

隨著 IPC 層的重寫,我們現在支援了長期以來一直期盼的原始酬載功能,並且大致上改變了其底層運作方式。

先前,所有 IPC 酬載都會經過 JSON 序列化和反序列化,這造成了額外負擔。當前端和後端之間傳輸超過幾 KB 的資料時,這種情況會變得明顯。

新的系統支援 原始請求。這些請求加速了從後端到前端以及反之亦然的大量資料傳輸,您可以直接使用原始位元組,或使用您自己的(反)序列化過程(例如 bson、protobuf、avro 等)。

對於直接從檔案系統讀取檔案到 WebView 中,我們仍然建議使用 convertFileSrc 功能,因為如果您不需要在 Rust 後端處理資料,它很可能仍然更快。

發布指南

隨著 Tauri 2.0 的發布,發行管道的多樣性大幅增加。部分原因是行動裝置生態系統,部分原因是我們社群的貢獻。

我們有關於如何發布到 Apple AppstoreGoogle PlayMicrosoft StoreCrabNebula CloudFlathubSnapcraftAUR 和更多發行格式的官方指南,請參閱我們的發行文件

變更日誌

本節包含從 1.x 版本以來的所有變更,以簡潔的列表呈現。

顯示完整列表

新增

  • 新增行動裝置支援。
  • 在不穩定的 feature flag 後方新增 multiwebview 支援。請參閱 WindowBuilder 和 WebviewBuilder 以取得更多資訊。
  • 新增 rustls-tls cargo feature flag
  • 新增建立 webview 視窗時的 shadow 選項、Rust 中的 WebviewWindow::set_shadow 方法以及 JS 中等效的 API。
  • 在 Rust 中新增 tauri::Webviewtauri::WebviewBuildertauri::WebviewWindowtauri::WebviewWindowBuilder 結構,以及在 Js 中等效的類別。舊的 tauri::Windowtauri::WindowBuilder 行為已移至 tauri::WebviewWindowtauri::WebviewWindowBuilder
  • 新增 tauri::scope::fs 模組
  • 新增 tauri::App/AppHandle::default_window_icon 方法。
  • 新增包含 IPC 基礎元件的 tauri::ipc 模組。
  • 新增 tauri::ipc::Channel 類型和等效的 JS Channel 類型,以跨 IPC 發送資料。
  • 新增建立 webview 視窗時的 incognito 選項。
  • 新增建立 webview 視窗時的 windowEffects 選項,以及 WebviewWindow::set_effects 以嘗試在運行時變更效果。
  • 新增 tauri::path::PathResolver
  • 新增 tauri::Manager::path 方法以存取新的 PathResolver
  • 新增建立 webview 視窗時的 visibleOnAllWorkspaces 選項。
  • 新增 tauri::App/AppHandle::primary_monitorApp/AppHandle::available_monitors 方法。
  • 新增 tauri::plugin::Builder::on_navigationtauri::plugin::Plugin::on_navigation
  • 新增 tauri::WebviewWindow::navigate 方法
  • 在 macOS 和 iOS 上,為 deep link 支援新增 tauri::RunEvent::Opened
  • 在 bundler 中新增檔案關聯支援。
  • 新增 tauri::App/AppHandle::cleanup_before_exit 以手動呼叫清理邏輯。您應在此函數返回後立即退出 tauri 應用程式,且不得使用任何與 tauri 相關的 API。
  • 在 Linux 上,新增 tauri::WebviewWindow::default_vbox 方法以取得包含選單列和 webview 的 gtk::Box 參考。
  • 新增 linux-libxdo cargo feature flag(預設停用),以啟用連結到 libxdo,用於讓 CutCopyPasteSelectAll 原生選單項目在 Linux 上運作。
  • 在 macOS 上,新增 tauri::WebviewWindow::ns_view 方法以取得 NSWindow 內容檢視的指標。
  • 新增 tauri::Builder::register_asynchronous_uri_scheme_protocol,以允許非同步解析自訂 URI scheme protocol 請求,防止阻擋主執行緒。
  • 包含拖放事件的 drop 和 hover 位置。
  • 新增 tauri::WebviewWindow::set_progress_bar 方法
  • 新增 tauri::WebviewWindow::set_always_on_bottom 方法和建立 webview 視窗時的 alwaysOnTop 選項。
  • 新增 tauri::WebviewWindowBuilder::on_page_load 方法。
  • 新增 common-controls-v6 cargo feature flag(預設啟用)。
  • 新增 Window::destroy 以強制關閉視窗。
  • 新增 tauri::EventId 類型
  • 新增 tauri::WindowBuilder::on_download 以處理下載請求事件。
  • 新增 tauri::WebviewWindowBuilder::parent,這是 Windows、Linux 和 macOS 上父視窗功能的便利包裝器。
  • 僅在 Windows 上新增 tauri::WebviewWindowBuilder::owner
  • 僅在 Linux 上新增 tauri::WebviewWindowBuilder::transient_fortauri::WebviewWindowBuilder::transient_for_raw
  • 新增 tauri::WebviewWindow::start_resize_draggingtauri::ResizeDirection 列舉。
  • 新增 tauri::WebviewWindowBuilder::proxy_url 方法。
  • 新增 tauri::WebviewEvent 列舉
  • 新增 tauri::RunEvent::WebviewEvent 變體。
  • 新增 tauri::Builder::on_webview_eventtauri::Webview::on_webview_event 方法。
  • 新增 tauri::image 模組,其中包含 tauri::image::Imagetauri::image::JsImage 類型以及 tauri::image::include_img! 巨集。
  • 新增 tauri::is_dev 函數以判斷應用程式是否在開發模式下運行。
  • tauri::Assets trait 上新增 tauri::Assets::setup 方法,讓您可以為自訂資源提供者運行初始化程式碼。
  • 新增 tauri::Rect 結構。
  • 新增 tauri::WebviewWindow::set_zoom 方法
  • 新增建立 webview 視窗時的 zoomHotkeys 選項。
  • 新增 window.isTauri JS 全域函數以檢查是否在 tauri 中運行。
  • 新增 specta feature flag,為 AppHandleStateWindowWebviewWebviewWindow 類型新增 specta 支援。
  • 新增 tauri::App/AppHandle/WebviewWindow::cursor_position getter 以取得目前的游標位置。
  • 新增 tauri::App/AppHandle/WebviewWindow::monitor_from_point(x,y) getter 以從給定點取得螢幕。
  • 新增 tauri::RunEvent::Reopen 以處理 macOS 上點擊 dock icon 的事件。
  • 在 JS app 模組中新增 defaultWindowIcon 以在 JS 中檢索預設視窗圖示。
  • 新增 tauri::WebviewWindow::set_title_bar_style 以在 macOS 上於運行時設定標題列樣式。
  • 新增 API 以啟用分別設定視窗大小限制
    • 新增 tauri::WindowBuilder::inner_size_constraintstauri::WebviewWindowBuilder::inner_size_constraints
    • 新增 tauri::WindowSizeConstraints 結構
    • 新增 tauri::Window::set_size_constraintstauri::WebviewWindow::set_size_constraints

增強功能

  • 在 IPC 實作上使用自訂協定以增強效能。
  • 增強新建立視窗的置中效果,使其不再於可見後跳至中心。
  • 您的應用程式不再需要 custom-protocol Cargo feature,現在已被忽略。若要檢查是否在生產環境中運行,請使用 #[cfg(not(dev))] 而非 #[cfg(feature = "custom-protocol")]
  • 改進了 JS path API,以便在可能的情況下於 Windows 上返回簡化的路徑,即移除 UNC (\\?\) 前綴。
  • 改進了反序列化 Tauri 外掛組態時顯示的錯誤訊息。
  • 將 gtk 應用程式 ID 設定為 tauri.conf.json 中定義的 identifier,以確保應用程式的唯一性。可以將 enableGtkAppId 選項設定為 false 來停用此功能。
  • 在 Windows 上,原生處理未裝飾視窗的大小調整,這提高了效能並修正了先前 JS 實作的一些惱人之處
    • 當游標移動到邊緣時,不再出現游標閃爍。
    • 即使存在 data-tauri-drag-region 元素,也可以從頂部調整大小。
    • 開始調整大小後,點擊不會穿透其後方的元素,因此不再有意外點擊。
  • AppHandle::restartprocess::restart 標記為 diverging functions

錯誤修正

  • 不再解包和展平 IPC 上的 payload,因此帶有 cmdcallbackerroroptionspayload 參數的命令不會破壞 IPC。
  • 修正了在事件迴圈運行時呼叫 set_activation_policy 的問題。
  • 修正了無法從另一個 webview 阻止關閉視窗的問題。
  • 在 Windows 上,修正了裝飾視窗最初不透明,直到調整大小後才透明的問題。
  • 解析檔案系統範圍檢查中的符號連結。
  • 修正了 JS basename(path, 'ext') API 實作移除 ext 的所有實例,但它應該只移除最後一個。
  • 修正了 Windows 上退出時視窗白色閃爍的問題
  • 分別應用 minWidthminHieghtmaxWidthmaxHeight 限制,這修正了一個長期存在的錯誤,即除非寬度和高度一起受到限制,否則永遠不會應用這些限制。

已變更

  • 視窗建立和設定 hook 現在在事件迴圈準備就緒時呼叫。
  • default-tls 功能重新命名為 native-tls
  • 變更了外掛設定 hook 以採用 PluginApi 類型的第二個參數
  • 變更了 tauri::Window 結構行為,並將其舊行為移至新的 tauri::WebviewWindow 類型。
  • tauri::api::path 模組移至 tauri::path
  • tauri::api::path 中的所有函數移至 tauri::path::PathResolver 上的方法
  • system-tray feature flag 重新命名為 tray-icon
  • 變更了 tauri::App::handletauri::Manager::app_handle 方法以返回 AppHandle 的參考,而不是擁有的值。
  • 變更了 tauri::Builder::register_uri_scheme_protocol 以返回 http::Response 而不是 Result<http::Response>。若要返回錯誤回應,請手動建立狀態碼 >= 400 的回應。
  • Windows 和 Android 上的自訂協定現在使用 http scheme 而不是 https
  • tauri::Env.args 變更為 tauri::Env.args_os,現在使用 OsString 而不是 String
  • TAURI_AUTOMATION 環境變數變更為 TAURI_WEBVIEW_AUTOMATION
  • 變更了 tauri::Builder::invoke_system 以採用參考而不是擁有的值。
  • 變更了 tauri::Builder::invoke_systemtauri::Builder::on_page_load hooks 以採用 tauri::Webview 參數而不是 tauri::Window
  • tauri::command 模組項目移至 tauri::ipc 模組,使其匯入名稱不會與 tauri::command 巨集衝突。
  • 變更了 tauri::App::run_iteration 以採用 callback 並移除了其返回值。
  • 變更了 AppHandle::exitAppHandle::restart 以觸發 RunEvent::ExitRequestedRunEvent::Exit
  • tauri::WebviewWindowBuilder::owner_window 重新命名為 tauri::WebviewWindowBuilder::owner_raw,並將 tauri::WebviewWindowBuilder::parent_window 重新命名為 tauri::WebviewWindowBuilder::parent_raw
  • window-data-url feature flag 重新命名為 webview-data-url
  • 變更了 tauri::WebviewWindow::close 以觸發關閉請求事件,而不是強制關閉視窗。使用 tauri::WebviewWindow::destroy 強制關閉。
  • icon-icoicon-png feature flag 分別重新命名為 image-icoimage-png
  • 移除了 tauri::Icon 列舉,請改用新的 tauri::Image 類型。先前接受 tauri::Icon 的所有 API 都已變更為接受 tauri::Image
  • 變更了 tauri::Context 結構和 tauri::Assets trait 以具有 R: Runtime generic。
  • tauri::Context::assets_mut 重新命名為 tauri::Context::set_assets
  • 變更了 tauri::Context 類型,使其沒有 <A: Assets> generic,因此可以使用 Context::set_assets 交換資源實作。
  • 變更了 tauri::Context::assets 以返回 &dyn Assets 而不是 &A generic。
  • tauri::FileDropEvent 列舉重新命名為 tauri::DragDropEvent 並重新命名其變體。也重新命名了 js 事件
  • tauri::WindowEvent::FileDrop 列舉變體重新命名為 tauri::WindowEvent::DragDrop
  • 將檔案拖放事件重新命名為 tauri://drag-entertauri://drag-overtauri://drag-droptauri://drag-leave
  • tauri::WebviewWindow::disable_file_drop_handler 重新命名為 tauri::WebviewWindow::disable_drag_drop_handler
  • 變更了 tauri::WebviewWindow::url getter 以返回 result。
  • 變更了 tauri::Env.args_os,以包含二進制路徑,先前已跳過。
  • 在 JS window 模組中將 getAllgetCurrent 重新命名為 getAllWindowsgetCurrentWindow,但您可能需要 webviewWindow 模組中的 getAllWebviewWindowsgetCurrentWebviewWindow

已移除

  • 移除了 reqwest-* Cargo features
  • UpdaterEvent
  • 移除了 tauri::api 模組,並將其移至 plugins-workspace repo 中的獨立外掛。
  • 移除了 tauri::scope::IpcScope
  • 移除了 tauri::scope::ipc 模組及其所有類型。
  • 移除了 tauri::scope::FsScope,請使用 tauri::scope::fs::Scope
  • 移除了 tauri::scope::GlobPattern,請使用 tauri::scope::fs::Pattern
  • 移除了 tauri::scope::FsScopeEvent,請使用 tauri::scope::fs::Event
  • 移除了 tauri::scope::HttpScope
  • 移除了 tauri::scope::ShellScope
  • 移除了 tauri::scope::ShellScopeAllowedCommand
  • 移除了 tauri::scope::ShellScopeAllowedArg
  • 移除了 tauri::scope::ExecuteArgs
  • 移除了 tauri::scope::ShellScopeConfig
  • 移除了 tauri::scope::ShellScopeError
  • 移除了 linux-protocol-headers cargo feature flag,現在預設啟用。
  • 移除了 tauri::path::Errortauri::path::Result,並將其變體新增至 tauri::Error
  • 移除了 tauri::path::Resulttauri::plugin::Result 別名,您應使用 tauri::Result 或您自己的 Result 類型。
  • 變更了 tauri::Builder::on_page_load handler 以採用參考。頁面載入 hook 現在針對載入開始和完成事件觸發,若要判斷觸發事件的原因,請參閱 tauri::PageLoadPayload::event 欄位。
  • 移除了 tauri::GlobalWindowEvent 結構,並將其欄位解包以直接傳遞至 tauri::Builder::on_window_event
  • 移除了 tauri::EventHandler 類型。
  • tauri::Context::default_window_icon_mut 重新命名為 tauri::Context::set_default_window_icon,並變更為接受 Option<T>

設定重組

根據 RFC#5 重新架構 Tauri 組態

  • package.productNamepackage.versiontauri.bundle.identifier 欄位移至頂層。
  • 移除了 package 物件。
  • tauri 物件重新命名為 app
  • tauri.bundle 物件移至頂層。
  • build.distDir 欄位重新命名為 frontendDist
  • build.devPath 欄位重新命名為 devUrl,並且不再接受路徑,僅接受 URL。
  • tauri.pattern 移至 app.security.pattern
  • 移除了 tauri.bundle.updater 物件,其欄位已移至 plugins.updater 物件下的 updater 外掛。
  • build.withGlobalTauri 移至 app.withGlobalTauri
  • tauri.bundle.dmg 物件移至 bundle.macOS.dmg
  • tauri.bundle.deb 物件移至 bundle.linux.deb
  • tauri.bundle.appimage 物件移至 bundle.linux.appimage
  • 從每個 bundle 組態物件中移除所有 license 欄位,並改為新增 bundle.licensebundle.licenseFile
  • AppUrl 重新命名為 FrontendDist,並重構其變體以使其更明確。
  • tauri.window.fileDropEnabeld 重新命名為 app.window.dragDropEnabled

遷移

由於我們盡力使從先前 Tauri 版本遷移的過程盡可能順利,因此我們提供了文件來引導您完成此過程。

如果您是從 1.x 版本遷移,請查看此遷移指南

若要從 2.0 beta 或 release candidate 版本升級,請查看此遷移指南

Tauri v2 CLI 包含 migrate 命令,可自動化大多數過程並協助您完成遷移

npm install @tauri-apps/cli@next
npm run tauri migrate

行動呼籲

如果您熟悉 Tauri 並且在您的旅程中已經使用過它,請花時間查看 Github DiscussionsGithub Issues。也許您已經解決了您的 Tauri 新手同伴目前正在遇到的問題。

如果您認為您看到的一些問題是通用的,並且應該記錄在某個地方,那麼我們可能在我們的官方文件中為其準備了完美的位置。

若要貢獻改進或新增內容,我們歡迎在 tauri-docs 儲存庫中提交 PR。請確保您已閱讀貢獻指南

如果您有能力理解並將目前的文件翻譯成您的母語,我們感謝您對我們文件進行內容翻譯

Tauri 周圍的儲存庫也在尋找貢獻者,特別是我們希望有更多的維護者和貢獻者加入 plugin-workspace

外掛現在是 Tauri 開發和使用者體驗的重要組成部分,我們歡迎各種形式的協助。從討論新的外掛想法、與他人協作編寫新的外掛、貢獻 PR 以修復現有外掛中的錯誤,到在外掛 readme 或程式碼中記錄奇怪的變通方法和知識。

路線圖

您可能期望我們提供對未來的可靠計畫和新的酷炫想法。我們目前有一些想法,但尚未承諾 2.x 之後的路線圖。

我們主要希望專注於改進這個主要版本,以提供更好的開發人員體驗、更好的文件以及更少的重大錯誤。我們希望特別改進行動裝置開發體驗,並使從想法到發布應用程式的整個流程盡可能無縫。

我們認為至少應該提及的未來計畫

  • 為 Linux 提供或捆綁 Chromium Embedded Framework (CEF) 作為 WebKit2GTK 的替代方案
  • Servo 作為 Tauri WebView (Wry 中的 POC)

如果您想在這些想法上進行協作,請告知我們,我們將共同找出解決方案。


© 2025 Tauri 貢獻者。CC-BY / MIT