3 điểm bởi GN⁺ 2025-10-03 | 2 bình luận | Chia sẻ qua WhatsApp
  • Một cách tiếp cận mới dựa trên Firefox, biến chính trình duyệt thành công cụ có thể lập trình thông qua tệp cấu hình TypeScript
  • Có thể triển khai các tính năng gần như không giới hạn như tùy biến giao diện trình duyệt, gọi tiến trình bên ngoài mà không bị ràng buộc bởi các hạn chế bảo mật của web extension
  • Cung cấp hệ thống mode và ánh xạ phím theo phong cách Vim, hỗ trợ duyệt web hoàn toàn bằng bàn phím mà không cần chuột
  • Tích hợp sẵn các tính năng thân thiện với lập trình viên như hint mode, tab fuzzy finder, REPL và đã được kiểm chứng qua 6 tháng sử dụng thực tế
  • Có thể tải bản alpha cho macOS và Linux, đồng thời tương thích hoàn toàn với các Firefox extension và workflow hiện có

Bối cảnh phát triển Glide

  • Trong khi dùng extension Tridactyl trên Firefox, tác giả đã gặp phải vấn đề về những hạn chế bảo mật mang tính nền tảng của web extension
    • Trên một số trang nhất định như addons.mozilla.org, extension bị vô hiệu hóa hoàn toàn nên mọi ánh xạ phím đều không hoạt động
    • Ngay cả trên trang chủ tùy chỉnh cũng phát sinh vấn đề Tridactyl không hoạt động
  • Những ràng buộc này là mô hình bảo mật thiết yếu của trình duyệt để bảo vệ người dùng khỏi extension độc hại, nhưng đồng thời cũng hạn chế mạnh khả năng mở rộng
  • Từ nhu cầu về một trình duyệt thật sự tùy biến, có thể làm mọi thứ không giới hạn từ chỉnh sửa chính UI của trình duyệt đến gọi công cụ bên ngoài, tác giả bắt đầu phát triển Glide

Điểm khác biệt cốt lõi của Glide

  • Tệp cấu hình TypeScript mang lại quyền kiểm soát hoàn toàn
    • Có thể dùng các API và tính năng mà web extension không bao giờ hỗ trợ được
    • Vì chính người dùng cuối tự viết tệp cấu hình nên không cần áp các ràng buộc bảo mật như với extension; đây là một mô hình bảo mật khác về bản chất
  • Những việc có thể làm trong tệp cấu hình
    • Định nghĩa ánh xạ phím tùy chỉnh
    • Truy cập API của web extension
    • Chạy tiến trình bên ngoài tùy ý
    • Định nghĩa macro và nhiều thứ khác
  • Được xây dựng trên nền Firefox nên các Firefox extension và workflow hiện có vẫn hoạt động nguyên vẹn

Ví dụ cấu hình thực tế

Tự động clone kho GitHub và mở trình soạn thảo

glide.keymaps.set("normal", "gC", async () => {  
  // extract the owner and repo from a url like 'https://github.com/glide-browser/glide'  
  const [owner, repo] = glide.ctx.url.pathname.split("/").slice(1, 3);  
  if (!owner || !repo) throw new Error("current URL is not a github repo");  
  // * clone the current github repo to ~/github.com/$owner/$repo  
  // * start kitty with neovim open at the cloned repo  
  const repo_path = glide.path.join(glide.path.home_dir, "github.com", owner, repo);  
  await glide.process.execute("gh", ["repo", "clone", glide.ctx.url, repo_path]);  
  await glide.process.execute("kitty", ["-d", repo_path, "nvim"], { cwd: repo_path });  
}, { description: "open the GitHub repo in the focused tab in Neovim" });  
  • Khi nhấn gC trên trang kho GitHub, hệ thống sẽ tự động thực hiện
    • Trích xuất tên chủ sở hữu và tên kho từ URL hiện tại
    • Clone kho vào đường dẫn ~/github.com/$owner/$repo
    • Mở neovim trong terminal kitty và chuyển đến kho vừa clone
  • Mỗi lần như vậy có thể tiết kiệm vài giây thao tác, trong khi việc thêm cấu hình chỉ mất vài phút

Chuyển nhanh sang tab lịch

glide.keymaps.set("normal", "gc", async () => {  
  const tab = await glide.tabs.get_first({ url: "https://calendar.google.com/*"; });  
  assert(tab && tab.id);  
  await browser.tabs.update(tab.id, { active: true });  
}, { description: "[g]o to [c]alendar.google.com" });  
  • Có thể chuyển ngay sang tab Google Calendar bằng phím gc

