Skip to content

Releases: GNS3/gns3-gui

Version 3.1.0 alpha 5

Version 3.1.0 alpha 5 Pre-release
Pre-release

Choose a tag to compare

@grossmj grossmj released this 19 Aug 16:12
v3.1.0a5
25b905f

What's Changed

Full Changelog: v3.1.0a4...v3.1.0a5

Server changes

https://github.com/GNS3/gns3-server/releases/tag/v3.1.0a5

Version 2.2.61

Choose a tag to compare

@grossmj grossmj released this 30 Jul 12:14
v2.2.61
5182bc3

GUI

  • No changes

Server

  • Sync appliances
  • fix(import): unvalidated symlink creation in import_project
  • fix(qemu): fix addition of QEMU RNG device causes interface names to change
  • fix(qemu): remove trailing space from RNG object argument
  • fix: do not start nodes when deleting a project
  • fix: correct always-true state check in DockerVM.stop()

Version 2.2.60

Choose a tag to compare

@grossmj grossmj released this 15 Jul 16:55
v2.2.60
6c5f78c

GUI

  • feat(capture): implement live packet capture with internal tail
  • Add support for Ptyxis terminal. Fixes #3834

Server

  • Sync appliances
  • Only set IOU images to be executable when importing images
  • fix(import): project import does not move images symlinks into place
  • Search for system UEFI that is compatible with Python < 3.12
  • Add OVMF firmware directory configuration
  • Automatically add a Random Number Generator (RNG) device when using uefi option is enabled
  • fix(docker): handle container name conflict automatically
  • fix: gns3-server crashes on startup if "Open this project in the background" is active but there is a problem with that project
  • Handle HTTPNotFound exception when retrieving compute status
  • Fix: Check compute connectivity before open() during project deletion
  • API endpoints to manage base configuration files for templates

Version 3.1.0 alpha 4

Version 3.1.0 alpha 4 Pre-release
Pre-release

Choose a tag to compare

@grossmj grossmj released this 09 Jul 09:06
v3.1.0a4
efbb201

GUI

  • No changes

