uni-plugin 2.0.6

Plugin framework for uni-db: registry, manifest, and capability traits
Documentation
[package]
name = "uni-plugin"
# Tracks the single workspace version (formerly versioned independently in the
# 1.x line — its ABI-evolution history through v1.9.0 is in CHANGELOG.md).
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
keywords = ["plugin", "extensibility", "graph", "database"]
categories = ["database", "data-structures"]
description = "Plugin framework for uni-db: registry, manifest, and capability traits"

[dependencies]
uni-common = { workspace = true }
arrow = { workspace = true }
arrow-array = { workspace = true }
arrow-schema = { workspace = true }
datafusion = { workspace = true }
arc-swap = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
tracing = { workspace = true }
async-trait = { workspace = true }
parking_lot = { workspace = true }
futures = { workspace = true }
# §1.2 / Phase 6: `tokio_util::sync::CancellationToken` replaces the hand-rolled
# token previously in `traits/background.rs`.
tokio-util = { workspace = true }
# §1.2 / Phase 5: `host::principal::CURRENT_PRINCIPAL` lives here as a
# `tokio::task_local!` so host-crate execute boundaries can install the
# authenticated principal for plugin-procedure invocation sites to read.
tokio = { workspace = true, features = ["rt", "macros"] }

# Direct dependencies (not in workspace.dependencies)
semver = { version = "1.0", features = ["serde"] }
smol_str = { version = "0.3", features = ["serde"] }
blake3 = "1.8"
toml = "1"
dashmap = "6.2"
smallvec = { version = "1.15", features = ["serde"] }
# Signed-manifest verification is a security primitive, so ed25519 + base64 are
# non-optional: a build that could be configured to skip signature verification
# is a footgun whose failure mode is silent acceptance of forged manifests. The
# ~2 MB of ed25519-dalek + curve25519-dalek + base64 is negligible next to the
# DataFusion / Arrow / Lance / wasmtime that uni-db already links.
ed25519-dalek = { version = "2", default-features = false, features = ["std", "fast"] }
base64 = { version = "0.22" }
# M11: cron-expression parsing for `Schedule::Cron(...)` background jobs.
# Compute the next fire instant from a cron expression + current time.
cron = "0.16"
chrono = { version = "0.4", default-features = false, features = ["std", "clock"] }
# `otel` feature only — the lightweight OTel API + tracing bridge needed to read
# the current span context. Deliberately NOT the OTLP exporter SDK / tonic:
# uni-plugin is the low-level ABI crate every loader depends on, so the heavy
# exporter stack stays in uni-plugin-host behind `init_otel_subscriber`.
opentelemetry = { workspace = true, optional = true }
tracing-opentelemetry = { workspace = true, optional = true }

[features]
# Real OTel trace-context extraction in `observability::current_trace_context`.
# Default-off so loaders that never emit OTel spans don't pull the bridge; the
# host crate turns it on. Without it, `current_trace_context` returns empty.
otel = ["dep:opentelemetry", "dep:tracing-opentelemetry"]

[dev-dependencies]
proptest = { workspace = true }
serde_test = "1.0"
ed25519-dalek = { version = "2", default-features = false, features = ["std", "fast", "rand_core"] }
rand = { workspace = true }
base64 = "0.22"
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
# For the `otel`-gated positive test: a real (no-exporter) tracer provider so
# the current span carries a valid SpanContext, plus the registry to install
# the tracing-opentelemetry layer. Dev-only; not in the production graph.
opentelemetry_sdk = "0.32"
tracing-subscriber = { workspace = true }