Version 0.16.01 - Available here: https://aka.ms/ODIN-for-AzureLocal
A comprehensive web-based wizard to help design and configure Azure Local (formerly Azure Stack HCI) network architecture. This tool guides users through deployment scenarios, network topology decisions, security configuration, and generates ARM parameters for deployment with automated deployment scripts.
Disclaimer: This tool is provided as-is without Microsoft support. This is an experimental project to help customers accelerate their skills ramp up for Azure Local, while helping IT architects to validate desired configurations.
- Features
- Getting Started
- Prerequisites
- Usage Guide
- Configuration Options
- Export Formats
- Browser Compatibility
- Troubleshooting
- Report an Issue and Contributing
- License
- Appendix A - Version History
- Step-by-Step Wizard: Guided decision flow for Azure Local network configuration
- Multiple Deployment Scenarios: Hyperconverged, Multi-Rack, Disconnected, and M365 Local
- Cloud Witness Configuration: Automatic witness type selection based on cluster topology
- Storage Pool Management: Configure storage pool deployment mode (Express, InfraOnly, KeepStorage)
- Security Configuration: Configure security controls with recommended or customized settings
- Auto-Scroll Navigation: Optional automatic scrolling to next step with 1-second delay (toggle on/off)
- Intelligent Validation: Real-time input validation with helpful error messages
- Visual Feedback: Architecture diagrams and network topology visualizations
- ARM Parameters Generation: Export Azure Resource Manager parameters JSON
- Sizer: Standardised Disk Size Dropdown: All disk size inputs replaced with dropdown selects using standard NVMe/SSD capacities (0.96, 1.92, 3.84, 7.68, 15.36 TB), eliminating invalid free-text entries
- Sizer: Delete Confirmation Dialog: Deleting a workload now requires confirmation, preventing accidental removal
- Sizer: Clone Workload: New clone button on each workload card to duplicate a workload with all its settings
- Sizer: Estimated Power & Rack Space: New results section showing per-node power (W), total cluster power, BTU/hr, and rack units (including 2Γ ToR switches). Based on CPU TDP, memory DIMMs, data + OS disks, GPUs, and system overhead. Consult your OEM partner for accurate planning
- Sizer: AVD Custom Profile Validation: Custom AVD profiles now warn if RAM/vCPU or vCPUs/user values fall outside recommended ranges
- Sizer: Print Stylesheet: Improved print/PDF output β hides config panel and action buttons, results go full-width, page breaks avoided inside sections
- Sizer: Keyboard Accessibility: Escape closes modals; Tab/Shift+Tab focus trapped inside open modals; first input auto-focused
- Sizer: OEM Disclaimer: Subtitle updated to state the tool provides example hardware configurations only and users should consult their preferred OEM partner
- Sizer: vCPU Ratio Manual Override: Users can now manually change the vCPU Overcommit Ratio without auto-scaling overriding their selection. Auto-escalation is locked when the user manually sets the ratio, and resets when workloads are added or removed
- Sizer: AMD CPU Suggestion Tip: When Intel cores and sockets are maxed and compute utilization β₯80% (at baseline 4:1 ratio), a tip suggests AMD EPYC Turin as an alternative with higher core counts. Condition uses baseline 4:1 ratio so the tip persists even when auto-scaled to 5:1 or 6:1
- Sizer: AMD EPYC Turin Core Options: Updated AMD 5th Gen EPYC Turin to include 144, 160, and 192 cores per socket (maxCores: 192), reflecting the full Turin product line
- Sizer: Auto-Scaled Field Visual Indicators: Hardware fields that are auto-scaled now show a purple border glow animation and an "AUTO" badge on their labels, providing clear visual feedback on which settings were automatically adjusted
- Sizer: Capacity Label Renames: "Capacity Breakdown" renamed to "Capacity Usage for Workload"; sub-labels now include "- Consumed" suffix for clarity
- Sizer: Infrastructure_1 Volume Deduction: 256 GB usable capacity reserved by Storage Spaces Direct (Infrastructure_1 volume) is now deducted from overall usable storage in all capacity calculations, with a sizing note
- Sizer: Disk Bay Consolidation: When auto-scaling would fill β₯50% of available disk bays, the sizer now evaluates larger disk sizes and selects fewer, larger disks to leave bays free for future expansion, with a sizing note explaining the optimisation
- Sizer: Storage Limit Enforcement: Configurations exceeding 400 TB per machine or 4 PB per storage pool are now flagged with π« errors, a red warning banner, and export/Configure in Designer are blocked until corrected
- Sizer: Dead Code Cleanup: Removed unused dual parity option, dead functions, and consolidated resiliency constants
- Sizer: Power Estimate Core Scaling: CPU TDP in the power estimate now scales with the selected core count (40% base + 60% proportional), so reducing cores visibly reduces estimated power
- Sizer: Single Node Default Resiliency: Single-node clusters now default to Two-Way Mirror instead of Simple (No Fault Tolerance)
- Sizer: Cluster Type & Nodes Label Styling: The "Cluster Type" and "Number of Nodes" labels now use bolder weight, larger font, and primary text colour for better visibility
- Sizer: Disk Consolidation Count Fix: Fixed disk bay consolidation only increasing disk count, never decreasing β consolidation now writes both count and size together, and stale counts no longer persist after page refresh/resume
- Sizer: Consolidation Note After Headroom: Fixed the consolidation sizing note showing the wrong disk count when the storage headroom pass added extra disks after consolidation
- Sizer: HTML Validation Fix: Encoded raw
&as&in the sizer heading to resolve HTML validation errors
Full Version History: See Appendix A - Version History for complete release notes.
-
Open the ODIN designer wizard:
- Open in a modern web browser, navigate to ODIN online version: https://aka.ms/ODIN-for-AzureLocal
- For offline or local access, download the source code of this repo, to run a local web server:
PowerShell.exe -ExecutionPolicy Bypass -file .\tests\serve.ps1(then open address http://localhost:5500 using browser)
-
Follow the wizard:
- Answer questions about your deployment scenario
- Configure network settings, storage, and identity options
- Review the configuration summary in real-time
-
Export your configuration:
- Generate ARM parameters JSON
- Export full configuration for sharing or backup
- Download configuration reports
If you want to deploy Azure Local on physical hardware, before starting, ensure you have:
- β Azure Local certified hardware (check Microsoft Hardware Catalog)
- β Minimum 1 node (up to 16 for single-site clusters)
- β RDMA-capable network adapters for storage, for multi-node clusters.
- β Compatible Top of Rack (ToR) switches with latest firmware installed.
- β Outbound internet connectivity or configured proxy
- β Available IP address ranges for infrastructure and management
- β DNS servers configured and reachable
- β VLAN support (if using tagged VLANs)
- β Network Time Protocol (NTP) configured
- β Active Azure subscription with appropriate permissions
- β Azure Arc resource provider registered
- β Sufficient quota for Azure Local resources
- β Resource group created in target region
- β Active Directory domain or Local Identity setup
- β Domain credentials with appropriate permissions
- β Managed Identity is required / created for Azure integration
The wizard follows a sequential flow:
- Deployment Scenario - Select your architecture type
- Azure Cloud - Choose Azure environment (Public, Government, China)
- Azure Local Instance Region - Select deployment region
- Scale - Choose single-site or rack-aware
- Nodes - Specify number of cluster nodes
- Network Configuration - Configure ports, storage, and traffic intents
- Connectivity - Set up outbound connectivity and Arc Gateway
- IP Assignment - Configure static or DHCP
- Infrastructure Network - Define management network and IP pools
- Identity - Configure Active Directory or Local Identity
- SDN Options (Optional) - Enable software-defined networking features
- Progress is automatically saved to browser localStorage
- Return anytime and see a "Resume Session" prompt
- Choose to continue or start fresh
- Click Export button in the summary panel (right side)
- Saves complete state as timestamped JSON file
- Share with team members or backup for later
- Click Import button in the summary panel (right side)
- Select previously exported JSON file
- Review changes and confirm import
- Click Subnet Calculator button next to the Infrastructure Network CIDR input
- Enter IP/CIDR notation (e.g., 192.168.1.0/24)
- See network details, usable host range, and subnet info
- Click Load Example Configuration Template in the summary panel (right side)
- Browse pre-built deployment configurations for common scenarios
- Load a template to pre-populate the wizard with recommended settings
- Automatically shown on first visit (can be reset by clearing browser localStorage)
- Step-by-step overlay highlighting key wizard features
- Helps new users understand the workflow quickly
| Scenario | Description | Use Case |
|---|---|---|
| Hyperconverged | Single rack or rack-aware cluster with compute, storage, and network | Most common, balanced workloads. One to sixteen nodes in scale. |
| Multi-Rack | Scalable, multi-rack distributed architecture | High availability, large scale |
| Disconnected | Air-gapped operation with local management | Isolated / security-sensitive environments |
| M365 Local | Microsoft 365 workloads with minimum 9 nodes | M365 on-premises deployments |
| Intent | Description | Adapters |
|---|---|---|
| Compute + Management | Shared network for VMs and management | 2 adapters (redundant) |
| Compute + Storage | Combined compute and storage traffic | 4+ adapters |
| All Traffic | Single intent for all network types | 2 adapters |
| Custom | User-defined adapter mapping | Flexible |
| Type | Description | Requirements |
|---|---|---|
| Switched | Traditional ToR switch-based | ToR switches, suitable for any scale |
| Switchless | Direct node-to-node connections | 2-4 nodes, no storage switches |
- Azure Resource Manager template parameters
- Ready for deployment with Azure CLI or Portal
- Includes placeholders for values not collected by wizard
- Copy to Clipboard: Available on ARM parameters page
- Complete wizard state export
- Version-tagged for compatibility tracking
- Includes timestamp and metadata
- Can be re-imported to restore session
- Comprehensive configuration reports
- Download as Word (DOCX-compatible), Markdown, or PDF
- Includes decision rationale and network diagrams
- Print-friendly formatting
- β Chrome/Edge 90+ (Recommended)
- β Firefox 88+
- β Safari 14+
- β Opera 76+
- ES6+ JavaScript support
- CSS Custom Properties
- Flexbox and Grid
- localStorage API
- File API (for import/export)
- Internet Explorer is not supported
- Mobile browsers may have layout limitations
- Safari private mode disables localStorage
- localStorage may be disabled in browser settings
- Private/Incognito mode disables localStorage
- Clear browser cache and try again
- Check browser console for errors
- Ensure pop-up blocker isn't preventing downloads
- Verify file is valid JSON (use JSON validator)
- Imported file may be from incompatible version
- Check
versionfield in JSON matches current version - Try exporting fresh config to verify format
Enable detailed logging in browser console:
- Open Developer Tools (F12)
- Go to Console tab
- Look for errors or warnings
- Check localStorage:
localStorage.getItem('azureLocalWizardState')
- Report bugs or request new features using GitHub Issues
- Include browser version, OS, screenshot if possible, and steps to reproduce the issue.
- Provide exported config (sanitized) if required to recreate the problem.
For detailed contribution guidelines, see CONTRIBUTING.md.
- Review Prerequisites - Click "Prerequisites" before starting
- Try Templates - Load a pre-built template for common scenarios
- Save Progress - Export configuration at major milestones
- Validate Early - Use real-time validation to catch errors
- Use Calculator - CIDR calculator helps avoid subnet conflicts
- Document IP Ranges - Keep track of all CIDRs and ranges
- Avoid Overlaps - Use CIDR calculator to verify no conflicts
- Plan for Growth - Size infrastructure pool with headroom
- Test DNS - Verify DNS resolution before deployment
- Review Gateway - Ensure default gateway is outside IP pools
- Export Regularly - Save configuration at each major decision
- Version Control - Keep exports with version tags
- Share with Team - Use export/import to collaborate
- Document Changes - Note modifications in separate doc
- Backup Configs - Store exports in version control system
- All user inputs are sanitized using
escapeHtml()and context-specific sanitizers - CIDR and IP validation prevents injection attempts
- File imports are validated for correct structure
- All data stored in browser localStorage (client-side only)
- No data transmitted to external servers
- Clear localStorage on shared computers
- Don't include sensitive credentials in configurations
- Don't share exports containing private IP ranges publicly
- Review imported configs before applying
- Use prerequisites checklist to verify security requirements
Published under MIT License. This project is provided as-is, without warranty or support, it is intended for planning and automation example purposes. See official Azure documentation for deployment guidance and support.
Built for the Azure Local community to simplify network architecture planning and deployment configuration.
Version: 0.16.01
Last Updated: February 2026
Compatibility: Azure Local 2506+
For questions, feedback, or support, please visit the GitHub repository or consult the official Azure Local documentation.
For detailed changelog information, see CHANGELOG.md.
- Sizer: Standardised Disk Size Dropdown: All disk size inputs replaced with dropdown selects using standard NVMe/SSD capacities (0.96, 1.92, 3.84, 7.68, 15.36 TB), eliminating invalid free-text entries
- Sizer: Delete Confirmation Dialog: Deleting a workload now requires confirmation, preventing accidental removal
- Sizer: Clone Workload: New clone button to duplicate a workload with all its settings
- Sizer: Estimated Power & Rack Space: Per-node power (W), total cluster power, BTU/hr, and rack units (including 2Γ ToR switches). Based on CPU TDP, memory DIMMs, data + OS disks, GPUs, and system overhead
- Sizer: AVD Custom Profile Validation: Warns if custom AVD RAM/vCPU or vCPUs/user values fall outside recommended ranges
- Sizer: Print Stylesheet: Improved print/PDF output β hides config panel, results full-width, page breaks avoided
- Sizer: Keyboard Accessibility: Escape closes modals; Tab focus trapped inside open modals; first input auto-focused
- Sizer: OEM Disclaimer: Subtitle updated to state the tool provides example hardware configurations only
- Sizer: vCPU Ratio Manual Override: Users can now manually change the vCPU Overcommit Ratio without auto-scaling overriding their selection. Auto-escalation is locked when the user manually sets the ratio, and resets when workloads are added or removed
- Sizer: AMD CPU Suggestion Tip: When Intel cores and sockets are maxed and compute utilization β₯80% (at baseline 4:1 ratio), a tip suggests AMD EPYC Turin as an alternative with higher core counts. Condition uses baseline 4:1 ratio so the tip persists even when auto-scaled to 5:1 or 6:1
- Sizer: AMD EPYC Turin Core Options: Updated AMD 5th Gen EPYC Turin to include 144, 160, and 192 cores per socket (maxCores: 192), reflecting the full Turin product line
- Sizer: Auto-Scaled Field Visual Indicators: Hardware fields that are auto-scaled now show a purple border glow animation and an "AUTO" badge on their labels, providing clear visual feedback on which settings were automatically adjusted
- Sizer: Capacity Label Renames: "Capacity Breakdown" renamed to "Capacity Usage for Workload"; sub-labels now include "- Consumed" suffix for clarity
- Sizer: Infrastructure_1 Volume Deduction: 256 GB usable capacity reserved by Storage Spaces Direct (Infrastructure_1 volume) is now deducted from overall usable storage in all capacity calculations, with a sizing note
- Sizer: Disk Bay Consolidation: When auto-scaling would fill β₯50% of available disk bays, the sizer now evaluates larger disk sizes and selects fewer, larger disks to leave bays free for future expansion, with a sizing note explaining the optimisation
- Sizer: Storage Limit Enforcement: Configurations exceeding 400 TB per machine or 4 PB per storage pool are now flagged with π« errors, a red warning banner, and export/Configure in Designer are blocked until corrected
- Sizer: Dead Code Cleanup: Removed unused dual parity option, dead functions, and consolidated resiliency constants
- Sizer: Power Estimate Core Scaling: CPU TDP in the power estimate now scales with the selected core count (40% base + 60% proportional), so reducing cores visibly reduces estimated power
- Sizer: Single Node Default Resiliency: Single-node clusters now default to Two-Way Mirror instead of Simple (No Fault Tolerance)
- Sizer: Cluster Type & Nodes Label Styling: Bolder weight, larger font, and primary text colour for Cluster Type and Number of Nodes labels
- Sizer: Disk Consolidation Count Fix: Fixed consolidation only increasing disk count β now bidirectional; stale counts no longer persist after page refresh/resume
- Sizer: Consolidation Note After Headroom: Fixed consolidation sizing note showing wrong disk count when headroom pass added extra disks
- Sizer: HTML Validation Fix: Encoded raw
&as&in the sizer heading
- Default Gateway Field Fix for Safari (#98): Fixed the Default Gateway input in Step 15 (Infrastructure Network) becoming unclickable on Safari. The field is now properly disabled/enabled alongside its sibling inputs, ensuring consistent compositing behaviour across all browsers.
- Dynamic Storage Networks for Switched Storage (#113): Switched storage configurations with more than 2 RDMA NICs now dynamically generate the correct number of storage networks, VLANs, and ARM storageNetworkList entries (up to 8 per Network ATC). Previously hardcoded to 2 networks regardless of NIC count.
- DIMM-Symmetric Memory Configuration (#119): Memory per Node is a dropdown with server-realistic DIMM-symmetric values (64, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096 GB) matching symmetric DIMM populations across 24 DIMM slots
- Expanded Disk Count Options (#119): Capacity Disks per Node and Cache Disks per Node dropdowns now include every value from 2β24 (capacity, all-flash) / 2β16 (capacity, hybrid) and 2β8 (cache), allowing any disk quantity
- Disk Size Auto-Scaling: When disk count reaches 24 and storage is still insufficient, auto-scale steps up disk size through standard capacities (0.96, 1.92, 3.84, 7.68, 15.36 TB) with 80% headroom
- CPU Sockets Capped at 2: Removed 4-socket option β Azure Local OEM certified hardware supports 1 or 2 sockets at this time
- Configurable vCPU Overcommit Ratio: New Advanced Settings section with selectable vCPU-to-pCPU ratio (1:1, 2:1, 4:1, 5:1, 6:1) β replaces the hardcoded 4:1 assumption, allowing users to match their hypervisor density policy
- GPU Model Granularity: GPU type dropdown now lists individual NVIDIA models (A2, A16, L4, L40, L40S) with VRAM and TDP per model, shown in results and export β select 0, 1, or 2 GPUs per node
- Intel Xeon D 27xx (Edge): Added Intel Xeon D-2700 (Ice Lake-D) CPU generation for edge/rugged deployments (4β20 cores, DDR4-3200)
- Minimum 2 Capacity & Cache Disks: Disk count minimums raised from 1 to 2, matching Azure Local system requirements
- Hybrid Disk Chassis Limit: Cache disks capped at 8, hybrid capacity disks at 16 (total 24 drive bays per 2U chassis, 1:2 cache-to-capacity ratio)
- Mixed All-Flash Disk Chassis Limit: Same 24 drive bay constraint for mixed all-flash (NVMe cache + SSD capacity). Sizing note recommends single-type all-flash for increased capacity
- Single-Node All-Flash Only: Single-node clusters now block hybrid storage β only all-flash is supported
- Cache Metadata Overhead Note: Sizing notes show 4 GB RAM per TB of cache capacity for storage metadata
- 400 TB Per-Machine Warning: Sizing note warns when raw storage exceeds 400 TB per machine
- 4 PB Cluster Cap Warning: Sizing note warns when total cluster raw storage exceeds 4 PB (4,000 TB)
- Network Bandwidth Note: Sizing note recommends RDMA-capable NICs with 25 GbE+ for storage traffic
- Boot/OS Drive Note: Sizing note calls out minimum 200 GB boot drive (400 GB+ for systems with >768 GB RAM)
- Cluster Size Capacity Bar: New "Azure Local hyperconverged instance size" visual bar in Capacity Breakdown showing physical node count out of 16 maximum, with N+1 servicing and redundancy note
- Rack-Aware Cluster Size Bar: Cluster size bar dynamically adjusts maximum from 16 to 8 nodes when Rack-Aware cluster type is selected
- vCPU Ratio Auto-Escalation: When compute β₯90% and CPU cores/sockets are maxed, the overcommit ratio auto-escalates from 4:1 β 5:1 β 6:1 with a red warning in sizing notes
- Sizer-to-Report Data Flow: vCPU ratio, GPU model, future growth, and cluster type now carry through from Sizer β Designer β Configuration Report
- Updated Auto-Scale Logic: Hardware auto-scaling steps through DIMM-symmetric memory options and disk counts instead of arbitrary increments
- ODIN Sizer (Preview): New hardware sizing tool to calculate cluster requirements based on workload scenarios (VMs, AKS, AVD), resiliency, and capacity needs
- Sizer-to-Designer Integration: "Configure in Designer" button transfers hardware config into the Designer wizard, auto-populating Hyperconverged, Azure Commercial, East US, cluster type, and node count
- "Unsure? Start with Sizer" Links: Steps 04 and 05 in the Designer now include navigation links to the Sizer
- Hardware in Configuration Report: Conditional Hardware Configuration section in reports when imported from Sizer
- Sizer Session Persistence: Auto-save/resume with localStorage, matching the Designer pattern
- Auto-Sizing Engine: Intelligent node and disk scaling based on workload compute, memory, and storage requirements β favours scaling up CPU cores, memory (up to 1 TB), and disks per node before adding nodes
- Capacity Utilization Guard: Blocks configurations when Compute, Memory, or Storage utilization β₯ 90% with visual warning and disabled Designer button
- Hybrid Cache-to-Capacity Ratio: Hybrid storage enforces 1:2 cache-to-capacity disk ratio (e.g., 6 cache + 12 HDD)
- Hardware Configuration Panel: CPU manufacturer/generation/cores/sockets, memory, and tiered storage configuration
- Export Options: Save as PDF and Word export for sizer results
- Edit Workloads: Edit existing workloads via cog icon on workload cards
- Official Azure Icons: VM, AKS Arc, and AVD workload types use official Azure service icons
- ODIN Favicon: Browser favicon (ODIN logo) across all pages
- Clean Navigation URLs: Internal links use folder paths instead of explicit index.html
- AVD Session Type: Multi-session (shared VMs) / single-session (dedicated VM per user) dropdown with session-type-aware specs aligned to Microsoft session host sizing guidelines
- AVD Heavy Profile: New workload tier for engineers and content creators (per MS session host sizing guide)
- AVD Max Concurrency %: Default 90% β reduces compute/memory sizing for realistic peak loads; auto-hidden for single-session (always 100%)
- AVD FSLogix Profile Storage: Optional checkbox + per-user GB (default 30 GB) for user profile container storage
- AVD Knowledge Links: Links to AVD for Azure Local architecture guide and session host sizing guidelines
- AVD Simulation Tools Note: Recommendation to use LoginVSI for stress testing
- AVD Max Density Indicator: Shows users/vCPU for multi-session or "Dedicated VM per user" for single-session
- 2-Way Mirror Warning: Recommendation banner when 2-way mirror is selected on a standard 3+ node cluster
- 80% Headroom Auto-Scale: Automatically bumps CPU cores/sockets and memory when capacity bars exceed 80%
- Resiliency Note Wording: Clearer descriptions for 2-way mirror (fault domain detail), 3-way mirror (fault domain detail), and 4-way mirror (rack-level nested mirror)
- vCPU Ratio Note: Updated to "vCPU calculations assume 4:1 pCPU to vCPU ratio"
- High-Memory Note: Updated to "Large memory system: Requires 400 GB+ or larger OS disks for supportability"
- N+1 Storage Tip: Removed misleading storage maintenance sentence
- 310 Unit Tests: Expanded test suite with 6 new AVD profile assertions
- Report Diagram Port Labels (#93): Added missing
portsvariable inrenderSwitchlessStorageDiagram()so adapter mapping resolution loop can iterate; diagram now shows correct port assignments
- 2-Node Switchless Storage VLANs (#93):
getStorageVlanOverrideNetworkCount()now returns 2 for 2-node switchless, exposing both VLAN ID fields (711, 712) in overrides UI, ARM template, and summary - Report Diagram Port Labels (#93): 2-node switchless diagram now reads actual port assignments from
state.adapterMappinginstead of hardcoding Port 1,2 β Mgmt+Compute and Port 3,4 β Storage
- Summary Blade NIC Mapping (#88): Summary blade now reflects custom adapter mapping after confirmation
- Character Encoding (#103): Fixed 106 corrupted UTF-8 characters in Configuration Report diagrams and legends
- Storage Subnet CIDRs (#99): SVG diagram legends now show correct Network ATC default subnets (10.71.x.0/24) when Auto IP is enabled
- draw.io Orthogonal Routing (#94): Switchless storage connectors use L-shaped routing with dedicated lanes per subnet
- Canonical Switchless Ports: Forces correct port allocation for switchless mesh connectivity
- Report-Only Export: draw.io download button removed from wizard, available only on Configuration Report
- Mermaid Export for mermaid.live (#94): Fixed exported Mermaid code failing on mermaid.live because it was wrapped in markdown code fences. Added separate "Copy for Mermaid.live" (raw) and "Copy for Markdown" (fenced) buttons in both the main tool and the Configuration Report.
- NIC Mapping to Intent (#88): Fixed adapter assignment ignoring RDMA on Low Capacity scale
- Safari Drag-and-Drop (#88): Fixed adapter mapping flip-flop caused by click firing after drag
- Mobile-Responsive Navigation (#87): Nav bar collapses to icon-only on mobile portrait; onboarding card scrollable
- Mermaid Diagram Export (#86): Copy or download network diagrams as Mermaid markup with intent grouping and switchless subnet connections
- Touch Device Support: Tap-to-select fallback for adapter mapping on mobile/touch devices
- 215 Unit Tests: Expanded test suite with NIC mapping regression coverage
- ARM Storage Adapter Naming (#74): Fixed ARM template adapter naming for StorageNetwork1/2
- Switchless Intent Adapter Names: Fixed
intentListusingSMB Ninstead ofPort Nfor switchless storage - VLAN Defaults (#75): Fixed empty string VLAN values producing invalid VLAN ID 0
- NIC Speed (#76): Removed forced 10 GbE speed override on single-node clusters
- IP Validation (#78): Node IPs and DNS reject network/broadcast addresses
- Default Gateway Validation: Fixed gateway validation warning on resume/load
- Storage VLAN Placeholders: Fixed
REPLACE_WITH_STORAGE_VLANin ARM output for custom intent with adapter mapping - Port Name Consistency: ARM adapter names match wizard display names
- Shared Navigation Bar: Centralized nav component across all pages with Feedback link
- 198 Unit Tests: Expanded test suite with regression coverage
- Markdown Report Export: Download the Configuration Report as a Markdown file with embedded network diagrams for documentation or version control
- Custom Intent Diagram Grouping: Fixed network diagram to properly group adapters by intent when using custom intent configurations with non-contiguous port assignments
- Duplicate Adapter Name Validation: Prevents duplicate adapter names in port configuration with visual feedback
- GitHub Actions CI/CD: Automated build validation pipeline with ESLint, HTML validation, and 136 unit tests
- Light Mode Input Fix: Fixed node name, IP, and DNS input fields showing white text on light theme backgrounds
- Project Restructured: Cleaner folder organization (arm/, report/, css/, js/, tests/, scripts/)
- Phase 2A Modularization: Extracted formatting, validation, and DNS functions into dedicated modules
- 136 Unit Tests: Comprehensive test coverage expanded from 34 to 136 tests
- Adapter Names Preserved: Importing ARM templates preserves adapter names from the template
- Single-Node Diagram: Fixed diagram not displaying for single-node deployments
- Management + Compute Adapters: Fixed adapters not loading when importing ARM templates
- Modular JavaScript: Extracted utilities into separate files (utils.js, theme.js, notifications.js, analytics.js)
- Diagram NIC Labels: Improved label positioning for all cluster diagram types
- Private Endpoints Import: ARM import dialog now asks about Private Endpoints configuration
- Theme Fixes: Fixed disclaimer banner, nav bar, sizer dropdowns, progress bar, breadcrumbs, and summary panel theme support
- Sizer Preview Badge: Added "Preview" badge on Sizer tab
- Theme Toggle: Added theme toggle button to navigation bar on all pages
- Tab Navigation System: New top navigation bar with Designer, Knowledge, and Sizer sections
- Session Persistence: Active tab state persists during browser session
- Private Path Documentation: Architecture diagrams for Public Path vs Private Path (ExpressRoute)
- Private Endpoints Selection: Wizard step for selecting Azure services with Private Link
- Storage IP Display: Various fixes for storage adapter IPs, switchless configurations, and subnet display
- Configuration Report: Fixed security settings display in reports
- Storage Intent: Single-node clusters now support all storage intent options
- OU Path Auto-Population: Pre-filled from wizard values
- Import Options Dialog: Prompts for Arc Gateway, Proxy, and SDN settings
- Step-by-Step Instructions: Improved guidance for Azure Portal deployment
- Alphabetized Regions: Commercial regions in alphabetical order
- Knowledge Links: Added documentation links throughout wizard
- Custom Adapter Mapping: Fixed ARM output and diagrams
- DNS Server Display: Fixed after ARM import or session resume
- Import/Export: Import ARM templates directly from Azure Portal exports
- Complete Templates: All 5 example templates include full configurations
- Firebase Analytics: Optional usage tracking
- Deploy to Azure Button: One-click deployment to Azure Portal
- ToR Switch Selection: Single or Dual ToR options
- AD OU Path: Organization Unit path configuration
- Auto-Scroll Toggle: Control automatic navigation
- Cloud Witness: Automatic configuration based on cluster topology
- Auto-Save & Resume: Browser localStorage persistence
- Export/Import: Share configurations as JSON files
- Cost Estimator: Rough monthly cost estimates
- CIDR Calculator: Built-in subnet calculator
- Real-time Validation: Instant input feedback