tronical
Shout out to the muda folks here and big thanks to npwoods :)
(Good move IMO nevertheless)
It’s still basic, some controls like text input need work, or customizing the focus chain.
Building blocks are there and will need further polish.
What kind of feature set do you need?
UEFI boot-time UI with Rust and Slint
Most of us have our roots in the open source world, many (most?) of us learned coding because we were able to look at open source code, make changes to it, recompile and play with it.
We're trying to give back to the open source community and at the same time earn a living by asking the people who use Slint for proprietary apps (i.e. not giving back) to support us by purchasing a license.
Slint is a toolkit to efficiently develop fluid graphical user interfaces for any display: embedded devices and desktop applications. Slint supports multiple programming languages, such as Rust, C++, and JavaScript.
SixtyFPS GmbH is the company behind Slint that provides the toolkit under a dual-licensing scheme: via Open Source on GitHub or via a commercial license for proprietary applications.
We're a small startup of passionate engineers - we enjoy innovation, being a part of the wider Open Source ecosystem, and learning.
We're looking for a passionate engineer to work in our team, developing Slint.
You can also learn more about what we do on our blog: https://slint-ui.com/blog/ Our source code is on https://github.com/slint-ui
Porting the Slint UI Toolkit to a Microcontroller with 264K RAM
SixtyFPS Becomes Slint
It's not perfect though, and I think we're going to try to create binaries for download alternatively.
This particular approach (.60) is not a general purpose programming language and it's strongly typed.
It's designed for the user interface, not for writing the rest of the program in it.
I feel this is rather different from the tcl/tk applications we used to see?
Jokes aside, we added this embedding because of a specific user need.
Golang with the interpreter we well, but the RealThing(tm) would be a full code generator and binding to the runtime library. That would be awesome, but a little bit more work.
I quite like Go, it’s simplicity and GC is really convenient.
We went for dual licensing (GPL / commercial) in hope of creating a sustainable project.
We do have basic focus handling but the demos don’t really try to show that off - that’s more tailored towards touch based input at the moment. But we’d love to have a17y, full desktop like tab focused etc.
Regarding the compilation: the ability to live preview individual components or the entire design and seeing changes being applied on the fly (we have an interpreter for that) speeds the ui dev cycle a lot. Give it a try :)
In short: we try to do one thing (UI) and do it well :)
Expose a Rust Library to Other Languages (Esp. C++)
The runtime’s API is available as plain C++ API (only depends on C++ standard library), JS api in node (via neon) and Rust natively (simply a crate). It’s generally rather lightweight in terms of its surface. Instead the focus is on our compiler generating API for the input design files, to make it easy to manipulate properties or feed data models into the UI.
We’re internally using QStyle calls to produce images of controls when selecting that kind of styling at compile time, but that’s entirely encapsulated. The style you see in the wasm demos for example is entirely done using GLES accelerated primitives (such as SDF based anti-aliases rectangles).
We need to make our description a bit more precise - and we're working on comparisons. In terms of pure RAM usage (as opposed to ROM) in our experience the display resolution contributes a lot to what's left (unless there are dedicated frame buffers). So if you mention <= 64kb RAM, what kind of displays are you typically dealing with?
Generally I think we're aiming a little above LVGL/uGFX in terms of configuration, but also with with a much richer UI / features.