Releases: byte4geek/switch-dashboard
Release list
Release 2026.6.4
Release 2026.6.4: Interactive Column Sorting, Live Countdowns, & Concurrency / Proxy ARP Fixes 🚀🕸️⏱️
Welcome to Release 2026.6.4 of the Switch Dashboard! This release introduces critical scanner optimizations, interactive column sorting, real-time sync countdown timers across all dynamic pages, and highly requested concurrency options for network discovery.
🌟 What's New in v2026.6.4
1. 🔀 Interactive Column Sorting (Subnet Scanner)
- Multi-Type Sorting: Added interactive sorting (ascending/descending) on all scanner columns.
- IP Addresses: Scans are sorted numerically by octets.
- Status: Sorted alphabetically (
ONLINE/OFFLINE). - Dates & Times: Sorted chronologically (
First Seen,Last Seen Online,Last Updated). - Alphanumeric: Natural sort order (case-insensitive) for Hostnames, MACs, Vendors, and Notes.
- Visual Indicators: Clickable headers render arrow indicators (
▲/▼) next to the active sorting column. - Drag Protection: Header clicks are ignored if the user is currently resizing columns.
2. 🛡️ Proxy ARP / VPN IP Overwrite Protection & Deletion Reset
- Proxy ARP Override Guard: Prevents multi-IP MAC addresses (such as Fritz!Box gateways responding for local virtual WireGuard VPN tunnels) from overwriting the primary IP address (like
.1for the router). - Ascending Scan Priority: Scanned host IPs are ordered numerically before insertion, guaranteeing that lower/primary IPs are processed first.
- Clean Deletion Reset: Deleting a client host sets
scanner_detected = False. Upon the next network scan, the scanner performs a fresh resolution to the primary gateway IP, ignoring subsequent VPN alias responses (like.200or.201) as long as the primary IP is reachable.
3. ⚙️ Discovery Concurrency & Timeout Customization
- Parallel Host and Port Scanning: Implemented a multi-threaded host scanner pool (
scanner_host_scan_threads) using aThreadPoolExecutorto scan multiple hosts concurrently. Ports are also scanned concurrently per-host (scanner_port_scan_threads). - Configurable Timeout (ms): Added a custom millisecond timeout setting (
scanner_port_scan_timeout_ms, default500ms) for TCP port checks, allowing fast port scans. - Web UI Controls: Added Host/Port Concurrency and Timeout parameters directly to the settings page
/config.
4. ⏱️ Live Auto-Refresh Countdowns & Smart Pausing
- Seconds Countdown: Replaced static status labels with active 1-second interval countdown timers (e.g.
Live (update in 25s)) on the Dashboard, Network Scanner, and Network Map. - Smart Pausing:
- Dashboard/Scanner: Polling and countdowns pause and show
Pausedwhile editing note/nickname input cells to prevent updates from overwriting user typing. - Network Map: Displays a header status dot and countdown. The countdown pauses automatically if the user focuses on sidebar search or inspect detail input/selectors.
- Dashboard/Scanner: Polling and countdowns pause and show
- Strict Syncing: Routed all AJAX fetches directly through the 1-second countdown clock, ensuring perfect alignment.
5. 🎨 Styling Alignment & API Overhaul
- Dark Mode Scrollbars: Integrated custom dark scrollbars and native dark browser settings (
color-scheme: dark) in/scanner/historyto match dashboard styles. - API Reference Overhaul: Documented all missing endpoints (Scanner, Clients, System Logs, and Topology) in the interactive
/api-docsinterface.
💾 Installation & Upgrading
Using the Automated Installer (Debian/Ubuntu/RHEL)
To pull the latest release and run the auto-installer:
cd switch-dashboard
git pull
sudo bash install.shUsing Docker Compose
Simply pull the updated image and recreate the containers:
docker compose pull
docker compose up -d --force-recreate🛠️ Detailed Changelog
- [app.py]: Bumped
VERSIONto"2026.6.4". - [app.py]: Implemented
ThreadPoolExecutorfor parallel host scans inupdate_scanner_state_in_config. - [app.py]: Updated
/configPOST and GET handlers to support host/port concurrency and millisecond timeout settings. - [app.py]: Added numeric IP sorting and was-detected override protection checks during scanning.
- [templates/config.html]: Added "Host Scan Concurrency", "Port Scan Concurrency", and "Port Scan Timeout" input fields.
- [templates/index.html]: Replaced
setIntervalwith a 1-second countdown loop (startCountdown()) and integrated pause/resume triggers. - [templates/scanner.html]: Implemented header sorting event listeners, arrow indicators, and a 1-second countdown loop with dynamic intervals.
- [templates/map.html]: Added a status pill and countdown in the header, pausing automatically when details sidebar fields are focused.
- [templates/scanner_history.html]: Styled tables and scrollbars to match the premium dark theme.
- [templates/api_docs.html]: Added detailed route cards for all 21 REST API endpoints.
- [README.md]: Added Release 2026.6.4 entry to the Changelog section.
Release 2026.6.3
Release 2026.6.3: Draggable Node Reordering, Unified Port Speeds, & Request Retry Tuning 🚀🔌⏱️
Welcome to Release 2026.6.3 of the Switch Dashboard! This release brings major quality-of-life updates, including drag-and-drop node sequence customization on the configuration page, unified network port speed formatting across all switch types, and customizable HTTP query retries with fast-failing on 404 client errors.
🌟 What's New in v2026.6.3
1. ⠿ Custom Node Reordering via Drag-and-Drop
- Draggable Nodes: Added the ability to reorder nodes (Switches and Routers) directly on the
/configpage by grabbing the draggable grab handle⠿. - Form Synchronization: Moving a node dynamically recalculates form indexes, hidden field states, and checkboxes in real-time.
- Persistent Ordering: Submitting the form saves the new node order to
config.json. The main index page (/) automatically renders the nodes in the exact sequence you configured.
2. 🔌 Unified Port Speed Formats
- Cross-Node Normalization: Standardized port speeds across Open vSwitch (OVS), Fritz!Box, and Managed Switches.
- Visual Alignment: Raw speeds such as
2500M,1000M,10Mare unified into standard2.5G,1G, and10Mrepresentations, matching the Virtual Switch (OVS) naming scheme.
3. ⏱️ Configurable Request Retries & HTTP 404 Fail-Fast
- Max Request Retries Option: Added a
Max Request Retriesparameter to the General Settings card on the/configpage. Users can adjust how many times the background scraper attempts to poll a switch upon request failure. Setting this to0disables retries completely (only tries once). - HTTP 404 Fail-Fast: The scraper now instantly raises an exception and aborts further attempts if a remote URL returns
HTTP 404 Not Found(such as/dhcp_snooping.cgion unsupported hardware). This prevents thread-blocking, polling lag, and missing throughput charts caused by retry wait-times.
💾 Installation & Upgrading
Using the Automated Installer (Debian/Ubuntu/RHEL)
To pull the latest release and run the auto-installer:
cd switch-dashboard
git pull
sudo bash install.shUsing Docker Compose
Simply pull the updated image and recreate the containers:
docker compose pull
docker compose up -d --force-recreate🛠️ Detailed Changelog
- [app.py]: Bumped
VERSIONto"2026.6.3". - [app.py]: Configured GET/POST route handlers to support the
max_request_retriesconfiguration setting. - [app.py]: Instantiated switch scrapers with the user-configured
max_retriesvalue in the caching thread loop. - [app.py]: Implemented
unify_speed()helper function insideupdate_cache()to translate raw switch bit speeds to standard formats. - [scraper.py]: Updated
_open_request_with_retryto honor custom retries setting and immediately raise exceptions on HTTP 404 errors. - [templates/config.html]: Added "Max Request Retries" number field input to the General Settings card.
- [templates/config.html]: Integrated HTML5 drag-and-drop reordering with a custom grab indicator handle
⠿and active dynamic index recalculation script. - [README.md]: Added Release 2026.6.3 entry to the Changelog section.
Release 2026.6.2
Release 2026.6.2: Network Topology, Virtual Switches (OVS), Custom Device Types, & UI Refinements 🕸️🔌🎛️
Welcome to Release 2026.6.2 of the Switch Dashboard! This release introduces advanced network virtualization support for Open vSwitch (OVS) and Proxmox VE hosts, customizable device type icons, port graphic wrap styling, resizable MAC table columns, and structural unmanaged switch groupings on the live network topology map.
🌟 What's New in v2026.6.2
1. 🎛️ Open vSwitch (OVS) & Proxmox VE Integration
- OVS Telemetry Scraper: Native support for virtual switches running on Proxmox VE hosts, scraping interfaces, active ports, packet statistics, and the FDB forwarding database via SSH.
- Port Speed Formatting: Optimized speed calculations to correctly parse and format fractional ports, displaying virtual/physical speeds (like
2500Mbps) as2.5Ginstead of rounding issues. - Proxmox OVS Setup Documentation: Added a comprehensive, step-by-step setup guide to the main
README.mdcovering system packages (openvswitch-switch), Proxmox Web GUI network configurations, and setting up the restrictedovs-monitorSSH system user with safe passwordless sudo permissions.
2. 🕸️ Interactive Network Map & Structural Topology
- Unmanaged & Virtual Switch Grouping: Support for mapping unmanaged switches to physical parent switch ports. Downstream clients are automatically branched under the unmanaged switch node.
- Node Alignment & Badge Routing: Implemented Bezier curve equations to route network cables, anchoring port badges precisely along lines during node drags.
- Auto-expanded Node Cards: Dynamically scales card dimensions based on active client names and sublabels on the map.
- Disabled Switch Filter: Disabled switches (and their child nodes) are hidden from the map and index dashboard, skipping telemetry polling threads.
3. 🔌 Dynamic Client Device Types & Custom Icons
- Iconify & SVG Path Support: Device types defined in
device_types.yamlsupport both Iconify classes (e.g.icon: "mdi:cellphone") and custom inline SVG paths (e.g.path: "M10 20 L30 40 Z"). - Batch Loading & Fallbacks: Iconify icons are requested in parallel batch requests to reduce frontend page loading times, with automatic fallbacks for unrecognized types.
- Editable via Settings: Manage your custom device types configuration dynamically.
4. 🎨 UI Wrap Layouts & Resizable MAC Tables
- Port Graphic Wrapping: Added a configurable Ports Row Wrap Threshold general setting. Switch port indicators wrap into multiple stacked rows if their count exceeds this limit (highly useful for OVS virtual bridges with large numbers of interfaces).
- Resizable MAC Table Columns: MAC Address table columns are now fully resizable by dragging header borders. Sizing configurations are saved persistently on the server.
- Adaptive Inputs: Host/Nickname text boxes scale to
width: 100%of the column, adjusting dynamically when column margins are resized.
💾 Installation & Upgrading
Using the Automated Installer (Debian/Ubuntu/RHEL)
To pull the latest release and run the auto-installer:
cd switch-dashboard
git pull
sudo bash install.shUsing Docker Compose
Simply pull the updated image and recreate the containers:
docker compose pull
docker compose up -d --force-recreate🛠️ Detailed Changelog
- [app.py]: Bumped
VERSIONto"2026.6.2". - [app.py]: Implemented
ports_wrap_thresholdparameters routing, validation, and serialization. - [scraper.py]: Modified OVS speed parsing for fractional speeds (
2500Mbps ->2.5G). - [templates/index.html]: Added
.mac-tablelayout fixed styles, resizer handles, and layout resize event handlers. - [templates/index.html]: Implemented port graphic wrapping math inside
renderSwitch. - [templates/config.html]: Added General Settings input for
Ports Row Wrap Threshold. - [README.md]: Documented Proxmox OVS installation steps and user setups.
Release 2026.6.1
Release 2026.6.1: Dynamic MAC Resolution, Column Interactions, & Grid Layouts 🌐🎛️
Welcome to the Release 2026.6.1 of the Switch Dashboard! This release brings a massive set of features focusing on customized layout management, interactive table customization, and dynamic network device intelligence (MAC vendor mapping).
🌟 What's New in v2026.6.1
- 🌐 Dynamic MAC Address Vendor Resolution
Official IEEE Registry Matching: The dashboard now automatically scans and resolves MAC addresses to official manufacturers using standard IEEE OUI files (oui.txt and oui36.txt).
Custom Local Overrides (mac_vendors.txt): You can now define custom vendor names for local MAC address prefixes. The editor is fully integrated as a text box directly inside the /config page.
IEEE OUI Update Downloader Card: Trigger manual database updates directly from the settings page.
IEEE Query Warning: Added a prominent notice box regarding IEEE query limitations (limited to one download per day to prevent IP blocklist bans).
Startup Constraints: The server will only download OUI database files on startup if they are missing locally. If they are already present, no startup query is made. - 🎛️ Interactive Table Actions
Interactive Column Drag-and-Drop Reordering: Rearrange dashboard table columns dynamically to custom structures. Layout configurations are persisted directly to browser cookies.
Interactive Column Resizing: Adjust table columns by dragging margins. Width states are saved to browser cookies.
Auto-wrap Columns: Prevents text clippings and overflow when columns are sized narrow by auto-wrapping cell content. - 🎨 Layout Grid & Column Configurations
Switches Per Row Selection: A new general setting dropdown in the configuration page allows users to force layouts into Auto (responsive), 1, 2, 3, or 4 columns side-by-side.
Column Visibility Toggles: Enable or disable specific columns (e.g. port, speed, notes, raw traffic bytes) dynamically from /config. - 📖 API Docs Reference Upgrades
Fully documented new vendor endpoints (POST /api/vendors/update_oui and GET/POST /api/vendors) in the built-in local /api-docs section.
💾 Installation & Upgrading
Using the Automated Installer (Debian/Ubuntu/RHEL)
To pull the latest release and run the auto-installer:
cd switch-dashboard
git pull
sudo bash install.sh
Using Docker Compose (Recommended)
Simply pull the updated image and recreate the containers:
docker compose pull
docker compose up -d --force-recreate
🛠️ Detailed Changelog
[app.py]: Bumped VERSION to "2026.6.1".
[app.py]: Optimized OUI files startup downloads checking existence of files individually.
[config.html]: Added styled card for OUI Registry manager with query warnings, update buttons, and custom JS.
[api_docs.html]: Updated documentation schema with vendor APIs.
[README.md]: Documented vendor lookup endpoints and added release details to the global log history.
2026.5.3
v2026.5.2
Release Notes: v2026.5.2 (Docker Deployment & Persistent Storage)
We are proud to release v2026.5.2 of the Switch Dashboard, introducing native Docker & Docker Compose containerization and standardizing persistent data structures for bulletproof, containerized deployments.
🐳 Dockerization & Portability
Official Dockerfile: A lightweight containerized setup built on top of python:3.11-slim that isolates the entire Python environment, reducing host package management overhead.
Unified docker-compose.yml: Simplifies multi-container network configuration. Out-of-the-box support for custom port remappings (e.g., host 8081 to container 8080) to seamlessly coexist with other services on the host.
💾 Unified Persistent Data Mapping
Environment Configuration: Introduced the DASHBOARD_DATA_DIR environment variable to configure the storage directory (defaults to /data inside the container).
Consolidated State Storage: All configuration, telemetry, history, and backup files are saved in the same directory:
config.json (switches)
settings.json (user interface preferences)
notes.json (custom port descriptions)
counters.json (cumulative interface data)
history_hourly.json & history_daily.json (rolling bandwidth metrics)
/backup/ (on-demand binary switch configuration backups)
Host Volume Persistence: Mount a single host folder (e.g. -v ./data:/data) to retain all metrics and user preferences permanently across container restarts, builds, or migrations.
🛡️ Auto-Initialization Safeguard
Empty Directory Detections: When mounting empty folders or fresh volumes, the dashboard automatically detects the absence of configurations and copies the bundled default config.json configuration file.
Resiliency: This prevents container crash loops due to missing files and ensures the user can immediately access the settings page /config to configure their switches via the Web UI.
📦 Robust Absolute Resource Pathing
Absolute Asset Resolution: Refactored Flask's initialization inside app.py to bind both template_folder and static_folder to absolute file pathways resolved dynamically at startup.
Render Guarantee: Eliminates any relative directory mismatch bugs or rendering errors (TemplateNotFound) regardless of the working directory or container runtime layer.
🔬 Service Integration & Compatibility
Standard Deployments Unaffected: The path resolution falls back cleanly to the local directory when DASHBOARD_DATA_DIR is not set, meaning existing virtual env or systemd LXC deployments (like the one running on IP 192.168.1.32) continue to run smoothly with zero adjustments.
v2026.5.1
🚀 Release Notes - Version 2026.5.1
We are proud to announce the release of Switch Dashboard v2026.5.1! This version introduces multiple advanced switch management controls, premium visual enhancements, and robust network security tracking for HORACO and OEM compatible managed switches.
🎨 What's New in v2026.5.1
- Advanced Administrative Port Visuals & Contrast
Distinct Port Highlighting: Ports that are administratively disabled in /port.cgi now render with a dedicated dark-grey (#353c45) in the top panel's graphical view, visually distinguishing them from regular offline ("Down") ports (#57606a).
Legend Update: Added the new Disabled status badge and color swatch directly into the dashboard's PORT STATUS legend.
- Live Switch Reboot Controls
On-Demand Power Cycling: Safely reboot your switch hardware directly from the settings panel.
Premium Glassmorphic Confirmation Modal: Protects against accidental disconnects with a stunning frosted glass warning card, complete with a live API status spinner and error notifications.
- Server-Side Configuration Backups Manager
Config Archiving: Trigger secure binary backups (.bin) that download directly to the server's disk storage using customized HTTP CGI headers.
Interactive Backups Panel: Manage all saved backups at /backups with quick options to download or permanently delete old configs under glassmorphic modal confirmation windows.
- DHCP Snooping & IGMP Multicast Table Telemetry
Security & Port Tracking: Global DHCP Snooping status displays (🟢 Active / ⚪ Inactive) with custom trusted and untrusted port badges.
Collapsible IGMP Group Tables: Scrapes and renders active IGMP Snooping multicast tables (/igmp.cgi?page=dump) in an expandable card.
- Jumbo Frame Properties Telemetry
Selected Frame Size: Scrapes and extracts active Jumbo Frame status and the exact configured size (e.g., 9216Bytes).
- Visual Harmonization & API reference
Port Speed Colors: Speed values in the port table (colonna speed) are now color-coded matching their graphical counterparts in the legend.
API Documentation Explorer: Documented the new backups and reboot REST endpoints in /api-docs.
🔒 Enhancements & Fixes
Microcontroller Parsing Fixes: Added advanced parser defenses in scraper.py using non-recursive BeautifulSoup scraping to bypass unclosed HTML tags and malformed tables from switch microcontrollers.
Persistent Counter Reset: Added Baselines verification during switch reboots to prevent traffic delta corruption.
TIP
To view the full developer documentation or copy curl examples, visit the locally hosted /api-docs explorer on your dashboard!