Server

  • Bundle web-ui v3.1.0a4
  • Add jwt_refresh_token_expire_minutes to sample configuration
  • Remove deleted web-ui files from git
  • .dockerignore ignore .dockerignore
  • typo made me reconsider and move out to env
  • defaulted DOCKERHUB_ORG repository variable
  • Remove API docs from 2.2 after merging
  • Update GitHub Actions workflows
  • Fix web-wireshark docker build broken by xpra 6.5 release
  • Update CI to install [ai-features,dev] instead of [ai-copilot,dev]
  • Make AI features (AI Copilot + MCP) optional via [ai-features] extra
  • Add refresh token mechanism documentation under docs/features/
  • Add /refresh to allowed public endpoints list in route auth test
  • Add stateless JWT refresh token mechanism
  • Add project/node/link handler tests: 39 total, covering list/get/create/delete/start/stop/suspend/reload/console/update/fields
  • Add MCP tool parameter consistency tests
  • Fix appliance_install: add version parameter
  • Add coordinate system note to docs
  • Document canvas coordinate system in node_create x/y params
  • Update docstring: batch concurrency from 10 to 100
  • Remove unused import time
  • Add list type check before nodes[0] access in _normalize_link_nodes
  • Add fields type validation in create handlers
  • Use pop() instead of pop(0) for O(1) port removal
  • Fix review issues: key_prefix length, count validation, WAL log, timeout comment, pointless temp var
  • Fix: pass name from TemplateUsage to add_node_from_template
  • Remove unused imports (logging, log, select)
  • Add warning for unconsumed pre-allocated UDP ports after link creation
  • Remove FIXME comment about middleware in server.py
  • Rename device_command_run_handler → device_show_run_handler to match tool name
  • Rename device_command_run → device_show_run for clarity
  • Fix device_command_run KeyError('commands'): tool desc said show_commands but backend expects commands
  • Fix template_list return type annotation to match _run_handler_sync envelope
  • Add performance optimization documentation
  • Update MCP service docs: API key format, auth flow, tool parameters, concurrency
  • Increase HTTP connection pool to 500/1000
  • Increase BATCH_MAX_WORKERS and Pool concurrency from 20 to 100
  • Remove final timing artifact in projects.py
  • Remove remaining dead timing variables and imports
  • Remove database warmup (proven ineffective - real bottleneck was bcrypt blocking event loop)
  • Clean up all timing/debug logs
  • Add memory: import validation best practice
  • Fix: add missing UUID imports
  • Generate fresh JWT on API key auth instead of returning raw key
  • Optimize API key auth: O(1) lookup via UUID-embedded key format
  • Fix: offload bcrypt.checkpw to thread pool to prevent blocking event loop
  • Add timing to API key auth path and log api_keys count
  • Replace SELECT 1 warmup with full database file read to warm OS page cache
  • Add timing logs to auth dependency chain to identify 6s pre-handler delay
  • Add granular timing to get_template: separate execute vs fetch time
  • Warm up database connection pool on startup to avoid 8s cold-start penalty on first API request
  • Fix: register WAL PRAGMA on sync_engine instead of Engine class for async compat
  • Add timing logs to get_template to identify DB query bottleneck
  • Add timing middleware to log slow requests (>1s) with [CTRL-TIMING] prefix
  • Fix: _time → time in compute.py timing log
  • Add [CTRL-TIMING] logs to controller create_node flow
  • Fix: pass template_id to batch mode handler so top-level template_id works as default
  • Add detailed timing logs to MCP node creation and HTTP client
  • Add fields filter to template_list tool with description for AI
  • Fix: add missing _filter_link_response function
  • Pass name parameter through to controller API when creating node from template
  • Add validation to compact link format with clear error messages
  • Add compact array format for link node entries to reduce token usage
  • Add fields filter to link_create tool
  • Reduce md5sum cache write failure log level from error to warning
  • Add fields filter to node_create tool description for AI
  • Optimize MCP create_node: support inherited template_id and default fields filter
  • Increase MCP HTTP client timeout from 10s to 30s
  • Enable SQLite WAL mode to fix 'database is locked' errors under concurrent API requests
  • Cache IOU image default values per image path to avoid redundant subprocess calls
  • Increase node and link creation concurrency from 5 to 20
  • Fix: revert IOU lock optimization, serialize IOU node creation for correct application_id assignment
  • Performance: accelerate project opening with parallel link creation and batch UDP port allocation
  • feat: Add batch link_ids to link_delete/link_reset, fields filter to link_list
  • feat: Add fields filter to link_list
  • feat: Add batch node_ids to node_delete
  • fix: Convert http to ws scheme in node_console WebSocket URL
  • feat: Add batch link_ids to link_capture_download
  • feat: Add batch link_ids to link_capture_start/stop
  • fix: Store username in gns3_ctx during auth, use for short-lived download JWTs
  • fix: Generate independent short-lived JWT for pcap download
  • revert: Remove _configs_map changes in tools_v2 (handled by template renderer now)
  • fix: Merge commands for duplicate device_names in _configs_map
  • fix: Actually pass template param to device_config/command handlers
  • fix: Correct Jinja2 template commands_field per tool type
  • feat: Jinja2 template support in device_command_run
  • feat: Jinja2 template support in device_config_send
  • feat: Add batch node_ids support to node_start/stop/reload/suspend
  • feat: Add fields filter to appliance_list
  • feat: Add fields filter to node_list
  • feat: node_get fields filter — match controller Node schema fields
  • fix: Set auto_close=False on project_create so projects stay open when clients disconnect
  • feat: Add batch mode to node_create and link_create (parallel, max 10 workers)
  • fix: Pass API key directly instead of generating short-lived JWT
  • feat: API key lifecycle — revoke/restore/delete
  • fix: Rename revoke_api_key → delete_api_key
  • fix: Hard-delete API keys instead of soft delete (revoked flag)
  • feat: Support API keys in REST API authentication (reuse gns3_ prefix keys)
  • fix: Lazily access db engine for API key validation
  • fix: Add missing updated_at column to api_keys table
  • fix: Export ApiKeyCreate from schemas package
  • feat: Add API Key support for MCP authentication
  • fix: Validate JWT token exp claim — was silently ignored after migration to joserfc
  • fix: Add image field to template_create, document type-specific params in description
  • fix: Remove .json() calls on 204 responses for prune/install images
  • fix: Skip always-running nodes in start_all/stop_all
  • fix: Add missing rotation parameter to drawing_update MCP tool
  • fix: Map MCP device_command_run parameter to tool's expected field name
  • fix: Update link_reset description to match actual behavior (delete + recreate)
  • fix: Remove unsupported description param from project_create
  • fix: Fix symbol_get/upload/delete handlers for correct API paths
  • feat: Log registered MCP tools at startup
  • fix: Type compute_id as uuid.UUID to reject non-UUID values at MCP input layer
  • fix: Require UUID for compute_get/images, remove 'local' string default
  • feat: Add device configuration MCP tools (config_send, command_run, vpcs_config_set)
  • refactor: unify MCP tool naming to _ convention
  • feat: Add symbol upload/delete, project load, and locked check MCP tools
  • feat: Add image management MCP tools
  • feat: Add symbol and appliance MCP tools
  • feat: Add node bulk ops, project lock, and server info MCP tools
  • feat: Add snapshot and drawing MCP tools
  • refactor: unify MCP handlers to use http_call directly, relocate node file ops to Node class
  • feat: Add node file operations as MCP tools (list, get, write, delete)
  • Add comment about rootful Docker permissions at container start
  • Fix _fix_permissions test: set process.returncode=0 and update assertion
  • Fix list_node_files PermissionError on os.scandir
  • Fix _fix_permissions error handling and list_node_files PermissionError
  • Add async_iterable_to_stream utility to avoid aiohttp compatibility issues
  • Add descriptive detail to 403 errors in compute file endpoints
  • Fix silent file write failure in write_compute_project_file
  • feat: Node file streaming, recursive listing, file type detection, and file delete
  • Update README tool descriptions: .txt → .md
  • Update README tool descriptions to mention Markdown format
  • Add MCP project tools: update, duplicate, and README operations

