WaterUI: Framework UI đa nền tảng bằng Rust với cơ chế phản ứng tinh gọn

6 phút đọc

Repository water-rs/waterui hiện thu hút 524 lượt stars và 19 lượt fork trên GitHub (ghi nhận cập nhật gần nhất vào ngày 27/10/2026). Được phát triển bằng ngôn ngữ Rust, WaterUI hướng tới mục tiêu cung cấp giải pháp lập trình giao diện người dùng (UI) đa nền tảng theo triết lý học một lần nhưng có thể áp dụng ở mọi nơi.

Khác với nhiều bộ công cụ UI hiện nay, WaterUI kết hợp linh hoạt giữa việc ánh xạ trực tiếp sang các toolkit bản địa của hệ điều hành và việc tích hợp một engine tự vẽ chuyên biệt khi cần thiết.

Kiến trúc render kép: Kết hợp bộ công cụ bản địa và engine Hydrolysis

Dự án WaterUI triển khai cách tiếp cận giao diện bằng cách phân tách mã nguồn ứng dụng và backend hiển thị. Khi lập trình viên định nghĩa các view trong Rust, framework sẽ chuyển đổi chúng tương ứng với toolkit thực tế của từng hệ điều hành:

  • Nền tảng Apple (iOS và macOS): Ánh xạ trực tiếp sang UIKit và AppKit.
  • Nền tảng Linux: Sử dụng bộ công cụ GTK4.
  • Nền tảng Android và các môi trường khác: Khi không có toolkit bản địa phù hợp, framework chuyển sang sử dụng Hydrolysis — một engine render tự vẽ. Trên Android, Hydrolysis vận hành thông qua bộ tăng tốc phần cứng HWUI; ở các hệ thống khác, nó vẽ trực tiếp lên GPU thông qua Cherenkov.

Mô hình dự án của WaterUI duy trì một Rust crate thuần túy. Toàn bộ mã FFI (Foreign Function Interface) và các thư mục dự án bản địa được công cụ dòng lệnh (CLI) water tự động khởi tạo và quản lý độc lập, giúp cây mã nguồn chính không bị phình to bởi mã cấu hình riêng cho từng nền tảng.

Quản lý trạng thái không dựa trên cây ảo (Virtual Tree)

Hệ thống quản lý trạng thái của WaterUI hoạt động dựa trên các giá trị đơn giản thay vì sử dụng cơ chế so sánh cây ảo (virtual tree diffing) phức tạp:

  • Binding<T>: Dùng để lưu trữ các trạng thái có thể thay đổi (mutable state).
  • Computed<T>: Dùng cho các trạng thái dẫn xuất (derived state).

Cơ chế phản ứng tinh gọn giúp ứng dụng chỉ cập nhật đúng các thành phần view có đọc dữ liệu khi giá trị thay đổi. Việc thay đổi một chuỗi ký tự đơn lẻ sẽ không kích hoạt quá trình dựng lại (rebuild) cho toàn bộ cây thành phần xung quanh.

Đối với các danh sách dữ liệu, bộ thành phần List hoặc ForEach nhận các tập hợp phản ứng chứa các phần tử có thuộc tính Identifiable để tự động tính toán sự thay đổi danh sách theo ID. Ngoài ra, framework cung cấp cơ chế watch dùng cho việc thay thế chủ đích một nhánh giao diện, dù thao tác này sẽ làm làm mất trạng thái bên trong của nhánh đó.

Bộ công cụ CLI và quy trình phát triển xem trước

Hệ sinh thái của dự án đi kèm với công cụ dòng lệnh water. Trình cài đặt CLI tải về các tệp thực thi đã biên dịch sẵn mà không yêu cầu người dùng phải biên dịch lại từ đầu. CLI hỗ trợ kiểm tra phiên bản mới qua lệnh water update --check cũng như tự động nâng cấp tại chỗ.

Một số tính năng hỗ trợ lập trình đáng chú ý của CLI bao gồm:

  • Kiểm tra môi trường và thiết bị: Lệnh water doctor hiển thị các công cụ còn thiếu trong toolchain, trong khi water devices liệt kê danh sách trình giả lập và thiết bị thực đang kết nối.
  • Xem trước giao diện không cần chạy ứng dụng: Bằng cách gắn thuộc tính #[preview] vào hàm, lập trình viên có thể xuất giao diện ra dạng hình ảnh trực tiếp. Hệ thống preview này cũng hỗ trợ thực thi các bài kiểm tra tương tác ngữ nghĩa (water preview test) và đo lường hiệu năng GPU (water preview perf).
  • Quản lý tài nguyên tệp đóng gói: Thông qua tệp cấu hình Water.toml, người dùng khai báo thông tin gói, quyền truy cập và chủ đề (theme). Đối với biểu tượng ứng dụng, dự án chỉ yêu cầu một tệp hình ảnh vuông Icon.svg hoặc Icon.png trong thư mục assets/; CLI sẽ tự cắt và tạo ra đúng định dạng cho từng hệ điều hành (vuông tràn viền cho iOS, bo góc cho macOS, và các lớp biểu tượng thích ứng cho Android).

Mức độ hoàn thiện và những điều cần lưu ý

Dự án WaterUI hiện vẫn đang trong giai đoạn tiền phát hành (Pre-1.0). Nhóm phát triển xác nhận giao diện lập trình ứng dụng (API) vẫn sẽ tiếp tục thay đổi để tối ưu hóa thiết kế. Về mức độ sẵn sàng của các backend:

  • Backend dành cho hệ điều hành Apple hiện có độ hoàn thiện cao nhất.
  • Engine Hydrolysis (phục vụ cho Android) đứng ở vị trí tiếp theo về độ ổn định.
  • Backend GTK4 trên Linux vẫn đang ở giai đoạn phát triển sơ khai.

Mã nguồn dự án được cấp bản quyền kép theo các điều khoản của MIT hoặc Apache 2.0. Quy trình đóng góp mã nguồn chấp nhận các đóng góp có sự hỗ trợ của trí tuệ nhân tạo (AI) với điều kiện phải được con người kiểm duyệt và hiểu rõ; các yêu cầu kéo (Pull Request) hoàn toàn tự động bởi AI sẽ bị từ chối.

Hiện tại, khả năng tương thích thực tế của Hydrolysis trên nhiều dòng phần cứng GPU khác nhau cũng như hiệu năng chi tiết của các ứng dụng phức tạp khi vận hành dài hạn vẫn là các yếu tố cần thêm thời gian thử nghiệm và đánh giá từ cộng đồng.

Nguồn tham khảo: Xem bài gốc

📅 Âm: 4/10 · Canh Dần

📅 Lịch Âm Dương NsN

×
Hôm Nay · Thứ Năm
Âm Lịch: 4 Tháng 10
Năm Bính Ngọ
📌 Can Chi: Canh Dần
✨ Hoàng Đạo: Tý (23-1), Sửu (1-3), Thìn (7-9), Tỵ (9-11), Mùi (13-15), Tuất (19-21)
Vĩnh Phúc (Liên Bảo - Vĩnh Yên)
31°C
Nắng Đẹp
💧 83% | 💨 18 km/h
Hôm nay 32°
02/11 28°
03/11 30°
04/11 31°
05/11 31°