Releases: networmix/NetGraph
Releases · networmix/NetGraph
v0.16.0
[0.16.0] - 2025-12-21
Changed
- Module reorganization:
ngraph.execsplit intongraph.analysis(runtime analysis) andngraph.model(data structures); public API unchanged via re-exports - Expanded public API:
TrafficDemand,FlowPolicyPreset,Scenario,NetworkExplorer, and placement functions now exported from top-level modules - Placement analysis: Extracted SPF caching and demand placement logic into
ngraph.analysis.placementmodule withplace_demands()andPlacementResult
Added
ngraph.model.demandsubpackage:TrafficDemandand builder functionsngraph.model.flowsubpackage:FlowPolicyPresetand policy configurationngraph.typesexports:Mode,FlowPlacement,EdgeSelect,EdgeRef,MaxFlowResult
[0.15.0] - 2025-12-21
Added
- Dynamic risk group creation:
membershiprules auto-assign entities by attribute matching;generateblocks create groups from unique attribute values - Risk group validation: Undefined references and circular hierarchies detected at load time
- Dot-notation in conditions:
attrfield supports nested paths (e.g.,hardware.vendor)
Changed
match.logicdefaults now context-aware:"or"for adjacency/demands,"and"for membership rules
v0.14.0
[0.14.0] - 2025-12-20
Changed
- BREAKING: Monte Carlo results restructured:
baselinereturned separately;resultscontains deduplicated failure patterns withoccurrence_count - BREAKING:
baselineparameter removed from Monte Carlo APIs; baseline always runs implicitly
Added
FlowIterationResult.occurrence_count: how many iterations produced this failure patternFlowIterationResult.failure_trace: mode/rule selection details whenstore_failure_patterns=True
[0.13.0] - 2025-12-19
Changed
- BREAKING:
TrafficDemand.source_path/sink_pathrenamed tosource/sink; now accept string patterns or selector dicts withpath,group_by, andmatchfields - BREAKING: Removed
attr:<name>magic string syntax; use{"group_by": "<name>"}dict selectors instead - BREAKING: Removed
ngraph.utils.nodesmodule; usengraph.dsl.selectorsfor node selection - Unified selector system:
ngraph.dsl.selectorsprovidesnormalize_selector()andselect_nodes()for consistent node selection across demands, workflows, adjacency, and overrides - Variable expansion in demands:
TrafficDemandsupportsexpand_varswith$var/${var}syntax andexpansion_mode(cartesian/zip) - Match conditions: Selector
matchfield supports 12 operators:==,!=,<,<=,>,>=,contains,not_contains,in,not_in,any_value,no_value - Context-aware defaults:
active_onlydefaults toTruefor demands/workflows,Falsefor adjacency/overrides
Added
ngraph.dsl.selectorsmodule:NodeSelector,MatchSpec,Conditionschema classesngraph.dsl.expansionmodule:ExpansionSpec,expand_templates(),substitute_vars(),expand_name_patterns(),expand_risk_group_refs()- Bracket expansion in risk groups:
[1-3]and[a,b,c]patterns now expand in risk group definitions (including children) and membership arrays on nodes, links, and groups TrafficDemand.group_modefield for node group handling (flatten,per_group,group_pairwise).claude/skills/netgraph-dsl/: Claude skill with DSL syntax reference and examples
v0.12.3
[0.12.3] - 2025-12-11
Changed
- SPF caching in demand placement:
demand_placement_analysis()caches SPF results by (source, policy_preset) for ECMP, WCMP, and TE_WCMP_UNLIM policies; TE policies recompute when capacity constraints require alternate paths - MSD AnalysisContext caching:
MaximumSupportedDemandbuildsAnalysisContextonce and reuses it across all binary search probes
v0.12.2
v0.12.1
[0.12.1] - 2025-12-07
Added
- NetworkX interop: New
ngraph.lib.nxmodule withfrom_networkx()andto_networkx()for converting between NetworkX graphs and netgraph_core.StrictMultiDiGraph - Mapping classes:
NodeMapandEdgeMapfor bidirectional node/edge ID lookups after conversion
v0.12.0
v0.10.0 🎉
v0.7.0
NetGraph Release Notes
Version 0.7.0 - First Usable Release 🎉
NetGraph v0.7.0, despite the version number, is actually the first usable release! Well, at least, I hope so. :-)
This release introduces the core components and features needed to start modeling and analyzing network topologies, traffic flows, and failures.
What's Available
- ✅ Fundamental Components: StrictMultiGraph, base pathfinding and flow algorithms
- ✅ Scenario-Based Modeling: YAML-based scenarios with Domain-Specific Language (DSL) describing topology, failures, traffic, and workflow
- ✅ Hierarchical Blueprints: Reusable network templates with nested structures and parameterization
- ✅ JupyterLab Support: Run NetGraph in a containerized environment with JupyterLab for interactive analysis
- ✅ Demand Placement: Place traffic demands on the network with various flow placement strategies (e.g., shortest path only, ECMP/UCMP, etc.)
- ✅ Capacity Calculation: Calculate MaxFlow with different flow placement strategies
API Stability
The core API is becoming more stable with this release, though some changes may still occur as I refine it based on real scenarios. I will do my best to minimize breaking changes, but it's important to note that the development of analytical features is far from complete and may lead to API adjustments or even breaking changes in future releases.
What's Coming Next
- 🚧 Failure Simulation: Model component and risk groups failures for availability analysis with Monte Carlo simulation
- 🚧 Network Analysis: Workflow steps and tools to analyze capacity, failure tolerance, and power/cost efficiency of network designs
- 🚧 Command Line Interface: Execute scenarios from terminal with JSON output for simple automation
- 🚧 Python API: API for programmatic access to scenario components and network analysis tools
Getting Started
📚 Full Documentation - Installation, tutorials, examples, and complete API reference
# Quick start with Docker
git clone https://github.com/networmix/NetGraph
cd NetGraph
./run.sh build
./run.sh run # Opens JupyterLab at http://127.0.0.1:8788/