Version 3.1.0 alpha 3

Version 3.1.0 alpha 3 Pre-release
Pre-release

Choose a tag to compare

@grossmj grossmj released this 06 Jun 21:22
v3.1.0a3
2c81421

GUI

  • No changes (the web-ui is the most advanced interface)

Server

  • Bundle web-ui v3.1.0a3
  • fix: update MCP link tools descriptions with detailed filter info
  • fix: correct MCP nodes and links tool parameter handling for nested kwargs
  • fix: correct MCP template tool parameter handling for nested kwargs
  • feat: add client information logging to MCP connection rejection
  • refactor: replace MCP ready state polling with asyncio.Event
  • fix: revert duplicate image check to fix failing tests
  • fix (templates): Add ordering to handle the duplicate cases gracefully
  • fix(templates): Database error detected when saving a template with a disk image change
  • fix: return 503 error on MCP server ready timeout
  • fix: add MCP server ready check to prevent initialization errors
  • fix: resolve MCP server URL host via default route IP when bound to 0.0.0.0
  • fix: correct MCP transport security config to actually allow all hosts by default
  • feat: add configurable MCP transport security settings via gns3_server.conf
  • fix: add load_feature_skills() to properly load network planning features
  • refactor: convert all MCP tool parameter descriptions to Annotated+Field
  • fix: remove platformdirs upper bound to resolve fastmcp-slim dependency conflict
  • fix: add missing fastmcp dependency to resolve CI test failures
  • refactor: move all imports to top of init.py
  • test: add /v3/mcp/ to allowed public endpoints
  • fix: remove console_host/port from get_node_console_info
  • feat: add get_node_console_info tool
  • feat: add 3 Compute MCP tools - Add list_computes, get_compute, get_compute_images - Total MCP tools: 29
  • feat: add 5 Template MCP tools
  • feat: add Node and Link MCP tools, update copyright - Add 9 node tools and 5 link tools - Update copyright year to 2026, add author
  • feat: complete MCP SSE transport with JWT auth
  • feat: support Authorization header and query param for MCP token
  • feat: implement standard MCP protocol with SSE transport
  • feat: add MCP (Model Context Protocol) service with project tools
  • Add project memory: Docker container stop delay analysis
  • Fix Docker VM tests for container status detection on node creation
  • Add running project check for fast duplication
  • Move running project check before fast duplication
  • Add running project check for fast duplication
  • Fix Docker container status detection on node creation
  • Fix web-ui update script to handle custom GitHub URL changes
  • Fix unnecessary Docker container recreation when renaming a project
  • Fix project rename and duplicate issues
  • Fix double deletion issue in remove_resource_from_pool
  • Complete fix: delete resource records when deleting resource pool
  • Apply fix from PR #2315: delete resource from resource table when removing from pool
  • Remove deprecated 'PermissionsStartOnly' setting for Systemd service. Ref #1830
  • Optimize project loading by implementing parallel node creation
  • Fix delay filter validation: ensure delay: [0, X] returns proper error message
  • Fix packet filter validation tests: use correct ubridge filter type names
  • Update tests to match show_interface_labels default change
  • Set default value of show_interface_labels to True
  • Optimize project variable updates to use parallel node processing
  • Fix ghost Docker nodes causing 60-second VNC timeout on variable updates
  • Fix Docker container variable compatibility with Pydantic models
  • Fix delay latency minimum: ubridge rejects latency <= 0
  • Improve packet filter validation: use tcpdump, handle multi-line BPF, safe project load
  • Add packet filter parameter validation to prevent ubridge errors
  • feat: add mermaid-to-SVG conversion script with environment setup
  • perf: batch RBAC permission checking for GET /projects
  • test: add benchmark script for GET /projects performance testing
  • fix: prevent duplicate projects when user projects are in resource pools
  • fix: check both regular ACEs and resource pool ACEs for proper access control
  • test: update RBAC test to use test_user.username for user isolation
  • feat: add alembic migration for LLMConfig privileges
  • feat: add independent LLMConfig permissions for AI profile management
  • feat: remove resource pools from 'all endpoints' list
  • refactor: add efficient get_aces_for_path method for resource pool checks
  • feat: prevent deletion of resource pools used by ACE configurations
  • feat: fix permission check logic to properly handle ACE and user isolation
  • feat: implement layered permission checks for proper user isolation and sharing
  • feat: implement simple user isolation based on project ownership
  • fix: clean BPF syntax error message and specify loopback interface
  • feat: add BPF syntax validation using tshark
  • feat: add show_filters_icon parameter to packet filter tool
  • feat: add packet filter management tool for GNS3-Copilot fault injection
  • fix: update test_json expected output to include show_filters_icon field
  • fix: add getattr fallback to show_filters_icon property for backward compatibility
  • feat: add show_filters_icon property to Link for controlling Web UI filter icon display
  • fix: ensure show_filters_icon is always returned in API responses
  • feat: add show_filters_icon property to Link for controlling Web UI filter icon display
  • fix: remove explicit paramiko pin to resolve dependency conflict with netmiko
  • fix: update netmiko to 4.7.0 and pin paramiko>=5.0.0 to fix CVE-2026-44405
  • fix: close DockerHTTPClient session to prevent UnixConnector leak in Web Wireshark

