[package]
name = "shapemaker"
version = "1.2.2"
rust-version = "1.90"
edition = "2024"
include = ["/src"]
license = "AGPL-3.0"
homepage = "https://gwen.works/shapemaker"
repository = "https://github.com/gwennlbh/shapemaker"
authors = ["Gwenn Le Bihan <gwenn.lebihan7@gmail.com>"]
description = "An experimental WASM-capable, generative SVG-based video rendering engine that reacts to MIDI or audio data"

[workspace]
members = [
    "examples/dna-analysis-machine",
    "examples/schedule-hell",
    "examples/schedule-hell-backbone",
    "examples/schedule-hell-bicolor",
    "examples/schedule-hell-starry-sky",
    "examples/specimen",
    "xtask",
]

[lib]
crate-type = ["cdylib", "lib"]

[[bin]]
name = "shapemaker"
path = "src/main.rs"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[features]
default = ["cli", "vst", "video", "video-server"]
vst = [
    "cli",
    "rand/thread_rng",
    "dep:env_logger",
    "dep:nih_plug",
    "dep:ws",
    "dep:tungstenite",
]
cli = [
    "dep:cargo",
    "dep:watchexec",
    "dep:watchexec-signals",
    "dep:tokio",
    "dep:watchexec-events",
    "dep:miette",
]
web = ["dep:wasm-bindgen", "dep:web-sys"]
video = ["dep:env_logger", "dep:vgv"]
video-server = ["dep:axum"]

[dependencies]
nih_plug = { git = "https://github.com/robbert-vdh/nih-plug.git", features = [
    "assert_process_allocs",
], optional = true }
anyhow = "1.0.100"
chrono = "0.4.42"
docopt = "1.1.1"
indicatif = "0.18.1"
itertools = "0.14.0"
midly = "0.5.3"
rand = { version = "0.9.2", default-features = false, features = [
    "small_rng",
    "std",
    "std_rng",
] }
serde_cbor = "0.11.2"
serde_json = "1.0.145"
wasm-bindgen = { version = "0.2.104", optional = true }
getrandom = { version = "0.2", features = ["js"] }
web-sys = { version = "0.3.81", optional = true, features = [
    'Document',
    'Element',
    'HtmlElement',
    'Node',
    'Window',
] }
once_cell = "1.21.3"
nanoid = "0.4.0"
console = { version = "0.16.1", features = ["windows-console-colors"] }
backtrace = "0.3.76"
slug = "0.1.6"
roxmltree = "0.21.1"
strum = { version = "0.27.2", features = ["strum_macros"] }
strum_macros = "0.27.2"
tiny-skia = "0.11.4"
resvg = "0.45.1"
measure_time = "0.9.0"
env_logger = { version = "0.11.8", optional = true }
log = "0.4.28"
ndarray = "0.16.1"
rayon = "1.11.0"
futures-util = "0.3.31"
ws = { version = "0.9.2", optional = true }
cargo = { version = "0.91.0", optional = true }
toml = "0.9.8"
indexmap = "2.12.0"
watchexec = { version = "8.0.1", optional = true }
miette = { version = "7.6.0", optional = true }
watchexec-signals = { version = "5.0.0", optional = true }
tokio = { version = "1.48.0", optional = true }
watchexec-events = { version = "6.0.0", optional = true }
serde = { version = "1.0.228", features = ["derive"] }
url = "2.5.7"
tungstenite = { version = "0.28.0", optional = true }
axum = { version =  "0.8.6", optional = true, features = ["json"] }
quick-xml = "0.38.3"
vgv = { git = "https://github.com/gwennlbh/vgvf", version = "0.1.0", optional = true}
serde-aux = "4.7.0"


[dev-dependencies]
insta = "1.43.2"
rust-analyzer = "0.0.1"
