spine_runtime 0.2.2

Unofficial native Rust port of the Spine 4.3 runtime. Renderer-agnostic.
Documentation
[package]
name = "spine_runtime"
version = "0.2.2"
edition = "2024"
rust-version = "1.99"
authors = ["Brandon Reinhart <brandon@deadmoney.gg>"]
description = "Unofficial native Rust port of the Spine 4.3 runtime. Renderer-agnostic."
license-file = "LICENSE"
readme = "README.md"
repository = "https://github.com/dead-money/spine_runtime"
documentation = "https://docs.rs/spine_runtime"
categories = ["game-development", "graphics"]
keywords = ["spine", "2d", "animation", "skeletal"]
# Tests and tooling need a sibling spine-runtimes checkout, so they can't run
# from the published crate.
exclude = [
  ".github/",
  ".claude/",
  "scripts/",
  "tools/",
  "tests/",
  "CLAUDE.md",
  "RELEASING.md",
  "release.toml",
]

[dependencies]
glam = "0.32"
thiserror = "2"
serde_json = { version = "1", features = ["preserve_order"] }

[dev-dependencies]
approx = "0.5"
proptest = "1"
pretty_assertions = "1"
# Parses the golden capture fixtures.
serde = { version = "1", features = ["derive"] }
# PNG output for the software_render example.
image = { version = "0.25", default-features = false, features = ["png"] }

[[bench]]
name = "frame"
harness = false

[lints.rust]
unsafe_code = "deny"

[lints.clippy]
pedantic = { level = "warn", priority = -1 }
# Spine math is f32 with index casts throughout; these fire constantly on a
# literal port without catching anything.
cast_precision_loss = "allow"
cast_possible_truncation = "allow"
cast_possible_wrap = "allow"
cast_sign_loss = "allow"
similar_names = "allow"
module_name_repetitions = "allow"
# Literal ports of spine-cpp functions keep their length, parameter lists,
# single-letter math names, exact float sentinels and flag fields.
too_many_lines = "allow"
too_many_arguments = "allow"
many_single_char_names = "allow"
float_cmp = "allow"
struct_excessive_bools = "allow"
fn_params_excessive_bools = "allow"

[profile.bench]
debug = true