Hệ thống mode

  • Mượn khái niệm mode của Vim, mọi ánh xạ phím đều được gắn với một mode cụ thể
  • Tự động chuyển mode theo cách tương tác với trình duyệt
    • mode normal: mode mặc định
    • mode insert: tự động chuyển khi nhấp vào phần tử <input>, để ánh xạ phím không cản trở việc nhập văn bản
    • mode ignore: chuyển bằng Shift+Escape, dùng khi website xung đột với ánh xạ phím

Điều hướng bằng bàn phím

Hint mode

  • Nhấn phím f để vào hint mode
  • Hiển thị lớp phủ nhãn văn bản trên mọi phần tử có thể nhấp vào được như liên kết, nút bấm...
  • Khi gõ nhãn, phần tử tương ứng sẽ được focus và click
  • Có thể thao tác toàn bộ trang web mà không cần chuột

Những tính năng cá nhân yêu thích

  • gI: tự động focus vào ô nhập liệu hiển thị lớn nhất trên trang, một tính năng mang lại cảm giác rất kỳ diệu
  • <space><space>: chạy tab fuzzy finder để dễ dàng tìm lại tab bị thất lạc
  • <c-i><c-o>: cực kỳ quan trọng cho điều hướng tab trước đó
  • :repl: kiểm thử nhanh các thay đổi trong cấu hình
  • Hint mode: hữu ích khi không muốn với tay sang chuột
  • Giao diện kiểu which-key: giúp gợi nhớ nhiều ánh xạ phím khác nhau

Tình trạng hiện tại và khả năng sử dụng

  • Đã được dùng hàng ngày trong khoảng 6 tháng
  • Vẫn đang ở giai đoạn alpha ban đầu, nhưng đã có thể tải về cho macOS và Linux
  • Khuyến nghị xem hướng dẫn bằng lệnh :tutor (dù vẫn chưa hoàn thiện)
  • Người dùng Linux hiện vẫn phải tự giải nén và cấu hình vì chưa được đưa vào kho gói
  • Có thể xem thêm ví dụ trong cookbookdotfiles của tác giả
  • Vì là bản alpha nên chưa phải mọi API đều đã được triển khai, nhưng mục tiêu chính là cung cấp quyền kiểm soát hoàn toàn

2 bình luận

 
shakespeares 2025-10-07

