Tauri 2.0 穩定版本發布
我們非常自豪地宣布 Tauri 新主要版本的穩定發布。歡迎使用 Tauri 2.0!
什麼是 Tauri?
在 Tauri 應用程式中,前端是用您最喜愛的 Web 前端堆疊編寫的。它在作業系統 WebView 內運行,並與主要以 Rust 編寫的應用程式核心進行通訊。
我應該何時使用 Tauri?
如果您勾選以下 **任何** 一個方框,您應該使用 Tauri
- 您是否想要一個適用於所有平台的單一 UI 程式碼庫?
- 您是否希望盡可能多地接觸在其平台上的使用者(例如 Windows、macOS、Linux、Android、iOS)?
- 您是前端 Web 開發人員,並且想要編寫原生應用程式嗎?
- 您是 Rust 開發人員,正在尋找編寫具有美觀 UI 的應用程式,並可選擇用 Rust 來完成嗎?
- 您是否擁有現有的 Web 開發團隊,並希望以較低的預先投資擴展到原生應用程式市場?
- 您是否擁有現有的 Rustacean 團隊,並希望所有內容都用 Rust 編寫?
Tauri 有多受歡迎?
在 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 並不是唯一一個為 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 授權給上面提到的多人以及這裡未提及的其他人,不僅在他們的私人時間,而且在工作時間也有特權參與 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)
irm https://create.tauri.app/ps | iex
sh (curl -sSL https://create.tauri.app/sh | psub)
npm create tauri-app@latest
yarn create tauri-app
pnpm create tauri-app
deno run -A npm:create-tauri-app
bun create tauri-app
cargo install create-tauri-app --lockedcargo create-tauri-app
當然,在開始構建應用程式之前,您需要在開發系統上安裝一些先決條件。為此,我們在我們的官方文件中提供了包含作業系統特定章節的詳細指南。
整個入門體驗得到了改進,現在還引導啟動 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 可能會在次要版本中發生重大變更,但我們將盡力將這些變更降至最低,尤其是對於被認為穩定的插件。
在系統啟動時自動啟動您的應用程式。
允許您的行動裝置應用程式使用相機掃描 QR 碼、EAN-13 和其他類型的條碼。
提示使用者在 Android 和 iOS 上進行生物辨識驗證。
讀取和寫入系統剪貼簿。
從命令列介面解析參數。
將您的 Tauri 應用程式設定為 URL 的預設處理程式。
用於開啟和儲存檔案以及訊息對話框的原生系統對話框。
存取檔案系統。
註冊全域快捷鍵。
存取以 Rust 編寫的 HTTP 客戶端。
在生產應用程式中使用 localhost 伺服器。
可設定的記錄。
在 Android 和 iOS 上讀取和寫入 NFC 標籤。
向使用者發送原生通知。
在外部應用程式中開啟檔案和 URL。
讀取有關作業系統的資訊。
在檔案系統上持久化執行時期範圍變更。
將視窗移動到常用位置。
存取目前進程。
存取系統 shell 以產生子進程。
確保一次只運行一個 Tauri 應用程式執行個體。
Tauri 插件,提供前端透過 sqlx 與 SQL 資料庫通訊的介面。
持久性鍵值儲存。
加密、安全的資料庫。
Tauri 應用程式的應用程式內更新。
透過 HTTP 進行檔案上傳。
使用 JavaScript 中的 Rust 客戶端開啟 WebSocket 連線。
持久化視窗大小和位置。
行動裝置支援
這次發布中非常受期待的部分是行動作業系統支援。先前版本的 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 的暴露,修正了 fs
和 http
外掛的範圍驗證和資源識別碼存取,改善了跨程序通訊的穩定性,以及許多其他與安全性相關的修正和改進。
跨進程通訊 (IPC) 重寫
隨著 IPC 層的重寫,我們現在支援了長期以來一直期盼的原始酬載功能,並且大致上改變了其底層運作方式。
先前,所有 IPC 酬載都會經過 JSON 序列化和反序列化,這造成了額外負擔。當前端和後端之間傳輸超過幾 KB 的資料時,這種情況會變得明顯。
新的系統支援 原始請求。這些請求加速了從後端到前端以及反之亦然的大量資料傳輸,您可以直接使用原始位元組,或使用您自己的(反)序列化過程(例如 bson、protobuf、avro 等)。
對於直接從檔案系統讀取檔案到 WebView 中,我們仍然建議使用 convertFileSrc
功能,因為如果您不需要在 Rust 後端處理資料,它很可能仍然更快。
發布指南
隨著 Tauri 2.0 的發布,發行管道的多樣性大幅增加。部分原因是行動裝置生態系統,部分原因是我們社群的貢獻。
我們有關於如何發布到 Apple Appstore、Google Play、Microsoft Store、CrabNebula Cloud、Flathub、Snapcraft、AUR 和更多發行格式的官方指南,請參閱我們的發行文件。
變更日誌
本節包含從 1.x 版本以來的所有變更,以簡潔的列表呈現。
顯示完整列表
新增
- 新增行動裝置支援。
- 在不穩定的 feature flag 後方新增 multiwebview 支援。請參閱 WindowBuilder 和 WebviewBuilder 以取得更多資訊。
- 新增
rustls-tls
cargo feature flag - 新增建立 webview 視窗時的
shadow
選項、Rust 中的WebviewWindow::set_shadow
方法以及 JS 中等效的 API。 - 在 Rust 中新增
tauri::Webview
、tauri::WebviewBuilder
、tauri::WebviewWindow
、tauri::WebviewWindowBuilder
結構,以及在 Js 中等效的類別。舊的tauri::Window
和tauri::WindowBuilder
行為已移至tauri::WebviewWindow
和tauri::WebviewWindowBuilder
。 - 新增
tauri::scope::fs
模組 - 新增
tauri::App/AppHandle::default_window_icon
方法。 - 新增包含 IPC 基礎元件的
tauri::ipc
模組。 - 新增
tauri::ipc::Channel
類型和等效的 JSChannel
類型,以跨 IPC 發送資料。 - 新增建立 webview 視窗時的
incognito
選項。 - 新增建立 webview 視窗時的
windowEffects
選項,以及WebviewWindow::set_effects
以嘗試在運行時變更效果。 - 新增
tauri::path::PathResolver
- 新增
tauri::Manager::path
方法以存取新的PathResolver
- 新增建立 webview 視窗時的
visibleOnAllWorkspaces
選項。 - 新增
tauri::App/AppHandle::primary_monitor
和App/AppHandle::available_monitors
方法。 - 新增
tauri::plugin::Builder::on_navigation
和tauri::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
,用於讓Cut
、Copy
、Paste
和SelectAll
原生選單項目在 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_for
和tauri::WebviewWindowBuilder::transient_for_raw
。 - 新增
tauri::WebviewWindow::start_resize_dragging
和tauri::ResizeDirection
列舉。 - 新增
tauri::WebviewWindowBuilder::proxy_url
方法。 - 新增
tauri::WebviewEvent
列舉 - 新增
tauri::RunEvent::WebviewEvent
變體。 - 新增
tauri::Builder::on_webview_event
和tauri::Webview::on_webview_event
方法。 - 新增
tauri::image
模組,其中包含tauri::image::Image
和tauri::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,為AppHandle
、State
、Window
、Webview
和WebviewWindow
類型新增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_constraints
和tauri::WebviewWindowBuilder::inner_size_constraints
- 新增
tauri::WindowSizeConstraints
結構 - 新增
tauri::Window::set_size_constraints
和tauri::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::restart
和process::restart
標記為 diverging functions
錯誤修正
- 不再解包和展平 IPC 上的
payload
,因此帶有cmd
、callback
、error
、options
或payload
參數的命令不會破壞 IPC。 - 修正了在事件迴圈運行時呼叫
set_activation_policy
的問題。 - 修正了無法從另一個 webview 阻止關閉視窗的問題。
- 在 Windows 上,修正了裝飾視窗最初不透明,直到調整大小後才透明的問題。
- 解析檔案系統範圍檢查中的符號連結。
- 修正了 JS
basename(path, 'ext')
API 實作移除ext
的所有實例,但它應該只移除最後一個。 - 修正了 Windows 上退出時視窗白色閃爍的問題
- 分別應用
minWidth
、minHieght
、maxWidth
和maxHeight
限制,這修正了一個長期存在的錯誤,即除非寬度和高度一起受到限制,否則永遠不會應用這些限制。
已變更
- 視窗建立和設定 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::handle
和tauri::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_system
、tauri::Builder::on_page_load
hooks 以採用tauri::Webview
參數而不是tauri::Window
。 - 將
tauri::command
模組項目移至tauri::ipc
模組,使其匯入名稱不會與tauri::command
巨集衝突。 - 變更了
tauri::App::run_iteration
以採用 callback 並移除了其返回值。 - 變更了
AppHandle::exit
和AppHandle::restart
以觸發RunEvent::ExitRequested
和RunEvent::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-ico
和icon-png
feature flag 分別重新命名為image-ico
和image-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-enter
、tauri://drag-over
、tauri://drag-drop
和tauri://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
模組中將getAll
和getCurrent
重新命名為getAllWindows
和getCurrentWindow
,但您可能需要webviewWindow
模組中的getAllWebviewWindows
和getCurrentWebviewWindow
。
已移除
- 移除了
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::Error
和tauri::path::Result
,並將其變體新增至tauri::Error
- 移除了
tauri::path::Result
和tauri::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.productName
、package.version
和tauri.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.license
和bundle.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@nextnpm run tauri migrate
yarn upgrade @tauri-apps/cli@nextyarn tauri migrate
pnpm update @tauri-apps/cli@nextpnpm tauri migrate
cargo install tauri-cli --version "^2.0.0" --lockedcargo tauri migrate
行動呼籲
如果您熟悉 Tauri 並且在您的旅程中已經使用過它,請花時間查看 Github Discussions、Github 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