Skip to main content

v0.45.0 Release Notes

Release Notes

EnerOS v0.45.0 Release Notes

  • Release Date: 2026-07-01
  • Codename: Eco
  • Support Status: Stable
  • Total Crates: 54
  • Test Cases: 7000+
  • Contributors: 35

Version Overview

EnerOS v0.45.0 is the fifth release of the “Mature Optimization” phase, focusing on ecosystem expansion. The value of an operating system depends not only on its kernel capabilities, but also on the prosperity of the ecosystem built around it. This release builds the four pillars of the EnerOS ecosystem around four directions: partner integration, third-party plugin certification, solution templates, and app marketplace.

After the first four releases completed performance benchmarking, security auditing, developer experience, and documentation systems, EnerOS itself already has production-ready engineering foundations. v0.45.0 pushes EnerOS from a “product” to a “platform”, attracting partners and third-party developers to build vertical industry applications on EnerOS through open plugin interfaces, certification systems, and application distribution channels.

This release adds the eneros-marketplace crate to provide the marketplace backend, adds eneros-plugin-sdk to provide a third-party plugin development toolkit, and releases the first batch of 24 certified plugins from 8 partners and 15 solution templates, covering the entire power business chain including generation, transmission, distribution, dispatching, marketing, and security.

Key Metrics

MetricValueDescription
Crate count54Added eneros-marketplace and 2 other crates
Test cases7000+Including plugin compatibility tests
Certified plugins248 partners
Solution templates15Full business chain coverage
Marketplace apps42First batch listed
Plugin SDK downloads1200+First week of release
Partners8Including Nari, Xuji, Sifang, etc.

New Features

1. Partner Integration

EnerOS completed deep integration with 8 core power industry partners. Partner device models, protocol stacks, and analysis tools are connected to the EnerOS kernel through standardized adapter layers. Users can directly use these partner capabilities in EnerOS.

Partners and Integration Content

PartnerIntegration ContentCertification LevelStatus
Nari RelaysRelay protection models, IEC 61850 IEDGoldCertified
Xuji ElectricDC transmission models, flexible DCGoldCertified
Beijing SifangFault recording, SOE eventsSilverCertified
Jicheng ElectronicsDistribution terminals, DTU/FTUSilverCertified
Changyuan ShenruiDistribution automation, feeder terminalsSilverCertified
Guodian NanziGenerator excitation, PSS modelsSilverCertified
Siyuan ElectricSwitchgear models, GISBronzeCertified
Yuanguang SoftwarePower marketing, billing interfaceBronzeCertified

Adapter Layer Architecture

use eneros_eco::adapter::{PartnerAdapter, AdapterConfig};
use eneros_eco::partners::{Nari, XjElectric};

// Load Nari Relays adapter
let nari_adapter = PartnerAdapter::new(Nari, AdapterConfig {
    models_path: "partners/nari/models/",
    protocol: "iec61850",
    certification: "gold",
});

// Register relay protection models
nari_adapter.register_device_models().await?;
nari_adapter.register_ied_types().await?;

// Use directly in EnerOS
let relay = ctx.syscall(GetDeviceModel {
    type_id: "nari-relay-PCS-931",
}).await?;

2. Third-Party Plugin Certification

Added eneros-plugin-sdk and plugin certification system. Third-party developers can develop plugins based on the SDK. After submission, the EnerOS core team conducts security review, compatibility testing, and performance benchmark evaluation. Certified plugins can be listed on the marketplace.

Certification Levels

LevelRequirementsPermissionsBadge
GoldSecurity audit passed + 100% compatibility + performance meets standardKernel-mode access + all system callsVerified Gold
SilverSecurity review passed + 95% compatibilityUser-mode access + restricted system callsVerified Silver
BronzeBasic security check + 90% compatibilityUser-mode access + basic system callsVerified Bronze
UncertifiedSelf-developed, not reviewedSandbox isolation + minimum permissionsCommunity

Plugin SDK Usage

