noesis_runtime 0.12.1

Rust bindings for the Noesis GUI Native SDK: load XAML UI, drive the view and renderer, and write custom controls in Rust. Renderer-agnostic; Bevy integration lives in noesis_bevy.
Documentation
[package]
name = "noesis_runtime"
version = "0.12.1"
edition = "2024"
rust-version = "1.85"
authors = ["Brandon Reinhart <brandon@deadmoney.gg>"]
description = "Rust bindings for the Noesis GUI Native SDK: load XAML UI, drive the view and renderer, and write custom controls in Rust. Renderer-agnostic; Bevy integration lives in noesis_bevy."
repository = "https://github.com/dead-money/noesis_runtime"
documentation = "https://docs.rs/noesis_runtime"
license = "MIT"
readme = "README.md"
keywords = ["noesis", "xaml", "gui", "gamedev", "ui"]
categories = ["external-ffi-bindings", "gui", "game-development", "graphics"]
links = "Noesis"
# Dev-only files that consumers of the published crate don't need.
exclude = [".github/", ".claude/", "scripts/", "CLAUDE.md", "RELEASING.md", "release.toml"]

# docs.rs has no Noesis SDK, so the native compile/link can't run there.
# build.rs short-circuits on the DOCS_RS env var and rustdoc builds the API
# without linking. all-features so the full surface is documented.
[package.metadata.docs.rs]
all-features = true

[features]
default = []
# Enables the noesis_test_* C entrypoints used by tests/render_device.rs.
# Off by default so production builds don't carry the test helpers.
test-utils = []

[dependencies]

[build-dependencies]
cc = "1"

# Curated lint set. We opt into specific lints rather than a blanket
# `pedantic = warn`, which keeps the signal-to-noise ratio high and makes intent
# obvious. A blanket `unsafe_code = "forbid"` is deliberately not adopted: this
# is an FFI crate built entirely on `unsafe`.
[lints.clippy]
type_complexity = "allow"
too_many_arguments = "allow"
indexing_slicing = "allow"
many_single_char_names = "allow"

# FFI-specific allowances. `mem_forget` is how we hand ownership across the C
# ABI (`FrameworkElement::into_raw`) and intentionally leak test guards; `panic`
# covers the build script's config-error exits and unreachable enum guards on
# values the C side promises; `float_cmp` is exact round-trip comparison of
# values marshalled through the FFI in tests.
mem_forget = "allow"
panic = "allow"
float_cmp = "allow"

# Correctness
unnecessary_cast = "warn"
as_underscore = "warn"
ptr_as_ptr = "warn"
clone_on_ref_ptr = "warn"
cloned_instead_of_copied = "warn"
explicit_iter_loop = "warn"
explicit_into_iter_loop = "warn"
invalid_upcast_comparisons = "warn"
mixed_read_write_in_expression = "warn"
index_refutable_slice = "warn"
string_slice = "warn"

# Style
doc_markdown = "warn"
equatable_if_let = "warn"
if_not_else = "warn"
implicit_saturating_sub = "warn"
inconsistent_struct_constructor = "warn"
mismatching_type_param_order = "warn"
branches_sharing_code = "warn"
manual_assert = "warn"
mut_mut = "warn"
needless_continue = "warn"
option_option = "warn"
range_minus_one = "warn"
range_plus_one = "warn"
redundant_else = "warn"
ref_option_ref = "warn"
unnested_or_patterns = "warn"
unneeded_field_pattern = "warn"
zero_sized_map_values = "warn"

# Perf
inefficient_to_string = "warn"
large_types_passed_by_value = "warn"

# Reminders
dbg_macro = "warn"
todo = "warn"
unimplemented = "warn"

# Cargo
wildcard_dependencies = "warn"