Version 3.1.0 alpha 2

Version 3.1.0 alpha 2 Pre-release
Pre-release

Choose a tag to compare

@grossmj grossmj released this 12 May 16:38
v3.1.0a2
89b0e35

GUI

  • Remove psutil version check
  • Fix remaining PyQt6 compatibility issues. Fixes #3822
  • Add --title to remote-viewer console commands. Fixes #3783
  • Fix deleting drawings. Ref #3810

Server

  • Bundle web-ui v3.1.0a2
  • fix: surface tshark stderr errors to LLM, not just log them
  • fix: hint LLM about -c behavior when tshark returns empty with -c
  • fix: update search_fields examples to use existing field names
  • fix: reject multi-keyword search_fields, single keyword only
  • fix: document action/query params in PacketAnalysisTool description
  • feat: add search_fields action to PacketAnalysisTool for real-time field lookup
  • feat: validate tshark -e field names before running analysis
  • fix: document -c behavior caveat in PacketAnalysisTool description
  • fix: demote loader-level load logs to DEBUG, info already reported by manager
  • fix: promote skills/prompts load logs to INFO level
  • fix: load packet analysis protocols during skills initialization
  • feat: add PacketAnalysisSkillsTool
  • fix: remove remaining quoted example from tool input docstring
  • fix: use shlex.split for tshark_args parsing
  • feat: add packet analysis workflow to tool description
  • refactor: remove old PacketCaptureTool, replaced by PacketAnalysisTool
  • feat: add protocol-oriented packet analysis tool
  • docs: add roadmap docs for planned features
  • feat: require superadmin for /reload/skills endpoint
  • fix: remove background init timeout and allow skills reload retry
  • deps: add PyYAML and GitPython to ai-requirements.txt
  • feat: add fault injection system and external skills repository
  • fix: Disable DeepSeek thinking mode to avoid reasoning_content errors
  • fix: Skip offline compute nodes during project import
  • fix: Import status module in project.py
  • fix: Handle connection errors when stopping node console
  • refactor: Remove MD5 calculation from node files listing
  • fix: Export NodeFile schema to schemas module
  • feat: Add detailed metadata to node files listing
  • feat: Add API endpoint to list node files
  • Fix snapshot restore does not work after export/import of project
  • Warn to use 64-bit IOU images. Fixes #2716 32-bit IOU image support has been removed from the GNS3 VM.
  • Fix: Improve Docker container deletion error logging
  • Fix: Add exponential backoff to compute reconnection attempts
  • Fix: Check compute connectivity before node creation in open()
  • Fix: Check compute connectivity before open() during project deletion
  • Fix: Add error logging when closing/deleting projects on computes
  • Fix: Skip add_compute for existing computes when opening projects
  • feat: add AI provider config files to .gitignore
  • Fix: Use _computes instead of _project_created_on_compute for deletion check
  • Fix: Check compute connection status before project deletion
  • fix: extend remote compute image path conversion to all node types
  • fix: send relative image path to remote compute nodes
  • fix: handle directory access for static web-ui routes
  • fix: add duplicate name validation when updating templates
  • fix: avoid AttributeError when password is not provided in compute update
  • fix: improve hostname validation error messages with allowed characters
  • feat(compute): Fix Dynamips to listen on the internal port when ssh is used for auxiliary console
  • feat(compute): Fix ambiguous log message related to the active console transport.
  • feat(compute): Updated server host key to use the secure ssh-ed25519 instead of old ssh-rsa algorithm
  • feat(compute): Fix missing SSH wrapping for auxiliary console
  • feat(compute): Added AsyncioSSHServer dedicated tests
  • feat(compute): add SSH console type support
  • fix: include error details in LLM model config failure response
  • Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344)

