NW.js: nền tảng ứng dụng desktop Chromium và Node.js
NW.js là một runtime ứng dụng desktop render HTML, CSS và JavaScript trên Chromium, với Node.js gắn vào cùng một tiến trình, nên một thẻ `<script>` có thể `require()` thẳng một package npm. Kiến trúc một-tiến-trình này khác mô hình tách main/renderer của Electron, có lợi cho ứng dụng tiện ích nhỏ khi không cần tự quản lý ranh giới tiến trình. Dự án vẫn mang dấu vết từ thời node-webkit: mã nguồn rải rác nhiều repo, hỗ trợ chỉ qua mailing list.
NW.js là gì?
NW.js là một runtime ứng dụng xây trên Chromium và Node.js, cho phép bạn viết ứng dụng desktop gốc bằng HTML, CSS và JavaScript, gọi thẳng API và module npm của Node.js từ DOM hoặc từ một WebWorker. Dự án khởi đầu tại Intel Open Source Technology Center dưới tên node-webkit, trước khi đổi tên thành NW.js. Node và engine trình duyệt chạy chung một thread, chung một heap, nên object truyền bằng tham chiếu trực tiếp, không phải message serialize.
Tính năng chính của NW.js
- ✓Truy cập đầy đủ API Node.js ngay từ DOM: mọi core module hay package npm đều gọi thẳng được từ JavaScript trong trang, không cần preload script hay lớp IPC nào.
- ✓Chạy chung một thread: Node và WebKit chạy trong cùng một tiến trình và chung một heap, nên object truyền qua lại bằng tham chiếu thay vì phải serialize qua một cầu nối.
- ✓Dùng đúng bộ công nghệ web chuẩn: app viết bằng HTML5, CSS3, JavaScript và WebGL, không cần học thêm framework UI riêng.
- ✓Có bản build đa nền tảng cho Linux (64-bit và arm64), Windows (32-bit và 64-bit), và Mac OS X từ 10.10 trở lên.
- ✓Phát hành nightly build từ git tip song song với các bản stable đã gắn tag, phục vụ team muốn theo sát thay đổi mới nhất của Chromium và Node.js.
- ✓Xác minh bản build qua file checksum SHASUMS256.txt, có thêm chữ ký GPG cho các bản stable (không áp dụng cho nightly).
Có thể xây dựng gì với NW.js
- •Biến codebase HTML/CSS/JS của một web app sẵn có thành chương trình desktop cài đặt được, mà không phải viết lại phần UI.
- •Ứng dụng cần tích hợp sâu, trực tiếp với hệ điều hành hoặc Node.js — truy cập file system, native module, API hệ thống — điều khiển thẳng từ code front-end.
- •Phần mềm desktop đa nền tảng đóng gói thành một gói duy nhất cho Linux, Windows và Mac OS X từ cùng một codebase.
- •App demo và tham khảo từ cộng đồng: README dẫn tới repo đồng hành nw-sample-apps và một trang wiki liệt kê các app, công ty đang dùng NW.js.
Tải và cài đặt NW.js
NW.js được phân phối dưới dạng bản build dựng sẵn, không phải một dependency npm bạn thêm vào project. Tải bản stable hiện tại, v0.114.2 (dựng trên Node.js v26.7.0 và Chromium 151), từ dl.nwjs.io: Linux có bản tarball 64-bit hoặc arm64, Windows có bản zip 32-bit hoặc 64-bit, còn Mac OS X 10.10 trở lên có bản zip 64-bit/arm64. README lưu ý phần lớn người dùng thực ra cần bản SDK build chứ không phải bản thường, nên đọc release notes trước khi chọn gói. Nếu cần bản mới nhất, có nightly build được phát hành liên tục từ git tip tại dl.nwjs.io/live-build. Mọi thư mục release kể từ v0.32.0 đều kèm file SHASUMS256.txt chứa checksum SHA-256, và các bản stable có thêm chữ ký GPG trong SHASUMS256.txt.asc để bạn xác minh file tải về không bị can thiệp.
Điểm mạnh
- ✓Node và renderer dùng chung một tiến trình, chung một heap, nên gọi Node từ JavaScript trong trang là một lời gọi hàm trực tiếp, không phải một vòng IPC serialize.
- ✓Không có toolkit UI riêng — chỉ dùng HTML5, CSS3 và JavaScript thuần, nên kỹ năng web sẵn có áp dụng được ngay.
- ✓Bản build có checksum qua SHASUMS256.txt, và các bản stable có chữ ký GPG, cho bạn cách xác minh file đã tải về.
- ✓Có cả kênh stable gắn version lẫn nightly build liên tục, nên bạn theo được các bản vá của Chromium/Node phía thượng nguồn mà không cần chờ bản gắn tag.
Hạn chế của NW.js
- △Chính README của repo này nói nó chỉ phụ trách issue tracking, landing page, và một phần mã nguồn — phần còn lại nằm rải rác ở nhiều repo khác trong tổ chức nwjs, nên hiểu toàn bộ quá trình build không chỉ gói gọn trong một repo.
- △Hỗ trợ cộng đồng đi qua mailing list Google Group, và README nói rõ chỉ dùng tiếng Anh; không thấy nhắc tới Discord hay Slack.
- △Việc đóng gói và code-signing để phân phối hoàn toàn không có trong README này — mọi thứ được đẩy sang một trang wiki riêng, nên cần dành thêm thời gian tìm hiểu trước khi ship.
- △README vẫn mở đầu bằng việc giải thích chuyện đổi tên từ node-webkit, và nhiều bài viết được dẫn link cũng thuộc những năm đầu của dự án — dấu hiệu cho thấy hệ sinh thái này chuyển động chậm hơn các đối thủ mới.
Lựa chọn thay thế NW.js
Câu hỏi thường gặp về NW.js
NW.js miễn phí và mã nguồn mở: README ghi rõ mã nguồn trong repo này phát hành theo giấy phép MIT. Việc phân phối lại bản binary đã biên dịch cần thêm vài bước riêng, được ghi trong trang wiki đóng gói và phân phối app của dự án, nên đọc trước khi ship.
NW.js chạy Node.js và Chromium renderer trong cùng một tiến trình, chung một heap, nên JavaScript trong trang gọi thẳng API Node.js. Electron thì tách Node ra một main process riêng khỏi renderer và nối chúng bằng một cầu IPC — kiến trúc phân tách rõ hơn nhưng ít trực tiếp hơn cách NW.js làm.
Bản NW.js stable hiện tại, v0.114.2, được dựng trên Node.js v26.7.0 và Chromium 151, theo ghi chú tải về của dự án. Mỗi bản NW.js đều gắn một phiên bản Node.js và Chromium cụ thể, nên kiểm tra release notes của bản bạn tải để biết chính xác cặp phiên bản đó.
NW.js chạy được trên Windows, Mac OS X từ 10.10 trở lên, và Linux, với bản build cho Windows 32-bit/64-bit, Mac 64-bit/arm64, và Linux 64-bit/arm64. Còn có bản legacy cho Windows XP và OSX đời cũ, dành cho team vẫn phải hỗ trợ những hệ thống đó.
README chính của NW.js không mô tả chi tiết các bước đóng gói — nó dẫn tới một trang wiki riêng, "How to package and distribute your apps", cho quy trình đó. Bản binary tải về được xác minh bằng file checksum SHASUMS256.txt, có chữ ký GPG cho bản stable, để đảm bảo không bị can thiệp.
NW.js hỗ trợ module Node.js từ npm: README mô tả hỗ trợ đầy đủ API Node.js và mọi module npm của bên thứ ba, gọi được trực tiếp từ DOM hoặc từ một WebWorker ngay trong code JavaScript của app.
Vấn đề nó giải quyết
Trước khi có những runtime kiểu này, muốn biến một web app thành thứ có thể double-click để chạy thường phải tự viết một lớp vỏ native riêng cho từng nền tảng, hoặc chấp nhận dùng webview mà không có cách nào chính thức để chạm tới file system hay các API cấp hệ điều hành khác từ code trong trang. NW.js được xây dựng trong Intel Open Source Technology Center để lấp đúng khoảng trống đó: đặt Node.js và một instance Chromium đầy đủ vào cùng một tiến trình, để code trong DOM gọi module Node.js bằng một lời gọi hàm thông thường, chứ không phải qua một plugin API gắn thêm sau này.
Nên dùng khi nào — và nên bỏ qua khi nào
Những team đã có sẵn (hoặc muốn xây) một web app bằng HTML, CSS và JavaScript thuần, và cần nó chạy như một chương trình desktop cài đặt được với quyền truy cập Node.js trực tiếp từ code trong trang, chính là đối tượng phù hợp ở đây — không phải tự thiết kế một lớp IPC. Muốn bản build nhỏ và không ngại viết backend bằng Rust hay Go thay vì Node? Tauri hoặc Wails hợp hơn. Còn team có thế mạnh thực sự là component React hay Vue cùng một hệ sinh thái plugin lớn sẵn có thì nhiều khả năng sẽ tận dụng được cộng đồng lớn hơn của Electron tốt hơn là kiến trúc đơn giản của NW.js.
Repo liên quan
nw.js có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về nw.js.