Có vẻ phải dùng theo kiểu khá dị mới được. Nếu có thể dùng theo cách đủ để bù trừ những ưu điểm của GUI thì còn được..

 
GN⁺ 2025-10-03
Ý kiến trên Hacker News
  • Không hẳn đúng gu của tôi hoàn toàn, nhưng việc fork từ Firefox thay vì Chromium tạo cảm giác khá mới mẻ. Giờ cùng với Zen và Floorp, đã có tới ba bản fork Firefox được chỉnh sửa mạnh tay
    • Còn có cả Tor nữa, nên cũng có thể tính vào xu hướng này
    • Cũng có LibreWolf, và cá nhân tôi còn mong nó trở thành mặc định hơn
  • Tôi thấy ý tưởng này rất hay, và đọc bình luận nói rằng dự án được duy trì theo cách bám sát các bản vá bảo mật nên cũng thấy yên tâm
  • Tôi cũng từng gặp các giới hạn của addons.mozilla.org khi dùng Vimium C. Không xảy ra thường xuyên đến mức khiến tôi đổi trình duyệt, nhưng ngược lại tôi lại bị thu hút hơn bởi các công cụ biến toàn bộ desktop Linux thành môi trường ưu tiên bàn phím, kiểu như cách homerow làm trên macOS chẳng hạn
  • Tôi là tác giả, nếu có gì thắc mắc thì cứ hỏi bất cứ lúc nào
    • Tôi rất thích hint API, đặc biệt là việc có thể gắn hint cho cả các thành phần của trình duyệt. Nhưng tôi nghĩ người dùng nâng cao sẽ muốn dùng hệ thống hint để chọn nhiều loại phần tử khác nhau. Tôi muốn mở rộng tính năng cho phép truyền CSS selector để chỉ định phần tử nào sẽ được gắn hint. Ví dụ, người dùng có thể tạo một lệnh chọn một phần tử cụ thể rồi sao chép văn bản của nó
    • Tôi tò mò không biết có hỗ trợ DRM hay không. Muốn biết liệu có dùng được trên các dịch vụ streaming thương mại như Netflix không. Trước đây đây là vấn đề lớn với các bản fork Firefox. Ngoài ra tôi cũng muốn hỏi về Firefox Sync. Và liệu có thể gọi RPC từ tiến trình bên ngoài hay không. Ví dụ như lấy URL, danh sách hoặc nội dung của các tab đang mở, hoặc điều khiển tab từ xa để chuyển sang URL khác, tức là tận dụng để tích hợp với ứng dụng hay script khác. Firefox hiện khá thiếu ở mảng này. Cuối cùng tôi cũng muốn biết mức độ bảo mật ra sao
    • Dự án trông rất tuyệt. Tôi tò mò config có đủ linh hoạt để thiết lập keybinding theo kiểu Helix/Kakoune hay không
    • Tôi muốn biết liệu có thể dùng file config để tự động cài extension và thay đổi các thiết lập tích hợp sẵn của Firefox hay không. Vì các chương trình khác tôi đều cấu hình bằng dotfiles, nên sẽ rất hay nếu Firefox cũng có lựa chọn như vậy
  • Trông thực sự rất ấn tượng. Hiện tôi đang dùng Firefox cùng VimFX và một config.js khá phức tạp, và đã dùng như vậy một thời gian. Khi gói NixOS được merge, tôi chắc chắn sẽ thử. Nếu bạn vẫn đang dùng Firefox ESR mặc định thì tôi cực kỳ khuyến nghị VimFX. Xem https://github.com/akhodakivskiy/VimFx sẽ rõ hơn. Nhược điểm lớn nhất của VimFX là tài liệu về các API nội bộ của Firefox khá thiếu. Muốn làm những việc như quản lý tab thì những gì lẽ ra với WebExtensions API là xong rất nhanh lại phải tự đào vào source code. Điều tôi mong chờ nhất ở Glide là phần cho phép dùng các API như vậy trong file config
  • ʕ•ᴥ•ʔ Tôi phát hiện ra cái này trên Bear Blog và đang dùng thử khá vui. Tôi đang chỉnh sidebar và pinned tab giống như trên zen browser của mình rồi đưa vào bộ công cụ năng suất cho công việc để thử nghiệm. Tôi cũng đã theme phần CSS của glide-hint theo gu thẩm mỹ cá nhân bằng userChrome.css. Tôi sẽ tiếp tục theo dõi và hy vọng bạn tiếp tục làm ra thứ gì đó tuyệt vời
    1. https://freeimage.host/i/KMQu3EQ
    2. https://freeimage.host/i/KMQAJ9t
    • Tôi tò mò trung bình bạn thường mở bao nhiêu tab cùng lúc. Có khi nào bạn thấy bất tiện khi phải nhận tab chỉ bằng favicon không
  • Tôi chưa xem quá sâu vào cấu trúc source code, nhưng nếu đây là một bản fork Firefox thì tôi muốn hỏi kế hoạch tích hợp các bản vá bảo mật hay các sửa đổi từ Firefox trong tương lai sẽ như thế nào
    • Tôi triển khai bằng cách thêm file mới và áp dụng patch tự động. Khi build, source của Firefox sẽ được tải xuống rồi áp dụng patch, nên việc nâng phiên bản Firefox cũng rất dễ. Thực tế là có thể cập nhật khá thường xuyên nên tôi đang bám theo kênh Firefox beta
  • Cuối cùng thì compact mode cũng quay lại, tôi thật sự rất biết ơn. Một bản fork Firefox cũng rất đáng mừng, và concept này cực kỳ thú vị. Tôi là kiểu người dùng vim ở mọi nơi, nên nhất định phải tự mình thử
    • Tuy vậy, khi cuộn bằng j/k tôi cảm thấy chuyển động chưa được mượt lắm. Không biết có cách nào làm cho cuộn tự nhiên hơn không (cũng có thể là tôi đã lướt qua tài liệu mà bỏ sót)
  • Tôi thấy khá hay. Tôi đã dùng Vimium trên Chrome và rất hài lòng
    1. https://chromewebstore.google.com/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb
    • Tôi muốn biết liệu nó có hoạt động cả trên các trang chrome:// không. Bản Vimium cho Firefox lúc nào cũng khiến tôi thấy thiếu ở điểm này
  • Tôi đã lướt qua tài liệu và đây đúng là kiểu trình duyệt tôi hằng mơ ước. Nền tảng Firefox, hỗ trợ đầy đủ WebExt API, thậm chí còn có thể chạy lệnh bên ngoài trình duyệt, tất cả đều rất hợp ý tôi. Tôi từng ước Firefox Developer Edition được như thế này, và hôm nay nhất định sẽ dùng thử ngay