Qt Bridges Documentation
Note: Qt Bridges (C# and Rust) is currently under Technology Preview, and under development, which means that APIs, supported platforms, and requirements might change in future releases. The rest of the bridges (Java/Kotlin, Swift, and Python) are currently on alpha state.
What is Qt Bridges?
What if you could write Qt Quick UI backends in your favorite programming language without knowing much of Qt API?
That question shaped the goal of Qt Bridges: to bring Qt Quick to many more languages, in a way that feels natural in each of them. Complete Qt language bindings are valuable, but exposing every Qt module takes a long time, and it asks you to embrace Qt and C++ idioms. Qt Bridges takes a narrower path. It exposes the data and logic of your backend to a Qt Quick user interface, and leaves the rest of Qt out.
In practice, you annotate classes that hold your data and functionality, and Qt Bridges makes them available to QML. This includes feeding QAbstractItemModel-based views without writing the model code yourself.
How it works
A Qt Bridges application has two parts. The user interface is written in QML and is the same whichever language you use. The backend is written in your language and holds the data and logic. The bridge connects them: you mark the types that QML should see, using the mechanism of your language (attributes, annotations, or decorators), and the UI can then read their properties, call their methods, react to their signals, and show their data in lists and tables.
Because the UI depends only on what the backend exposes, you can change one side without touching the other, or reuse the same QML with another language.
Key concepts
| Term | Meaning |
|---|---|
| Property | A value of a backend object that QML can read and, when it is writable, change. QML updates automatically when it changes. |
| Method | A function of a backend object that QML can call, for example when a button is clicked. |
| Signal | A notification emitted by the backend to tell QML that something happened. |
| Model | A backend type that provides a collection of items to views such as ListView and TableView. |
| Binding | A QML expression that keeps a UI value in sync with other values, such as a backend property. |
Supported languages
Each language has its own bridge, with its own requirements and documentation. C#/.NET and Rust are in Technology Preview and are under active development. Java/Kotlin, Python, and Swift are in an alpha state: they work as a preview of the approach, and are not under active development at the moment.
| Language | Status | Platforms | Requirements |
|---|---|---|---|
| C#/.NET | Technology Preview | Windows (x64) | .NET 8 or later |
| Rust | Technology Preview | Linux (x86_64), Windows (x64), macOS (arm64, experimental) | Rust 1.87 or later |
| Java/Kotlin | Alpha | See the language documentation | OpenJDK 21 or later, Gradle 8.14.2 or later |
| Python | Alpha | See the language documentation | Python 3.9 or later |
| Swift | Alpha | macOS 14 or later (Apple Silicon) | Swift 6.0 or later |
Getting started
Pick your language to see how to install Qt Bridges and create your first application. For now, you need a Qt 6.10 or later installation on your system. The 1.0 release will include its dependencies in each package.
In Technology Preview:
Alpha state:
New to Qt Quick?
If you have not written any QML before, the starter layouts give you ready-to-run window layouts and a comparison of Qt Quick Controls styles to build on.
Designing your application
These guidelines apply to any language:
- Keep the UI declarative. Describe what the user sees in QML, and keep application logic in the backend.
- Expose only what the UI needs. Everything else stays private to the backend.
- Expose lists and tables as models, instead of many separate properties.
- Put each page or reusable part of the UI in its own
.qmlfile.
The language-specific pages show the project structure and the templates available to create it.
Limitations
Qt Bridges is not a complete binding of the Qt API:
- Many Qt Quick modules contain C++ APIs that are not available.
- Qt classes are not exposed to your language, so you cannot create or subclass classes such as
QWidgetfrom the backend. - Other Qt modules, such as networking or multimedia, are not wrapped. Use the libraries of your language instead.
If you need the complete Qt API, consider the Qt language bindings or Qt for C++.
Licensing and contributing
The C#/.NET and Rust bridges are released under Qt Commercial and LGPLv3 licenses. For commercial licensees, Qt Bridges is Pre-Release Code under the Qt License Agreement. The README of each repository has the exact terms, including third-party software.
Report issues in the Qt Bug Tracker, and discuss your questions or suggestion in the Qt Forum or in our Discord community.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.