Desktop paths forward, a choose your own adventure?

Sharing rn-desktop investigation resuls:

Status mac bundle - https://drive.google.com/file/d/1eALYtKnBi02XlvpB7wFbcSg9jBLxvZMn/view?usp=sharing
Video - https://drive.google.com/file/d/1hePiJgI7-TnqsI9guNSCcgLf-digxjbn/view?usp=sharing

Fixes we had to do to develop branch:

  • browser and wallet disabled
  • react-native-safe-area-context package was patched to return View instead of native RNCSafeAreaView that doesn’t exist for desktop. That allowed us to use navigation.
  • fixed few functions in react-native-status
  • Packages blocked using shadow-cljs.edn:
    • react-native-touch-id
    • react-native-image-resizer
    • react-native-dark-mode
    • @react-native-community/netinfo
    • react-native-reanimated
    • react-native-redash
    • react-native-webview
  • quo/animated namespace functionality was fully mocked because it relates on react-native-reanimated and react-native-redash (both not supported for desktop)
  • quo/gesture-handler also mocked
  • qrcode commented everywhere because relates on react-native-svg which is not implemented for desktop.
  • setInternetCredentials commented out for keychain - this means that Save password is disabled for now

The biggest obvious problem is a performance, especially on lists. Scrolling quite small list leads to significant cpu and memory consumption. Can’t say if that will be easy to deal.

Our opinion: it is possible to use react-native-desktop-qt for Status Desktop but performance problems should be addressed. Also we tend to think that desktop repo should be separate from mobile. It should reuse logic and could reuse some components but attempts to reuse full UI will slow down everyone. For desktop it would be easier to create own UI taking into account react-native-desktop-qt restrictions rather than chase mobile UI.

9 Likes

Nim Status Client:

Linux: Dropbox - NimStatusClient-x86_64.AppImage - Simplify your life
→ Note: currently needs to chmod a+x

macOS: Dropbox - Status.dmg - Simplify your life
→ Note: first run, need to right click → open (due to new apple requirements for notarization); if in the applications folder, then you need to manually open the folder, right click → open

Notes:

  • Ensure there is no existing status app running (like status-rn-desktop, ios simulator running status mobile, etc…)
  • Ensure firewall is allowing the status app
  • There is a ~2 second lag moment after login, we’re currently working on optimizing this. (It’s due to wallet requests we need to optimize)
  • Browser not working on linux yet. (On mac it’s experimental)
  • In 4k / high resolution screens the fonts might be blurry (something we’re currently working, seems to be a QT config)
  • Stickers will display, sticker selection is WIP

Video: desktop_beta.mov - Google Drive
→ Note: the video is completely unedited, => sometimes there are long pauses which is me grabbing my phone or looking in etherscan for some random ethereum address for the wallet <=

15 Likes

i like this quick nim development progress, looks like it only takes one and half month atm.it’s faster than ever lol

1 Like

your shared mac bundle need authority to access, WDYT, it should be public.

Great job team!
The nym client is pretty cool! Congrats! Could the same stack be easily ported on mobile?

It’s possible, from my tests Qt on Android is kind of slow. I am still waiting on a PinePhone to see how it would fair on mobile linux if it does then freedom respecting hardware, operating system and app would be a great combination.

I have to say that this has been impressive progress. The desktop team have been absolute executing machines. This demo has made me really excited about the future.
Thank-you very much all involved.

or, as they say down under, BLOODY BONZA MATE! :smiley:

5 Likes

An attempt to recap and wrap up a month of investigation and prior discussions with soft conclusions. So we can close this topic with consensus and keep building awesome stuff. :blue_heart: Please share whether you think these are valid conclusions.

  • Two experiments were run
  • They differed in technology stack, using react-native-desktop-qt vs nim-qt, to develop a Desktop client, allocated resources and design support
  • Other stacks were used during an earlier experimentation phase, e.g. electron see reply by Iuri, but dismissed and not actively worked in over the last 30 days
  • The Desktop implementation using react-native-desktop-qt focused on chat and porting the react-native UI currently in production on mobile; The implementation using Nim-Qt focused on the chat and wallet features mimicking Status mobile logic based on specs
  • Both teams delivered a demo bundle in 1 month time :rocket: (see above)

Learnings

  • Understanding of ease/complexity to rebuild logic in nim-qt
  • Understanding of ease/complexity to port react native to desktop
  • There’s work to do to improve cross-team communication and decision making
    I think Stimbus discourse went better. Communication around implementation decisions for iOS notifications are also a prime example. There’s no golden ticket here. Transparent communication and decision making requires continuous effort, to push and pull information from everyone involved. Kudos to @oskarth and @cammellos for being strong advocates of this.

Soft answers/conclusions

  • Desktop team will continue to develop a Desktop client using nim-qt, as it has emerged as a solid choice and helps with Nimbus integration that the team will also lead in the coming months.
  • As discussed here https://youtu.be/RRhnbGbQfdc, summary on Discuss to follow shortly.
  • Next steps for rn-native-desktop are to be decided by the Core Mobile team. There are two decisions that need to be made:
  1. Should work on Status Desktop, built with the help of react-native-desktop-qt, be continued?
    No, nim-qt is showing good results and has a team working on it. At the same time, Core Mobile team needs to focus on acquisition and user facing features and can use all it’s core contributors for this
  2. Should react-native-desktop-qt technology development be supported?
    No, not if it’s not used in Status

Thanks to @volodymyr.kozieiev for fact checking how I describe the different technology investigations and formulating decisions that need to be made at this point.

6 Likes