Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
8f2bbe0
Add CLAUDE.md for Claude Code guidance
tilladam Jan 1, 2026
6045eb2
Docs: remove as_ref() usage in SampleComponent (#10344)
Yappaholic Jan 2, 2026
f2bd428
Material docs should use shared docs files (#10335)
NigelBreslaw Jan 2, 2026
b7d4d42
Updater: expand README with usage docs and transform examples
tilladam Jan 1, 2026
3ff94a6
Figma Inspector: rewrite README with features and property docs
tilladam Jan 1, 2026
e9d194e
Docsnapper: rewrite README with usage docs and tag format
tilladam Jan 2, 2026
2393332
Updater: expand README with usage docs and transform examples
tilladam Jan 1, 2026
18aadab
Figma Inspector: rewrite README with features and property docs
tilladam Jan 1, 2026
7cf673f
fancy_demo: add README documenting custom widgets
tilladam Jan 2, 2026
b58647f
examples: add sections for additional, embedded, and platform examples
tilladam Jan 2, 2026
403e9d3
cpp examples: add README explaining platform integration examples
tilladam Jan 2, 2026
ec810d5
Docs: Move Palette and StyleMetrics properties to a new "Globals" sec…
LeonMatthes Jan 2, 2026
68ff6e3
Fix references to outdated node.js v16 dependency.
tilladam Jan 2, 2026
53dbe16
Janitor: update toml_edit dependency
ogoffart Jan 2, 2026
2cf0070
CI: Test with the lastest version of the dependencies regardless of MSRV
ogoffart Jan 2, 2026
d246476
compiler: properly detect dependency loops on `Image.source-clip`
ogoffart Jan 2, 2026
9bb0b99
Fix showing a popup that is already shown from itself
ogoffart Jan 2, 2026
a4b81e7
build(deps): bump the npm-patch-updates group with 2 updates (#10368)
dependabot[bot] Jan 5, 2026
970d227
build(deps): bump astro-embed in the npm-minor-updates group (#10367)
dependabot[bot] Jan 5, 2026
03be397
Attempting to fix `RefCell already mutably borrowed` Live Preview issue
npwoods Jan 4, 2026
d1f09ea
Test for issue 10278
ogoffart Jan 5, 2026
c7d6280
Breaking `LiveReloadingComponent::reload()` into two methods as per g…
npwoods Jan 5, 2026
8901e20
Implement support for models in the Row of a GridLayout
dfaure-kdab Dec 4, 2025
27c4541
organized_grid_layout: fix colspan being ignored during auto resolution
dfaure-kdab Dec 24, 2025
00d06b7
Grid layout: honor row/col/rowspan/colspan in repeated items
dfaure-kdab Dec 11, 2025
43b973e
Add test with row and col come from the model, works
dfaure-kdab Dec 30, 2025
c64cab6
GridLayout: warn at runtime if the row or col is out of bounds
dfaure-kdab Dec 30, 2025
fdafe6a
Compiler: clippy fixes in layouting code
dfaure-kdab Dec 30, 2025
6c48347
GridLayout: store cell info into Element, to simplify lower_sub_compo…
dfaure-kdab Dec 30, 2025
7cc77e4
Add examples/layouts with some pure-slint layouting examples, as docu…
dfaure-kdab Dec 30, 2025
36a5b37
Grid layout: introduce RowColExpr::Auto
dfaure-kdab Jan 3, 2026
52b3b7c
Break Rc loop in grid_layout_cell by introducing GridLayoutCell
dfaure-kdab Jan 3, 2026
ad98304
Use f32 rather than f64 for row/col values internally
dfaure-kdab Jan 3, 2026
d97464f
Skip new examples in updater test
dfaure-kdab Jan 4, 2026
d0b62f2
Implement TODO about not generating box_layout_data if not needed
dfaure-kdab Jan 4, 2026
7007e73
Layouting code: rename structs/functions to reflect reality better
dfaure-kdab Jan 5, 2026
a000e55
Use Rc<RefCell> to share GridLayoutCell
dfaure-kdab Jan 5, 2026
f769c63
compiler: improve 3 internal error messages, to help debugging
dfaure-kdab Jan 5, 2026
798aecf
interpreter: clippy fixes
dfaure-kdab Jan 5, 2026
6f3a007
compiler: some clippy fixes
dfaure-kdab Jan 5, 2026
0f4882e
Revert "Keep in sinc slint and slint-interpreter re-export"
ogoffart Jan 5, 2026
71793f7
API: some cleanup between the interpreter and slint API
ogoffart Jan 5, 2026
d8e8ecf
TextEdit: Allow to set italic font (#10306)
Montel Jan 6, 2026
6888da8
ChangeLog updates
ogoffart Jan 6, 2026
0e291fb
Docs: Move editor documentation into "Guide" (#10356)
LeonMatthes Jan 6, 2026
585b063
Janitor: Add `publish = "false"` to crates that aren't meant to be on…
ogoffart Jan 6, 2026
4f45314
Fix links to snapshot docs
tronical Jan 6, 2026
5a3a539
Remove unnecessary image default features from docsnapper (#10392)
task-jp Jan 8, 2026
06755e1
wgpu: Prefer BGRA8 and RGBA8 swapchain formats
jturcotte Dec 23, 2025
e449276
doc: Fix version for tiled versioning suggestions
tronical Jan 8, 2026
c211585
upgrade_version.yaml
ogoffart Jan 8, 2026
941dcd7
add documentation to the viewer
Murmele Jan 9, 2026
b19cf01
Attempt to restore pixel alignment for layers introduced with bc2e97f…
tronical Jan 9, 2026
7839e19
Add more internal documentation
Murmele Jan 9, 2026
0c20547
fontique: Add unstable-fontique-07 feature
tronical Jan 8, 2026
f63b9db
fontique: Rename the public function to obtain the shared collection
tronical Jan 9, 2026
0514465
Limit supported vulkan version in skia wgpu initialization
kbalt Jan 9, 2026
0a3cdfd
Update accesskit dependency
ogoffart Jan 9, 2026
ffca1d5
Properties Binding: use const variables and helper functions instead …
Murmele Jan 12, 2026
a181017
Add get_elipsis_glyph function (#10384)
expenses Jan 12, 2026
ad41b59
Compiler: make it an error to access properties from menus from outside
ogoffart Jan 5, 2026
c4e1121
SortModel: relax the bounds of some of the functions
ogoffart Jan 12, 2026
8febb4b
Fix `with_global_context` creating a backend when one already exist i…
ogoffart Jan 12, 2026
694b71b
Qt backend: Fix drawing of `ClippedImage` .svg
ogoffart Jan 12, 2026
b85d221
Use aqua provider for ruff (#10422)
LeonMatthes Jan 12, 2026
9c1cab5
rename the CLAUDE.md file to the more neutral AGENTS.md
tilladam Jan 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/build_and_test_reusable.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ jobs:
key: x-v3
save_if: ${{ inputs.save_if }}
cache: ${{ inputs.cache }}
- name: Cargo update
if: inputs.rust_version == 'stable' || inputs.rust_version == 'nightly'
# When runing with the lastest rust, ignore the rust_version field from the Cargo.toml because we want to test with the latest versions of the dependencies (that's what our users might get)
run: cargo update --ignore-rust-version
- name: Run tests
run: cargo test --verbose --all-features --workspace --timings ${{ inputs.extra_args }} --exclude slint-node --exclude pyslint --exclude test-driver-node --exclude slint-node --exclude test-driver-nodejs --exclude test-driver-cpp --exclude test-driver-python --exclude mcu-board-support --exclude mcu-embassy --exclude printerdemo_mcu --exclude uefi-demo --exclude slint-cpp --exclude slint-python -- --skip=_qt::t
env:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build_docs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
- name: Set up crate rustdoc link
run: |
rgb_version=`grep 'rgb = ' internal/core/Cargo.toml | sed 's/^.*"\(.*\)"/\1/'`
echo "RUSTDOCFLAGS=$RUSTDOCFLAGS --extern-html-root-url rgb=https://docs.rs/rgb/$rgb_version/ --extern-html-root-url android_activity=https://docs.rs/android-activity/0.5/ --extern-html-root-url raw_window_handle=https://docs.rs/raw_window_handle/0.6 --extern-html-root-url winit=https://docs.rs/winit/0.30 --extern-html-root-url wgpu=https://docs.rs/wgpu/26 --extern-html-root-url input=https://docs.rs/input/0.9" >> $GITHUB_ENV
echo "RUSTDOCFLAGS=$RUSTDOCFLAGS --extern-html-root-url rgb=https://docs.rs/rgb/$rgb_version/ --extern-html-root-url android_activity=https://docs.rs/android-activity/0.5/ --extern-html-root-url raw_window_handle=https://docs.rs/raw_window_handle/0.6 --extern-html-root-url winit=https://docs.rs/winit/0.30 --extern-html-root-url wgpu=https://docs.rs/wgpu/26 --extern-html-root-url input=https://docs.rs/input/0.9 --extern-html-root-url fontique=https://docs.rs/fontique/0.7" >> $GITHUB_ENV
- uses: ./.github/actions/install-linux-dependencies
- uses: ./.github/actions/setup-rust
with:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,9 @@ jobs:
--skip example_dial \
--skip example_fancy_switches \
--skip example_sprite_sheet \
--skip example_grid_model_rows \
--skip example_vector_as_grid \
--skip example_vlayout \
--skip test_interpreter_elements_path_fit \
--skip test_interpreter_layout_path \
--skip test_interpreter_7guis_booker \
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/upgrade_version.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ jobs:
# Version in the Android docs
sed -i 's/^slint = { version = "[^"]+"/slint = { version = "${{ github.event.inputs.new_version }}"/' docs/astro/src/content/docs/guide/platforms/mobile/android.mdx

# Some documentation use the ~syntax
sed -i 's/\(slint.*version = \)"~[0-9]*\.[0-9]*"/\1"~'"$(echo ${{ github.event.inputs.new_version }} | sed 's/\([0-9]*\.[0-9]*\)\.[0-9]*/\1/')"'"/' api/rs/slint/Cargo.toml api/rs/slint/lib.rs

echo "Note that the version is not updated in the documentation and README yet"

- name: Commit
Expand Down
4 changes: 0 additions & 4 deletions .mise/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0

# cspell:ignore pipx

[settings]
disable_backends = ["aqua"]

[tools]

## C++:
Expand Down
139 changes: 139 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

Slint is a declarative GUI toolkit for building native user interfaces across embedded systems, desktops, mobile, and web platforms. UIs are written in `.slint` markup files and connected to business logic in Rust, C++, JavaScript, or Python.

## Build Commands

### Rust (Primary)
```sh
cargo build # Build the workspace
cargo build --release # Release build
cargo test # Run tests (requires cargo build first!)
cargo build --workspace --exclude uefi-demo --release # Build all examples
```

### Running Examples
```sh
cargo run --release -p gallery # Run the gallery example
cargo run --release --bin slint-viewer -- path/to/file.slint # View a .slint file
```

### C++ Build
```sh
cargo build --lib -p slint-cpp # Build C++ library
mkdir cppbuild && cd cppbuild
cmake -GNinja ..
cmake --build .
```

### Node.js Build
```sh
cd api/node && npm install
```

## Testing

**Important**: Run `cargo build` before `cargo test` - the dynamic library must exist first.

### Test Drivers
```sh
cargo test -p test-driver-interpreter # Fast interpreter tests
cargo test -p test-driver-rust # Rust API tests
cargo test -p test-driver-cpp # C++ tests (build slint-cpp first)
cargo test -p test-driver-nodejs # Node.js tests
cargo test -p doctests # Documentation snippet tests
```

### Filtered Testing
```sh
SLINT_TEST_FILTER=layout cargo test -p test-driver-rust # Filter by name
```

### Syntax Tests (Compiler Errors)
```sh
cargo test -p i-slint-compiler --features display-diagnostics --test syntax_tests
SLINT_SYNTAX_TEST_UPDATE=1 cargo test -p i-slint-compiler --test syntax_tests # Update expected errors
```

### Screenshot Tests
```sh
cargo test -p test-driver-screenshots # Compare against references
SLINT_CREATE_SCREENSHOTS=1 cargo test -p test-driver-screenshots # Generate references
```

## Architecture

### Core Components

- **`internal/compiler/`** - Slint language compiler (lexer, parser, code generators)
- `parser/` - .slint syntax parsing using Rowan
- `passes/` - Optimization passes
- `generator/` - Code generators for C++, Rust, Python, JS
- `tests/syntax/` - Syntax error test cases

- **`internal/core/`** - Runtime library (properties, layout, animations, accessibility)

- **`internal/interpreter/`** - Dynamic compilation for scripting languages

- **`internal/backends/`** - Platform windowing/input:
- `winit/` - Cross-platform (primary)
- `qt/` - Qt integration
- `android-activity/`, `linuxkms/`

- **`internal/renderers/`** - Rendering engines:
- `femtovg/` - OpenGL ES 2.0
- `skia/` - Skia graphics
- `software/` - CPU-only fallback

### Language APIs (`api/`)

- `rs/slint/` - Rust public crate
- `rs/macros/` - `slint!` procedural macro
- `rs/build/` - Build script support
- `cpp/` - C++ API with CMake integration
- `node/` - Node.js bindings (Neon)
- `python/` - Python bindings (PyO3)

### Tools

- `tools/lsp/` - Language Server Protocol for editor integration
- `tools/compiler/` - CLI compiler
- `tools/viewer/` - .slint file viewer with hot reload

### Key Patterns

- Internal crates (`internal/`) are not semver-stable - they use exact version pinning
- FFI modules are gated with `#[cfg(feature = "ffi")]`
- C++ headers generated via `cargo xtask cbindgen`
- Extensive Cargo features control renderers (`renderer-femtovg`, `renderer-skia`, `renderer-software`) and backends (`backend-winit`, `backend-qt`)

## Code Style

- Rust: `rustfmt` enforced in CI
- C++: `clang-format` enforced in CI
- Linear git history preferred (rebase/squash merges)

## Platform Prerequisites

### Linux
```sh
# Debian/Ubuntu
sudo apt install libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev \
libfontconfig-dev libssl-dev clang libavcodec-dev libavformat-dev \
libavutil-dev libavfilter-dev libavdevice-dev libasound2-dev pkg-config
```

### macOS
```sh
xcode-select --install
brew install pkg-config ffmpeg
```

### Windows
- Enable symlinks: `git clone -c core.symlinks=true https://github.com/slint-ui/slint`
- Install MSVC Build Tools
- FFMPEG via vcpkg or manual installation
9 changes: 7 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ All notable changes to this project are documented in this file.
- Diagnostics now report range instead of just a position
- Translations: allow to opt out of default context
- Fixed debug performance overlay not working (#10198)
- Qt backend: worked around leak in Plasma when setting a window icon.

### Slint Language

Expand All @@ -29,7 +30,9 @@ All notable changes to this project are documented in this file.
- Added `stroke-line-join` for Path (#9912)
- Added `from <angle>` syntax to `@conic-gradient`
- `row`, `col`, `colspan`, and `rowspan` properties can now be changed at runtime
- Support for `if` and `for` in `GridLayout`
- New `StyledText` element for displaying rich text, as well as `styled-text` type
- Fixed missing dependency detection on `Image.source-clip`

### Widgets

Expand All @@ -39,12 +42,14 @@ All notable changes to this project are documented in this file.
- Fixed some widgets that could still be edited when disabled or read-only
- SpinBox: added `read-only` property
- TabWidget: added `orientation` property (#3688)
- TextEdit and LineEdit: Added `font-family` property
- TextEdit and LineEdit: Added `font-family` and `font-italic` properties

### Rust

- Added `slint::register_font_from_memory`
- Added `slint::fontique` module, guarded with `unstable-fontique-07` feature, to provide access
to fontique collection types for registering custom fonts at run-time.
- Added `slint::language::ColorScheme`
- In live preview mode, fixed panic when custom Model access the component's property (#10278)

### C++

Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ serde_json = { version = "1.0.96" }
softbuffer = { version = "0.4.4", default-features = false }
spin_on = { version = "0.1" }
strum = { version = "0.27.1", default-features = false, features = ["derive"] }
toml_edit = { version = "0.23.0" }
toml_edit = { version = "0.24.0" }
ttf-parser = { version = "0.25" }
typed-index-collections = "3.2"
web-sys = { version = "0.3.72", default-features = false }
Expand Down
35 changes: 23 additions & 12 deletions api/cpp/include/slint.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,13 @@ inline SharedVector<float> solve_box_layout(const cbindgen_private::BoxLayoutDat
}

inline SharedVector<uint16_t>
organize_grid_layout(cbindgen_private::Slice<cbindgen_private::GridLayoutInputData> input_data)
organize_grid_layout(cbindgen_private::Slice<cbindgen_private::GridLayoutInputData> input_data,
cbindgen_private::Slice<int> repeater_indices)
{
SharedVector<uint16_t> result;
cbindgen_private::slint_organize_grid_layout(input_data, &result);
cbindgen_private::Slice<uint32_t> ri =
make_slice(reinterpret_cast<uint32_t *>(repeater_indices.ptr), repeater_indices.len);
cbindgen_private::slint_organize_grid_layout(input_data, ri, &result);
return result;
}

Expand All @@ -142,43 +145,51 @@ inline SharedVector<uint16_t> organize_dialog_button_layout(

inline SharedVector<float>
solve_grid_layout(const cbindgen_private::GridLayoutData &data,
cbindgen_private::Slice<cbindgen_private::LayoutInfo> constraints,
cbindgen_private::Orientation orientation)
cbindgen_private::Slice<cbindgen_private::LayoutItemInfo> constraints,
cbindgen_private::Orientation orientation,
cbindgen_private::Slice<int> repeater_indices)
{
SharedVector<float> result;
cbindgen_private::slint_solve_grid_layout(&data, constraints, orientation, &result);
cbindgen_private::Slice<uint32_t> ri =
make_slice(reinterpret_cast<uint32_t *>(repeater_indices.ptr), repeater_indices.len);
cbindgen_private::slint_solve_grid_layout(&data, constraints, orientation, ri, &result);
return result;
}

inline cbindgen_private::LayoutInfo
grid_layout_info(const cbindgen_private::GridLayoutOrganizedData &organized_data,
cbindgen_private::Slice<cbindgen_private::LayoutInfo> constraints, float spacing,
cbindgen_private::Slice<cbindgen_private::LayoutItemInfo> constraints,
cbindgen_private::Slice<int> repeater_indices, float spacing,
const cbindgen_private::Padding &padding,
cbindgen_private::Orientation orientation)
{
return cbindgen_private::slint_grid_layout_info(&organized_data, constraints, spacing, &padding,
orientation);
cbindgen_private::Slice<uint32_t> ri =
make_slice(reinterpret_cast<uint32_t *>(repeater_indices.ptr), repeater_indices.len);
return cbindgen_private::slint_grid_layout_info(&organized_data, constraints, ri, spacing,
&padding, orientation);
}

inline cbindgen_private::LayoutInfo
box_layout_info(cbindgen_private::Slice<cbindgen_private::BoxLayoutCellData> cells, float spacing,
box_layout_info(cbindgen_private::Slice<cbindgen_private::LayoutItemInfo> cells, float spacing,
const cbindgen_private::Padding &padding,
cbindgen_private::LayoutAlignment alignment)
{
return cbindgen_private::slint_box_layout_info(cells, spacing, &padding, alignment);
}

inline cbindgen_private::LayoutInfo
box_layout_info_ortho(cbindgen_private::Slice<cbindgen_private::BoxLayoutCellData> cells,
box_layout_info_ortho(cbindgen_private::Slice<cbindgen_private::LayoutItemInfo> cells,
const cbindgen_private::Padding &padding)
{
return cbindgen_private::slint_box_layout_info_ortho(cells, &padding);
}

/// Access the layout cache of an item within a repeater
inline float layout_cache_access(const SharedVector<float> &cache, int offset, int repeater_index)
template<typename T>
inline T layout_cache_access(const SharedVector<T> &cache, int offset, int repeater_index,
int entries_per_item)
{
size_t idx = size_t(cache[offset]) + repeater_index * 2;
size_t idx = size_t(cache[offset]) + repeater_index * entries_per_item;
return idx < cache.size() ? cache[idx] : 0;
}

Expand Down
1 change: 1 addition & 0 deletions api/node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ rust-version.workspace = true
version.workspace = true
categories = ["gui", "development-tools"]
build = "build.rs"
publish = false

[lib]
crate-type = ["cdylib"]
Expand Down
2 changes: 1 addition & 1 deletion api/node/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ npm install slint-ui

You need to install the following components:

* **[Node.js](https://nodejs.org/download/release/)** (v16. or newer)
* **[Node.js](https://nodejs.org/download/release/)** (v20 or newer)
* **[pnpm](https://www.pnpm.io/)**
* **[Rust compiler](https://www.rust-lang.org/tools/install)**

Expand Down
2 changes: 1 addition & 1 deletion api/node/cover.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ in detail.

To use Slint with Node.js, ensure the following programs are installed:

* **[Node.js](https://nodejs.org/download/release/)** (v16. or newer)
* **[Node.js](https://nodejs.org/download/release/)** (v20 or newer)
* **[npm](https://www.npmjs.com/)**

To use Slint with Deno, ensure the following programs are installed:
Expand Down
22 changes: 18 additions & 4 deletions api/rs/slint/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ backend-android-activity-05 = [
## in your `Cargo.toml` when enabling this feature:
##
## ```toml
## slint = { version = "~1.14", features = ["unstable-wgpu-26"] }
## slint = { version = "~1.15", features = ["unstable-wgpu-26"] }
## ```
unstable-wgpu-26 = [
"i-slint-core/unstable-wgpu-26",
Expand All @@ -219,7 +219,7 @@ unstable-wgpu-26 = [
## in your `Cargo.toml` when enabling this feature:
##
## ```toml
## slint = { version = "~1.14", features = ["unstable-wgpu-27"] }
## slint = { version = "~1.15", features = ["unstable-wgpu-27"] }
## ```
unstable-wgpu-27 = [
"i-slint-core/unstable-wgpu-27",
Expand All @@ -236,7 +236,7 @@ unstable-wgpu-27 = [
## in your `Cargo.toml` when enabling this feature:
##
## ```toml
## slint = { version = "~1.12", features = ["unstable-winit-030"] }
## slint = { version = "~1.15", features = ["unstable-winit-030"] }
## ```
unstable-winit-030 = ["backend-winit", "dep:i-slint-backend-winit", "i-slint-backend-selector/unstable-winit-030"]

Expand All @@ -250,10 +250,23 @@ unstable-winit-030 = ["backend-winit", "dep:i-slint-backend-winit", "i-slint-bac
## in your `Cargo.toml` when enabling this feature:
##
## ```toml
## slint = { version = "~1.13", features = ["unstable-libinput-09"] }
## slint = { version = "~1.15", features = ["unstable-libinput-09"] }
## ```
unstable-libinput-09 = ["i-slint-backend-selector/unstable-libinput-09"]

## Enable support for exposing [fontique](https://docs.rs/fontique/0.7.0/fontique/) related APIs.
##
## APIs guarded with this feature are *NOT* subject to the usual Slint API stability guarantees. This feature as well as the APIs changed or removed
## in future minor releases of Slint, likely to be replaced by a feature with a similar name but the fontique version suffix being bumped.
##
## To avoid unintended compilation failures, we recommend to use the [tilde requirement](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#tilde-requirements)
## in your `Cargo.toml` when enabling this feature:
##
## ```toml
## slint = { version = "~1.15", features = ["unstable-fontique-07"] }
## ```
unstable-fontique-07 = ["i-slint-common/shared-fontique"]

[dependencies]
i-slint-core = { workspace = true }
slint-macros = { workspace = true }
Expand Down Expand Up @@ -321,5 +334,6 @@ features = [
"unstable-wgpu-27",
"unstable-winit-030",
"unstable-libinput-09",
"unstable-fontique-07",
]
rustdoc-args = ["--generate-link-to-definition"]
Loading