Fullstack GUI library for web, desktop, mobile, and more. In Rust using a HTML + CSS renderer built on top of Servo.

  • Aux@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    4 months ago

    There are several issues with native development without a browser layer.

    First of all, native UI toolkits are very different and making a robust cross platform app is pretty much impossible. So, the traditional approach is to use one toolkit, which will be native to one platform, and then let your other users deal with it. For example, GTK apps on Windows and Mac look and feel like shit.

    Another approach is to use a custom cross platform toolkit, which doesn’t use anything native at all. If enough work and thought is put in such application, it can be a very pleasant experience. But often it’s shit for all users.

    The second issue is that it can be quite hard to manage fluid window sizes and to build a proper responsive UI with native toolkits. Some are better at it, some are worse. Native toolkits also tend to punish developers for deep nesting of components making UI development even more painful.

    HTML + CSS solves all that. It’s responsive by design, everyone is used to web apps already, nesting is not a problem at all, etc.

    • Max-P@lemmy.max-p.me
      link
      fedilink
      arrow-up
      4
      ·
      4 months ago

      I’m not saying to use native toolkits like Qt or GTK, those indeed have problems. What React Native does is somewhere in-between: it’s an abstraction that produces decent results between platforms including the web.

      It uses slightly higher level abstractions that work a lot like the web for rendering, you still get your boxes and a subset of CSS properties. But on web it’ll compile to flexbox or grids, on Android it’ll compile to something like a LinearLayout or some other kind of layout the OS understands. On web a <Text> will compile to a <span>, on Android it’ll compile to a native text element. On mobile where you need the performance the most, you otherwise end up rendering a web page that will then eventually end up doing the same thing back to display it natively, but with all the downsides of a web view.

      This performs way better with basically no downside for the web version, has the majority of the flexibility one needs for responsive layouts but it’s way more lightweight when you do target native. On native you can just render it all yourself for really cheap, like any native toolkit would. You’re your own toolkit.

      They will never look native, but at least all the rendering will be native. Most companies have their custom UI theme anyway, native widgets rarely gets used anyway.

      We’re talking Electron replacement after all, it’s not like apps made with it look anything native. But if at least they performed like native apps by skipping the web views and all the baggage it brings with it, that’d be great.

      • Aux@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        4 months ago

        I know how React Native works and it doesn’t fix anything. For example, if the underlying toolkit punishes you for deep nesting - you’re still fucked. Google recommends to have 10 or less levels of nesting, which is bonkers to any web developer. There is similar advice for iOS, Mac and Windows (not sure about GTK and Qt, haven’t used them for over a decade). Each platform has its own solution, so you end up with custom code for each and at that point or doesn’t matter if you’re coding in C or JS.