In web we refer to the latter but i feel you mean the former.
I built a toy project in .NET 2005[0] with WinForms and the experience was actually excellent, binding data to controls was dead simple, it felt surprisingly modern. But i can't imagine how I'd make the UI resizable lol
Windows apps always had to be able to respond to dynamically changing screen dimensions since the user could change from one screen resolution to another while an app was still running. Apps would get a WM_DISPLAYCHANGE message in their top-level windows message processing loop. Docs say WM_DISPLAYCHANGE was introduced in Win95.
LLMs are quite good at tedious tasks such as keeping multiple GUIs in different languages in sync with each other.
You also generally don't want them to actually be in sync because there are actual UX differences between platforms that you need to align with to really be native. If you don't follow that then what's the point?
edit: Link software you wrote's installation instructions.
A lowest common denominator idea of "everywhere" is just not that useful.
I hear you on the native UI is better all things considered. I'm trying to figure out how that works in practice. I.e., to accompany a "cross-platform UIs are inferior to native ones", you would be effective to also include the workflows you use. In a realm where you choose options, eliminating one should come with illuminating another, as one must choose a path, and others could be eliminated for their drawbacks as well, leaving none available. What is your path here?
- proprietary,
- command line tooling,
- single-platform.
A good example of what I consider to be a great approach (not mine) is Ghostty, which has fully native UI per platform and a shared core between platforms. JetBrains tools also go out of their way to integrate with platform conventions everywhere.
An example that cross-platform toolkits usually get wrong: cursor navigation in text fields. Home and End do different things on different platforms, and on macOS, basic emacs/readline bindings are supposed to work in all text entry fields.
It’s worth noting that this extends beyond GUIs - command line tools written in Go tend to use “package flag” which is native nowhere. The standards between Windows (which has two, in cmd and powershell), GNU-style and “legacy” Unix style are just not reconcilable without implementing platform-specific behaviour.
If Microsoft ever makes something that actually meets all the needs that Win32 addresses, they'll probably build a compat layer and a) your win32 code will still work in compat mode, b) that new thing may be worth targeting.