Perry vs Tauri
Tauri là một framework để xây dựng ứng dụng desktop đa nền tảng (và ngày càng nhiều cho di động) với backend Rust và frontend chạy bên trong webview tích hợp của hệ điều hành — WebView2 trên Windows, WKWebView trên macOS, WebKitGTK trên Linux. Ứng dụng Tauri nhỏ hơn đáng kể so với Electron vì webview của OS không được đóng gói. Perry đi theo một con đường khác: hoàn toàn không có webview, không render HTML, chỉ là TypeScript được biên dịch thành mã máy gốc điều khiển widget nền tảng thực sự.
Tauri là gì?
Tauri là một framework mã nguồn mở được viết bằng Rust cho phép bạn xây dựng ứng dụng đa nền tảng với frontend web (bất kỳ framework nào — React, Vue, Svelte, v.v.) và backend Rust. Thay vì đóng gói Chromium, Tauri sử dụng webview tích hợp của hệ thống, giúp giữ trình cài đặt ứng dụng ở mức một chữ số MB trên Linux/Windows/macOS. Tauri 2 đã thêm hỗ trợ di động (iOS và Android). Frontend được render dưới dạng HTML/CSS/JS bởi webview hệ thống; giao tiếp với backend Rust đi qua một bridge IPC.
Perry là gì?
Perry biên dịch TypeScript trực tiếp thành mã máy gốc qua LLVM. Lớp UI (perry/ui) là một API khai báo kiểu SwiftUI ánh xạ đến widget nền tảng gốc — không phải HTML được render bởi webview. Ứng dụng viết bằng Perry không mang theo engine JavaScript, không chạy bên trong WebKit/WebView2 và không cần bridge IPC giữa UI và logic. Perry nhắm đến 10 nền tảng bao gồm di động, watch và TV.
So sánh song song
| Tính năng | Perry | Tauri |
|---|---|---|
| Render UI | Widget nền tảng gốc (AppKit, UIKit, GTK4, Win32, JNI) | Webview hệ thống (WKWebView, WebView2, WebKitGTK) — HTML/CSS/JS |
| Ngôn ngữ frontend | TypeScript (API widget khai báo) | HTML/CSS/JS qua bất kỳ framework web nào (React, Vue, v.v.) |
| Ngôn ngữ backend | TypeScript | Rust |
| IPC giữa UI và logic | Không — một tiến trình, gọi trực tiếp | Bắt buộc (UI trong webview, logic trong tiến trình Rust) |
| Trình cài đặt hello-world | ~330 KB | ~3–10 MB (webview do OS cung cấp) |
| Di động (iOS, Android) | Có — UI gốc | Có — dựa trên webview (Tauri 2) |
| Watch / TV | watchOS, tvOS, Wear OS | Không |
| Mục tiêu WebAssembly | Có (perry/ui qua bridge DOM) | N/A (Tauri tự sử dụng webview gốc) |
| Độ trưởng thành | Trước 1.0 | Ổn định (1.x / 2.x) |
Perry thắng ở đâu
- +UI thực sự gốc — Perry không render HTML; nó điều khiển widget nền tảng thực sự, vì vậy ứng dụng kế thừa vật lý cuộn gốc, focus, accessibility, IME và theming OS miễn phí.
- +Hello-world nhỏ hơn (~330 KB so với mức một chữ số MB của Tauri), và không phụ thuộc webview hệ thống tại runtime.
- +Một ngôn ngữ, một tiến trình. Toàn bộ ứng dụng — UI và logic — là TypeScript, không có bridge IPC để thiết kế hay debug.
- +watchOS, tvOS, Wear OS và một mục tiêu Web/JS đầy đủ với pipeline biên dịch gốc thực sự, không phải webview đóng gói.
- +Không có sự khác biệt hành vi webview giữa các nền tảng. Tauri kế thừa các đặc thù của WKWebView vs WebView2 vs WebKitGTK; Perry chọn con đường widget gốc trên mỗi OS.
- +Hiệu năng tính toán là AOT-gốc, không phải JIT của webview. Perry dẫn đầu microbench tính toán trong điều kiện tương đương trên M1 Max (perry/benchmarks).
Tauri thắng ở đâu
- +Framework trưởng thành, ổn định với dòng 2.x đang hoạt động và cộng đồng lớn.
- +Linh hoạt frontend — sử dụng bất kỳ framework web nào (React, Vue, Svelte, Solid, v.v.) bạn đã biết.
- +Trình cài đặt nhỏ hơn Electron vì Tauri dựa vào webview do OS cung cấp thay vì đóng gói Chromium.
- +Backend Rust lý tưởng nếu bạn có công việc cấp hệ thống cần làm (filesystem, API gốc) và muốn đảm bảo tại thời điểm biên dịch ở đó.
- +Render webview nghĩa là tốc độ lặp CSS/HTML và devtools hoạt động như bạn mong đợi từ phát triển web.
- +Pipeline đóng gói, ký mã và cập nhật đã được thiết lập.
Khi nào nên chọn Perry
Chọn Perry nếu bạn muốn UI thực sự gốc (không phải HTML render trong webview), binary gốc nhỏ không phụ thuộc webview, một mã nguồn TypeScript duy nhất qua desktop + di động + watch + TV, hoặc mã widget đa nền tảng được xác thực tại thời điểm biên dịch.
Khi nào nên chọn Tauri
Chọn Tauri nếu bạn có frontend web hiện tại hoặc dự kiến, muốn ứng dụng desktop được hỗ trợ bởi Rust với trình cài đặt nhỏ, hài lòng với HTML/CSS cho UI, hoặc muốn hệ sinh thái rộng lớn của các framework và công cụ web.
Kết luận
Tauri là một Electron tốt hơn rất nhiều — cùng cách tiếp cận công nghệ web, trình cài đặt nhỏ hơn đáng kể vì webview của OS không được đóng gói. Nhưng nó vẫn là một kiến trúc dựa trên webview, có nghĩa là render HTML/CSS/JS và một bridge IPC. Perry có một lập trường khác: hoàn toàn không có webview, widget nền tảng gốc, một tiến trình duy nhất. Nếu bạn muốn giữ web stack với binary nhỏ hơn Electron, Tauri là câu trả lời đúng. Nếu bạn muốn rời web stack để có widget gốc trong TypeScript, Perry là câu trả lời.