58 điểm bởi GN⁺ 2026-02-24 | 5 bình luận | Chia sẻ qua WhatsApp
  • Framework ứng dụng desktop dựa trên TypeScript sử dụng Bun cho tiến trình chính và Zig cho native binding
  • Hỗ trợ đầy đủ macOS, Windows, Ubuntu, đồng thời tự động tạo trình cài đặt, cập nhật tự động và artifact vá vi sai
  • Cung cấp bộ tính năng desktop đầy đủ như điều khiển cửa sổ, menu, phím tắt, clipboard, hộp thoại, session storage..., đồng thời triển khai webview ổn định dựa trên OOPIF
  • Cấu trúc nội bộ tận dụng FFI và mô hình bộ nhớ chia sẻ của Bun để duy trì hiệu quả ngay cả trong môi trường đa tiến trình
  • Được phát triển trực tiếp trong 2 năm bởi một nhà phát triển từng trải qua giới hạn của Electron và Tauri, đồng thời học Zig, C, C++, Objective-C
  • Mục tiêu là một quy trình làm việc tích hợp cho phép viết mã trong 5 phút và triển khai trong 10 phút

Tổng quan và mục tiêu của dự án Electrobun

  • Cấu trúc chạy tiến trình chính bằng Bun, bundle TypeScript cho webview, và viết native binding bằng Zig
  • Cả tiến trình chính lẫn webview đều được viết bằng TypeScript, nhưng vẫn duy trì cách ly (isolation) giữa các tiến trình đồng thời cung cấp RPC nhanh, có kiểu rõ ràng
  • Kích thước app bundle tự giải nén khoảng 12MB (khi dùng system webview, phần lớn là kích thước runtime Bun)
  • Cập nhật vi sai dựa trên bsdiff có thể giảm kích thước bản vá xuống tối thiểu 14KB
  • Mục tiêu là cung cấp một quy trình làm việc tích hợp duy nhất để có thể bắt đầu viết mã trong 5 phút và hoàn tất triển khai trong 10 phút
  • Có thể khởi tạo dự án theo mẫu bằng lệnh npx electrobun init

Bối cảnh ra đời

  • Tác giả đã làm ứng dụng desktop từ thời Visual Basic 6, và nền tảng kinh nghiệm bắt nguồn từ giai đoạn Adobe AIR, khi từng phát hành nhiều sản phẩm startup cho hàng nghìn người dùng
  • Dù đã hơn 20 năm làm kỹ sư giai đoạn đầu tại các startup, xây dựng và mở rộng các sản phẩm ở quy mô kỳ lân, môi trường phát triển desktop lại ngày càng thụt lùi
  • Trong quá trình xây dựng co(lab) — một trình duyệt web lai + trình soạn thảo mã + terminal PTY — tác giả gặp quá nhiều bất tiện nên quyết định tự tạo framework
  • Phiên bản đầu tiên được làm bằng Electron, nhưng quá trình ký mã, công chứng, phát hành và cập nhật tạo cảm giác như đang chiến đấu với framework nhiều hơn là phát triển ứng dụng
  • Tác giả muốn continuous shipping như trên web, nhưng chuỗi công cụ hiện có lại khiến việc này trở nên khó hơn mức cần thiết
  • Cũng đã thử Tauri, nhưng cho rằng Rust không phù hợp với mọi nhà phát triển, và khi đó Bun vẫn còn vài tháng nữa mới phát hành 1.0 nên đã bắt tay tự xây dựng

Từ macOS sang đa nền tảng

  • Ban đầu chỉ có thể build ứng dụng cho macOS, nhưng hiện nay đã hỗ trợ ở mức ưu tiên cao việc build và phát hành trên macOS, Windows, Ubuntu
  • Trình cài đặt, artifact cập nhật tự động và bản vá vi sai (differential patches) đều được tạo tự động
  • Chỉ cần kết nối với static host (R2, S3, GitHub Releases) là có thể hoàn tất phát hành
  • Cập nhật vi sai được xử lý bởi zig-bsdiff, một bản port từ C sang Zig và được tối ưu bằng SIMD và zstd
  • Khi FFI của Bun trở nên ổn định, phần lớn lớp FFI Zig viết trước đó đã được thay thế bằng Bun
  • Kiến trúc vì thế chuyển biến theo hướng tích cực: Bun dùng bộ nhớ chia sẻ khi tạo worker, nên vẫn duy trì hiệu quả trong môi trường đa tiến trình

