So you want to write a GUI framework (2021)

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • serenity

    The Serenity Operating System 🐞

  • "some of the most complicate aspects of software engineering is how to interface your work with the work of others"

    And where exactly is the difference, when you write a OS, where you have to interface with the low level hardware and the choices of those engeneers?

    Apart from that, what is stopping you? Just pick a simple plattform and start. But yes, the result probably will be hard to sell.

    Alternativly, you can join SerenetyOS, which started exactly as just a one man project and came quite far alone. And now they are getting momentum (100000$ donation to build a browser).

    https://serenityos.org/

  • Yue

    A library for creating native cross-platform GUI apps

  • For a recent project I chose Yue (https://libyue.com/), a cross-platform native widget GUI toolkit with C++, JavaScript/Node.js, and Lua. I've only used the Lua interface and macOS backend, but it has worked quite well, despite the very steep learning curve. This was also my first desktop GUI app, so I had to learn many implicit concepts that weren't obvious from the otherwise extensive documentation.

    Yue was also the only option that 1) supported macOS, 2) supported Lua, 3) was sufficiently comprehensive to build a non-toy GUI app, 4) and that I could integrate into my (static) build. I couldn't even get the wxWidgets Lua interfaces to compile, and Qt and Fltk had similar stories, whereas reverse-engineering the baroque Yue build (based on Google's internal build systems) was relatively simple. Yue had some sharp edges, but I was able to work around them whilst patiently waiting for patches and fixes upstream.

    Immediate mode interfaces were a non-starter for me. For a non-trivial set of otherwise typical controls and window management you have to implement too much yourself, plus being non-native they not only felt wrong (which admittedly is somewhat subjective; the younger crowd seems to think non-native, immediate mode interfaces look more state-of-the-art), but lacked other interfaces for proper desktop integration, like theme change signaling (i.e. notification that a user switch between light and dark modes in the macOS system settings panel).

    All-in-all I would highly recommend Yue.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • sciter

    Sciter: the Embeddable HTML/CSS/JS engine for modern UI development

  • These bullet points are exactly what I did in Sciter (https://sciter.com)

    - Windowing

    -- Tabs

    -- Menus

    -- Painting

    -- Animation

    -- Text

    -The compositor

    -Handling input

    -- Pointer input

    -- Keyboard input

    - Accessibility

    - Internationalization and localization

    - Cross-platform APIs

    - The web view

    - Native look and feel

    On top of that DOM and CSS implementations to achieve declarative UI. And JS as a languuage behind UI - declarative in some sense way of defining UI behavior.

  • fidget

    Figma based UI library for nim, with HTML and OpenGL backends.

  • For me it was the text issues that dulled my desire to keep working it. I was updating a Nim based immediate mode GUI called Fidget (https://github.com/treeform/fidget) and fixed a number of issues. It was fun getting 9-patch rectangles with corners working, etc.

    I even implemented a fair subset of CSS grid:

        parseGridTemplateRows gt, ["row1-start"] 25'pp \

  • cssgrid

    Pure Nim CSS Grid layout engine

  • ( https://github.com/elcritch/cssgrid )

    However, text input is hard and tedious! Then you ideally would need to handle the different keybindings for each OS. You also loose any plugins the OS'es provide. Not to mention the lack of accessibility.

    I recall reading that browsers shim out to native OS text fields and wonder how that's done. It really seems like the best approach for small GUI libraries to enabled first class text input.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts