Hello! I’m currently exploring what options are available to create the UI frontend for my open source Meadowlark DAW project: GitHub - MeadowlarkDAW/Meadowlark: A (currently incomplete) open-source Digital Audio Workstation, made by musicians, for musicians
All the backend code is pure Rust (most of it is currently in this repo: GitHub - MeadowlarkDAW/dropseed: A modular DAW (Digital Audio Workstation) engine written in Rust). While my original plan was to use a native Rust UI library for the frontend, I’m not sure that’s the best course of action anymore, and I’m exploring alternatives.
All the mature rust-native UI libraries don’t scale well in terms of performance. There are some libraries with better performance scaling, but they are experimental and not production ready yet. I also don’t want to use web tech for my frontend, just no.
Obviously people here will be biased towards GTK4, but I want to make sure that it will work well for my use case, or if I should look into something like QT or even JUCE (although I would prefer to avoid JUCE since I’m trying to create my own fully open source audio ecosystem here).
My first question (and my main concern) with GTK4 is how well it currently works in the latest versions of MacOS? This being a music production application, supporting Mac is important for me.
My second question is what options are there to optimize the rendering of complex custom widgets? The timeline in a complex project for example could get quite expensive if I have to do a full repaint every frame. Does GTK4 have stuff like layers and/or draw regions? I saw a blog saying that GTK4 has “GPU accelerated scrolling”, is that something I can take advantage of with custom widgets?
Third, is GTK4 fully themeable/will it stay fully themeable in future updates? The design needs of a DAW is very different from the design needs of a more typical desktop application, so I don’t want to be locked in in terms of theming flexibility. I also want my users to be able to create and distribute custom themes for Meadowlark.
And fourth, how well do the Rust bindings to GTK4 work in practice? Is there any limitations I should be aware of? I could write the frontend in C++ if I needed to, but of course being able to use Rust is a big plus for me. This is also the main reason why I want to try GTK4 over QT (Rust QT bindings look like a nightmare).