Các tính năng đã phát hành

  • Hiện framework đã cung cấp đầy đủ điều khiển cửa sổ đa nền tảng, menu, phím tắt (accelerators), global shortcut, clipboard, dialog, phân vùng webview, session storage, tìm trong trang (find-in-page), cùng công cụ bundle và cập nhật
  • Việc triển khai OOPIF (Out-of-Process Iframe) đã đạt đến mức thực sự hoạt động
    • Thẻ <webview> của Electron đã bị Chromium deprecate nhưng vẫn chưa có giải pháp thay thế phù hợp
    • <electrobun-webview> là một “super iframe” thực thụ với định vị DOM, cách ly tiến trình và phân lớp hoạt động đúng đắn
    • Hoạt động đa nền tảng mà không gặp vấn đề nhấp nháy con trỏ (cursor flicker), cũng không cần vá browser engine

Tình trạng hỗ trợ nền tảng

  • macOS 14+: hỗ trợ chính thức
  • Windows 11+: hỗ trợ chính thức
  • Ubuntu 22.04+: hỗ trợ chính thức
  • Các bản phân phối Linux khác (gtk3, webkit2gtk-4.1): hỗ trợ từ cộng đồng

Kế hoạch sắp tới

  • Đã hoàn tất viết lại toàn bộ co(lab) trên Electrobun, và sẽ tập trung nghiêm túc vào phát triển co(lab) dựa trên sự ổn định của v1
  • Mục tiêu cốt lõi là ổn định framework đủ để có thể xây dựng các sản phẩm dài hạn đầy tham vọng mà không bị biến động nền tảng (platform churn) làm chao đảo
  • Cộng đồng Discord đang phát triển, và những người dùng đóng góp qua beta test, gửi issue và phản hồi đã góp phần định hình framework
  • Electrobun là sản phẩm lớn đầu tiên do Blackboard phát hành

5 bình luận

 
myname1260 2026-03-03

Có ghi là viết lại toàn diện co(lab), nên tôi đã nghĩ đây là thứ được Google cùng làm để cải thiện độ ổn định của đám mây khi chạy ipynb, nhưng hóa ra lại là một dự án phát triển của nhóm Blackboard hoàn toàn không liên quan.

Dù vậy, việc OOPIF có thể truy cập và được cài bằng npx vẫn có vẻ là một trải nghiệm quan trọng.

 
geekbini 2026-02-24

"Quá trình ký mã, công chứng, phân phối và cập nhật mang lại cảm giác như đang chiến đấu với framework hơn là phát triển ứng dụng"

Trong phần thân bài có nhắc đến bối cảnh ra đời như trên,
thực tế có những trường hợp việc phân phối còn tốn nhiều công sức hơn cả phát triển ứng dụng.
Chỉ riêng việc khắc phục được vấn đề này thôi cũng đã rất đáng được đánh giá cao.

 
bus710 2026-02-24

Việc gắn zig vào Flutter hóa ra cũng khá dễ và đơn giản. Tài liệu Dart/C FFI cũng không khác biệt nhiều...

 
mammal 2026-02-24

Tò mò không hiểu vì sao các bản phân phối Linux lớn lại không cung cấp WebView mặc định. Đây là một trở ngại lớn cho việc mở rộng hệ sinh thái ứng dụng

