[HN Gopher] Show HN: Glide, an extensible, keyboard-focused web ...
       ___________________________________________________________________
        
       Show HN: Glide, an extensible, keyboard-focused web browser
        
       Author : probablyrobert
       Score  : 92 points
       Date   : 2025-09-30 19:43 UTC (1 days ago)
        
 (HTM) web link (blog.craigie.dev)
 (TXT) w3m dump (blog.craigie.dev)
        
       | shaneos wrote:
       | Whoa, so excited to try this out! As a regular Firefox user, does
       | it pull over my settings?
        
         | probablyrobert wrote:
         | Currently the easiest way to pull over settings I'm aware of is
         | to use Firefox Sync[0]. I haven't looked into other settings
         | import solutions yet.
         | 
         | [0]: https://www.firefox.com/en-GB/features/sync/
        
       | probablyrobert wrote:
       | Author here - happy to answer any questions :)
        
         | dandersch wrote:
         | Can it provide vim keybindings and modes inside a textbox?
        
           | probablyrobert wrote:
           | Yes! All standard input elements have vim motions support but
           | fair warning that a lot of the standard motions aren't
           | implemented yet.
        
         | Limero wrote:
         | Is it possible to automatically install extensions and set
         | native Firefox configuration through the config? All my other
         | programs are setup by just cloning my dotfiles and I really
         | wish Firefox had that option.
        
           | probablyrobert wrote:
           | You can't configure extensions yet but you can set prefs!
           | https://glide-browser.app/api#glide.prefs.set
        
             | MarsIronPI wrote:
             | I've never managed to figure out how to configure
             | extensions through the Firefox JS APIs, but installing an
             | add-on using the internal APIs isn't too hard. I do it in
             | my VimFX config.js[0]. Hope this is useful.
             | 
             | 0: https://ba.ln.ea.cx/src/marsironpi/dotfiles/tree/common/
             | .vim...
        
               | probablyrobert wrote:
               | oh that is very helpful, thanks for sharing :)
        
               | MarsIronPI wrote:
               | No problem, thanks for making Glide. I'm looking forward
               | to trying it. Also, feel free to take inspiration from
               | anything else you might stumble upon in my configs.
        
         | MarsIronPI wrote:
         | I like the hints API, especially that it can hint on browser
         | elements. However, power users may find it desirable to be able
         | to use the hints system to select arbitrary kinds of elements.
         | Perhaps you could extend the hint functionality to allow
         | callers to pass a CSS selector that determines what elements
         | get hinted? One use case is to write a command that lets the
         | user choose an element and copy its text.
        
           | probablyrobert wrote:
           | You can use CSS selectors already! https://glide-
           | browser.app/hints#excmds
           | 
           | I've used it to add keymappings so that hints only apply to
           | certain kinds of buttons on a page, e.g. https://github.com/R
           | obertCraigie/dotfiles/blob/ecfd6f66e8a77...
        
             | MarsIronPI wrote:
             | Ah, I missed that option, sorry. I was looking at
             | `glide.hints.show'. Are CSS selectors usable with that
             | function? The documentation doesn't say so. Also, would you
             | consider making it return a promise instead of taking a
             | callback? I think that would be more ergonomic.
        
               | probablyrobert wrote:
               | ah yeah sorry about that, the API docs aren't quite
               | complete yet.
               | 
               | I'd recommend just looking at the glide.d.ts[0], it
               | should be pretty readable (I hope).
               | 
               | Yes the TS API supports it as well with the `selector`
               | property:
               | 
               | ``` glide.hints.show({ selector: "..." }); ```
               | 
               | > Also, would you consider making it return a promise
               | instead of taking a callback? I think that would be more
               | ergonomic.
               | 
               | The reason it doesn't return a Promise directly is
               | because the hints that are generated are not static, try
               | scrolling while hints are active and you'll see them
               | refresh.
               | 
               | So the return type would have to be something else to
               | work well with this functionality imo.
               | 
               | [0]: https://github.com/glide-
               | browser/glide/blob/8171c5c2af000b71...
        
       | cosmic_cheese wrote:
       | While this isn't quite my cup of tea, it's nice to see Firefox
       | being forked instead of Chromium. With this, there's now at least
       | three significantly modified Firefox forks, alongside Zen and
       | Floorp.
        
       | sc68cal wrote:
       | I haven't looked at the source too deeply yet to investigate how
       | you implement the fork, but you state that it's a fork of
       | Firefox, how do you plan to integrate fixes from Firefox
       | (security, etc)?
        
         | probablyrobert wrote:
         | It's implemented as a set of patches + new files for net new
         | files I add myself, then to build it, the firefox source is
         | downloaded and patched automatically - so bumping the
         | underlying firefox version is generally very easy.
         | 
         | I'm currently actually tracking the firefox beta channel
         | because the frequent small updates are so easy to do.
        
           | sc68cal wrote:
           | great thanks
        
       | dandersch wrote:
       | I've run into the restrictions regarding addons.mozilla.org
       | myself using Vimium C, but it didn't happen often enough for me
       | to consider switching my browser over it. I think I'd rather have
       | something that makes my entire Linux desktop environment keyboard
       | centric at that point, like homerow seems to do for macOS.
        
       | asadm wrote:
       | Pretty cool.
       | 
       | I have been using Vimium[1] on Chrome which works ok.
       | 
       | 1.
       | https://chromewebstore.google.com/detail/vimium/dbepggeogbai...
        
         | MarsIronPI wrote:
         | Does it work on chrome:// pages? That always bugged me about
         | the Vimium Firefox port.
        
           | leephillips wrote:
           | It does not.
        
       | robotamerica wrote:
       | found this on your ?**? Bear Blog. having fun with it. set it up
       | like my zen browser (with the sidebar + pinned tabs) and testing
       | it out for my productivity stack at work. I themed out the glide-
       | hint css via userChrome.css to better match my aesthetics. keep
       | up the great work, i will be keenly following along.
       | 
       | 1. https://freeimage.host/i/KMQu3EQ 2.
       | https://freeimage.host/i/KMQAJ9t
        
         | probablyrobert wrote:
         | Oh wow this is very cool, thank you for sharing!!
        
           | robotamerica wrote:
           | no worries, thanks to you!
        
         | MarsIronPI wrote:
         | How many tabs do you have open on average? Do you ever have
         | trouble finding tabs with just being able to see the favicon?
        
           | robotamerica wrote:
           | i typically have 5 tabs open, no more, no less. i always have
           | them in the same order so that i can navigate via alt+1,
           | alt+2, alt+3, etc.. one tab is always my personalised
           | homescreen which has all the main links+software i use in a
           | day. having them in the same order means i don't even need to
           | look at the sidebar to navigate to them, it just helps to see
           | what tab i am focused on sometimes.
           | 
           | with glide you can also make keymaps:
           | 
           | glide.keymaps.set("normal", "gd", () =>
           | openOrFocus("docs.google.com/document",
           | "https://docs.google.com"), { description: "Go Docs" });
           | 
           | so i can close a tab quickly in normal mode using: tx. then
           | hit gd to open google docs as an example.
           | 
           | i do have a hidden bookmarks bar with a ton of junk and sites
           | i rarely open, but it is there if i need to find something.
        
             | MarsIronPI wrote:
             | [delayed]
        
       | MarsIronPI wrote:
       | This looks really cool! My current setup is Firefox with VimFX[0]
       | and an elaborate config.js, but when the NixOS package gets
       | merged I will definitely try it.
       | 
       | For anyone wanting to stick to stock Firefox ESR, I highly
       | recommend checking out VimFX.
       | 
       | 0: https://github.com/akhodakivskiy/VimFx
       | 
       | The big downside of VimFX compared to Glide is lack of Firefox
       | internal API documentation. I've had to dig through Firefox
       | source code several times to find out how to do things e.g.
       | wrangle tabs that would have been easy to do with the
       | WebExtensions APIs. The fact that Glide makes these APIs
       | available in the config file is the part I'm most excited about.
        
       | MitPitt wrote:
       | Cool. Currently on some websites I hit TAB until I reach the
       | needed button/input. Try it right now on hacker news.
        
       | TrevorFSmith wrote:
       | That's a sweet idea and I'm glad to see your comment about
       | maintaining it as a patch on top of Firefox sources so you can
       | roll in their security fixes.
        
       ___________________________________________________________________
       (page generated 2025-10-01 23:00 UTC)