On this page

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.

Qt Bridges architecture: a QML user interface, the Qt Bridges layer, and a backend written in your language

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

TermMeaning
PropertyA value of a backend object that QML can read and, when it is writable, change. QML updates automatically when it changes.
MethodA function of a backend object that QML can call, for example when a button is clicked.
SignalA notification emitted by the backend to tell QML that something happened.
ModelA backend type that provides a collection of items to views such as ListView and TableView.
BindingA 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.

LanguageStatusPlatformsRequirements
C#/.NETTechnology PreviewWindows (x64).NET 8 or later
RustTechnology PreviewLinux (x86_64), Windows (x64), macOS (arm64, experimental)Rust 1.87 or later
Java/KotlinAlphaSee the language documentationOpenJDK 21 or later, Gradle 8.14.2 or later
PythonAlphaSee the language documentationPython 3.9 or later
SwiftAlphamacOS 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 .qml file.

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 QWidget from 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.