We Chose Tauri over Electron for Our Performance-Critical Desktop App
gethopp.app
gethopp.app
The webviews on different platforms are very fragmented. they support different feature sets and have different bugs. For example, on mac, I have seen svg and pdf rendering bugs I don't know when they will be fixed. I can't predict their behaviors on platforms I have no access to.
Tauri is also too young, I have seen its new window system crashes on users' machines. And as for the sidecar/external binary feature, Tauri doesn't fix the rpath when packaging, you will have to solve it using manual solutions.
I love rust, but many solutions are only available in c++. rust bindings are usually maintained by hobbyists and rarely updated. I have no energy to fix the binding issues.
I'm now going back to electron, so my frontend can use webgpu. As for the backend, I'm planning to write nodejs addons in c++ and rust.
With the side car support we haven't faced any issues so far tbh (on windows and macOS).
Also I agree that the lack of wgpu is annoying. This is why for our cursor rendering (our sidecar) we are just using winit with wgpu. We are thinking of trying egui for our cursor rendering and then maybe try to integrate it with Tauri and remove the sidecar completely.
Our frontend is quite simple so we don't need wgpu there. Though I agree 100% that with electron you will have less surprises.
Hopefully our experiment won't come back to bite us and we will be able to contribute back to the community.
Switched to electron and moved on. Almost nobody cares about the memory footprint and the binary size. But they will care then app is half broken on their 9 years out of date webview...
For the performance critical part, which is the screen-sharing and remote control, everything is done from Rust which is low level and gets the job done.
Native UI in this case wouldn't offer us much more. There is a case that maybe it could be faster in the video rendering in comparison from the browser's <video> tag, but we have not make any tests yet, maybe we should test this in the future.
There really is not much special about electron or tauri. You can do the same thing in any language that can use WebKit as a library.
The process with the tauri backend are communicating via a socket, so you could say it doesn't really make a difference if it is electron or tauri in the end of day.
Though we are thinking of using egui for the rendering process in the future and then we could have the opportunity to integrate it in the main app (tauri has an egui integration for v1, which unfortunately is broken for v2).
Yes, it came with drawbacks, but it felt snappy and bloatfree.
Whereas modern apps feast on RAM and CPU... Having an app boasting light weight, when before we had 16 to 64MiB for WHOLE system feels ironic
The latter point seems real but kind of minor. For the former, I'm curious whether they considered using napi-rs or neon to call Rust code from within a Node.js process.
This tauri issue suggests the common measurement approach might be wrong
https://github.com/tauri-apps/tauri/issues/5889
Also would be better to have specific startup time instead of "fast" (which is strange since electron is not known for fast startup)
its less efficient because you can only ever pass messages to the webview. you cant compile modules and integrate like you can with Electron.
webviews are a naieve solution only useful for basics and even then is outdone by any other cross platform UI.