use eneros_plugin_sdk::{Plugin, PluginContext, PluginResult, PluginManifest};

// Define plugin manifest
let manifest = PluginManifest::new("my-fault-analyzer")
    .version("1.0.0")
    .author("My Company")
    .description("Fault analysis plugin")
    .permissions(vec![
        Permission::ReadTopology,
        Permission::ReadTimeseries,
        Permission::WriteReport,
    ])
    .api_version("0.45");

// Implement plugin
pub struct FaultAnalyzer;

impl Plugin for FaultAnalyzer {
    fn manifest(&self) -> &PluginManifest { &manifest }

    async fn init(&mut self, ctx: &mut PluginContext) -> PluginResult<()> {
        ctx.log_info("Fault analysis plugin initialized");
        Ok(())
    }

    async fn handle_event(&mut self, event: Event, ctx: &mut PluginContext) -> PluginResult<()> {
        match event {
            Event::FaultDetected { location, type_ } => {
                let topology = ctx.syscall(GetTopology).await?;
                let analysis = self.analyze(location, type_, &topology)?;
                ctx.emit_report(analysis).await?;
            }
            _ => {}
        }
        Ok(())
    }
}

// Register plugin
plugin_sdk::register_plugin!(FaultAnalyzer);

Plugin Sandbox

Uncertified plugins run in a WASM sandbox, with permissions limited through the capabilities model. The sandbox provides CPU time slice limits, memory caps, and system call filtering, ensuring uncertified plugins do not affect system stability.

use eneros_plugin_sdk::sandbox::{Sandbox, SandboxConfig};

let sandbox = Sandbox::new(SandboxConfig {
    max_memory_mb: 256,
    max_cpu_time_ms: 1000,
    max_filesystem_mb: 100,
    allowed_syscalls: vec!["read", "write", "clock_gettime"],
    network_access: false,
});

sandbox.run_plugin("community/analyzer.wasm")?;

3. Solution Templates

Released 15 solution templates. Each template contains complete architecture design documents, Agent implementations, deployment configurations, and operations manuals, covering typical power industry business scenarios. Templates can be directly used as project starting points, greatly shortening project delivery cycles.

Template List

TemplateScenarioIncluded ComponentsDelivery Cycle
Provincial DispatchProvincial grid dispatching automationDispatch Agent + OPF + N-18 weeks
City DispatchCity-level distribution dispatchingDispatch Agent + feeder automation6 weeks
SubstationSmart substationIEC 61850 + protection coordination4 weeks
Distribution NetworkDistribution automationFA + fault location + isolation6 weeks
MicrogridMicrogrid managementIsland detection + grid-connected/off-grid + storage5 weeks
New EnergyWind/solar plant monitoringForecasting + output control + AGC5 weeks
Energy StorageStorage station managementBMS + PCS + dispatching4 weeks
Charging StationsEV charging networkLoad management + billing + orderly charging4 weeks
Virtual Power PlantVPP aggregation operationsAggregation + dispatching + trading6 weeks
Demand ResponseLoad demand responseLoad aggregation + response strategy5 weeks
Electricity TradingElectricity market tradingBidding + clearing + settlement6 weeks
Security MonitoringCybersecurity monitoringAudit + intrusion detection + alerts4 weeks
Digital TwinGrid digital twinTwin + state estimation + replay8 weeks
Fault DiagnosisIntelligent fault diagnosisDiagnosis + protection coordination + self-healing5 weeks
MarketingPower marketingBilling + customer service + metering5 weeks

Template Usage

# Create project from solution template
eneros-cli project new my-vpp --solution virtual-power-plant

# Generated complete project structure
# my-vpp/
# ├── docs/              # Architecture design documents
# │   ├── architecture.md
# │   └── deployment.md
# ├── src/
# │   ├── agents/        # Agent implementations
# │   ├── models/        # Business models
# │   └── config.rs
# ├── tests/
# ├── deploy/
# │   ├── docker-compose.yml
# │   └── helm/
# └── ops/
#     ├── runbook.yml    # Operations manual
#     └── monitors/      # Monitoring configuration

