[package]
edition = "2024"
rust-version = "1.95"
name = "anomstream-core"
version = "2026.4.1"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Core streaming anomaly detectors + companion primitives (Random Cut Forest, per-feature EWMA / CUSUM, drift detectors, streaming stats) — part of the anomstream toolkit"
homepage = "https://github.com/maximewewer/anomstream"
readme = "README.md"
keywords = [
"anomaly-detection",
"streaming",
"random-cut-forest",
"drift-detection",
"cusum",
]
categories = [
"algorithms",
"science",
"data-structures",
]
license = "Apache-2.0"
repository = "https://github.com/maximewewer/anomstream"
resolver = "2"
[features]
default = [
"std",
"parallel",
"serde",
"postcard",
]
parallel = [
"dep:rayon",
"std",
]
postcard = [
"dep:postcard",
"serde",
]
serde = [
"dep:serde",
"rand_chacha/serde",
]
serde_json = [
"dep:serde_json",
"serde",
]
std = [
"rand/std",
"rand/std_rng",
"rand_chacha/std",
"getrandom/std",
"thiserror/std",
]
[lib]
name = "anomstream_core"
path = "src/lib.rs"
[[example]]
name = "attribution_explain"
path = "examples/attribution_explain.rs"
[[example]]
name = "attribution_stability"
path = "examples/attribution_stability.rs"
[[example]]
name = "bootstrap"
path = "examples/bootstrap.rs"
[[example]]
name = "bulk_scoring"
path = "examples/bulk_scoring.rs"
[[example]]
name = "cross_tenant"
path = "examples/cross_tenant.rs"
[[example]]
name = "delete_and_scales"
path = "examples/delete_and_scales.rs"
[[example]]
name = "drift_recovery"
path = "examples/drift_recovery.rs"
[[example]]
name = "early_term"
path = "examples/early_term.rs"
[[example]]
name = "evict_idle"
path = "examples/evict_idle.rs"
[[example]]
name = "external_bench_driver"
path = "examples/external_bench_driver.rs"
[[example]]
name = "feature_drift"
path = "examples/feature_drift.rs"
[[example]]
name = "forensic"
path = "examples/forensic.rs"
[[example]]
name = "group_scores"
path = "examples/group_scores.rs"
[[example]]
name = "meta_drift"
path = "examples/meta_drift.rs"
[[example]]
name = "nab_ablation"
path = "examples/nab_ablation.rs"
required-features = ["serde_json"]
[[example]]
name = "observability"
path = "examples/observability.rs"
[[example]]
name = "quickstart"
path = "examples/quickstart.rs"
[[example]]
name = "readiness_summary"
path = "examples/readiness_summary.rs"
[[example]]
name = "retention"
path = "examples/retention.rs"
[[example]]
name = "score_and_attribution"
path = "examples/score_and_attribution.rs"
[[example]]
name = "score_confidence"
path = "examples/score_confidence.rs"
[[example]]
name = "severity"
path = "examples/severity.rs"
[[example]]
name = "shingled"
path = "examples/shingled.rs"
[[example]]
name = "streaming"
path = "examples/streaming.rs"
[[example]]
name = "tdigest_quantiles"
path = "examples/tdigest_quantiles.rs"
[[example]]
name = "tenant_pool"
path = "examples/tenant_pool.rs"
[[example]]
name = "tenant_similarity"
path = "examples/tenant_similarity.rs"
[[example]]
name = "thresholded"
path = "examples/thresholded.rs"
[[example]]
name = "tsb_ad_m_eval"
path = "examples/tsb_ad_m_eval.rs"
[[example]]
name = "univariate_spot_bank"
path = "examples/univariate_spot_bank.rs"
[[example]]
name = "warm_reload"
path = "examples/warm_reload.rs"
required-features = [
"postcard",
"std",
]
[[example]]
name = "with_mimalloc"
path = "examples/with_mimalloc.rs"
[[test]]
name = "attribution_stability"
path = "tests/attribution_stability.rs"
[[test]]
name = "aws_conformance"
path = "tests/aws_conformance.rs"
[[test]]
name = "bootstrap"
path = "tests/bootstrap.rs"
[[test]]
name = "bulk_scoring"
path = "tests/bulk_scoring.rs"
[[test]]
name = "concept_drift"
path = "tests/concept_drift.rs"
[[test]]
name = "cross_tenant"
path = "tests/cross_tenant.rs"
[[test]]
name = "delete"
path = "tests/delete.rs"
[[test]]
name = "detection_quality"
path = "tests/detection_quality.rs"
[[test]]
name = "drift_recovery_integration"
path = "tests/drift_recovery_integration.rs"
[[test]]
name = "early_term"
path = "tests/early_term.rs"
[[test]]
name = "evict_idle"
path = "tests/evict_idle.rs"
[[test]]
name = "feature_drift"
path = "tests/feature_drift.rs"
[[test]]
name = "feature_scales"
path = "tests/feature_scales.rs"
[[test]]
name = "forensic"
path = "tests/forensic.rs"
[[test]]
name = "fuzz_properties"
path = "tests/fuzz_properties.rs"
[[test]]
name = "group_scores"
path = "tests/group_scores.rs"
[[test]]
name = "initial_accept_fraction"
path = "tests/initial_accept_fraction.rs"
[[test]]
name = "meta_drift"
path = "tests/meta_drift.rs"
[[test]]
name = "metrics_and_histogram"
path = "tests/metrics_and_histogram.rs"
[[test]]
name = "nab"
path = "tests/nab.rs"
[[test]]
name = "persistence_roundtrip"
path = "tests/persistence_roundtrip.rs"
[[test]]
name = "readiness"
path = "tests/readiness.rs"
[[test]]
name = "score_with_confidence"
path = "tests/score_with_confidence.rs"
[[test]]
name = "severity"
path = "tests/severity.rs"
[[test]]
name = "shingled_integration"
path = "tests/shingled_integration.rs"
[[test]]
name = "tdigest_quantiles"
path = "tests/tdigest_quantiles.rs"
[[test]]
name = "tenant_pool"
path = "tests/tenant_pool.rs"
[[test]]
name = "tenant_similarity"
path = "tests/tenant_similarity.rs"
[[test]]
name = "thresholded_integration"
path = "tests/thresholded_integration.rs"
[[test]]
name = "timestamps"
path = "tests/timestamps.rs"
[[test]]
name = "tsb_ad_m"
path = "tests/tsb_ad_m.rs"
[[test]]
name = "univariate_spot_integration"
path = "tests/univariate_spot_integration.rs"
[[test]]
name = "visitor_integration"
path = "tests/visitor_integration.rs"
[[test]]
name = "warm_reload"
path = "tests/warm_reload.rs"
[[bench]]
name = "extended"
path = "benches/extended.rs"
harness = false
[[bench]]
name = "forest_throughput"
path = "benches/forest_throughput.rs"
harness = false
[[bench]]
name = "modules"
path = "benches/modules.rs"
harness = false
[dependencies.getrandom]
version = "0.4.2"
default-features = false
[dependencies.num-traits]
version = "0.2.19"
features = ["libm"]
default-features = false
[dependencies.postcard]
version = "1.1.3"
features = ["alloc"]
optional = true
default-features = false
[dependencies.rand]
version = "0.10.1"
default-features = false
[dependencies.rand_chacha]
version = "0.10.0"
default-features = false
[dependencies.rayon]
version = "1.12.0"
optional = true
[dependencies.serde]
version = "1.0.228"
features = [
"derive",
"alloc",
]
optional = true
default-features = false
[dependencies.serde_json]
version = "1.0.149"
optional = true
[dependencies.thiserror]
version = "2.0.18"
default-features = false
[dependencies.wide]
version = "1.3.0"
default-features = false
[dev-dependencies.criterion]
version = "0.8.2"
features = [
"plotters",
"cargo_bench_support",
]
default-features = false
[dev-dependencies.mimalloc]
version = "0.1.50"
default-features = false
[dev-dependencies.proptest]
version = "1.11.0"
[lints.clippy]
dbg_macro = "deny"
panic = "deny"
todo = "deny"
unimplemented = "deny"
unreachable = "warn"
unwrap_used = "deny"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
missing_docs = "warn"
unsafe_code = "forbid"