Important: License Change
This release changes the project license from Apache-2.0 to GPL-3.0-or-later. This means all derivative works must also be licensed under GPL-3.0-or-later and remain open source. If you were using this project under Apache-2.0, you may continue to use versions ≤0.1.1 under that license, but v0.2.0 and later are GPL-licensed.
Overview
This release represents a complete modernization of the project with breaking changes to improve maintainability, type safety, and usability both as a CLI tool and as a Python library.
Added
High-Level KVM Interface
- New
KVMclass inkvm.pyproviding type-safe, structured interface for library usage - Comprehensive data models using dataclasses for all KVM responses
- Generic
KVMResponse[T]wrapper ensuring type safety for all operations
Multi-Device Support
- Support for controlling multiple KVM switches on the same serial bus (addresses 0-99)
- New
discovercommand to find all devices with their firmware versions
Enhanced CLI Commands
Complete rewrite replacing simple console.py:
status: Show system status with firmware version and addresshelp: Display device help informationinput switch: Switch inputs with output selectionoutput routing: Query current input-to-output routingoutput stream: Check output stream statusedid get/set: Manage EDID data for inputsdiscover: Find all devices on the serial bus- Multiple output formats:
--format raw|json|pretty
Comprehensive Testing
- Full test suite with pytest achieving 89% code coverage
- Unit tests for
Device,KVM, and CLI commands - Integration tests for end-to-end workflows
- Hardware replay tests using pytest-reserial (no hardware needed for CI)
Documentation & CI/CD
- Extensive README with installation, usage examples, and library usage guide
- Official EZCOO KVM switch manual (PDF) in
docs/ - GitHub Actions workflows for automated testing and building on PRs
- Complete release process documentation
Breaking Changes
License
- License changed from Apache-2.0 to GPL-3.0-or-later
Build System & Tooling
- Poetry → uv: Faster dependency management
- flake8 → ruff: Modern linting and formatting
- Build backend: poetry-core → hatchling
CLI Changes
- Complete rewrite:
cli.pyreplacesconsole.py - Default output format: Changed from raw device response to human-readable pretty format
- New options:
--addressfor multi-device support,--formatfor output control
API Changes
- Response types: Returns structured
KVMResponse[T]objects instead of raw strings - Enhanced error handling: New
DeviceErrorandDeviceConnectionErrorexceptions - Type hints: Updated to modern Python 3.10+ syntax
Dependencies
- Removed:
attrs,mypy,flake8family - Added:
pytest,pytest-cov,pytest-reserial,ruff - Minimum Python: 3.10+
Fixed
- Improved error handling with specific exception types
- Better validation of command responses
- More reliable serial port handling
- Command injection prevention
Installation
pip install ezcoo-cli==0.2.0See the CHANGELOG for complete details.