Version 2.2.59

Choose a tag to compare

@grossmj grossmj released this 08 May 11:08
v2.2.59
84967d4

GUI

  • Remove psutil version check
  • Fix remaining PyQt6 compatibility issues. Fixes #3822
  • Add --title to remote-viewer console commands. Fixes #3783
  • Fix deleting drawings. Ref #3810

Server

  • Sync appliances
  • Fix snapshot restore does not work after export/import of project
  • Warn to use 64-bit IOU images. Fixes #2716 32-bit IOU image support has been removed from the GNS3 VM.
  • Fix telnet console silent-proxy hang on non-ConnectionError exit (#2344)

Version 3.1.0 alpha 1

Version 3.1.0 alpha 1 Pre-release
Pre-release

Choose a tag to compare

@grossmj grossmj released this 25 Apr 05:22
v3.1.0a1
4aab89a

GUI

  • Fix bug when an image checksum matches with another image filename
  • Refresh Ui & resources files
  • Copy GUI configuration from previous minor version
  • Change default disk names when creating Qemu disks
  • Fix QMenu parents
  • Fix UltraVNC preconfigured command
  • Fix bug when dragging scene
  • Implement Dark Style
  • Properly close image after uploading. Fixes #3736

Server

  • New completely revamped Web interface.
  • Add GNS3 Copilot AI agent back-end
  • Web-wireshark: packet capture and live traffic analysis in the browser
  • Fix using SSL with remote computes. Fixes #3733
  • Add --url and --branch parameters to update-bundled-web-ui.sh
  • Fix bug when custom_adapters is None in port_factory.py
  • Have optional body in start node API endpoint
  • Fix snapshots after merging
  • Potential fix for pull request finding 'CodeQL / Information exposure through an exception'
  • Refactored the way snapshots are handled in the server
  • fix(symbols): add authentication to symbol raw endpoint
  • fix(symbols): add CORS headers to symbol file responses
  • Allow to find new project in sub dirs
  • Enhancement: Refresh projects list without restarting the GNS3 server
  • Fix accessing username in authentication.py
  • Improved exception handling and telnet client disconnect
  • Use get method for registry_version to avoid KeyError
  • Add support for appliance format version 8
  • Convert database template fields from PickleType to JSON
  • feat(statistics): distinguish open vs closed project nodes
  • fix(statistics): handle closed projects where nodes/links are dicts
  • feat(controller): extend /statistics API with project, node and link stats
  • Use FastAPI Lifespan Events
  • feat(link): add control_offset field to LinkStyle
  • feat(symbols): add DELETE API for removing custom symbol files
  • Enhancement: Re-write current Telnet server implementation using telnetlib3 library
  • feat: improve error handling for API configuration errors
  • Enhancement Added link type support on the server side
  • Ignore HTTPException received when closing a project
  • Prevent router to be duplicated when running and add tests
  • Fixed issue #1605 regarding Cisco slots causing configs to break
  • feat: add VNC WebSocket console support for Docker and QEMU nodes
  • Return 405 error for unsupported actions for other node types
  • feat(telnet_server): improve error handling and connection management
  • fix(telnet): handle connection race condition during broadcast
  • Change first() to one_or_none() for image query
  • Fix for duplicating Qemu nodes
  • Minor optimizations to logic
  • Fixed an issue with the server causing errors when uploading large images + Preparation for a smarter check when uploading images
  • Implemented a smarter node_type system
  • docs: restructure copilot docs and update node tools
  • fix(acl): correct endpoint paths for users, groups, and roles
  • fix(iou): return 405 error for unsupported suspend operation
  • feat(api): enhance max_tokens field with robust null handling
  • feat(docs): add AI prompting guide for configuration templates
  • Deactivate 'use default IOU values' by default and update RAM/NVRAM values
  • Make sure the node shows as stopped when the wrap console cannot be stopped. Ref GNS3/gns3-registry#1010
  • chore: update author name and copyright headers
  • feat(docs): enhance AI chat API documentation with examples and details
  • feat: add .claude directory to gitignore for API key security
  • Revert "Fix QEMU serial console artifacts by filtering ANSI CPR responses in …"
  • docs: add troubleshooting guide for datetime timezone issue
  • Drop support for Python 3.9
  • feat: add multi-user concurrency control design document
  • docs: add troubleshooting guide for force kill residual processes
  • Fixed the path traversal check
  • Fix image handling
  • Qemu VMs: only compute MD5 checksums for existing disks
  • Copy config files and database from a previous version if it exists
  • Add enable_http_auth in gns3_server.conf sample
  • feat(compute): option to disable compute authentication
  • tests(controller,port): short_name finishes successfully when port name is None
  • fix(controller,port): handle None port name to prevent TypeError in short_name method
  • fix(docker): handle container name conflict automatically
  • feat(virtualbox): add fallback for VBoxManage executable detection
  • feat: simplify port name assignment logic
  • feat(ports): add null checks for port name in short name generation
  • Remove unneeded rbac_repo in get_templates
  • Use lists for tags instead of dicts
  • Fix for resizing Qemu VM disks
  • feat(templates): safely access settings dict keys
  • feat(api): fix ETag handling and JSON serialization in template endpoint
  • feat(api): add tag filtering to nodes and templates endpoints
  • Update project schema and fix tests
  • Add 'created_by' field to track project creator
  • Fix updating packet filters
  • Add vendor, model and netmiko_device_type fields to templates
  • fix: handle RuntimeError in notification_manager emit()
  • fix: busybox static link detection on Alpine/musl
  • Fix bug when updating compute password to be empty
  • Cancel tasks if controller cannot be started
  • Enable parallel compression with zstandard. Fixes #2324
  • Add Dynamips to Dockerfile dependencies
  • Take populated disks into consideration when calculating PCI device ID
  • Fix telnet keepalive options on macOS

Version 2.2.58.1

Choose a tag to compare

@grossmj grossmj released this 12 Apr 13:02
v2.2.58.1
1cf86ed

GUI

  • Fix callback issues in found in v2.2.58

Server

  • Sync appliances

Version 2.2.58

Choose a tag to compare

@grossmj grossmj released this 10 Apr 12:43
v2.2.58
0581373

GUI

  • Update snapshot date & time format
  • Fix bug when HTTP DELETE requests are silently dropped. Fixes #3810
  • Show if a linked base VM or not in device's properties
  • Add HTTP method to response timeout slot. Ref #3810
  • Add default link style section in preferences
  • Update the default style colors based on the interface style
  • Support bring to front for vnc and spice consoles on Linux. Fixes #3783
  • Update appliance schemas
  • Fix bug when adding multiple nodes at the same time. Fixes #3807
  • Fix QWebSocket error signal. Fixes #3804

Server

  • Bundle web-ui v2.2.58
  • Sync appliances
  • Snapshot refactoring