January 25, 2023 by Tobias Hunger

Slint 0.3.4 ReleasedBlog RSS

Today we published version 0.3.4 of Slint following semver as usual. We do patch level releases all the time, but only announce those in our weekly updates. This release is special to us as it this will be the last release before Slint 1.0.


Slint is a GUI toolkit to develop user interfaces for desktop and embedded applications. It is implemented in Rust and can be used from different languages such as Rust, C++, or Javascript.

Slint Language Evolution

As the language grew more expressive, and as more people started to use it, we noticed some potential to improve both, language maintainability and discoverability. Olivier shared his thoughts about improvements in two blog posts (part 1, part 2) . A big thank you to everybody for getting involved in these discussions, we appreciate your feedback and it has made Slint better for all of us.

In this release we've implemented various changes at the syntax level. The main difference between the old and new syntax is how we declare components. Instead of using MyComponent := , we now use the component keyword.

component MyComponent {
    in property <int> text;
    out property <bool> pressed;
    Text { text: root.text; }
    TouchArea { pressed <=> root.pressed; }
  }
  

For now, both syntaxes co-exist, all your existing files continue to work.

When using the new syntax, you can access features to make UI code more maintainable:

  • Non-local properties must be explicitly qualified with self or root.
  • Declared properties are now private by default. If you want to create a public property, they must be annotated with in, out or in-out
  • Elements are now centered within their parent by default.
  • Calling impure functions and callback is now a hard error.

To try it out, update your existing .slint files to the new syntax using our slint-updater tool:

cargo install slint-updater
  slint-updater -i /path/to/my/app/ui/**/*.slint

Table Widget

Slint gained a new widget: StandardTableView.

It comes with all the popular nifty features: displaying resizable column headers, and sorting columns in ascending or descending order.

Screenshot of the StandardTableView in Slint

Tooling Improvements

Our VSCode extension supports Slint code embedded into Rust files using the slint! macro. That means you get code completion, syntax highlighting, and live-preview.

VSCode editing slint! macro code

Slint 1.0 in the Works

Our next release will be 🥁 Slint 1.0.

We're in the midst of clean up, improving the documentation, and quality assurance.

You can help us by upgrading to Slint 0.3.4 and testing it with your project. We welcome all feedback. We look forward to hearing from you. You can get in touch with us via our GitHub site, email, or via chat on our Mattermost instance.


Comments

Slint is a Rust-based toolkit for creating reactive and fluent user interfaces across a range of targets, from embedded devices with limited resources to powerful mobile devices and desktop machines. Supporting Android, Windows, Mac, Linux, and bare-metal systems, Slint features an easy-to-learn domain-specific language (DSL) that compiles into native code, optimizing for the target device's capabilities. It facilitates collaboration between designers and developers on shared projects and supports business logic development in Rust, C++, JavaScript, or Python.