Native clients for desktop platforms

(#1068) Feature Declined desktop performance

Problem

Right now only fluxer has only an electron client available for all desktop platforms.

Proposed solution

We should leverage OS native frameworks such as
  • WinUI3 for Windows
  • SwiftUI for Apple
  • lib-adwita for Linux
This helps the clients to stay memory optimized and leverage OS optimizations to achieve better compute and energy usage than electron. Cons
  • It will be much harder to maintain feature parity across multiple clients and might delay feature roll outs.

10 comments

Sign in with Fluxer to comment and vote.
Comment by Rex
RexSystem 1 vote
Status changed from Shipped to Declined
Marked declined because staff said there are no plans for native desktop clients, so shipped was wrong.
Comment by @yofukashino
RexSystem 1 vote originally by @yofukashino on GitHub 1 reply
lib-adwita for Linux
Adwaita? Gnome is not linux. Having a single unified native framework would be better, not saying electron but not fragmentation either. Even tauri is better than electron honestly. Maybe community made clients is the solution.
Comment by @Speykious
RexSystem 1 vote originally by @Speykious on GitHub 4 replies
I intend to make my own native desktop client for Fluxer using my own GUI framework with my own simple OpenGL renderer, all written in Rust. It's immediate-mode, cross-platform, has hot-reloading (thanks tosubsecond), supports stuff like unicode text (thanks to parley), text input and animations, and has a widget inspector. I still need to add some important things like a Metal renderer for MacOS (the OpenGL renderer is too slow on MacOS right now), some kind of way to make custom shaders (won't take too long) and accessibility (using accesskit), but apart from that it's pretty much usable. Here's a demo of what I have so far. https://fs.speykious.dev/showcases/uing/uing-demo-6e72fb7.mp4 Here's a smaller video demonstrating hot reloading since GitHub doesn't want to embed the previous video. 557966331-f897c6f9-6e17-40d5-9bc8-f37e503cd469.mp4
557966331-f897c6f9-6e17-40d5-9bc8-f37e503cd469.mp4 | 4.9 MB
Comment by @yofukashino
RexSystem 1 vote originally by @yofukashino on GitHub
This is the correct way of approaching this. iirc vulkun is more lightweight tho? Edit: Nice Roxy wallpaper
Comment by @Speykious
RexSystem 1 vote originally by @Speykious on GitHub
I'm not sure about "more lightweight", but it's definitely more modern than OpenGL (which has stopped receiving updates 8 years ago) and gives you a lot more fine-grained control. Problem is, I'd need to learn it, and that's gonna take a while... So I'm doing Metal first :p
And no, I don't want to use WGPU. It's way too much abstraction, and from my point of view it's yet another API to learn. I'd rather learn Metal and have something solid on all platforms, then add Vulkan after that. I can have a lot more freedom with my renderer by making this myself, and it's fine because I already have something that works.
Reply on the edit: Thank you :3 Edit: another possibility would be to use Core Animation, which was a friend's suggestion. Though it would require me to make a second renderer rather than add a backend to my existing renderer. I guess I'll look into it.
Comment by @yofukashino
RexSystem 1 vote originally by @yofukashino on GitHub
I'm not sure about "more lightweight", but it's definitely more modern than OpenGL (which has stopped receiving updates 8 years ago) and gives you a lot more fine-grained control. Problem is, I'd need to learn it, and that's gonna take a while... So I'm doing Metal first :p
That is quite reasonable, I mean its still better than electron.
Comment by @TheKodeToad
RexSystem 1 vote originally by @TheKodeToad on GitHub
I too intend to create a client in Rust (and have already started) but with gpui-component! I don't want to stop because it's fun! Maybe I should switch to something more native so there aren't two attempts to do something very similar... maybe if I get something working quickly (which should be easier when I don't need to work on my own ui stuff too much) it could also help other efforts (also note that I'm new to Rust and its ecosystem, Speykious probably stands a better chance of making something good) (I am also on Plasma and Qt would be the native look - and using Qt from Rust isn't that fun so C++ is probably a better bet) Edit: I'll just wait and see what everyone else does
Comment by @win8linux
RexSystem 1 vote originally by @win8linux on GitHub 1 reply
Given that Fluxer as a project supports third-party clients, native clients should prolly be left to the community for now. It takes a lot of effort to maintain multiple native clients. Perhaps instead, there could be a client library which can easily be used with most programming languages? Telegram does this with TDLib, as an example.
Comment by @SanpuiRonak
RexSystem 1 vote originally by @SanpuiRonak on GitHub OP
This seems like a good take on this issue. Having a standard interface/implementation to target would greatly help community to maintain custom clients!