Skip to main content
Logo
Overview

Porting Grabbit to Windows: The Boring Bugs Nobody Warns You About

July 29, 2026
3 min read

Grabbit was built on Linux, for Linux, without much thought about anywhere else. Then people asked for a Windows build. “Sure,” seemed like a reasonable thing to say at the time.

It shipped. It works. It was also, quietly, one of the least fun weeks in the project so far — and not for the reason you’d expect.

The bug nobody puts in a portfolio

Nothing about the core downloading logic changed. Grabbit talks to yt-dlp the same way on both platforms, the queue behaves the same, format selection is identical. That part was never the problem.

The problem was the window.

Grabbit uses a frameless window — no native title bar, so the interface can look like an actual app instead of a browser tab that lost its browser. On Linux, dragging that window around, minimizing it, maximizing it, closing it — all of that just worked, because the code was written and tested there first.

On Windows, none of it was free. Every one of those interactions had to be rebuilt to feel native, not “technically functional.” Dragging a frameless window on Windows without it feeling floaty or laggy is its own small project. So is getting minimize and maximize to behave exactly like every other Windows app, instead of almost like one.

Note

This is the part that never makes it into a changelog highlight reel: “made the window drag correctly” doesn’t sound like an achievement, but it took longer than the playlist support did.

The flash

Then there was the flash.

For a fraction of a second on startup, Windows users would see a flicker — white or black, depending on the theme — before the actual interface painted. Blink and you’d miss it. Except you wouldn’t, really. It’s exactly the kind of thing that makes an app feel unfinished even when everything underneath it works perfectly.

Chasing that down meant staring at window initialization order for longer than felt reasonable for something that lasts a few hundred milliseconds. It got fixed. It’s the kind of fix where the only visible result is that nothing visibly happens anymore.

What shipped

Version 1.0.1 is the actual list, and it’s shorter than the debugging time behind it deserves:

  • Native Windows build — a portable .zip, no installer, no admin prompt
  • Frameless window with proper native dragging, minimize, maximize and close
  • The startup flash: gone

The honest takeaway

Cross-platform desktop software has a specific way of humbling you: the hard-sounding features — a download queue, concurrent transfers, per-format playlist control — are, relatively speaking, the easy part. They’re pure logic, and logic behaves the same everywhere. The parts that eat entire evenings are the ones that never make it into a feature list at all: how a window drags, how it feels when it opens.

Nobody downloads an app for how well its window drags. They just quietly stop trusting it if that part feels off. So it got fixed, released, and put here instead of in the marketing copy — where this kind of work usually never gets mentioned at all.

Grabbit on GitHub — free, open source, Linux and Windows.

Loading comments...