Crate Dependencies
EnerOS consists of 56 Rust crates, divided into six levels L0 - L5 from bottom to top, corresponding to the five-layer architecture. All dependencies flow one-way downward, circular dependencies are prohibited, and this is enforced through Cargo workspace + cargo-deny at compile time and in CI.
Dependency Layer Overview
┌─────────────────────────────────────────────────────────────────────┐
│ L5 Application Layer │
│ dispatch-agent · forecast-agent · operation-agent │
│ self-healing-agent · planning-agent · trading-agent │
│ market · report · dashboard · nl · edge │
├─────────────────────────────────────────────────────────────────────┤
│ L4 Agent Runtime │
│ eneros-agent · eneros-reasoning · eneros-memory │
│ eneros-tool · eneros-ai · eneros-twin · eneros-aiops │
├─────────────────────────────────────────────────────────────────────┤
│ L3 Power-Native Kernel │
│ eneros-topology · eneros-powerflow · eneros-constraint │
│ eneros-equipment · eneros-cnpower · eneros-timeseries │
│ eneros-eventbus · eneros-analysis · eneros-emtp · eneros-simulator │
│ eneros-network · eneros-3d · eneros-bridge │
├─────────────────────────────────────────────────────────────────────┤
│ L2 Safety Gateway │
│ eneros-gateway · eneros-trust · eneros-ids │
│ eneros-audit · eneros-compliance │
├─────────────────────────────────────────────────────────────────────┤
│ L1 Infrastructure │
│ eneros-os · eneros-multiregion · eneros-tenant │
│ eneros-scada · eneros-device · eneros-perf │
│ eneros-protocol-* · eneros-iot-hub · eneros-plugin │
│ eneros-sdk · eneros-runtime · eneros-api │
│ eneros-graphql · eneros-slo · eneros-ops │
│ eneros-i18n · eneros-test-utils · eneros-plugin-macros │
├─────────────────────────────────────────────────────────────────────┤
│ L0 Core │
│ eneros-core · eneros-linalg │
└─────────────────────────────────────────────────────────────────────┘
L0 - Core Layer
The core layer is the foundation of all crates, providing unified types, error handling, configuration, and linear algebra.
| Crate | Responsibility | Dependencies |
|---|---|---|
eneros-core | Unified types (Bus/Branch/Command/Event), errors, configuration | serde, tokio, thiserror |
eneros-linalg | Sparse linear algebra (sprs wrapper) | sprs, ndarray |
Core Types Exposed by eneros-core
// eneros-core/src/types.rs
pub struct Bus {
pub id: u32,
pub name: String,
pub base_kv: f64,
pub bus_type: BusType,
}
pub struct Branch {
pub id: u32,
pub from_bus: u32,
pub to_bus: u32,
pub resistance: f64,
pub reactance: f64,
}
pub enum Command {
SwitchToggle { switch_id: u32, closed: bool },
GeneratorSetpoint { generator_id: u32, target_mw: f64 },
TransformerTap { transformer_id: u32, tap: f64 },
LoadShed { load_id: u32, amount_mw: f64 },
}
pub enum Event {
FaultDetected { bus_id: u32, fault_type: FaultType },
SwitchChanged { switch_id: u32, closed: bool },
FrequencyDeviation { hz: f64 },
}
L1 - Infrastructure Layer
The infrastructure layer depends on L0, providing OS, device, protocol, network, and other foundational capabilities.
| Crate | Responsibility | Direct Dependencies |
|---|---|---|
eneros-os | OS services (init/rt/agentos/hal/ha/netcfg/syslog/timesync/update) | eneros-core |
eneros-perf | Performance optimization (arena/pool/ring_buffer/zero_copy) | eneros-core |
eneros-device | Device management and protocol adaptation | eneros-core, eneros-perf |
eneros-scada | SCADA data acquisition (IEC 104/CDT/PMU) | eneros-core, eneros-device, eneros-timeseries |
eneros-multiregion | Multi-region replication and disaster recovery | eneros-core, eneros-audit |
eneros-tenant | Multi-tenant isolation and quotas | eneros-core |
eneros-protocol-cdt | CDT cyclic transmission protocol | eneros-core, eneros-device |
eneros-protocol-coap | CoAP constrained device protocol | eneros-core, eneros-device |
eneros-protocol-iccp | ICCP / IEC 60870-6 | eneros-core, eneros-device |
eneros-protocol-iec103 | IEC 60870-5-103 relay protection protocol | eneros-core, eneros-device |
eneros-protocol-lwm2m | LwM2M device management protocol | eneros-core, eneros-device |
eneros-protocol-mqtt | MQTT IoT messaging protocol | eneros-core, eneros-device |
eneros-protocol-pmu | IEEE C37.118 synchronized phasor protocol | eneros-core, eneros-device |
eneros-protocol-dlt698 | DLT 698 Chinese energy meter protocol | eneros-core, eneros-device |
eneros-iot-hub | IoT device access hub | eneros-core, eneros-device, eneros-protocol-mqtt |
eneros-plugin | Plugin system (process isolation + signature) | eneros-core, eneros-perf |
eneros-plugin-macros | Plugin derive macros | syn, quote |
eneros-sdk | Multi-language SDK (C/Python/Go bindings) | eneros-core, eneros-agent |
eneros-runtime | Top-level runtime composition | eneros-core, eneros-agent, eneros-gateway |
eneros-api | REST/GraphQL/SSE API server | eneros-core, eneros-runtime, eneros-trust |
eneros-graphql | GraphQL schema and resolver | eneros-core, async-graphql |
eneros-slo | SLO/SLI evaluation and alerting | eneros-core, eneros-timeseries |
eneros-ops | Operations automation (backup/scaling/on-call) | eneros-core, eneros-os |
eneros-i18n | Internationalization (multi-language/timezone/units) | eneros-core, fluent |
eneros-test-utils | Test utilities and fixtures | eneros-core |
L2 - Real-Time Safety Gateway Layer
The real-time safety gateway layer depends on L0 + L1, providing security, trust, audit, and compliance capabilities.
| Crate | Responsibility | Direct Dependencies |
|---|---|---|
eneros-gateway | Safety gateway (command interception/validation/execution/lock-free) | eneros-core, eneros-constraint, eneros-device, eneros-perf |
eneros-trust | Zero-trust mTLS + internal CA | eneros-core, rustls, tokio-rustls |
eneros-ids | Intrusion detection (behavior baseline + IOC) | eneros-core, eneros-audit |
eneros-audit | Audit log (HMAC + WORM) | eneros-core |
eneros-compliance | Compliance checks (NERC CIP / IEC 62443 / GDPR / PIPL / CCPA) | eneros-core, eneros-audit |
L3 - Power-Native Kernel Layer
The Power-Native Kernel layer depends on L0 + L1 (some depend on L2 for constraint validation), providing core grid domain capabilities.
| Crate | Responsibility | Direct Dependencies |
|---|---|---|
eneros-topology | Grid topology engine (graph modeling/search/electrical islands) | eneros-core, eneros-linalg |
eneros-powerflow | Power flow calculation (Newton-Raphson) | eneros-core, eneros-linalg, eneros-topology |
eneros-constraint | Safety constraint engine (validation/projection) | eneros-core, eneros-topology, eneros-powerflow |
eneros-equipment | Equipment model library (parameterized models) | eneros-core |
eneros-cnpower | Chinese distribution equipment and standards | eneros-core, eneros-equipment, eneros-topology |
eneros-timeseries | Time-series storage (Gorilla encoding + LSM) | eneros-core, eneros-perf |
eneros-eventbus | Event bus (publish-subscribe) | eneros-core |
eneros-analysis | Advanced analysis (state estimation/OPF/short circuit/DSA/harmonics) | eneros-core, eneros-linalg, eneros-topology, eneros-powerflow |
eneros-emtp | Electromagnetic transient simulation | eneros-core, eneros-linalg, eneros-topology |
eneros-simulator | Scenario simulator | eneros-core, eneros-topology, eneros-powerflow, eneros-timeseries |
eneros-network | CIM network model and simulation | eneros-core, eneros-topology |
eneros-3d | 3D visualization scenes (glTF export) | eneros-core, eneros-topology |
eneros-bridge | Bridge (external system integration) | eneros-core |
L4 - Agent Runtime Layer
The Agent Runtime layer depends on L0 - L3, providing Agent lifecycle, memory, tools, and reasoning capabilities.
| Crate | Responsibility | Direct Dependencies |
|---|---|---|
eneros-agent | Agent lifecycle, orchestration, collaboration, learning, reflection, explanation | eneros-core, eneros-memory, eneros-tool, eneros-reasoning, eneros-gateway |
eneros-memory | Memory system (short-term/long-term/vector) | eneros-core, eneros-timeseries |
eneros-tool | Tool engine (registration/invocation/permissions) | eneros-core, eneros-topology, eneros-powerflow, eneros-constraint |
eneros-reasoning | Reasoning engine (ReAct/CoT/reflection) | eneros-core, eneros-ai |
eneros-ai | AI/ML integration (LLM/anomaly detection/prediction/embedding) | eneros-core |
eneros-twin | Digital twin (real-time mirroring/what-if/replay) | eneros-core, eneros-topology, eneros-powerflow, eneros-timeseries |
eneros-aiops | AIOps (alert correlation/root cause analysis/event suppression) | eneros-core, eneros-ai, eneros-eventbus |
L5 - Application Layer
The Application layer depends on L0 - L4, providing specific scenario applications for power business.
| Crate / Binary | Responsibility | Direct Dependencies |
|---|---|---|
dispatch-agent | Intelligent dispatch Agent | eneros-agent, eneros-powerflow, eneros-constraint |
forecast-agent | Load forecasting Agent | eneros-agent, eneros-ai, eneros-timeseries |
operation-agent | Intelligent operations Agent | eneros-agent, eneros-aiops |
self-healing-agent | Fault self-healing Agent | eneros-agent, eneros-topology, eneros-gateway |
planning-agent | Distribution planning Agent | eneros-agent, eneros-analysis |
trading-agent | Electricity trading Agent | eneros-agent, eneros-market |
eneros-market | Electricity market matching and settlement | eneros-core, eneros-timeseries, eneros-api |
eneros-report | Report generation (PDF/Excel/Word/email) | eneros-core, eneros-timeseries |
eneros-dashboard | Web visualization and PWA | eneros-core, eneros-api |
eneros-nl | Natural language interaction and intent recognition | eneros-core, eneros-ai, eneros-agent |
eneros-edge | Edge AI inference and autonomy | eneros-core, eneros-ai, eneros-device |
Core Dependency Chains
Kernel Dependency Chain
eneros-core (L0 unified types/errors/config)
│
├── eneros-linalg (L0 sparse linear algebra)
│ │
│ └── eneros-powerflow (L3 power flow calculation)
│ │ ↑ depends on eneros-topology
│ ├── eneros-analysis (L3 state estimation/OPF/short circuit/DSA)
│ │ ↑ depends on eneros-topology
│ └── eneros-emtp (L3 electromagnetic transient simulation)
│ ↑ depends on eneros-topology
│
├── eneros-topology (L3 grid topology)
│ │
│ ├── eneros-constraint (L3 safety constraints)
│ │ ↑ depends on eneros-powerflow
│ ├── eneros-cnpower (L3 Chinese distribution network)
│ │ ↑ depends on eneros-equipment
│ ├── eneros-network (L3 CIM network model)
│ └── eneros-3d (L3 3D visualization scenes)
│
├── eneros-equipment (L3 equipment models)
│
├── eneros-timeseries (L3 time-series storage)
│ ↑ depends on eneros-perf
│
└── eneros-eventbus (L3 event bus)
Agent Dependency Chain
eneros-agent (L4 Agent runtime)
│
├── eneros-memory (L4 memory system)
│ ↑ depends on eneros-timeseries
│
├── eneros-tool (L4 tool engine)
│ ↑ depends on eneros-topology, eneros-powerflow, eneros-constraint
│
├── eneros-reasoning (L4 reasoning engine)
│ │
│ └── eneros-ai (L4 AI/ML integration)
│
├── eneros-twin (L4 digital twin)
│ ↑ depends on eneros-topology, eneros-powerflow, eneros-timeseries
│
└── eneros-gateway (L2 safety gateway)
↑ depends on eneros-constraint, eneros-device, eneros-perf
Security Dependency Chain
eneros-gateway (L2 safety gateway)
│
├── eneros-constraint (L3 constraint engine)
│
├── eneros-device (L1 device management)
│
└── eneros-perf (L1 performance optimization)
eneros-trust (L2 zero trust)
│
└── rustls + tokio-rustls
eneros-audit (L2 audit)
│
└── eneros-core
eneros-ids (L2 intrusion detection)
│
└── eneros-audit
eneros-compliance (L2 compliance)
│
└── eneros-audit
Complete Crate Index Table
The following table lists all 56 crates with their layer, responsibility, and direct dependency count:
| # | Crate | Layer | Responsibility | Direct Dependencies |
|---|---|---|---|---|
| 1 | eneros-core | L0 | Unified types/errors/config | 0 |
| 2 | eneros-linalg | L0 | Sparse linear algebra | 1 |
| 3 | eneros-perf | L1 | Performance optimization (arena/pool/ring) | 1 |
| 4 | eneros-audit | L2 | Audit log (HMAC + WORM) | 1 |
| 5 | eneros-topology | L3 | Grid topology engine | 2 |
| 6 | eneros-powerflow | L3 | Power flow calculation | 3 |
| 7 | eneros-constraint | L3 | Safety constraint engine | 3 |
| 8 | eneros-equipment | L3 | Equipment model library | 1 |
| 9 | eneros-cnpower | L3 | Chinese distribution equipment and standards | 3 |
| 10 | eneros-timeseries | L3 | Time-series storage | 2 |
| 11 | eneros-eventbus | L3 | Event bus | 1 |
| 12 | eneros-device | L1 | Device management and protocol adaptation | 2 |
| 13 | eneros-gateway | L2 | Safety gateway | 4 |
| 14 | eneros-trust | L2 | Zero-trust mTLS + CA | 2 |
| 15 | eneros-ids | L2 | Intrusion detection | 2 |
| 16 | eneros-compliance | L2 | Compliance checks | 2 |
| 17 | eneros-os | L1 | OS services | 1 |
| 18 | eneros-multiregion | L1 | Multi-region replication | 2 |
| 19 | eneros-tenant | L1 | Multi-tenant isolation | 1 |
| 20 | eneros-scada | L1 | SCADA data acquisition | 3 |
| 21 | eneros-protocol-cdt | L1 | CDT protocol | 2 |
| 22 | eneros-protocol-coap | L1 | CoAP protocol | 2 |
| 23 | eneros-protocol-iccp | L1 | ICCP protocol | 2 |
| 24 | eneros-protocol-iec103 | L1 | IEC 103 protocol | 2 |
| 25 | eneros-protocol-lwm2m | L1 | LwM2M protocol | 2 |
| 26 | eneros-protocol-mqtt | L1 | MQTT protocol | 2 |
| 27 | eneros-protocol-pmu | L1 | PMU protocol | 2 |
| 28 | eneros-protocol-dlt698 | L1 | DLT 698 protocol | 2 |
| 29 | eneros-iot-hub | L1 | IoT device access | 3 |
| 30 | eneros-plugin | L1 | Plugin system | 2 |
| 31 | eneros-plugin-macros | L1 | Plugin derive macros | 0 |
| 32 | eneros-sdk | L1 | Multi-language SDK | 2 |
| 33 | eneros-runtime | L1 | Top-level runtime composition | 3 |
| 34 | eneros-api | L1 | REST/GraphQL/SSE API | 3 |
| 35 | eneros-graphql | L1 | GraphQL schema | 2 |
| 36 | eneros-slo | L1 | SLO/SLI evaluation | 2 |
| 37 | eneros-ops | L1 | Operations automation | 2 |
| 38 | eneros-i18n | L1 | Internationalization | 2 |
| 39 | eneros-test-utils | L1 | Test utilities | 1 |
| 40 | eneros-analysis | L3 | Advanced analysis | 4 |
| 41 | eneros-emtp | L3 | Electromagnetic transient simulation | 3 |
| 42 | eneros-simulator | L3 | Scenario simulator | 4 |
| 43 | eneros-network | L3 | CIM network model | 2 |
| 44 | eneros-3d | L3 | 3D visualization scenes | 2 |
| 45 | eneros-bridge | L3 | External system bridging | 1 |
| 46 | eneros-memory | L4 | Memory system | 2 |
| 47 | eneros-tool | L4 | Tool engine | 4 |
| 48 | eneros-reasoning | L4 | Reasoning engine | 2 |
| 49 | eneros-ai | L4 | AI/ML integration | 1 |
| 50 | eneros-twin | L4 | Digital twin | 4 |
| 51 | eneros-aiops | L4 | AIOps | 3 |
| 52 | eneros-agent | L4 | Agent runtime | 5 |
| 53 | eneros-market | L5 | Electricity market matching | 3 |
| 54 | eneros-report | L5 | Report generation | 2 |
| 55 | eneros-dashboard | L5 | Web visualization | 2 |
| 56 | eneros-nl | L5 | Natural language interaction | 3 |
Note: The “Direct Dependencies” in the table counts internal EnerOS workspace crate dependencies, excluding third-party dependencies. Agent binaries (dispatch-agent / forecast-agent / operation-agent / self-healing-agent / planning-agent / trading-agent) are built from the
bins/subdirectory of theeneros-agentcrate and are not counted separately.
Crate Grouping
Grouped by Functional Category
| Category | Crate Count | Members |
|---|---|---|
| Core | 2 | eneros-core, eneros-linalg |
| Kernel | 11 | eneros-topology, eneros-powerflow, eneros-constraint, eneros-equipment, eneros-cnpower, eneros-timeseries, eneros-eventbus, eneros-analysis, eneros-emtp, eneros-simulator, eneros-network |
| Safety Gateway | 5 | eneros-gateway, eneros-trust, eneros-ids, eneros-audit, eneros-compliance |
| Infrastructure | 12 | eneros-os, eneros-perf, eneros-device, eneros-scada, eneros-multiregion, eneros-tenant, eneros-iot-hub, eneros-plugin, eneros-plugin-macros, eneros-sdk, eneros-runtime, eneros-bridge |
| Protocols | 8 | eneros-protocol-cdt, eneros-protocol-coap, eneros-protocol-iccp, eneros-protocol-iec103, eneros-protocol-lwm2m, eneros-protocol-mqtt, eneros-protocol-pmu, eneros-protocol-dlt698 |
| API/Gateway | 4 | eneros-api, eneros-graphql, eneros-slo, eneros-ops |
| Agent Runtime | 7 | eneros-agent, eneros-memory, eneros-tool, eneros-reasoning, eneros-ai, eneros-twin, eneros-aiops |
| Applications | 5 | eneros-market, eneros-report, eneros-dashboard, eneros-nl, eneros-edge |
| Tools | 2 | eneros-i18n, eneros-test-utils |
| Visualization | 1 | eneros-3d |
Grouped by Execution Domain
| Execution Domain | Crates | Description |
|---|---|---|
| General domain | Most crates | Default execution domain |
| Real-time domain | eneros-os (rt), eneros-scada, eneros-protocol-* | Hard real-time scheduling |
| Cross-domain | eneros-gateway, eneros-os (rt/shm), eneros-perf | Inter-domain bridge |
Dependency Rules
Enforced Rules
| Rule | Description | Enforcement Method |
|---|---|---|
| One-way dependency | Upper layers can depend on lower layers, reverse is prohibited | Cargo.toml dependency declarations |
| No circular dependencies | No crate may form a dependency cycle | cargo-deny + CI checks |
| Minimal dependencies | Only depend on necessary crates, no full dependencies | code review + clippy |
| Version unification | Same crate version must be consistent within workspace | [workspace.dependencies] unified declaration |
| Feature minimization | Only enable necessary features | Cargo.toml explicit feature declaration |
Cargo Workspace Configuration
# Cargo.toml (workspace root)
[workspace]
resolver = "2"
members = [
"crates/eneros-core",
"crates/eneros-linalg",
"crates/eneros-perf",
"crates/eneros-audit",
"crates/eneros-topology",
"crates/eneros-powerflow",
"crates/eneros-constraint",
"crates/eneros-equipment",
"crates/eneros-cnpower",
"crates/eneros-timeseries",
"crates/eneros-eventbus",
"crates/eneros-eventbus/bins/broker",
"crates/eneros-gateway",
"crates/eneros-gateway/bins/gateway",
"crates/eneros-device",
"crates/eneros-api",
"crates/eneros-runtime",
"crates/eneros-bridge",
"crates/eneros-network",
"crates/eneros-memory",
"crates/eneros-tenant",
"crates/eneros-tool",
"crates/eneros-reasoning",
"crates/eneros-agent",
"crates/eneros-agent/bins/dispatch-agent",
"crates/eneros-agent/bins/forecast-agent",
"crates/eneros-agent/bins/operation-agent",
"crates/eneros-agent/bins/self-healing-agent",
"crates/eneros-agent/bins/planning-agent",
"crates/eneros-agent/bins/trading-agent",
"crates/eneros-test-utils",
"crates/eneros-scada",
"crates/eneros-twin",
"crates/eneros-graphql",
"crates/eneros-ai",
"crates/eneros-aiops",
"crates/eneros-edge",
"crates/eneros-protocol-iec103",
"crates/eneros-protocol-cdt",
"crates/eneros-protocol-pmu",
"crates/eneros-protocol-iccp",
"crates/eneros-analysis",
"crates/eneros-dashboard",
"crates/eneros-simulator",
"crates/eneros-slo",
"crates/eneros-plugin",
"crates/eneros-plugin/bins/plugin-daemon",
"crates/eneros-plugin-macros",
"crates/eneros-sdk",
"crates/eneros-sdk/bindings/c",
"crates/eneros-sdk/bindings/python",
"crates/eneros-ops",
"crates/eneros-os",
"crates/eneros-os/bins/eneros-init",
"crates/eneros-os/bins/eneros-ha",
"crates/eneros-os/bins/eneros-timesync",
"crates/eneros-os/bins/enerosctl",
"crates/eneros-os/bins/eneros-installer",
"crates/eneros-os/bins/eneros-autoscaler",
"crates/eneros-os/bins/eneros-backup",
"crates/eneros-os/bins/eneros-oncall",
"crates/eneros-os/bins/eneros-dr-orchestrator",
"crates/eneros-os/bins/eneros-upgrader",
"crates/eneros-market",
"crates/eneros-market/bins/market-server",
"crates/eneros-ids",
"crates/eneros-compliance",
"crates/eneros-trust",
"crates/eneros-multiregion",
"crates/eneros-emtp",
"crates/eneros-protocol-mqtt",
"crates/eneros-protocol-coap",
"crates/eneros-protocol-lwm2m",
"crates/eneros-protocol-dlt698",
"crates/eneros-iot-hub",
"crates/eneros-nl",
"crates/eneros-3d",
"crates/eneros-report",
"crates/eneros-i18n",
"os/tests",
"tests/e2e",
"tests/protocol_conformance",
"tests/security",
"benches",
]
[workspace.package]
version = "0.44.0"
edition = "2021"
authors = ["GAWG-AI"]
license = "MIT"
description = "EnerOS - Power-Native Agent Operating System"
[workspace.dependencies]
# Async runtime
tokio = { version = "1", features = ["full"] }
async-trait = "0.1"
futures = "0.3"
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bincode = "1"
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["json", "env-filter"] }
# Error handling
thiserror = "1"
anyhow = "1"
# Data structures
dashmap = "5"
parking_lot = "0.12"
uuid = { version = "1", features = ["v4", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
# Math/Science
ndarray = { version = "0.15", features = ["serde"] }
num-complex = { version = "0.4", features = ["serde"] }
sprs = "0.11"
# Security
jsonwebtoken = "9"
sha2 = "0.10"
hmac = "0.12"
aes-gcm = "0.10"
ed25519-dalek = { version = "2", features = ["rand_core"] }
zeroize = { version = "1", features = ["derive", "serde", "alloc"] }
libseccomp = "0.4"
# TLS
tokio-rustls = "0.26"
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
# Internal crates (path dependencies)
eneros-core = { path = "crates/eneros-core" }
eneros-linalg = { path = "crates/eneros-linalg" }
eneros-topology = { path = "crates/eneros-topology" }
eneros-powerflow = { path = "crates/eneros-powerflow" }
# ... other internal crates declared as path dependencies
Circular Dependency Detection
CI pipeline detects circular dependencies through the following methods:
# 1. cargo-deny checks for duplicate dependencies and licenses
cargo deny check
# 2. cargo-tree checks dependency tree
cargo tree -d # duplicate dependencies
cargo tree --invert eneros-core # reverse dependencies
# 3. Custom script to detect cycles
# scripts/check_cycles.sh
Example: eneros-gateway Dependency Declaration
# crates/eneros-gateway/Cargo.toml
[package]
name = "eneros-gateway"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
description = "EnerOS real-time safety gateway"
[dependencies]
# EnerOS internal dependencies (L0 + L1 + L3)
eneros-core = { workspace = true }
eneros-constraint = { workspace = true }
eneros-device = { workspace = true }
eneros-perf = { workspace = true }
# Third-party dependencies
tokio = { workspace = true }
async-trait = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
tracing = { workspace = true }
thiserror = { workspace = true }
parking_lot = { workspace = true }
dashmap = { workspace = true }
crossbeam-skiplist = "0.1"
rayon = "1"
[dev-dependencies]
eneros-test-utils = { workspace = true }
Visual Dependency Graph
Below is the dependency graph for core crates (simplified version, arrows indicate “depends on”):
┌──────────────┐
│ eneros-core │
└──────┬───────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ linalg │ │ perf │ │ audit │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
▼ │ ▼
┌──────────┐ │ ┌──────────┐
│topology │ │ │ ids │
└────┬─────┘ │ └──────────┘
│ │
▼ │
┌──────────┐ │
│powerflow │◄─────┘
└────┬─────┘
│
▼
┌──────────┐
│constraint│
└────┬─────┘
│
▼
┌──────────┐
│ gateway │
└────┬─────┘
│
▼
┌──────────┐
│ agent │
└──────────┘
Version Management
Semantic Versioning
EnerOS follows Semantic Versioning 2.0.0:
| Version Number | Current | Meaning |
|---|---|---|
| MAJOR | 0 | Incompatible API changes (0.x stage allows frequent breaking) |
| MINOR | 44 | Backward-compatible feature additions |
| PATCH | 0 | Backward-compatible bug fixes |
Internal Crate Versions
All internal crates use the workspace unified version (version.workspace = true), consistent with the main version.
Related Documentation
- Project Structure - Directory structure description
- Crate Index - Complete crate list
- Layered Architecture - Five-layer architecture details