9 ms·
From the website: > GTK is the core of the GNOME development platform, but it can also be used to write applications for other Linux environments, as well as a
by xcambar 6y ago
From the website:
> GTK is the core of the GNOME development platform, but it can also be used to write applications for other Linux environments, as well as applications targeting Microsoft Windows and Apple macOS.
I'd love for some hn folks to share feedback on portability and overall value of using GTK for multiple platforms.
What other engines/platforms exist? I know of Kotlin for mobile/web but besides Electron, I'll have a hard time picking something for desktop apps, should portability be a requirement...
PS: I have a love-hate relationship with Electron. I guess I'm not the only one, so I won't elaborate.
- tonyedgecombe 6y agoQt is the main alternative. It's C++ but has bindings for many languages. All cross platform frameworks are a compromise though so you should avoid them unless you know you will definitely need it.
- ryukafalz 6y agoFor what it's worth, GTK and Qt (while being cross platform) are also effectively the native toolkits on Linux. So if you're developing for Linux in the first place, you get the cross platform bit for free.
- tracker1 6y agoOf course it also means extra effort to make them less alien on MacOS and Windows. While less than popular, I'm more inclined to just target Electron or Carlo and leave it at that for my UIs. I know that it's much higher overhead, and if I was doing something with a minimal UI, or something that persisted in a tray I'd probably reach for something more minimal. It really depends on the use case. React Native options may be another target that I might look into if I needed native, thought he UI kits aren't quite as interoperable as I'd necessarily like, it's a pretty decent option. I mostly do full-stack service layers with react/web ui these days so anything that leans on what I already do is likely the best use of my time. A browser surface, while massive, memory hungry etc, is still often the best option for any app UI work as it solves so many issues and can run everywhere. It's the combination of those two that make it so appealing. Reducing friction. Of course it's also why we have mobile devices with 4gb+ ram on them these days. edit: would also consider uno with .Net 5 - https://platform.uno/ https://platform.uno/
- topspin 6y agoI look at my Windows 10 desktop and you know what? Everything is alien. Even Microsoft's own stuff doesn't feel native any longer. Every program I care about is based on some widget tookit/framework that isn't now and probably never will be whatever Microsoft is pushing this year, and Microsoft's own software spans some unknown number of GUI evolution phases as well. I used to think there was value in being well aligned with the native Desktop UI. Now I don't really know what that is any more and I no longer really care. I care that a given application serves it purpose and the degree of an application's alignment with the latest native UI trend is well down on my list of concerns. Coping with the delta between applications is a small problem I try not to get hung up on.
- pavlov 6y agoThe same thing is happening to macOS. Big Sur is sealing the deal with a mishmash of iOS styles inconsistently applied across the desktop. I was always a huge believer in native UI, following the platform HIG, never reinventing controls just to satisfy graphic design caprices; but Apple has essentially given up on these things. The Mac UI is now just Windows 10 with rounded corners instead of sharp.
- topspin 6y agoWell that's 0 for 3 then. Linux has always exhibited this 'problem.' Windows is effectively at parity with Linux now, and you point out the increasing divergence of even macOS. What shall we conclude from all of this? I propose that simultaneously expecting a) an operating system to host a limitless diversity of graphical applications with origins that transcend platforms, programming paradigms and decades and b) that they all precisely align with your chosen operating systems ever changing GUI conventions and c) all of this be delivered at at least affordable if not no cost -- is simply unreasonable.
- tonyedgecombe 6y agoI suppose you could argue having a common style between macOS and iOS is more consistent. I'm still undecided about the new style in Big Sur. On the other hand I spend a lot of time in Windows and find the whole UI grating.
- _ph_ 6y agoI was pretty happy to port some small Go programs using Gtk from Linux to the Mac. Just a recompile would do, worked out of the box.
- badhombres 6y agowhat library did you use for Gtk with Go?
- tristan957 6y agogotk3 is the goto package for using GTK
- badhombres 6y agothanks!
- _ph_ 6y agoYes, I was using it.
- brnt 6y agoHow large is GTK this way? I like Qt, but adding 50-100MB library is a bit of an issue for small tools.
- CameronNemo 6y agoI do not have first hand experience with distributing GTK apps on non-Linux systems, but I do know that: * Inkscape has a macOS version that looks, feels, and functions fairly nicely * Documentation for how to ship a GTK app for macOS is severely lacking (not sure about Windows) * Many cross platform apps choose Qt over GTK
- billfruit 6y agoI am also looking at the same question. JavaFX remains a viable choice, and perhaps Xamarin could be another option as well.
- Buttons840 6y agoI've been pleasantly surprised with JavaFX as a student. Although I haven't built anything that's beautiful with it.
- bigdict 6y agoGTK 3 worked pretty well for a side project on Linux and macOS. I like C, so I went with GTK as opposed to C++ with Qt. I suspect that Qt is a slightly better (both look and dev ergonomics) and more portable solution, but not sure.
- jtxx 6y agoThe main cross platform open source offerings are GTK and QT. There are lightweight electron alternatives - HTML/CSS engines with a scripting DSL. Sciter is a paid option but I know there are free options depending on your language of choice I’ve been working on a cross platform music player and went with GTK over QT because I preferred the Rust bindings, QT seemed to have a lot of non UI code I didn’t need, and I was skeptical of dealing with QT licenses (but a lot of people seem to work with it just fine - I just didn’t put the research in to see if it was right for me). Compiling linux / mac was very easy for me. Cross compiling linux -> windows via mingw64 was also pretty easy. I had some trouble compiling mingw64 on windows, but that was due to SQLite / MSys issues that I never really figured out.
- CarelessExpert 6y ago> There are lightweight electron alternatives The very definition of an oxymoron... ;)
- detaro 6y agoWhy is that an oxymoron?
- deleted 6y ago[deleted]
- grawlinson 6y agoBecause electron consumes CPU cycles and RAM like there's no tomorrow.
- m12k 6y agoI went digging a bit, and there's work being done to making it possible to use react-native for cross-platform desktop apps too: https://github.com/status-im/react-native-desktop-qt https://github.com/status-im/react-native-desktop-qt Doesn't look production-ready yet, but seems promising.
- rubyn00bie 6y agoTwo things: 1.) I've written only a little bit using GTK, starting over this past month, and it has been very pleasant. The real issue I have is not knowing what documentation to use, or being a bit confused by the tooling. The existing open source projects using GTK I've been poking at over the last month written using JavaScript, Python, or C are all pretty (relatively) easy to grok and start working on. I'll definitely be back for more... FWIW- I do tend to learn by reading code; so for me, jumping into something totally foreign or unknown is pretty normal. 2.) I'd highly recommend trying Flutter+Dart for cross platform desktop applications. I've been writing my first, for about a month now, on Linux, and it has been fucking great mostly because it works. It uses Skia under the hood so rendering is fast and applications aren't totally bloated. I can speak nothing to building Flutter projects for the mobile or web variants but it seems neat in theory. I'd definitely prefer to not write Dart, but I also accepted long ago, when you want to write GUI you pretty much have to learn a new language. It's close enough to JavaScript and/or Java learning it is pretty much just figuring out "WTF? Is X called?" It's also a lot nicer, IMHO, than things like Electron because there's an actually useful SDK [1]. Electron, like the web, will require to you DIY a lot of really boring shit like wiring up list views to only use/reuse the displayed elements. Flutter, like most desktop GUI SDKs, brings a useful set of widgets to the table you can easily customize. [1] No hate on Electron here; there's zero fault to be had for the web SDKs lacking useful APIs for making web apps... but that's a wholly different conversation I'd rather not have right meow.
- heavyset_go 6y ago> I'd definitely prefer to not write Dart, but I also accepted long ago, when you want to write GUI you pretty much have to learn a new language. It's close enough to JavaScript and/or Java learning it is pretty much just figuring out "WTF? Is X called?" Are you using another language for your app, or is your entire stack in Dart and not just the UI?
- rubyn00bie 6y agoOh; it's all client-only (GUI) right now. So I've only been using Dart in this app (stack), if I need to add server components (which eventually I likely will) I'll write those in Elixir and/or Rust (i.e. languages I already know). Nothing against the idea of server-side Dart, I just don't see a reason to bother with it. I've never really been sold on the idea of using the "same language" for both frontend and backend. I (try to) prefer the right tool for the job; which for my requirements, this time, is mostly how I ended up with Dart and Flutter... and I've been pleasantly surprised. It is the first cross-platform desktop language & sdk pairing I've used that I, personally, don't totally hate. Every other time, I've just said "fuck this" and gone and implemented it whatever the native SDKs were.
- fayten 6y agoI'm a big fan of using plain SWT[1] without JFace. In fact GTK4 support is already being work on! I tend to see a lot of developers think of Eclipse Platform UI/JFace[2] when they see SWT. Eclipse Platform UI is Eclipse's abstraction over SWT that allows them to make consistent components across platforms. SWT is lighter weight and it's just platform native components. Also since you are dealing with native components you get easy access to platform accessibility. Eclipse has some great documentation for the platform as well as loads of snippets[3] and examples[4] to pick apart. There is also an incredibly useful charting library[5] that is used heavily by OpenChrom(Uses Eclipse platform)[6]. I have only tried it with some small samples, but SWT does work with GraalVM native-image[7]. This should allow you to develop a nice little statically link executable instead of deploying a jar if needed. [1]https://www.eclipse.org/swt/ https://www.eclipse.org/swt/ https://github.com/eclipse/eclipse.platform.swt/tree/master/bundles/org.eclipse.swt https://github.com/eclipse/eclipse.platform.swt/tree/master/... [2]https://github.com/eclipse/eclipse.platform.ui https://github.com/eclipse/eclipse.platform.ui [3]https://www.eclipse.org/swt/snippets/ https://www.eclipse.org/swt/snippets/ [4]https://github.com/eclipse/eclipse.platform.swt/tree/master/examples https://github.com/eclipse/eclipse.platform.swt/tree/master/... [5]https://github.com/eclipse/swtchart https://github.com/eclipse/swtchart [6]https://lablicate.com/platform/openchrom https://lablicate.com/platform/openchrom https://lablicate.com/static/media/openchrom-GC-MS.722d5aa3.png https://lablicate.com/static/media/openchrom-GC-MS.722d5aa3.... [7]https://github.com/mbarbeaux/graalvm-swt-native-image https://github.com/mbarbeaux/graalvm-swt-native-image
- iamcreasy 6y agoCurious - why would anyone choose SWT over Swing/JavaFX?
- lagerstedt 6y agoIt used to be that Swing/AWT really sucked. The default theme on every platform (Metal) was really ugly. Everything was purple. The "native" look and feel was emulated (poorly). It was also very slow. That's the reasons why SWT was started in the first place. Swing would just not cut it for any app that wanted a nice UI. Nowadays the situation is completely different. Swing looks and performs great compared to SWT. IMO it would make much more sense to just use Swing. JavaFX never happened. People just went web instead. No one uses it and it's officially deprecated.
- thesuperbigfrog 6y agoTk (https://en.wikipedia.org/wiki/Tk_(software) https://en.wikipedia.org/wiki/Tk_(software)) is an older, but still quite viable option for a multi-platform GUI. Tk has language bindings for Tcl, C, C++, Ada, Common Lisp, Perl, Python, Ruby, Haskell, etc. Tk also provides the standard GUI framework for Python: https://docs.python.org/3/library/tk.html https://docs.python.org/3/library/tk.html
- grandinj 6y agowxwidgets is reasonable
- heavyset_go 6y agowxWidgets uses the operating system's native widgets, is cross-platform, and has bindings for most languages. If anyone has used GTK in their Windows applications, I'd love to hear about it.
- thomasahle 6y agoYet so many wxWidgets apps end up looking like Audacity - completely foreign on every platform.
- 72deluxe 6y agoIs that because audacity does their own weird buttons and controls and drop-down menus etc?
- PaulDavisThe1st 6y agoArdour (0) continues to use GTK2 as a cross-platform GUI toolkit for Linux, Windows, macOS (as well as Solaris/netBSD/FreeBSD). There are a few tricky issues on macOS and Windows, but when I've spoken to people with large cross-platform code bases built on Qt, it seems no better or worse than the case there. We would like to move away from all desktop toolkits in theory (GTK and Qt as the prime examples) because they really don't offer us a lot. Unfortunately, they do offer: 1. Treeviews 2. File Selector 3. Text Entry 4. Menus and we have no wish to reimplement these (TreeViews in GTK involve basically the entire toolkit). We slowly move towards a future vision based just on GDK (the lowest levels of GTK) but I doubt we will ever fully be able to drop the higher levels entirely. (0) https://ardour.org/ https://ardour.org/
- jcelerier 6y agoHeh, I share the sentiment - Qt's tree widget is my n°1 reason for using it
- touisteur 6y agoHow I wish there was a clean Swing implementation of the treetable widget/pattern in swing. JXTreetable makes me sad and wince everytime I have to open up the code. Cell renderers are OK... Until you want to go custom and synchronize events & drawing between renderers and you want them all coherent... And don't get me started on LnF and their interactions with JxTreetable... I know I should just shut up and go build mine own but this seems like such an oversight.
- cycloptic 6y agoI hope eventually I can find the time to contribute some kind of graphics enhancements to ardour. (Maybe this means using GPU acceleration or using a newer GDK version, I don't know) I've noticed scrolling the view can get somewhat laggy on my system when there are a lot of tracks.
- PaulDavisThe1st 6y agoEdit > Preferences > Appearance > [ ] Disable Graphics Hardware Acceleration Edit > Preferences > Appearance > [ ] Possibly Improve Slow Graphics Performance We will not be moving to a new version of GDK at any time in the foreseeable future.
- yagodragon 6y agoFlutter[0] is also very promising. It's like Qt but simpler and more productive. I've already used it in mobile apps and it's great. [0] https://medium.com/flutter/announcing-flutter-linux-alpha-with-canonical-19eb824590a9 https://medium.com/flutter/announcing-flutter-linux-alpha-wi...