GeaStack: Viết ứng dụng native bằng TypeScript và CSS
GeaStack giới thiệu bộ ví dụ mã nguồn mở cho phép lập trình viên xây dựng ứng dụng native bằng TypeScript và CSS, chạy trên web, vi điều khiển ESP32 và hệ điều hành GeaOS. Dự án hứa hẹn mang lại trải nghiệm phát triển quen thuộc cho lập trình viên web nhưng vẫn tối ưu cho các thiết bị nhúng.

GeaStack: Viết ứng dụng native bằng TypeScript và CSS
Trong thế giới phát triển phần mềm, việc dùng TypeScript và CSS để viết ứng dụng native nghe có vẻ lạ tai. Thế nhưng GeaStack đang hiện thực hóa ý tưởng đó bằng một bộ ví dụ mã nguồn mở, cho phép cùng một đoạn mã chạy trên web, vi điều khiển ESP32 và hệ điều hành riêng có tên GeaOS.
Điểm đáng chú ý là kho ví dụ này không chỉ là bản demo đơn thuần. Nó đóng vai trò thư viện ứng dụng chính thức cho trình giả lập, các mục tiêu nhúng, GeaOS, nền tảng Apple, tiện ích mở rộng VS Code/Cursor và cả các bản demo tiếp thị.
Cấu trúc kho ví dụ
Toàn bộ kho được tổ chức theo các thư mục rõ ràng, mỗi ví dụ là một gói nhỏ với tệp kê khai gea nằm trong package.json.
- apps/*: Các ứng dụng Gea, phần lớn viết bằng TSX, nhắm tới web, ESP32 và/hoặc GeaOS.
- apps/*/package.json: Tệp kê khai ứng dụng, thông tin tương thích mục tiêu, script và siêu dữ liệu trình khởi chạy.
- tools/dialer-browser: Công cụ hỗ trợ phía trình duyệt cho quy trình quay số.
- docs: Danh mục và hướng dẫn đóng góp.
Cách tiếp cận này giúp lập trình viên dễ dàng tìm thấy ví dụ phù hợp với mục tiêu của mình, đồng thời giữ cho từng ví dụ nhỏ gọn và tập trung.
Bắt đầu nhanh chóng
Để chạy kiểm tra cho một ví dụ cụ thể, bạn chỉ cần thực hiện vài lệnh quen thuộc:
cd apps/watch
npm install
npm run check
npm run build
Một số ví dụ còn đi kèm bộ kiểm thử, chủ yếu để bảo vệ bố cục hoặc cấu hình thiết bị mà không có công cụ nào khác phát hiện được. Bạn chỉ cần chạy npm test trong thư mục ứng dụng.
Vòng lặp phát triển trên web được điều khiển từ trình giả lập, vốn nằm ở một kho riêng biệt có tên geastack/simulator. Các script của trình giả lập đọc ứng dụng từ thư mục gốc dự án thông qua biến môi trường GEA_APPS_ROOT.
Lưu ý quan trọng: Không có giá trị mặc định cho biến này, nên bạn phải đặt nó hoặc truyền tham số
--app-dir. Không có giả định nào rằng hai kho mã nằm cạnh nhau.
Ví dụ về cách chạy vòng lặp phát triển:
cd /path/to/simulator
GEA_APPS_ROOT=/path/to/examples ./targets/web/dev-web.mjs watch
GEA_APPS_ROOT=/path/to/examples ./targets/web/build-web.sh watch
./targets/web/dev-web.mjs --app-dir /path/to/examples/apps/watch
Để nạp chương trình xuống bo mạch tương thích, bạn dùng Gea CLI:
npx gea flash watch --board
npx gea flash watch --board --monitor
Tệp kê khai ứng dụng
Mỗi ứng dụng có thể build đều cần một package.json chứa trường gea. Đây là phần cốt lõi giúp hệ thống hiểu ứng dụng của bạn chạy ở đâu và như thế nào:
{
"gea": {
"id": "watch",
"name": "Watch",
"entry": "index.tsx",
"runtime": "gea",
"targets": {
"web": true,
"esp32": true,
"geaos": true
}
}
}
Tệp kê khai này được tiêu thụ bởi trình giả lập, các script bo mạch nhúng, GeaOS, nền tảng Apple và cả tiện ích mở rộng IDE. Vì vậy, việc giữ nó chính xác là điều bắt buộc.
Ghi chú bảo trì
Nhóm phát triển GeaStack đưa ra một số nguyên tắc để duy trì chất lượng kho ví dụ:
- Giữ ví dụ nhỏ và tập trung. Một ví dụ tốt chứng minh rõ ràng một hành vi.
- Ưu tiên các API khung dùng chung thay vì các thủ thuật riêng cho từng mục tiêu.
- Thêm kiểm thử cho các ví dụ có logic, vật lý hoặc phân tích cú pháp phức tạp.
- Cập nhật tài liệu danh mục khi thêm, đổi tên, ẩn hoặc thay đổi khả năng tương thích mục tiêu của ứng dụng.
Giấy phép và mô hình thương mại
Kho ví dụ này được phát hành theo giấy phép MIT. Điều đó có nghĩa là bạn có thể sử dụng, chỉnh sửa và thậm chí phát hành sản phẩm mã nguồn đóng dựa trên nó mà không vướng bất kỳ ràng buộc nào.
Tuy nhiên, có một ngoại lệ quan trọng: phần hỗ trợ bo mạch nhúng, bao gồm targets và @geastack/chips, được cấp phép theo GPL-3.0-only. Nếu bạn muốn phát hành firmware mã nguồn đóng thông qua các thành phần này, bạn sẽ cần một giấy phép thương mại.
Để biết điều khoản thương mại, hỗ trợ và dịch vụ build lưu trữ, bạn có thể liên hệ qua địa chỉ [email protected].
Ý nghĩa với lập trình viên Việt Nam
Đối với cộng đồng lập trình viên Việt Nam, GeaStack mở ra một hướng tiếp cận thú vị: nếu bạn đã quen với TypeScript và CSS trong phát triển web, bạn có thể tận dụng chính kỹ năng đó để lập trình cho thiết bị nhúng và IoT mà không cần học lại từ đầu một ngôn ngữ mới như C hay C++.
Sự kết hợp giữa phát triển web và nhúng đang là xu hướng đáng chú ý, đặc biệt trong bối cảnh các dự án IoT, thiết bị đeo thông minh và nhà máy thông minh ngày càng phổ biến tại Việt Nam. Việc có thêm lựa chọn mã nguồn mở với giấy phép linh hoạt như MIT giúp các nhóm khởi nghiệp công nghệ trong nước dễ dàng thử nghiệm và thương mại hóa sản phẩm hơn.
Dù vậy, lập trình viên cần lưu ý kỹ điều khoản GPL-3.0 của phần hỗ trợ bo mạch nhúng, vì đây là điểm dễ gây nhầm lẫn khi chuyển từ giai đoạn thử nghiệm sang sản phẩm thương mại.


