[HN Gopher] HopTab - Open source macOS app switcher and tiler th...
       ___________________________________________________________________
        
       HopTab - Open source macOS app switcher and tiler that replaces
       Cmd+Tab
        
       Author : robhati
       Score  : 118 points
       Date   : 2026-03-22 06:23 UTC (16 hours ago)
        
 (HTM) web link (www.royalbhati.com)
 (TXT) w3m dump (www.royalbhati.com)
        
       | robhati wrote:
       | I've been building HopTab as a free alternative to the
       | combination of Cmd+Tab replacers and window managers. It started
       | as a simpleapp switcher -- pin your apps, Option+Tab through
       | them. But the latest release adds a lot.
       | 
       | *What's new*
       | 
       | Global window tiling shortcuts -- Ctrl+Opt+Arrow for halves,
       | Ctrl+Opt+UIJK for quarters, Ctrl+Opt+DFG for thirds. Works
       | anytime, no switcher needed. All 17 directions are configurable.
       | 
       | Cycle through sizes -- press Ctrl+Opt+Left twice and the window
       | goes from 1/2 to 1/3, press again for 2/3. Same for right. This
       | is the Rectangle feature I missed most.
       | 
       | Undo snap -- Ctrl+Opt+Z restores the previous window position.
       | Every snap saves the old frame automatically.
       | 
       | Move between monitors -- Ctrl+Opt+Cmd+Arrow throws the window to
       | the next display with proportional placement.
       | 
       | Configurable gaps -- 0-20pt gaps between snapped windows.
       | Settings slider with live preview.
       | 
       | Profile switcher shows app icons -- instead of generic person
       | avatars, the Option+` overlay shows a grid of each profile's
       | actual pinned app icons.
       | 
       | *What was already there*
       | 
       | Pin apps, Option+Tab to cycle through only those Profiles per
       | workflow (Coding, Design, etc.) with per-profile hotkeys Layout
       | templates (50/50, IDE 60/40, three columns, 2x2 grid) Session
       | save/restore -- saves every window's position, size, z-order per
       | profile Assign profiles to macOS Spaces -- auto-switches when you
       | swipe desktops Window picker for multi-window apps Cmd+Q/H/M
       | while switcher is open Sticky notes per profile What it replaces
       | 
       | I was using Rectangle + AltTab + some manual window dragging.
       | HopTab combines the app switching, window tiling, and workspace
       | management into one app. The main difference from AltTab is that
       | you pin specific apps instead of seeing everything. The main
       | difference from Rectangle is that tiling is integrated with
       | profiles and layouts -- snap your windows, save the session,
       | restore it tomorrow.
       | 
       | Free, open source, no telemetry. ~3MB binary.
       | 
       | Website: https://www.royalbhati.com/hoptab
       | 
       | GitHub: https://github.com/royalbhati/HopTab
        
         | hirenj wrote:
         | This looks very cool. Does the window picker for multi-window
         | apps work with the pinning? So if I have a safari windows I
         | want to have associated with a profile, and the option-tab will
         | ignore all the other windows?
         | 
         | It is a constant pain when I cmd-tab in a space with safari,
         | and it throws me out of the space to another one because the
         | window that gets focus isn't the "closest" one on the current
         | space.
        
           | robhati wrote:
           | right now it shows all safari windows not just the ones on
           | your current space, so the "wrong space" problem could still
           | happen. I'll look into Space aware window filtering.
        
       | ashwinnair99 wrote:
       | Cmd+Tab is one of those things that shipped in 2003 and nobody at
       | Apple has touched since. Surprised it took this long for someone
       | to properly replace it.
        
         | wobfan wrote:
         | I mean to be fair, (1) there are replacements, AltTab and
         | Switcher for example, and (2) why replace ot touch something
         | that isn't broken? Cmd+Tab is supposed to switch to the next
         | open window, and it does exactly that.
        
           | toxik wrote:
           | No, Cmd+Tab switches to the next application. This is what
           | people get surprised and annoyed by. I've been using Mac for
           | 15 years now and I find it super awkward to switch between
           | windows within an app. On my machine it's Cmd ` or something
           | strange like that. This is also doubly bound sometimes, such
           | that I can only cycle forwards OR backwards. Complete mess.
        
             | kstenerud wrote:
             | It's absolutely terrible. Want to get one of your terminals
             | and one of your vs code windows next to each other to check
             | something visually? Can't do it. CMD-tab brings ALL of your
             | terminal windows to the front, or ALL of your vs code
             | windows :/
             | 
             | I still can't understand who ever thought this was a good
             | idea...
        
               | CharlesW wrote:
               | > _CMD-tab brings ALL of your terminal windows to the
               | front, or ALL of your vs code windows_
               | 
               | Cmd+Tab to the app, then press | to choose a window from
               | the app. Arrange using the basic OS window manager or
               | your favorite 3rd-party window manager.
        
               | thiht wrote:
               | Why are you saying it like it doesn't suck?
        
       | vr46 wrote:
       | Looks like this is going to find a place full-time on my mac and
       | replace Rectangle, only problem being I don't have more menu bar
       | icon space.
        
         | robhati wrote:
         | wish I could solve your menubar mess
        
         | walthamstow wrote:
         | I use Rectangle but I don't have it in the menu bar. If I want
         | the control panel I'll just use Spotlight to bring it up.
        
         | shekhar101 wrote:
         | https://github.com/jordanbaird/Ice Try this. I am not
         | affiliated in anyway. It's my must have macos app.
        
           | thiht wrote:
           | Doesn't work anymore since Tahoe
        
             | luckman212 wrote:
             | Thaw is the fork that has been updated and currently still
             | maintained.
             | 
             | https://github.com/stonerl/Thaw
        
       | egeozcan wrote:
       | As someone who switched to macos from the hot pile of mess called
       | windows last year, my biggest point of pain was the window
       | management. I use Rectangle Pro, and it helps a lot, but IMHO
       | workspace integration is poor still.
       | 
       | I'll give this one a try. BTW, if this works, can you please
       | consider asking money for it? Keep it open source but perhaps add
       | a friction-less support channel (read: not github issues) for
       | paying customers. Just an idea.
       | 
       | In any case, thanks for the hard work and making it open-source.
        
         | robhati wrote:
         | thanks for the kind words and I might create a discord server
         | for the support but I havent really thought about it.
        
         | frizlab wrote:
         | There is AltTab[0] (free and open-source) also, to get a
         | windows-ish windows management on macOS.
         | 
         | [0] https://github.com/lwouis/alt-tab-macos
        
           | thiht wrote:
           | I've switched to macOS from Windows 8 years ago and I still
           | find window management completely unusable without AltTab.
           | The thing is, on a French keyboard layout you can't even use
           | cmd+backtick to switch between windows if the same
           | application, it doesn't work. Separating cmd+tab and
           | cmd+backtick is moronic, but it's not even possible if you're
           | not using a qwerty keyboard.
           | 
           | AltTab and Maccy are the 2 apps I can't live without on
           | macOS. Rectangle used to be in that list too, but I managed
           | to not need it anymore since Apple introduced native tiling a
           | few versions ago. Now they just need to introduce native
           | clipboard history and sane alt+tab, hopefully this decade.
        
             | frizlab wrote:
             | > it's not even possible if you're not using a qwerty
             | keyboard
             | 
             | Well... it _used to be_ possible.
             | 
             | I was using an AZERTY keyboard in my youth, and was
             | definitely able to switch windows using cmd-< and/or cmd->.
             | (I just tried, it is indeed not possible anymore as per my
             | limited testing, for some reason...)
             | 
             | > Separating cmd+tab and cmd+backtick is moronic
             | 
             | Not for my taste. I like the app-centric worldview. I can
             | understand that not everybody does though.
        
       | setnone wrote:
       | This looks awesome and polished. I've made similar app for myself
       | coming from similar setup (Rectangle, altTab)
       | 
       | I needed custom icons, custom names for windows, obligatory
       | custom and persistent order, 'always on' option and keyboard nav
       | for showing/moving windows from the strip. Could not be happier.
        
       | Bigsy wrote:
       | Does it have custom layouts? I can see it mentioned, I have
       | rotated monitors so none of the standard ones really suit.
        
         | robhati wrote:
         | they are supported under the hood but the UI for creating them
         | isnt built yet but its on the roadmap.I'll prioritize it (:
        
       | p2hari wrote:
       | I think there is too much customization and options. Maybe having
       | a .*aml/json file would be good.
       | 
       | I have a few hammerspoon customization for me to choose and open
       | the applications I have. I put those on different desktop but use
       | this to open applications. Whereas for the tiling itself use
       | either aerospace or Loop.
       | 
       | Here is the hammerspoon code for opening the apps using keyboard
       | more like vim jump options.
       | 
       | ```
       | 
       | ----show all windows of the clicked application
       | 
       | local function showAppWindows(window) local app =
       | window:application() local appWindows = app:allWindows() if
       | #appWindows > 1 then hs.hints.windowHints(appWindows,
       | function(selectedWindow) selectedWindow:focus() local frame =
       | selectedWindow:frame() hs.mouse.setAbsolutePosition({ x = frame.x
       | + frame.w / 2, y = frame.y + frame.h / 2 }) end) else
       | window:focus() local frame = window:frame()
       | hs.mouse.setAbsolutePosition({ x = frame.x + frame.w / 2, y =
       | frame.y + frame.h / 2 }) end end
       | 
       | hs.hotkey.bind({ "cmd", "ctrl", "alt", "shift" }, "p", function()
       | hs.hints.windowHints(nil, showAppWindows) end)
       | 
       | ----window search modal
       | 
       | local function createWindowSearchModal() local allWindows =
       | hs.window.allWindows() local windowChoices = {}
       | for i, window in ipairs(allWindows) do             if
       | window:title() and window:title() ~= "" then
       | local app = window:application()                 local appName =
       | app and app:name() or "Unknown"
       | table.insert(windowChoices, {                     text = appName
       | .. " - " .. window:title(),                     subText = "Window
       | " .. i,                     window = window,
       | id = i                 })             end         end
       | local chooser = hs.chooser.new(function(choice)             if
       | choice and choice.window then
       | choice.window:focus()                 local frame =
       | choice.window:frame()                 hs.mouse.absolutePosition({
       | x = frame.x + frame.w / 2, y = frame.y + frame.h / 2 })
       | end         end)              chooser:choices(windowChoices)
       | chooser:searchSubText(true)         chooser:show()
       | 
       | end
       | 
       | hs.hotkey.bind({ "cmd", "ctrl", "alt", "shift" }, "o", function()
       | createWindowSearchModal() end)
       | 
       | ---- window search modal for active application only
       | 
       | local function createActiveAppWindowSearchModal()
       | 
       | local frontmostApp = hs.application.frontmostApplication() if not
       | frontmostApp then hs.alert.show("No active application detected")
       | return end local appWindows = frontmostApp:allWindows() local
       | windowChoices = {} for i, window in ipairs(appWindows) do if
       | window:title() and window:title() ~= "" then
       | table.insert(windowChoices, { text = window:title(), subText =
       | "Window " .. i, window = window, id = i }) end end if
       | #windowChoices == 0 then hs.alert.show("No windows found for
       | active application") return end local chooser =
       | hs.chooser.new(function(choice) if choice and choice.window then
       | choice.window:focus() local frame = choice.window:frame()
       | hs.mouse.absolutePosition({ x = frame.x + frame.w / 2, y =
       | frame.y + frame.h / 2 }) end end) chooser:choices(windowChoices)
       | chooser:searchSubText(true) chooser:show() end
       | 
       | hs.hotkey.bind({ "cmd" }, "1", function()
       | createActiveAppWindowSearchModal() end) ```
        
         | crefiz wrote:
         | You cannot seriosly think that dropping a whole snippet as a
         | comment is a smart move
        
           | p2hari wrote:
           | I know I was not going for it. After I pasted I realized I
           | should have put it in a Gist and linked here. I had already
           | edited the code twice and still had issues. I could no longer
           | edit it. I am also not seeing a delete option too.
        
       | ggsp wrote:
       | Very cool to see movement in this space, and congrats on
       | launching! Agree that it looks polished, I also like that you
       | chose to show screenshots from settings on the LP.
       | 
       | I use yabai and I've been wanting something similar to what you
       | built. Instead of one desktop per workspace, I'd like to be able
       | to have "sets of desktops" per workspace as it were, because not
       | all work I do that involves multiple apps needs them on the same
       | screen at all times (or even ever).
       | 
       | As an example: I might have IDE + browser on one desktop,
       | Fork.app and local server on another, and Music.app on a third
       | (as I like to listen to music while I work). So to me, those are
       | all related, but don't make sense on one desktop.
       | 
       | The other consideration is that I also tend to use tiling more on
       | bigger displays. Since I sometimes do work with just the builtin
       | display, I have to reorganize windows and desktops every time I
       | switch, which is a bit of a PITA. With a solution like yours, but
       | for sets of desktops, I could just switch to a different set and
       | be done in seconds.
       | 
       | Is something similar possible using HopTab?
        
         | robhati wrote:
         | not fully yet but what you can do today is create separate
         | profiles for each Space (ide+browser on one, Fork+server on
         | another,music on a third) and they auto switch as you swipe
         | between desktops. So the per Space part works but what's
         | missing is the "group" bit there's no way to say "these 3
         | profiles are all part of my Coding workspace, activate them all
         | at once." That's exactly where I want to take this though. The
         | building blocks are mostly there, just need that workspace
         | layer on top. The display switching thing with snapshotting per
         | display config so laptop only vs docked setups just work is a
         | bit PITA to build but I am working on it
        
       | icapybara wrote:
       | Rectangle is a nice no-config solution for me.
        
       | easeout wrote:
       | Just having watched the video, the session setup, close, and
       | launch seem tied to the idea of a single window per app. Is that
       | right? What kinds of workflows is this explicitly meant vs. not
       | meant to support?
       | 
       | The way a user switches window sets with backtick and app windows
       | within them with tab is inverted from the usual major and minor
       | shortcuts. Normally you switch apps with tab and windows within
       | them with backtick, or in the case of stage manager, you switch
       | window sets with tab and windows within them with backtick. As a
       | default I think the keys make less sense than they could.
        
       | 60pfennig wrote:
       | I have a really wide screen (52') and all these window managment
       | apps fails for me at the point that I only can divide the screen
       | in thirds or halfs. Thirds for three apps is too small, halfes to
       | large. I need custom areas like 3/7, 3/7, 1/7. The only app which
       | i found which this offers is 1piece
        
         | steezeburger wrote:
         | Fifty two feet?! Damn!
        
           | bombcar wrote:
           | https://www.youtube.com/watch?v=gbDostWXpcU
        
         | JoBrad wrote:
         | Is humblebragcomplain a word? ;)
        
           | Imustaskforhelp wrote:
           | I like to call it "suffering from success" from the meme
           | 
           | https://knowyourmeme.com/memes/subcultures/suffering-from-
           | su...
        
         | Lammy wrote:
         | Divvy handles this very well. It's been my go-to for like
         | fifteen years: https://mizage.com/divvy/
        
           | chrisweekly wrote:
           | Same. Divvy is simple and effective and "just works".
        
       | varispeed wrote:
       | Is there any app switcher that doesn't need manual reload of
       | configuration each time you open a new app so that it sees it?
        
       ___________________________________________________________________
       (page generated 2026-03-22 23:01 UTC)