[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)