diff --git a/FAQ.md b/FAQ.md index cc9a4b702cc..cd9da1b4836 100644 --- a/FAQ.md +++ b/FAQ.md @@ -5,70 +5,98 @@ - [Why are you creating a new markup language?](#why-are-you-creating-a-new-markup-language) - [Will there be API bindings to integrate with my favorite programming language?](#will-there-be-api-bindings-to-integrate-with-my-favorite-programming-language) - [Licensing](#licensing) - - [What is the commercial licensing model?](#what-is-the-commercial-licensing-model) - - [Can I try Slint using the GPL version and then switch to the commercial license later?](#can-i-try-slint-using-the-gpl-version-and-then-switch-to-the-commercial-license-later) + - [What are the commercial licensing options?](#what-are-the-commercial-licensing-options) + - [What does perpetual mean?](#what-does-perpetual-mean) + - [Are updates included?](#are-updates-included) + - [Can I try Slint using the Ambassador option and then switch to the commercial license later?][def] + - [Can I try Slint using the GPL version and then switch to the commercial license later?](#can-i-try-slint-under-the-gpl-and-then-switch-to-the-commercial-license-later) - [Is there a discount or reduction for independent developers or small businesses?](#is-there-a-discount-or-reduction-for-independent-developers-or-small-businesses) - [I want to develop a free software product using Slint, but I don't like the GPL and prefer to use a non-copyleft license.](#i-want-to-develop-a-free-software-product-using-slint-but-i-dont-like-the-gpl-and-prefer-to-use-a-non-copyleft-license) -# General +## General -## Where does the name come from? +### Where does the name come from? -The name *Slint* is derived from our design goals: **S**traightforward, **Li**ghtweight **N**ative **T**oolkit. +The name *Slint* is derived from our design goals: **S**calable, **L**ightweight, +**I**ntuitive, and **N**ative **T**oolkit. -## Why are you creating a new markup language? +### Why are you creating a new markup language? -We are creating a markup language which is both editable by humans and machines. We hope it is possible -to pick up and understand, and at the same time strict enough for our tools to analyze and optimize -to provide a smooth interface on the screen. In our experience, a domain specific, declarative language -suits this purpose best. Strictly typed binding expressions offer a powerful and robust way for humans -to declare relationships between properties, even in complex user interfaces. +We are creating a markup language which is both editable by humans and machines. +We hope it is possible to pick up and understand, and at the same time strict +enough for our tools to analyze and optimize to provide a smooth interface on +the screen. In our experience, a domain specific, declarative language suits +this purpose best. Strictly typed binding expressions offer a powerful and +robust way for humans to declare relationships between properties, even in +complex user interfaces. -## Will there be API bindings to integrate with my favorite programming language? +### Will there be API bindings to integrate with my favorite programming language? -We want to make it possible to use Slint with any programming language. We do not favor one programming -language over another. We have chosen to start with three languages: +We want to make it possible to use Slint with any programming language. We do +not favor one programming language over another. We have chosen to start with +three languages: - * Rust, our implementation language. - * C++, another systems programming language we have a lot of experience with. - * JavaScript, a popular dynamically typed language. +- Rust, our implementation language. +- C++, another systems programming language we have a lot of experience with. +- JavaScript, a popular dynamically typed language. -This choice builds the foundation that allows us to create bindings for most types of programming -languages. +This choice builds the foundation that allows us to create bindings for most +types of programming languages. -# Licensing +## Licensing -Slint is available under two licenses: +You can use Slint under either a [commercial license](./LICENSES/LicenseRef-Slint-commercial.md) +or [GNU GPLv3](./LICENSES/GPL-3.0-only.txt). - * GPLv3, for the growing ecosystem of Free and Open Source Software. - * Commercial, for use in closed-source projects. See +The commercial license can be provided for free if you help us promote Slint: Check out our +[ambassador program](https://slint-ui.com/ambassador-program.html). -The commercial license is free if you help us promote Slint: Check out our -[ambassador license](https://slint-ui.com/ambassador-program.html). +### What are the commercial licensing options? -## What is the commercial licensing model? +We offer - Ambassador, Flex and Buyout commercial licensing options. All options +include a non-exclusive, perpetual, irrevocable, non-transferable right to use +Slint. Updates are included in the Ambassador and Buyout options. With the Flex +option, updates are included as long as the subscription is active. -The basic principle behind our commercial licensing is that you start for free and pay when you're shipping. +The Ambassador option is a free license that can be provided in lieu of helping +us promote Slint. -We offer a perpetual license option and we generally deploy a per-product license, regardless of how many developers, designers, Q&A engineers are using Slint. +With the Flex option, you can choose the number of User-Seats you would need to +develop your applications with Slint. Before distribution of such applications +on embedded devices, you can purchase the required amount of distributions. At +any point of time, you could also switch to the Buyout option. -If this doesn't fit you, don't hesitate to contact us and we'd be happy to work together to find a solution. +The Buyout option includes unlimited User-Seats and a prebuy of distribitions of +your Slint based applications on embedded devices. -You can find a more detailed overview of our commercial licensing and the pricing at . +### What does perpetual mean? -## Can I try Slint using the GPL version and then switch to the commercial license later? +The perpetual right allows you to use the version(s) of Slint, provided under the +commercial license, for ever. -Yes. The GPL is a distribution license that applies only when you ship your application. You can -evaluate Slint and develop your product internally using the GPL license, and only acquire a commercial -license when you want to ship your product. If you choose a per seat licensing model, the time spent -developing needs to be accounted for. However, support for bug fixes requires a commercial license. +### Are updates included? -## Is there a discount or reduction for independent developers or small businesses? +Yes, updates are included. With the Flex option, updates are included as long as +the subscription is active. + +### Can I try Slint using the Ambassador option and then switch to the commercial license later? + +Yes. You can evaluate Slint using the GPL license, and obtain the commercial +license after the evaluation, with the option of transferring the code +developed under the GPL to commercial for free. + +### Can I try Slint under the GPL and then switch to the commercial license later? + +Yes. You can evaluate Slint using the GPL license, and obtain the commercial +license after the evaluation, with the option of transferring the code +developed under the GPL to commercial for free. + +### Is there a discount or reduction for independent developers or small businesses? Yes, check out our [Ambassador program](https://slint-ui.com/ambassador-program.html) -## I want to develop a free software product using Slint, but I don't like the GPL and prefer to use a non-copyleft license. +### I want to develop a free software product using Slint, but I don't like the GPL and prefer to use a non-copyleft license -You can still publish your own source code under a permissive license compatible with the GPL, such as BSD, MIT, or Apache license. -The distribution of a binary or a package containing Slint still needs to be licensed under the GPL. -It is up to those who want to distribute a non-free version of the application to acquire a commercial license. +You can publish your own source code under a permissive license compatible with +the GPL, such as BSD, MIT, or Apache license. However, the binary or the package +containing Slint needs to be licensed under GPL. diff --git a/LICENSE.md b/LICENSE.md index 1da1261559a..970474958e7 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ # Slint License Slint is available under either a [commercial license](LICENSES/LicenseRef-Slint-commercial.md) -or at your choice under [GPL 3.0](LICENSES/GPL-3.0-only.txt). +or [GNU GPLv3](LICENSES/GPL-3.0-only.txt), at your choice. Third party licenses listed in the `LICENSES` folder also apply to parts of the product. diff --git a/LICENSES/LicenseRef-Slint-commercial.md b/LICENSES/LicenseRef-Slint-commercial.md index 46b71a65ef3..2022b1488b5 100644 --- a/LICENSES/LicenseRef-Slint-commercial.md +++ b/LICENSES/LicenseRef-Slint-commercial.md @@ -1,6 +1,280 @@ -## The Slint Commercial License +# Slint Software License Agreement -Slint is offered under a commercial license. Please contact info@slint-ui.com if you're interested. +Version 1.2 -See also the [Licensing FAQ](https://github.com/slint-ui/slint/blob/master/FAQ.md#licensing) online -or find the same information in `FAQ.md` in the top level of your slint repository checkout. +Copyright © 2022 SixtyFPS GmbH + +SixtyFPS GmbH with offices at Oranienburger Str. 44, 16540 Hohen Neuendorf, +Germany (**SixtyFPS**, **us**, **we** or **our**) grants a license to the +software (**Licensed Software**), as specified herein, subject to the Terms and +Conditions of this Slint Software License Agreement (**Agreement**). + +By using the Licensed Software, **you** agree to be bound by this Agreement. +**If you do not agree, do not use the Licensed Software.** If you are accessing +and using the Licensed Software on behalf of a company (such as your employer) +or other legal entity, you represent and warrant that you have the authority to +bind that company or other legal entity to this Agreement. In that case, **you** +and **your** will refer to that company or other legal entity. + +Each Party to this Agreement may be referred to herein individually as a +**Party** or collectively as the **Parties**. + +## Licensed Software + +The Licensed Software includes + +1. Slint compiler tool to translate Slint Design Markup Language files to Rust + (last stable Rust version at the time of licensed Slint version) and C++ + (second last C++ version at the time of licensed Slint version), + +2. Slint run-time library that can render interactive user-interfaces and + provides Rust and C++ APIs (as per above versioning) to control the + interfaces, + +3. API Documentation for Slint and reference documentation for Slint Design + Markup Language, and + +4. Source code of Slint. + +## Terms and Conditions + +1. The Licensed Software is protected by copyright laws and international + copyright treaties, as well as other intellectual property laws and + treaties. The Licensed Software is licensed, not sold. + +2. The Licensed Software may provide links to third Party libraries or code + (collectively **Third Party Libraries**) to implement various functions. + Third Party Libraries do not comprise part of the Licensed Software. In some + cases, access to Third Party Libraries may be included along with the + Licensed Software delivery as a convenience for development and testing + only. You acknowledge: + + 1. that some Third-Party Libraries may require additional licensing of + copyright and/or patents from the owners of such, and + + 2. that distribution of any of the Licensed Software referencing any portion + of a Third-Party Library may require appropriate licensing from such + third parties. All such Third Party Libraries, along with applicable + copyright notices and licenses, will be listed and made available to + you. + +3. As part of the license grant, a Slint Software License Certificate + (**License Certificate**) will be issued containing details of + + 1. the license grant, + + 2. the permitted scope of your use of the Licensed Software, and + + 3. your contact details. + + In case of any changes or deviations to the information noted in the License + Certificate, you are obliged to notify us in writing, not later than 7 days + after any such change or deviation has occured. + +4. The Term of this Agreement shall begin on the date mentioned in the License + Certificate (**Effective Date**) and shall continue unless terminated + earlier as herein provided (**Term**). + +5. New releases of the Licensed Software (**Updates**) will be made available + to you for the period (**Maintenance Period**) specified in the License + Certificate. Such Updates may be bound by additional license terms. You + consent to any such additional license terms, without which you may not + install, copy, or otherwise use such Updates. + +6. The Licensed Software is to be used exclusively with your software + products (**Products**) specified in the License Certificate. + +7. We grant you a perpetual, non-exclusive, non-transferable right to use the + Licensed Software, including making modifications, for the sole purposes of + designing, developing, and testing your Products during the Term. The number + of **Users** using the Licensed Software to design, develop and test your + Products is limited to the amount of **User Seats** specified in the License + Certificate. For clarity, each unique User is counted as one User Seat. + +8. We grant you a perpetual, non-exclusive, non-transferable right to reproduce + and distribute the object code form of the Licensed Software, including any + modifications made to the Licensed Software, during the Term. Such + distributions is permitted only with your Products and limited to the amount + of **Distributions** specified in the License Certificate. + +9. The license grants are conditional on the full and timely payment of all + applicable **Fees**; if said Fees are not paid in full and by their due + date, the license shall not be granted and your Products shall be deemed as + made in breach of the Agreement ex tunc. + +10. Clause 9 above shall not apply if the license has been granted to you under + the **Ambassador** program. Instead, the license grants shall be conditional + on the fullfilment of the obligations as specified herein. If said + obligations are not fulfilled, the license shall not be granted and your + Products shall be deemed as made in breach of the Agreement ex tunc. The + obligations are as follows: + + 1. Showcase: You grant us the right to use your name, logo and your + Products in our marketing materials, + + 2. Spread the word: You will include reasonably visible notices in the + documentation, marketing materials and social media channels related to + your Products that such were built with the Licensed Software, + + 3. Give feedback: You agree to provide relevant feedback that would + help us improve the Licensed Software. We may use any such + feedback in testimonials. + +11. The Fees and any other charges under this Agreement shall be paid by + you no later than thirty (30) days from the date of the applicable + invoice from us. A late payment charge of the lower of (a) one percent + per month; or (b) the interest rate stipulated by applicable law, shall be + charged on any unpaid balances that remain past due and which have not been + disputed by you in good faith. + +12. The Fees and any other charges payable under this Agreement are gross + amounts but exclusive of any value added tax, use tax, sales tax, + withholding tax and other taxes, duties or tariffs levied directly for the + sale, delivery or use of the Licensed Software pursuant to any applicable + law. + +13. The Parties also agree to all of the following conditions: + + 1. You may not remove or alter any copyright, trademark or other + proprietary rights notice contained in any portion of the Licensed + Software, + + 2. Your Products may not compete with the Licensed Software, + + 3. You will indemnify and hold us, our affiliated companies and our + suppliers, harmless from and against any claims or liabilities + arising out of the use, reproduction or distribution of your + Products, except as set out in clause 13.4. immediately below, + + 4. We shall indemnify and hold you harmless from and against any + claims from third parties alleging that the use of the Licensed Software + as set out in this Agreement infringes or will infringe such third + parties intellectual property rights or other rights, + + 5. A Party shall promptly notify the other Party if it receives a claim that + the other Party shall or may be obliged to indemnify. The Parties shall + promptly give each other information and other assistance needed for + handling the claim. The Indemnifying Party may, at its cost and in its + sole discretion, take control of the defense of such claim, including + the conduct of any litigation or arbitration and the negotiation of any + settlement, in which case the indemnifying Party shall not compromise or + settle or otherwise dispose of the claim, in whole or in part, where + such compromise or settlement or disposal would require any admission or + stipulation which would reasonably be expected to have an adverse effect + on the commercial reputation of the indemnified Party, without the prior + written consent of the indemnified Party. Where the indemnifying Party + has not taken control of the defense of the claim, the indemnified Party + shall not compromise or settle or fail adequately to defend or otherwise + dispose of a claim, in whole or in part, without the written consent of + the indemnifying Party, such consent not to be unreasonably withheld or + delayed. + +14. The Licensed Software is licensed to you "as is". To the maximum extent + permitted by applicable law, we on behalf of us and our suppliers, + disclaim all warranties and conditions, either express or implied, + including, but not limited to, any implied warranties of merchantability or + fitness for a particular purpose, title and non-infringement with regard to + the Licensed Software. The warranty disclaimer in the foregoing + notwithstanding, you may have specific legal rights which may vary from + state/jurisdiction to state/jurisdiction; as far as legally permissible, you + waive any such legal rights vis-à-vis us. + +15. We shall not under any circumstances be liable to you based on failure of + the Licensed Software if the failure resulted from your changing of the + Licensed Software, from your accident, abuse or misapplication, nor shall + either party except in case of gross negligence or willful misconduct be + liable for special damages, punitive or exemplary damages, damages for loss + of profits or interruption of business or for loss or corruption of data, + nor shall any award of damages from either party to the other party exceed + the total amount you paid to us in connection with this agreement. + +16. Each Party shall hold Confidential Information of the other Party, its + customers, and licensors in confidence, and without written permission from + will not disclose to any person or use for its own benefit, any such + information. **Confidential Information** includes without limitation the + terms of this Agreement, computer software programs developed or licensed by + the Parties, including all documentation and methods or concepts utilized + therein, all adaptations and modifications thereto and derivative works + thereof, and related materials and information. Confidential Information + also includes any other information identified by either Party, its + licensors, or customers as proprietary or confidential, or which would + reasonably be understood under the circumstances to be confidential. All + Confidential Information shall remain the sole property of each respective + Party. Information will not be considered to be Confidential Information if + + 1. available to the public other than by a breach of this Agreement; + + 2. rightfully received from a third Party not in breach of any obligation of + confidentiality; + + 3. independently developed by a Party without access to Confidential + Information of the other Party; + + 4. known to the other Party at the time of disclosure; + + 5. produced in compliance with applicable law or a court order, provided the + other Party is given notice and opportunity to intervene; or + + 6. it does not constitute a trade secret and more than five (5) years have + elapsed from the date of disclosure. In addition to any other rights or + remedies available, each Party shall be entitled to enforcement of such + obligations by court injunction. + +17. During the Term, an independent, certified auditor on our behalf, may, upon + its reasonable request, with 30 (thirty) days written notice, and at its + sole expense, examine your books and records solely with respect to your use + of the Licensed Software. Any such audit shall be conducted during regular + business hours at your facilities and shall not unreasonably interfere with + your business activities. Our auditor shall not remove, copy, or + redistribute any electronic material during the course of an audit. If an + audit reveals that you are using the Licensed Software in a way that is in + material violation of the terms of this Agreement, then you shall pay us + reasonable costs of conducting the audit. Our auditor shall only be allowed + to report violations of the terms of this Agreement, with a copy to you. You + shall be provided the right to provide comments to the report before it is + finalized. + +18. If you materially breach this Agreement, we will provide a 60 (sixty) days + written notice to you during which any such breach(es) may be cured, failing + which we will terminate the agreement. You undertake to pay a contractual + penalty for each case of negligent breach of this Agreement of EUR 10000 + (ten thousand euros), which shall not be subject to a judicial right of + reduction. We shall in any case be free to assert any further damage/loss or + other claims. The amount of contractual penalty shall be offset against + claims for damages, if any. + +19. You may terminate this Agreement at any time for any reason upon 90 (ninety) + days notice to us and upon payment of all applicable fees and contractual + penalties, if any, in connection with the use of the Licensed Software. + +20. Both Parties shall comply with all applicable laws and regulations relating + to the Licensed Software in the countries in which the Parties use or modify + the Licensed Software. + +21. All notices and communications between the Parties shall be in writing and + shall be deemed given when received. For avoidance of doubt, email is + considered a written form of communication. + +22. This Agreement shall be construed, interpreted and governed by the laws of + the Federal Republic of Germany. + +23. No term or condition contained in your purchase order will apply unless + expressly accepted by us in writing. + +24. You may assign this Agreement, in whole or in part (whether by operation of + law or otherwise), with prior consent from us, which shall not be + unreasonably withheld or delayed. We may assign this Agreement or any of its + rights hereunder or delegate any of its obligations hereunder with prior + notice to you. Any attempt to assign this Agreement other than in accordance + with this provision shall be null and void. + +25. This Agreement constitutes the complete agreement between the Parties and + supersedes all prior or contemporaneous discussions, representations, and + proposals, written or oral, with respect to the subject matters discussed + herein. No modification of this Agreement will be effective unless contained + in a written document executed by an authorized representative of each + Party. If any provision of the Agreement is found void or unenforceable, the + remainder will remain valid and enforceable according to its terms. If any + remedy provided is determined to have failed for its essential purpose, all + limitations of liability and exclusions of damages set forth in this + Agreement shall remain in effect. diff --git a/README.md b/README.md index 0f50acbbfc3..c250f71e265 100644 --- a/README.md +++ b/README.md @@ -2,81 +2,95 @@ -
Formerly known as
- [![Build Status](https://github.com/slint-ui/slint/workflows/CI/badge.svg)](https://github.com/slint-ui/slint/actions) [![REUSE status](https://api.reuse.software/badge/github.com/slint-ui/slint)](https://api.reuse.software/info/github.com/slint-ui/slint) [![Discussions](https://img.shields.io/github/discussions/slint-ui/slint)](https://github.com/slint-ui/slint/discussions) -Slint is a toolkit to efficiently develop fluid graphical user interfaces for any display: embedded devices and desktop applications. We support multiple programming languages, such as -Rust, C++, and JavaScript. - -Our design goals are: +Slint is a toolkit to efficiently develop fluid graphical user interfaces for +any display: embedded devices and desktop applications. We support multiple +programming languages, such as Rust, C++, and JavaScript. We invite you +to use Slint and be part of its community. - - **Lightweight**: Fit into a few hundred kilobytes of RAM and require little processing power. - - **Straightforward**: Programmers and designers should feel productive and be able to enjoy the design and development process. - The APIs should be consistent, easy to use, and intuitive, no matter the target language. High-quality documentation - should describe the APIs, teach concepts and how to use them. - - **Native**: We support many different target platforms, from embedded devices to desktops including mobile and web. Both the user and the developer should feel at - home on each platform. The look and feel and experience should match the users' expectations of a - native application. +## Design Goals -## Quick Start +We use the following design goals as a guide when developing Slint: -Check the [online demos](#demos-running-in-webassembly-simulation) or -[build on your own system](docs/building.md). +- **Scalable**: Run on any screen connected to a device, from desktop computers + to low end embedded systems. +- **Lightweight**: Fit into a few hundred kilobytes of RAM and require little + processing power. +- **Intuitive**: Both developers and designers should feel productive and enjoy + the design and development process. + The APIs should be consistent and easy to use, no matter the target language. +- **Native**: Slint apps should match the users' expectations of a native + application. Various target platforms such as embedded devices, desktops, + mobile and web should be supported so that both the user and the developer + feel comfortable on their platform of choice. ## Current Status -Slint is in active development. Its state of development depends on the kind of application. - - - **Embedded**: *Ready!* Slint is already happily used by customers on embedded devices - (running on an Arm processor with Linux). - - **Microcontrollers**: *Ready*. You can make GUI working on MCU with less than 300K of RAM. - [Video of Slint on STM32](https://www.youtube.com/watch?v=NNNOJJsOAis) – - [Video of Slint on RP2040](https://www.youtube.com/watch?v=dkBwNocItGs) – - [docs](https://slint-ui.com/docs/rust/slint/docs/mcu/index.html) - - **Desktop**: *In Progress*. Slint is usable on Windows, Linux and Mac. We plan on building - up the desktop support in subsequent releases to reach the level of integration we're aiming for. - - **Mobile** (Android/iOS): *Todo*. We haven't started supporting mobile platforms yet, but it - is our intention to do so in the future. - - **Web**: Our focus is on Embedded and Desktop applications. We do not intend to compete in - the web space as a primary platform. That said, Slint can compile to WebAssembly and the - demos are running in a web browser. But the web support is currently limited to demo purposes. - - **Accessibility**: Slint supports keyboard based navigation of many widgets, and user interfaces - are scalable. The basic infrastructure for assistive technology like screen readers is in place, - but requires the Qt backend at this time. - - We are aware that more work is needed to get best-of-class support for users with special needs. +Slint is in active development. The state of the toolkit for each platform is as +follows: + +- **Embedded**: *Ready* Slint is already being used in production projects by + customers (running on an Arm processor with Linux). +- **Microcontrollers** (MCU): *Ready*. Slint apps can run on MCUs with less than + 300K of RAM. +- **Desktop**: *In Progress*. While Slint is usable on Windows, Linux and Mac, + we are working on improving the platform support in subsequent releases. +- **Mobile** (Android/iOS): *Todo*. We haven't started supporting mobile + platforms yet, but it is our intention to do so in the near future. +- **Web**: *In Progress*. Slint apps can be compiled to WebAssembly and can run + in a web browser. As there are many other web frameworks, the web platform + is not one of our primary target platforms. The web support is currently + limited to demo purposes. + +### Accessibility + + Slint supports keyboard based navigation of many widgets, and user interfaces + are scalable. The basic infrastructure for assistive technology like screen + readers is in place, but currently requires the Qt backend. + We are aware that more work is needed to get best-of-class support for users + with special needs. ### Stay up to date -Follow [@slint-ui](https://twitter.com/slint_ui) on twitter or keep an eye out for -our [🥠 Weekly Status Updates](https://slint-ui.com/thisweek/). +Follow [@slint-ui](https://twitter.com/slint_ui) on twitter or keep an eye out +for our [🥠 Weekly Status Updates](https://slint-ui.com/thisweek/). ## Documentation The [examples](examples) folder contains examples and demos. The `docs` folder contains a lot more information, including -[build instructions](docs/building.md), [recipes for common tasks](docs/recipes/recipes.md) and -[internal developer docs](docs/development.md). +[build instructions](docs/building.md), [recipes for common tasks](docs/recipes/recipes.md) +and [internal developer docs](docs/development.md). Refer to the README of each language directory in the `api` folder: - * [C++](api/cpp) ([Documentation](https://slint-ui.com/docs/cpp) | [Tutorial](https://slint-ui.com/docs/tutorial/cpp) | [Tutorial Video](https://youtu.be/_-Hxr6ZrHyo) | [Getting Started Template](https://github.com/slint-ui/slint-cpp-template)) - * [Rust](api/rs/slint) [![Crates.io](https://img.shields.io/crates/v/slint)](https://crates.io/crates/slint) ([Documentation](https://slint-ui.com/docs/rust/slint/) | [Tutorial](https://slint-ui.com/docs/tutorial/rust) | [Tutorial Video](https://youtu.be/_-Hxr6ZrHyo) | [Getting Started Template](https://github.com/slint-ui/slint-rust-template)) - * [JavaScript/NodeJS](api/node) [![npm](https://img.shields.io/npm/v/slint-ui)](https://www.npmjs.com/package/sixtyfps) ([Documentation](https://slint-ui.com/docs/node)) +- [C++](api/cpp) ([Documentation](https://slint-ui.com/docs/cpp) | [Tutorial](https://slint-ui.com/docs/tutorial/cpp) | [Tutorial Video](https://youtu.be/_-Hxr6ZrHyo) | [Getting Started Template](https://github.com/slint-ui/slint-cpp-template)) +- [Rust](api/rs/slint) [![Crates.io](https://img.shields.io/crates/v/slint)](https://crates.io/crates/slint) ([Documentation](https://slint-ui.com/docs/rust/slint/) | [Tutorial](https://slint-ui.com/docs/tutorial/rust) | [Tutorial Video](https://youtu.be/_-Hxr6ZrHyo) | [Getting Started Template](https://github.com/slint-ui/slint-rust-template)) +- [JavaScript/NodeJS](api/node) [![npm](https://img.shields.io/npm/v/slint-ui)](https://www.npmjs.com/package/sixtyfps) ([Documentation](https://slint-ui.com/docs/node)) + +## Demos + +### Embedded + +[Video of Slint on RaspberryPi](https://www.youtube.com/watch?v=_BDbNHrjK7g) -## Demos running in WebAssembly Simulation +### MCU -Click on the screenshots to run the WebAssembly simulation +| STM32| RP2040 | +|--------------|----------------| +| [Video of Slint on STM32](https://www.youtube.com/watch?v=NNNOJJsOAis) | [Video of Slint on RP2040](https://www.youtube.com/watch?v=dkBwNocItGs) | + +### WebAssembly | Printer Demo | Slide Puzzle | Todo | Widget Gallery | |--------------|----------------|----------------|----------------| | [![Screenshot of the Printer Demo](https://slint-ui.com/resources/printerdemo_screenshot.png "Printer Demo")](https://slint-ui.com/demos/printerdemo/) | [![Screenshot of the Slide Puzzle](https://slint-ui.com/resources/puzzle_screenshot.png "Slide Puzzle")](https://slint-ui.com/demos/slide_puzzle/) | [![Screenshot of the Todo Demo](https://slint-ui.com/resources/todo_screenshot.png "Todo Demo")](https://slint-ui.com/demos/todo/) | [![Screenshot of the Gallery Demo](https://slint-ui.com/resources/gallery_screenshot.png "Gallery Demo")](https://slint-ui.com/demos/gallery/) | -## Desktop Native Widgets +### Desktop Native Widgets | Windows | macOS | Linux | |---------|-------|-------| @@ -84,8 +98,11 @@ Click on the screenshots to run the WebAssembly simulation ## The .slint Markup Language -Slint comes with a markup language that is specifically designed for user interfaces. This language provides a -powerful way to describe graphical elements, their placement, and the flow of data through the different states. It is a familiar syntax to describe the hierarchy of elements and property bindings. Here's the obligatory "Hello World": +Slint comes with a markup language that is specifically designed for user +interfaces. This language provides a powerful way to describe graphical elements, +their placement, and the flow of data through the different states. It is a +familiar syntax to describe the hierarchy of elements and property bindings. +Here's the obligatory "Hello World": ```slint HelloWorld := Window { @@ -105,100 +122,120 @@ Check out the [language reference](docs/langref.md) for more details. ## Architecture -An application is composed of the business logic written in Rust, C++, or JavaScript and the `.slint` user interface design markup, which -is compiled to native code. +An application is composed of the business logic written in Rust, C++, or +JavaScript and the `.slint` user interface design markup, which is compiled to +native code. ![Architecture Overview](https://slint-ui.com/resources/architecture.drawio.svg) ### Compiler -The `.slint` files are compiled ahead of time. The expressions in the `.slint` are pure functions that the -compiler can optimize. For example, the compiler could choose to "inline" properties and remove those -that are constant or unchanged. In the future we hope to improve rendering time on low end devices by -pre-processing images and text. The compiler could determine that a `Text` or an `Image` element is -always on top of another `Image` in the same location. Consequently both elements could be rendered ahead -of time into a single element, thus cutting down on rendering time. - -The compiler uses the typical compiler phases of lexing, parsing, optimization, and finally code -generation. It provides different back-ends for code generation in the target language. The C++ code -generator produces a C++ header file, the Rust generator produces Rust code, and so on. An interpreter -for dynamic languages is also included. +The `.slint` files are compiled ahead of time. The expressions in the `.slint` +are pure functions that the compiler can optimize. For example, the compiler +could choose to "inline" properties and remove those that are constant or +unchanged. In the future we hope to improve rendering time on low end devices by +pre-processing images and text. The compiler could determine that a `Text` or an +`Image` element is always on top of another `Image` in the same location. +Consequently both elements could be rendered ahead of time into a single +element, thus cutting down on rendering time. + +The compiler uses the typical compiler phases of lexing, parsing, optimization, +and finally code generation. It provides different back-ends for code generation +in the target language. The C++ code generator produces a C++ header file, the +Rust generator produces Rust code, and so on. An interpreter for dynamic +languages is also included. ### Runtime -The runtime library consists of an engine that supports properties declared in the `.slint` language. -Components with their elements, items, and properties are laid out in a single memory region, to reduce -memory allocations. +The runtime library consists of an engine that supports properties declared in +the `.slint` language. Components with their elements, items, and properties are +laid out in a single memory region, to reduce memory allocations. -Rendering backends and styles are configurable at compile time. Current there are two back-ends: +Rendering backends and styles are configurable at compile time. Current there +are two back-ends: - * The `gl` backend uses OpenGL ES 2.0 for rendering. - * The `qt` backend uses Qt's QStyle to achieve native looking widgets. In the future it could also use - QPainter. +- The `gl` backend uses OpenGL ES 2.0 for rendering. +- The `qt` backend uses Qt's QStyle to achieve native looking widgets. In the + future it could also use QPainter. ### Tooling We have a few tools to help with the development of .slint files: - - A [**LSP Server**](./tools/lsp) that adds features like auto-complete and live preview of the .slint files to many editors. - - It is bundled in a [**Visual Studio Code Extension**](./editors/vscode) available from the market place. - - A [**slint-viewer**](./tools/viewer) tool which displays the .slint files. The `--auto-reload` argument makes it easy to preview - your UI while you are working on it (when using the LSP preview is not possible). - - An [**online editor**](https://slint-ui.com/editor) to try out .slint syntax without installing anything ([sources](./tools/online_editor)). - - An [**updater**](./tools/syntax_updater) to convert the .slint files from previous versions to newer versions. - - An experimental [**Figma importer**](./tools/figma_import). -Please check our [Editors README](./editors/README.md) for tips on how to configure your favorite editor to work well with Slint. +- A [**LSP Server**](./tools/lsp) that adds features like auto-complete and live + preview of the .slint files to many editors. +- It is bundled in a [**Visual Studio Code Extension**](./editors/vscode) + available from the market place. +- A [**slint-viewer**](./tools/viewer) tool which displays the .slint files. The + `--auto-reload` argument makes it easy to preview your UI while you are + working on it (when using the LSP preview is not possible). +- An [**online editor**](https://slint-ui.com/editor) to try out .slint syntax + without installing anything ([sources](./tools/online_editor)). +- An [**updater**](./tools/syntax_updater) to convert the .slint files from + previous versions to newer versions. +- An experimental [**Figma importer**](./tools/figma_import). + +Please check our [Editors README](./editors/README.md) for tips on how to +configure your favorite editor to work well with Slint. ## Made with Slint -List of some open source projects using Slint: (Contact us or open a pull request to add yours) +List of some open source projects using Slint: (Contact us or open a pull +request to add yours) + +- **[Cargo UI](https://github.com/slint-ui/cargo-ui)**: A graphical frontend for + Cargo. +- **[ImageSieve](https://github.com/Futsch1/image-sieve)** : GUI based tool to + sort and categorize images. +- **[Moiré](https://codeberg.org/Be.ing/moire)** : Musical live performance + application with a DAW-like timeline interface. +- **[Chiptrack](https://github.com/jturcotte/chiptrack)**: A cross-platform + sequencer that internally uses a Game Boy emulator to synthesize the sound. +- **[Project Trains Launcher](https://github.com/Project-Trains/launcher)**: + Cross-platform game launcher made for Project Trains simulator. +- **[Mastermind](https://github.com/ElevenJune/mastermind_Rust)**: Mastermind + game coded in Rust. - - **[Cargo UI](https://github.com/slint-ui/cargo-ui)**: A graphical frontend for Cargo. - - **[ImageSieve](https://github.com/Futsch1/image-sieve)** : GUI based tool to sort and categorize images. - - **[Moiré](https://codeberg.org/Be.ing/moire)** : Musical live performance application with a DAW-like timeline interface. - - **[Chiptrack](https://github.com/jturcotte/chiptrack)**: A cross-platform sequencer that internally uses a Game Boy emulator to synthesize the sound. - - **[Project Trains Launcher](https://github.com/Project-Trains/launcher)**: Cross-platform game launcher made for Project Trains simulator. - - **[Mastermind](https://github.com/ElevenJune/mastermind_Rust)**: Mastermind game coded in Rust. - -## Contributions - -We welcome your contributions: in the form of code, bug reports or feedback. +## License - * If you see an [RFC tag](https://github.com/slint-ui/slint/labels/rfc) on an issue, feel free to - chime in. - * For contribution guidelines see [CONTRIBUTING.md](CONTRIBUTING.md). The dual-licensing requires the - contributor to accept a CLA. +Slint can be used under either a [commercial license](./LICENSES/LicenseRef-Slint-commercial.md) +or [GNU GPLv3](./LICENSES/GPL-3.0-only.txt), at your choice. -## License +The commercial license can be provided for free if you help us promote Slint: +Check out our [ambassador program](https://slint-ui.com/ambassador-program.html). -This software is provided under a dual licensing scheme: +See also the [Licensing FAQ](FAQ.md#licensing) - - **GNU GPLv3**: Open source license ideal for free software. - - **Commercial Slint license**: +## Contributions -The commercial license is free if you help us promote Slint: Check out our -[ambassador license](https://slint-ui.com/ambassador-program.html). +We welcome your contributions: in the form of code, bug reports or feedback. -See also the [Licensing FAQ](FAQ.md#licensing) +- If you see an [RFC tag](https://github.com/slint-ui/slint/labels/rfc) on an + issue, feel free to chime in. +- For contribution guidelines see [CONTRIBUTING.md](CONTRIBUTING.md). The + dual-licensing of Slint requires the contributor to accept our CLA. ## Frequently Asked Questions Please see our separate [FAQ](FAQ.md). -## About us +## About us (SixtyFPS GmbH) -Olivier and Simon started their open source journey in the KDE project, the popular Open Source Desktop Environment -for Linux. Later they met while working together in a small company in Norway called Trolltech, on the Qt C++ toolkit. -Here, they gained valuable experience in API design, cross-platform software development and user interface components. -Simon continued in the Qt Company as one lead developer and maintainer of the QtQml engine, while Olivier -co-founded [Woboq](https://woboq.com), a software consulting company. Years later, and now based in Berlin, they are starting a -new project. With Slint they aim to make developing user interfaces fun for everyone: from JavaScript, C++, or -Rust developers all the way to UI/UX designers. +We are passionate about software - API design, cross-platform software +development and user interface components. Our aim is to make developing user +interfaces fun for everyone: from JavaScript, C++, or Rust developers all the +way to UI/UX designers. We believe that software grows organically and keeping +it open source is the best way to sustain that growth. Our team members are +located remotely in Germany. ## Contact us -Feel free to join [Github discussions](https://github.com/slint-ui/slint/discussions) for general chat or questions. Use [Github issues](https://github.com/slint-ui/slint/issues) to report public suggestions or bugs. +Feel free to join [Github discussions](https://github.com/slint-ui/slint/discussions) +for general chat or questions. Use [Github issues](https://github.com/slint-ui/slint/issues) +to report public suggestions or bugs. -We chat in [our Mattermost instance](https://chat.slint-ui.com) where you are welcome to listen in or ask your questions. +We chat in [our Mattermost instance](https://chat.slint-ui.com) where you are +welcome to listen in or ask your questions. -You can of course also tweet at [@slint-ui](https://twitter.com/slint_ui) or contact us privately via email to [info@slint-ui.com](mailto://info@slint-ui.com). +You can of course also tweet at [@slint-ui](https://twitter.com/slint_ui) or +contact us privately via email to [info@slint-ui.com](mailto://info@slint-ui.com).