{"slug": "win32", "name": "Win32", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 11, "commenters": 18, "warners": 4, "score": 5.993, "rising": -2.27, "first": "2025-11-20", "latest": "2026-10-27", "why": "plain Win32 API is a perfectly viable option if you are using C++", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 11, "neutral": 2, "compare": 2, "warn": 3}, "spark": [1, 0, 1, 0, 8, 0, 0, 0, 0, 0, 0, 1], "listed": true, "loved": [], "caveat": "", "short_quote": "plain Win32 API is a perfectly viable option if you are using C++", "kind": "", "icon": true, "domain": null, "github_repo": null, "official_url": "https://learn.microsoft.com/windows/win32/", "pricing": "", "aliases": ["Win32", "Win32 API"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 803022209, "item_id": 50188888, "url": "https://news.ycombinator.com/item?id=50188888", "by": "okanat", "date": "2026-10-21", "version": null, "stance": "recommend", "quote": "Win32 is a much better abstraction and much better \"narrow waist\" point than X11 was.", "excerpt": "> Also, the optimism just highlighted how out of touch they were, that they thought people would actually just rewrite everything in 5 years is bizarre and suggests a fundamental lack of understanding to me. Same thing with Wayland and GPLv3 to me. It is the fundamental difference in the developer's origin/experience in FOSS projects vs commercial software. However, there is an even bigger paradigm difference underne", "context": "", "use_case": "", "switched_from": "", "story": "Why Windows 11 still ships with Windows 95's memory manager hidden inside it"}, {"id": 760174160, "item_id": 47510885, "url": "https://news.ycombinator.com/item?id=47510885", "by": "greiskul", "date": "2026-03-24", "version": null, "stance": "recommend", "quote": "Win32 is the only stable ABI on Linux", "excerpt": "As someone once said it best, Win32 is the only stable ABI on Linux: https://blog.hiler.eu/win32-the-only-stable-abi/", "context": "", "use_case": "", "switched_from": "", "story": "Wine 11 rewrites how Linux runs Windows games at kernel with massive speed gains"}, {"id": 759718064, "item_id": 47482379, "url": "https://news.ycombinator.com/item?id=47482379", "by": "magicalhippo", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "Win32 makes it reasonably easy to skin things", "excerpt": "> Try writing something like Spotify in WinAPI and that's not even a complicated GUI either. Fruityloops, now FL Studio, was written in Delphi and to my knowledge still is[1]. When ot launched there were no options but Win32 for Delphi. That's just one example. Win32 makes it reasonably easy to skin things, and back in the 2000s a lit of programs did. [1]: https://blogs.embarcadero.com/fl-studio-is-a-massively-popula", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759717392, "item_id": 47482337, "url": "https://news.ycombinator.com/item?id=47482337", "by": "ojeda", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "there is a ton of tooling and docs around it", "excerpt": "Yeah, Win32 (Windows API) will be around for a long time one way or the other, and there is a ton of tooling and docs around it. Even for non-Windows usage it is to be considered in certain situations. > Don't be swayed by the propaganda. Especially if your application has essentially no untrusted input. Even without untrusted inputs, in 2026 one should think twice before selecting C++ for a new project. There are st", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759710464, "item_id": 47481904, "url": "https://news.ycombinator.com/item?id=47481904", "by": "jerhewet", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "THIS is what Win32 is capable of.", "excerpt": "Steve Gibson, Gibson Research. https://www.grc.com/freepopular.htm Just scroll down the page and look at the size of the completely self-contained executable programs. THIS is what Win32 is capable of. Something we always had with Win32 that was thrown away with .Net and C#. And _please_ just spare me your opinions of how Steve Gibson \"doesn't know anything about security\". That's not what's important here. What's im", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 804125264, "item_id": 50257829, "url": "https://news.ycombinator.com/item?id=50257829", "by": "mike_hearn", "date": "2026-10-27", "version": null, "stance": "warn", "quote": "Win32 has been hardly maintained and it's riddled with compatibility problems", "excerpt": "They don't follow the user's color scheme properly though. Win32 has been hardly maintained and it's riddled with compatibility problems, so you need to go through a complicated opt-in dance and test thoroughly for any idea introduced in the past 20 years or so. For instance, hidpi support isn't 'free' like it is in any modern toolkit. https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/ui/apply-windows-", "context": "", "use_case": "", "switched_from": "", "story": "Oldest GUI application that still runs on Windows 11"}, {"id": 759724784, "item_id": 47482799, "url": "https://news.ycombinator.com/item?id=47482799", "by": "domenicd", "date": "2026-03-22", "version": null, "stance": "warn", "quote": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support.", "excerpt": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support. Win32/MFC also have no high-DPI support, so you get gross upscaling. (WinForms supposedly has some support for high DPI, but with many open issues. [1]) Now, I'm not 100% sure, since there are so many commenters in this thread saying \"just use Win32/MFC like a real man\". (Most of them ignoring the memory s", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759670513, "item_id": 47479407, "url": "https://news.ycombinator.com/item?id=47479407", "by": "tibbydudeza", "date": "2026-03-22", "version": null, "stance": "warn", "quote": "Recently I switched from C++/Win32 to Golang and walk", "excerpt": "Same here - our IOT device is a i5 running Windows IOT. Recently I switched from C++/Win32 to Golang and walk.", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 749968049, "item_id": 46873003, "url": "https://news.ycombinator.com/item?id=46873003", "by": "super256", "date": "2026-02-03", "version": null, "stance": "warn", "quote": "Of course you can still build on MFC or Win32, but meh.", "excerpt": "Also, modern native UIs became looking garbage on desktops / laptops, where you usually want a high information density. Just look at this TreeView in WinUI2 (w/ fluent design) vs a TreeView in the good old event viewer. It just wastes SO MUCH space! https://f003.backblazeb2.com/file/sharexxx/ShareX/2026/02/mmc_L0FCkgFN4HoG2RgZyd.png And imo it's just so much easier to write a webapp, than fiddle with WinUI. Of cours", "context": "", "use_case": "", "switched_from": "", "story": "The Codex App"}]}], "who": [], "tags": [], "use_cases": ["native windows gui development", "native windows development"], "compared": [{"slug": "mfc", "name": "MFC", "co": 4, "switched_from": 0, "switched_to": 0}, {"slug": "windows-forms", "name": "Windows Forms", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "qt", "name": "Qt", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "net", "name": ".NET", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "uwp", "name": "UWP", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "wpf", "name": "WPF", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47475938", "title": "Windows native app development is a mess", "mentions": 8}, {"url": "https://news.ycombinator.com/item?id=46738178", "title": "Winapp, the Windows App Development CLI \u2013 Windows Developer Blog", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=50248055", "title": "Oldest GUI application that still runs on Windows 11", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=50159726", "title": "Why Windows 11 still ships with Windows 95's memory manager hidden inside it", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47776667", "title": "Direct Win32 API, Weird-Shaped Windows, and Why They Mostly Disappeared", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47651703", "title": "Microsoft Hasn't Had a Coherent GUI Strategy Since Petzold", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {}, "2026-01": {"neutral": 2, "recommend": 1}, "2026-02": {"warn": 1}, "2026-03": {"warn": 1, "recommend": 8}, "2026-04": {"compare": 2}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {"recommend": 1, "warn": 1}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 804125264, "item_id": 50257829, "url": "https://news.ycombinator.com/item?id=50257829", "by": "mike_hearn", "date": "2026-10-27", "version": null, "stance": "warn", "quote": "Win32 has been hardly maintained and it's riddled with compatibility problems", "excerpt": "They don't follow the user's color scheme properly though. Win32 has been hardly maintained and it's riddled with compatibility problems, so you need to go through a complicated opt-in dance and test thoroughly for any idea introduced in the past 20 years or so. For instance, hidpi support isn't 'free' like it is in any modern toolkit. https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/ui/apply-windows-", "context": "", "use_case": "", "switched_from": "", "story": "Oldest GUI application that still runs on Windows 11"}, {"id": 803022209, "item_id": 50188888, "url": "https://news.ycombinator.com/item?id=50188888", "by": "okanat", "date": "2026-10-21", "version": null, "stance": "recommend", "quote": "Win32 is a much better abstraction and much better \"narrow waist\" point than X11 was.", "excerpt": "> Also, the optimism just highlighted how out of touch they were, that they thought people would actually just rewrite everything in 5 years is bizarre and suggests a fundamental lack of understanding to me. Same thing with Wayland and GPLv3 to me. It is the fundamental difference in the developer's origin/experience in FOSS projects vs commercial software. However, there is an even bigger paradigm difference underne", "context": "", "use_case": "", "switched_from": "", "story": "Why Windows 11 still ships with Windows 95's memory manager hidden inside it"}, {"id": 764487344, "item_id": 47780459, "url": "https://news.ycombinator.com/item?id=47780459", "by": "peteforde", "date": "2026-04-15", "version": null, "stance": "compare", "quote": "whether Win32 is still technically a viable choice", "excerpt": "From what I understand, there's now a substantial stack of Windows app frameworks from Win32 to MFC and then 4-6 others that came after. There was a good post covering this last month: https://www.jsnover.com/blog/2026/03/13/microsoft-hasnt-had-a-coherent-gui-strategy-since-petzold/ The addition of frameworks like Qt and yes, web wrappers certainly complicates things unless you're presumably deep in it. What isn't cl", "context": "", "use_case": "", "switched_from": "", "story": "Direct Win32 API, Weird-Shaped Windows, and Why They Mostly Disappeared"}, {"id": 762527760, "item_id": 47657985, "url": "https://news.ycombinator.com/item?id=47657985", "by": "functional_dev", "date": "2026-04-06", "version": null, "stance": "compare", "quote": "what surprised me is how different the rendering architecture is for each framework.", "excerpt": "what surprised me is how different the rendering architecture is for each framework. Win32 -> message loops & GDI Winforms -> managed C# via P/Invoke WPF -> throwse all away and uses DirectX UWP -> Appcontainer sandboxing WinUI -> decouples from OS entirely This visual breakdown helped me to see it clearly - https://vectree.io/c/evolution-of-windows-gui-frameworks-from-win32-to-winui-3", "context": "", "use_case": "", "switched_from": "", "story": "Microsoft Hasn't Had a Coherent GUI Strategy Since Petzold"}, {"id": 760174160, "item_id": 47510885, "url": "https://news.ycombinator.com/item?id=47510885", "by": "greiskul", "date": "2026-03-24", "version": null, "stance": "recommend", "quote": "Win32 is the only stable ABI on Linux", "excerpt": "As someone once said it best, Win32 is the only stable ABI on Linux: https://blog.hiler.eu/win32-the-only-stable-abi/", "context": "", "use_case": "", "switched_from": "", "story": "Wine 11 rewrites how Linux runs Windows games at kernel with massive speed gains"}, {"id": 759724784, "item_id": 47482799, "url": "https://news.ycombinator.com/item?id=47482799", "by": "domenicd", "date": "2026-03-22", "version": null, "stance": "warn", "quote": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support.", "excerpt": "From what I understand, Win32/MFC/WinForms inherently are stuck around Vista visuals, with no dark mode support. Win32/MFC also have no high-DPI support, so you get gross upscaling. (WinForms supposedly has some support for high DPI, but with many open issues. [1]) Now, I'm not 100% sure, since there are so many commenters in this thread saying \"just use Win32/MFC like a real man\". (Most of them ignoring the memory s", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759718064, "item_id": 47482379, "url": "https://news.ycombinator.com/item?id=47482379", "by": "magicalhippo", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "Win32 makes it reasonably easy to skin things", "excerpt": "> Try writing something like Spotify in WinAPI and that's not even a complicated GUI either. Fruityloops, now FL Studio, was written in Delphi and to my knowledge still is[1]. When ot launched there were no options but Win32 for Delphi. That's just one example. Win32 makes it reasonably easy to skin things, and back in the 2000s a lit of programs did. [1]: https://blogs.embarcadero.com/fl-studio-is-a-massively-popula", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759717392, "item_id": 47482337, "url": "https://news.ycombinator.com/item?id=47482337", "by": "ojeda", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "there is a ton of tooling and docs around it", "excerpt": "Yeah, Win32 (Windows API) will be around for a long time one way or the other, and there is a ton of tooling and docs around it. Even for non-Windows usage it is to be considered in certain situations. > Don't be swayed by the propaganda. Especially if your application has essentially no untrusted input. Even without untrusted inputs, in 2026 one should think twice before selecting C++ for a new project. There are st", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759710464, "item_id": 47481904, "url": "https://news.ycombinator.com/item?id=47481904", "by": "jerhewet", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "THIS is what Win32 is capable of.", "excerpt": "Steve Gibson, Gibson Research. https://www.grc.com/freepopular.htm Just scroll down the page and look at the size of the completely self-contained executable programs. THIS is what Win32 is capable of. Something we always had with Win32 that was thrown away with .Net and C#. And _please_ just spare me your opinions of how Steve Gibson \"doesn't know anything about security\". That's not what's important here. What's im", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759686833, "item_id": 47480427, "url": "https://news.ycombinator.com/item?id=47480427", "by": "nozzlegear", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "", "excerpt": "Just wanted to add a shoutout to WinJS for posterity, with which I built a Windows 8 app that I had published to the Windows Store for a brief period of time. Then they open-sourced the UI part of WinJS and decided it was just a web framework instead of an officially supported method for building Windows apps iirc, which was the end of my foray into the Windows store. https://github.com/winjs/winjs", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759673760, "item_id": 47479610, "url": "https://news.ycombinator.com/item?id=47479610", "by": "domenicd", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "", "excerpt": "Judging from the screenshots, that doesn't produce Windows 11 style UIs, right? I.e. it contributes to the problem exploree at https://ntdotdev.wordpress.com/2023/01/01/state-of-the-windows-how-many-layers-of-ui-inconsistencies-are-in-windows-11/", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759671680, "item_id": 47479480, "url": "https://news.ycombinator.com/item?id=47479480", "by": "bjourne", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "It's absolutely trivial in comparison.", "excerpt": "Here is how to get Win32 up and running: https://learn.microsoft.com/en-us/windows/win32/learnwin32/your-first-windows-program It's absolutely trivial in comparison. Same thing with Xlib; < 100 lines of C code is enough for a simple app.", "context": "", "use_case": "", "switched_from": "", "story": "I Hate: Programming Wayland Applications"}, {"id": 759671616, "item_id": 47479476, "url": "https://news.ycombinator.com/item?id=47479476", "by": "apankrat", "date": "2026-03-22", "version": null, "stance": "recommend", "quote": "plain Win32 API is a perfectly viable option if you are using C++", "excerpt": "Let me chime in and say that plain Win32 API is a perfectly viable option if you are using C++ (or another \"OO\" language) and if you are willing to sink a couple of weeks into writing your own MFC-like wrapper. Clearly this is not an option for those who are just starting up with Windows GUI work, but with little experience it is really a matter of 2-3 weeks of ground work and then you have full control over all nuan", "context": "", "use_case": "Native Windows GUI development", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 759670513, "item_id": 47479407, "url": "https://news.ycombinator.com/item?id=47479407", "by": "tibbydudeza", "date": "2026-03-22", "version": null, "stance": "warn", "quote": "Recently I switched from C++/Win32 to Golang and walk", "excerpt": "Same here - our IOT device is a i5 running Windows IOT. Recently I switched from C++/Win32 to Golang and walk.", "context": "", "use_case": "", "switched_from": "", "story": "Windows native app development is a mess"}, {"id": 749968049, "item_id": 46873003, "url": "https://news.ycombinator.com/item?id=46873003", "by": "super256", "date": "2026-02-03", "version": null, "stance": "warn", "quote": "Of course you can still build on MFC or Win32, but meh.", "excerpt": "Also, modern native UIs became looking garbage on desktops / laptops, where you usually want a high information density. Just look at this TreeView in WinUI2 (w/ fluent design) vs a TreeView in the good old event viewer. It just wastes SO MUCH space! https://f003.backblazeb2.com/file/sharexxx/ShareX/2026/02/mmc_L0FCkgFN4HoG2RgZyd.png And imo it's just so much easier to write a webapp, than fiddle with WinUI. Of cours", "context": "", "use_case": "", "switched_from": "", "story": "The Codex App"}, {"id": 748955665, "item_id": 46809729, "url": "https://news.ycombinator.com/item?id=46809729", "by": "tcfhgj", "date": "2026-01-29", "version": null, "stance": "neutral", "quote": "I have been using WinRT and Win32", "excerpt": "I have been using WinRT and Win32, and I find WinRT much more pleasant to use", "context": "", "use_case": "", "switched_from": "", "story": "Winapp, the Windows App Development CLI \u2013 Windows Developer Blog"}, {"id": 748951376, "item_id": 46809461, "url": "https://news.ycombinator.com/item?id=46809461", "by": "delta_p_delta_x", "date": "2026-01-29", "version": null, "stance": "recommend", "quote": "Plain Win32 needs a renaissance.", "excerpt": "> plain Win32 Plain Win32 needs a renaissance. I worked with it and felt like a wizard. Message boxes, dialogue boxes, wizards, hammered out in pure C++. Combined with the Windows Implementation Library[1] I was writing fast, modern code. [1]: https://github.com/microsoft/wil", "context": "", "use_case": "native Windows development", "switched_from": "", "story": "Winapp, the Windows App Development CLI \u2013 Windows Developer Blog"}, {"id": 743645426, "item_id": 46477839, "url": "https://news.ycombinator.com/item?id=46477839", "by": "pjmlp", "date": "2026-01-03", "version": null, "stance": "neutral", "quote": "Win32, the C API, is stagnant since Windows XP", "excerpt": "It was the goal with UAP and UWP, but they clearly messed up the execution. https://learn.microsoft.com/en-us/uwp/win32-and-com/win32-and-com-for-uwp-apps Win32, the C API, is stagnant since Windows XP, other than some ...Ex and ...ExN kind of additions. As mentioned above, the new APIs are mostly delivered as COM, occasionally with some .NET bindings. There is still a silo trying to push WinRT now on Win32 side, alt", "context": "", "use_case": "", "switched_from": "", "story": "2026 will be my year of the Linux desktop"}, {"id": 736017075, "item_id": 46001067, "url": "https://news.ycombinator.com/item?id=46001067", "by": "jchw", "date": "2025-11-20", "version": null, "stance": "recommend", "quote": "Win32 has better input emulation and UI automation features IMO", "excerpt": "In my opinion, three basic things are needed: - Device emulation: uinput covers this; requiring root is reasonable for what it does. - Input injection. Like XTEST, but ideally with permissions and more event types (i.e. tablet and touch events.) libei is close but I think it should be a Wayland protocol. - UI automation: Right now I think the closest you can get is with AT-SPI2, for apps that support it. This should ", "context": "", "use_case": "", "switched_from": "", "story": "Exploring the Fragmentation of Wayland, an xdotool adventure"}]}