Cái tên repo nghe hơi lạ: handwired. Nghĩa là “đấu dây bằng tay”. Và đúng theo nghĩa đen, nó biến code JavaScript bình thường của bạn thành một mạng neural, với trọng số được viết tay chứ không phải học từ dữ liệu.
Nghe như trò đùa. Nhưng tác giả Chenglou (Cheng Lou, người từng làm ở Facebook, nổi tiếng với ReasonML và React) lại làm nghiêm túc, có demo chạy được, có cả backend WebGPU.
Nó làm gì, cụ thể
Một chương trình thường có if-else, vòng lặp, biến trạng thái. Handwired dịch mấy cấu trúc đó thành phép nhân ma trận cộng ReLU trên số thực. ReLU ở đây chính là Math.max(0, x).
Ví dụ trong README, đoạn code này:
const a = 5
const result = (a > 4) ? 10 : 12
Được viết lại thành thuần số học:
const a = 5
// Math.max(0, x) is ReLU. For an integer a, above4 is 1 if a > 4, and 0 otherwise
const above4 = Math.max(0, a - 4) - Math.max(0, a - 5)
// Both branches compute, and above4 picks one
const result = above4 * 10 + (1 - above4) * 12
Bạn có thể tính tay và thấy hai cách ra cùng kết quả. Điểm mấu chốt: phép so sánh a > 4 trở thành một biểu thức đại số liên tục, không còn là bước nhảy rời rạc. Nên toàn bộ chương trình giữ được tính differentiable.
Sau đó Handwired gom hết các phép cộng, nhân, ReLU lại thành một ma trận lớn, và chạy trên JS thuần hoặc trên WebGPU.
Vì sao chỉ dùng 2 primitive lại hay
Tác giả liệt kê ba hệ quả. Thứ nhất, chương trình differentiable toàn phần. Thứ hai, trọng số không cần train vì chúng được viết tay từ code gốc. Thứ ba, các kỹ thuật tối ưu GPU sẵn có như fusion, sparsity, reordering có đất dụng võ, vì chỉ phải xử lý hai phép cơ bản.
Cái thứ ba là chỗ tôi thấy thú vị nhất. Code JS viết theo kiểu single-threaded truyền thống, nhưng khi đã thành ma trận thì chạy song song trên GPU. README có nhắc demo tìm kiếm JSON chạy trong vài mili giây trên 100.000 tài liệu. Đó là con số đáng để thử.
Vì sao nó đang hot
Repo mới tạo ngày 15/10/2026, cập nhật ngày 17/10, và đã có 1.647 sao. Hai ngày, hơn 1.600 sao. Với một repo không có topic nào, không PR rầm rộ, con số đó đến từ đâu?
Từ cái tên Chenglou. Dân frontend biết anh qua ReasonML, qua các bài viết về functional programming, qua mấy dự án UI thử nghiệm. Một repo lạ hoắc gắn tên người quen thì người ta click.
Nhưng cũng có lý do kỹ thuật. Ý tưởng “compile chương trình thành neural net” không mới trong giới nghiên cứu, nhưng thường gắn với ngôn ngữ chuyên dụng hoặc framework nặng. Đây là JS, chạy được trong trình duyệt, cài bằng bun, mở demo là xem. Rào cản gần như bằng không.
Và nó chạm đúng một câu hỏi mà nhiều dev đang tò mò: nếu neural net chỉ là chuỗi phép nhân ma trận, thì một chương trình bình thường có phải cũng là một neural net không? Handwired trả lời bằng code chạy được.
Cài và chạy thử
Repo dùng bun, không phải npm. Nếu máy bạn chưa có bun thì cài trước.
git clone && bun install
Rồi:
bun start
Lệnh này chạy các demo ở local. Muốn xem trước khi cài thì mở trang chủ chenglou.me/handwired, các demo chạy trực tiếp trên trình duyệt.
Cấu trúc thư mục theo README: docs/, src/ và template/ là chỗ nên đọc để bắt đầu. Còn lab/ là đống thí nghiệm cũ, tác giả nói thẳng là xem hay bỏ qua đều được.
Ai nên quan tâm
Không phải người đang cần ship feature. Đây là repo để nghiên cứu và thử nghiệm.
- Dev tò mò về quan hệ giữa code thường và neural net, muốn tự tay sờ vào.
- Người làm compiler hoặc DSL, vì ý tưởng hạ if-else và vòng lặp xuống đại số tuyến tính là một hướng biểu diễn đáng tham khảo.
- Ai cần chạy tính toán song song trên GPU nhưng ngại viết shader, vì đầu vào vẫn là JS.
- Người muốn thử nghiệm chuyện “unfreeze trọng số rồi train tiếp” như README gợi ý. Tác giả cũng không giấu việc mình chưa biết nó ra cái gì: “what does that even do? Let’s find out!”
Một use case trong README khá dị: gắn một chương trình đã đóng băng vào một neural net tổng quát rồi train end-to-end, để “nanoGPT vừa làm được Shakespeare vừa làm được cái UI cụ thể của bạn”. Nghe vui, nhưng đây là hướng thí nghiệm, chưa phải thứ đem đi production.
Ưu và nhược
Ưu điểm. Ý tưởng gọn, chỉ dựa trên hai primitive nên dễ hiểu và dễ tối ưu. Chạy được cả JS lẫn WebGPU. License MIT, thoáng, dùng thương mại được. Có demo trực tuyến nên đánh giá được trước khi cài. Tác giả có uy tín trong cộng đồng frontend, code TypeScript, không phải đống script chắp vá.
Hạn chế. Repo mới hai ngày tuổi. Tài liệu chỉ có README và thư mục docs, chưa có gì gọi là hướng dẫn đầy đủ. Không có topic nào trên GitHub, tức là chưa được phân loại, khó tìm nếu không biết tên. API có thể đổi bất cứ lúc nào, đừng build gì nghiêm túc lên trên. Và bản chất “weights viết tay” nghĩa là chương trình của bạn phải dịch được sang dạng ma trận, không phải code JS nào cũng vậy.
Chưa kể chuyện hiệu năng: biến if-else thành phép nhân ma trận nghĩa là cả hai nhánh đều được tính, kể cả nhánh không dùng. Với code có điều kiện nặng thì chi phí tăng lên. README không nói gì về chuyện này, nên cứ đo thực tế trước khi tin.
Kết
Một repo hai ngày tuổi, 1.647 sao, viết bằng TypeScript, MIT. Đọc README mất năm phút, mở demo mất thêm năm phút nữa. Nếu bạn thấy câu “chương trình của bạn cũng là một neural net” đáng để kiểm chứng thì đây là chỗ bắt đầu: chenglou/handwired.
