Replies: 13 comments 7 replies
-
👋 We have similar discussions in PicoTorrent as well - I can't say I have a good answer, just that I've been comparing mostly the same frameworks with mostly the same conclusions 😃 One thing I'm currently experimenting with is building directly on top of WebView2. It means you can use HTML and CSS to design the user interface (but no external deps since WebView2 is bundled with Edge Chromium) and still use native code for things such as the BitTorrent things (in our case). The app does take a bit more memory to run, and it runs in multiple processes due to how Chromium works, but it's a trade-off I'm mostly willing to make. You can then use some glue code to build similar web views on other platforms with their respective bundled web view control. |
Beta Was this translation helpful? Give feedback.
-
Just wanted to chime in with the mention that, assuming I got it right, https://platform.uno/how-it-works/ suggests WinUI3 might be cross-platform compatible. Not sure if applicable but I saw the notification and figured it might be worth mentioning.. |
Beta Was this translation helpful? Give feedback.
-
I vote against Electron. |
Beta Was this translation helpful? Give feedback.
This comment was marked as off-topic.
This comment was marked as off-topic.
-
wxWidgets recently improved their dark mode detection, by checking if it's on or off in the registry. Firefox and Chrome do it the same way. wxWidgets/wxWidgets@622a2f9 |
Beta Was this translation helpful? Give feedback.
-
Would you consider something like React Native for Windows/Mac? I think it would also open up the possibility of having a mobile version of Taiga in the future. Another option would be Flutter for Desktop but I'm a bit biased towards React Native since that's the one I'm using currently. |
Beta Was this translation helpful? Give feedback.
-
Seems like wxWidgets is the best option, doesn't it? |
Beta Was this translation helpful? Give feedback.
-
What about developing Taiga on something like Ubuntu, for example? There are Qt packages available with just one command, no need to think about any installers. |
Beta Was this translation helpful? Give feedback.
-
Electron would be awesome, i open the app only when i watch anime anyways so i dont see how high memory usage would be a problem 😄 |
Beta Was this translation helpful? Give feedback.
-
After checking out most of our options, evaluating them in terms of features, appearance, developer experience, quality of shipped product and weighing their relevance for Taiga, I ended up with the following ordering:
While there's no perfect match, given the tradeoffs and Taiga's priorities, Qt seems to be the best choice overall. I believe that its shortcomings are either avoidable or relatively less important. This is not final, but v2 will most likely be developed with Qt. Thank you everyone for chiming in! |
Beta Was this translation helpful? Give feedback.
-
A little late to the discussion, but there are a few other options: Both are cross-platform and resource-efficient. |
Beta Was this translation helpful? Give feedback.
-
Taiga has been a native Windows application since day one (16d280f), using Win32 API. Eventually most of the relevant code was moved to a standalone library (#316), but the underlying technology has not changed.
Native look and behavior is one of the main characteristics of Taiga. But we're stuck with Windows (#92), and working on UI-related improvements is a pain (e.g. #807, #533, #87). While it's going to take quite an effort, switching to a different UI framework is necessary for going cross-platform and getting any serious UI work done.
Below is a list of alternatives, each with their own pros and cons. First step is to evaluate them thoroughly and decide on which one to use.
wxWidgets
wxWidgets does what Taiga does, only better: Cross-platform, truly native controls, lightweight, allows using just the event system and GUI classes without becoming a huge dependency. Feels like it would play well with other parts of the application and overall require the least amount of work. However, some of the limitations Taiga currently has would carry over. For instance, we cannot have dark mode on Windows until the OS itself officially supports it for Win32 apps.
An application similar to Taiga is PicoTorrent. Started with Win32 API, switched to WTL to wxWidgets to Qt, then back to wxWidgets again. Maybe @vktr can chime in to tell if they're still content with it. A counter example would be Dolphin Emulator, which moved from wxWidgets to Qt. Looks like they really wanted to leave wxWidgets behind.
Qt
Qt is arguably the highest quality and most powerful framework out there, with great documentation. While it offers native look and feel, it doesn't create actual native controls, which allows for easier customization (e.g. dark theme). Qt is much more than a UI framework though, and it comes with non-standard features and conventions. If we decide on using Qt, it's going to be more intrusive than any other option.
Qt 6 requires Windows 10 or above. There is also the recent changes where installing Qt now requires a Qt Account and offline installer is only available for commercial customers.
P.S. Qt is huge. I recently tried building it from source, ended up with ~115GB of files. Using the installer and selecting only a few modules still takes up more than 10GB.
Electron
Used by many high-profile applications, infamous for being a resource hog. Being able to use web technologies is great, but it comes with a heavy price. I'd rather not go this route, though we could still consider using relatively lighter alternatives such as Sciter or Ultralight.
WinUI 3
This framework is what Microsoft offers for modernizing native Win32 desktop apps. You get a modern look (i.e. Fluent Design System) while staying native. This is what you see in Windows 11's Settings window, for instance. Has many useful controls, can instantly switch to dark mode. Biggest downside is that choosing this option would mean Taiga remains Windows-only (specifically, Windows 10 or above).
Custom UI
We could always draw our own UI with something like Dear ImGui or NanoGUI. At this point, Taiga would no longer look or behave like a desktop application. Probably not a good idea, mentioned here for completion's sake.
Beta Was this translation helpful? Give feedback.
All reactions