Live data from Hacker News

Show HN: Proton Native V2 – Create Cross Platform Desktop Apps with React

proton-native.js.org

1–10 of 37 posts

Re: Show HN: Proton Native V2 – Create Cross Platform Desktop Apps with React

#2
Proton Native is a way to make cross-platform desktop apps with React, without using Electron or any sort of web browser. Your React code gets translated into Qt or wxWidgets API calls and runs directly on the machine.

After a long time, Proton Native V1 was starting to show it's age. So I ended up making a complete rewrite that includes a lot of the most requested features including flexbox, styling, hot reloading, and components with the same API as React Native.

For those of you who value native components, I've also been working on an experimental wxWidgets backend. There are only a few components, but I hope to implement all the components of the Qt backend soon.

Let me know of any questions you have and thanks!

Previous discussion: https://news.ycombinator.com/item?id=16978901

Re: Show HN: Proton Native V2 – Create Cross Platform Desktop Apps with React

#7
I've been tinkering with React Native and it looks like you can do something quite similar to Proton Native here, while also targeting mobile platforms. Here is how you can cover the gamut of platforms:

- iOS and Android - React Native - Web - React Native Web - macOS - Apple's Project Catalyst (run iPad apps on macOS) - Windows - React Native Windows by Microsoft - Linux - none yet, you could use Electron but that's undesirable

Perhaps one could instead use Proton Native for desktop and React Native for mobile, I wonder what the code sharing capabilities are for that.

Re: Show HN: Proton Native V2 – Create Cross Platform Desktop Apps with React

#8
> But those components are not native, meaning they are drawn by Qt instead of using the components provided by the OS.

In the case of macOS, this is no longer true - when Apple finally kicked Carbon fully, Qt (IIRC, in 5.13 or something? 5.12 and prior used HIThemes, which was... showing age) switched to rendering true AppKit behind the scenes. There's a few custom controls where they render their own, if no AppKit equivalent exists, but otherwise it's AppKit all the way down.

As someone who used to decry Qt as not native, I'll be the first to admit it's fine now - if something looks "off" on macOS, it's probably moreso the implementing the author doing something different than the underlying framework.

Re: Show HN: Proton Native V2 – Create Cross Platform Desktop Apps with React

#9
post #8

> But those components are not native, meaning they are drawn by Qt instead of using the components provided by the OS. In the case of macOS, this is no longer true - when Apple finally kicked Carbon fully, Qt (IIRC, in 5.13 or something? 5.12 and prior used HIThemes, which was... showing age) switched to rendering true AppKit behind the scenes. There's a few custom controls where they render their own, if no AppKit…

Hm, are you sure about that? The documentation[1] for 5.14 still says it uses HIThemes for drawing:

"As with Cocoa and Carbon, Qt provides widgets that look like those described in the Human Interface Descriptions. Qt's widgets use HIThemes to implement the look and feel. In other words, we use Apple's own APIs for doing the rendering."

I guess the documentation could be outdated, but changing over from drawing native-looking widgets to wrapping native widgets (like wxWidgets, SWT and libui) sounds like a big and fundamental (and likely incompatible) change, especially since Qt doesn't do this on other platforms. The release notes[2] don't mention any rewrite of the Mac widget implementation.

[1] https://doc.qt.io/qt-5/macos-issues.html

[2] https://doc.qt.io/qt-5/qt5-intro.html

Re: Show HN: Proton Native V2 – Create Cross Platform Desktop Apps with React

#10

I've been tinkering with React Native and it looks like you can do something quite similar to Proton Native here, while also targeting mobile platforms. Here is how you can cover the gamut of platforms: - iOS and Android - React Native - Web - React Native Web - macOS - Apple's Project Catalyst (run iPad apps on macOS) - Windows - React Native Windows by Microsoft - Linux - none yet, you could use Electron but that's…

The reason I did not add a renderer to React Native and went with my own renderer and reconciler was because mobile and desktop behave differently. The goal of the project is to make sure you can copy almost all your code from React Native, but not hinder usability. For example, you can define multiple windows in Proton Native and I intend to add more props to that soon.
Post reply on HN