Nếu là một hệ điều hành có môi trường GUI thì có lẽ giờ WebView nên trở thành một thành phần mặc định.

 
GN⁺ 2026-02-24
Ý kiến trên Hacker News
  • Xin chào, mình là người tạo ra Electrobun
    Lần này mình đã phát hành bản ổn định v1. Kiến trúc đã được cố định, và nếu bạn cần bug được sửa hoặc cần API từng dùng trong Electron/Tauri, hãy để lại ở GitHub issue, mình sẽ ưu tiên xử lý
    Trong một tháng qua, mình đã sửa 50 nghìn dòng mã để hoàn tất công việc ổn định hóa
    Cũng có video demo của dự án mã nguồn mở Colab (trình duyệt web + trình soạn thảo mã + terminal PTY) được tạo bằng Electrobun
    Electrobun mặc định dùng WebView của hệ thống, nhưng cũng có thể kèm CEF bằng tùy chọn bundleCEF. Về mặt cấu trúc, nó độc lập với WebView nên khi Servo hay Ladybird sẵn sàng thì có thể thay thế ngay
    Ngoài ra, mỗi bản phát hành đều có thể tạo gói nén tự động dựa trên zstd để giảm kích thước tải ban đầu, còn bản cập nhật có thể giữ nhỏ ở mức khoảng 14KB

    • Mình thắc mắc liệu định nghĩa kiểu có khớp với tài liệu không. Ví dụ, nếu thêm khóa partition vào BrowserWindow thì TypeScript báo lỗi
    • Cảm ơn vì đã tạo ra Electrobun
  • Electrobun trông rất hứa hẹn. Mình định làm dự án tiếp theo bằng cái này
    Trong stack TypeScript hoàn chỉnh, đây là lựa chọn có năng suất cao nhất. Mình rất vui khi có được một giải pháp thay thế Electron nhẹ hơn và nhanh hơn mà không cần Rust hay quá trình biên dịch dài

    • Mình vừa hoàn thành ứng dụng Tauri đầu tiên, và đã rất bất ngờ vì bản build Windows mất quá lâu. Nhất định sẽ thử Electrobun
  • Trên Discord có rất nhiều nhà phát triển game đang thử nghiệm game desktop bằng Electrobun
    Nó có thể thay thế một phần Electron trong thị trường game indie trên Steam
    Đặc biệt, trải nghiệm phát triển game TypeScript với reload tức thì bằng bun --watch game.ts rất nhanh và mượt

    • Với tư cách là người làm web nhiều, kể cả ngoài công cụ này thì Bun cũng là một bước nhảy lớn về hiệu năng
    • Không có quá nhiều game làm bằng Electron. Mình chỉ nhớ được CrossCode. Phần lớn dùng Unity hoặc Godot
    • Mình tò mò đó là server Discord nào đang có những thử nghiệm như vậy. Muốn tham gia
    • Node giờ cũng đã hỗ trợ chế độ watch và chạy TypeScript
  • Vấn đề chính của Tauri là chất lượng WebView hệ thống khác nhau theo từng OS
    Linux không có WebView chính thức, còn Windows 7 hay các bản Windows 10 đầu tiên thì không dùng Edge WebView. Vì những khác biệt này mà đôi khi khởi động mất hơn 20 giây
    Mình không chắc có đáng đánh đổi như vậy chỉ để tiết kiệm 100MB hay không
    Phần lớn người dùng có internet nhanh nên tốc độ tải xuống không phải vấn đề lớn
    Mình từng thắc mắc liệu Electrobun có hỗ trợ trình kết xuất Chromium tích hợp hay không, nhưng tài liệu không nói rõ

    • Electrobun mặc định dùng WebView hệ thống, nhưng khi cần có thể bundle CEF(Chromium). Điều này được ghi rõ trong tài liệu chính thức
    • Trên trang sản phẩm cũng ghi “System’s native webview as renderer, CEF optional”. Tức là có thể lựa chọn
    • Khi làm ứng dụng Tauri trên Windows, mình đã phải dùng embedded bootstrapper. Thật mừng khi Electrobun có vẻ đã giải quyết tốt vấn đề này
    • Mình thắc mắc vì sao các bản phân phối Linux lớn lại không cung cấp WebView mặc định. Đây là trở ngại lớn cho việc mở rộng hệ sinh thái ứng dụng
    • Tauri cũng đang phát triển một phiên bản dựa trên CEF. Có thể tham khảo nhánh liên quan. Vì chất lượng WebView của OS thấp nên cách tiếp cận này có vẻ là hướng cải thiện tốt hơn nhiều
  • Giá mà tiêu đề ghi rõ đây là một bài blog nhìn lại dự án
    Với dự án thực tế, có lẽ xem liên kết tài liệu chính thức sẽ phù hợp hơn

  • Trang chính của dự án ở đây
    Giao diện trông gọn gàng, và vì mình quen với Zig nên có lẽ sẽ dễ tiếp cận hơn Rust

  • Tuần này công ty mình sẽ phát hành một ứng dụng Electron mới, nên mình thấy giá mà Electrobun ra sớm hơn 1 năm thì tốt biết mấy
    Electron Builder có đơn giản hóa phần nào quá trình cập nhật và ký, nhưng vẫn còn khá phiền phức
    Mình định sẽ thử Electrobun cho dự án cá nhân tiếp theo

  • Bài viết có nhắc đến vấn đề notarizing và stapling, mà nếu không dùng Xcode thì Apple khiến quy trình này trở nên rất khó
    Windows cũng không dễ tự động hóa CI. Nếu Electrobun cung cấp giải pháp tốt hơn thì mình rất quan tâm

    • Trong đa số trường hợp, nó được hỗ trợ bằng cấu hình mặc định. Chỉ cần thiết lập vài biến môi trường và build với notarize: true là được
      Mình đã ký và công chứng nhiều lần với Electrobun mà không gặp vấn đề gì. Nó cũng cung cấp escape hatch cho những trường hợp phức tạp
      Nếu cần trợ giúp thì cứ DM trên Discord. (Mình không liên quan đến Electrobun, nhưng rất hiểu nỗi khổ của hệ thống công chứng Apple)
  • Nếu ứng dụng Electron nặng hơn 500MB, thì 14MB của Electrobun thực sự là kích thước rất nhỏ

    • Một ứng dụng Electron điển hình cho macOS (DMG) khoảng 80MB, còn Electrobun vào khoảng 16MB
  • Thật tiếc là các bản phân phối ngoài Ubuntu hiện vẫn nằm ngoài phạm vi hỗ trợ
    Có thể xem thảo luận liên quan trong bình luận issue