4. App Marketplace

Added the eneros-marketplace crate, providing marketplace backend services. Developers can publish plugins, templates, and complete applications. Users can search, install, update, and uninstall. The marketplace supports version management, dependency resolution, and signature verification.

Marketplace Architecture

eneros-marketplace/
├── src/
│   ├── registry/         # Application registry
│   │   ├── catalog.rs    # Catalog management
│   │   ├── version.rs    # Version management
│   │   └── signing.rs    # Signature verification
│   ├── search/           # Search engine
│   │   ├── index.rs      # Full-text index
│   │   └── ranking.rs    # Ranking algorithm
│   ├── install/          # Installer
│   │   ├── resolver.rs   # Dependency resolution
│   │   └── downloader.rs # Downloader
│   └── api/              # REST API
└── web/                  # Marketplace frontend

Publishing Applications

use eneros_marketplace::{Publisher, AppPackage, AppMetadata};

let publisher = Publisher::new("my-company")
    .signing_key("keys/company.pem");

let app = AppPackage::new(AppMetadata {
    name: "advanced-fault-analyzer".into(),
    version: "1.2.0".into(),
    description: "Advanced fault analysis tool, supporting waveform recognition and protection coordination".into(),
    category: Category::Analysis,
    certification: Certification::Silver,
    price: Price::Free,
    min_eneros_version: "0.45".into(),
});

publisher.publish(app, "dist/analyzer-1.2.0.tar.gz").await?;

Installing Applications

# Search applications
eneros-cli marketplace search "fault analysis"

# Install application
eneros-cli marketplace install advanced-fault-analyzer

# View installed applications
eneros-cli marketplace list --installed

# Update applications
eneros-cli marketplace update --all
// Programmatic installation
use eneros_marketplace::{Marketplace, InstallOptions};

let market = Marketplace::connect("https://market.eneros.io")?;

market.install("advanced-fault-analyzer", InstallOptions {
    version: Requirement::Latest,
    auto_start: true,
    config: Default::default(),
}).await?;

Improvements

Plugin Loading Performance

Plugin loading changed from synchronous blocking to asynchronous streaming. Cold start time for large plugins reduced from 800ms to 200ms.

Marketplace search introduced embedding-based semantic search, supporting natural language queries. For example, searching for “tools that can help me analyze grid faults” returns fault diagnosis applications.

Plugin Dependency Resolution

The dependency resolver upgraded from simple version matching to a SAT solver, capable of handling complex dependency conflicts and version constraints.

Bug Fixes

  • BG-601: Plugins left configuration files after uninstall, added cleanup hooks
  • BG-605: Marketplace search inaccurate for Chinese keywords, optimized word segmentation
  • BG-609: Partner adapter crashed on model version mismatch, added version negotiation
  • BG-613: Sandbox plugins did not exit gracefully when memory limit reached, changed to OOM alert + degradation
  • BG-617: Solution template Helm Chart compatibility issues on K8s 1.28, fixed

Breaking Changes

BC-241: Plugin API Versioning

Plugin interfaces introduce explicit API version declaration. Plugins without version declaration run in v0.40 compatibility mode, which will be removed in v0.48.0.

BC-242: eneros-plugin-sdk Trait Method Change

Plugin trait adds on_config_change method (default empty implementation). Custom plugins need to implement as needed.

Dependency Upgrades

DependencyOld VersionNew VersionDescription
wasmtime14.015.0Sandbox runtime
reqwest0.110.12Marketplace HTTP client
semver1.01.0.22Version parsing

Upgrade Guide

Upgrade from v0.44.0

cargo update
cargo test --workspace

Install plugin SDK:

[dependencies]
eneros-plugin-sdk = "0.45"
eneros-marketplace = "0.45"

Enable marketplace client:

eneros-cli marketplace login
eneros-cli marketplace search "dispatch"