Document Version: 1.0 Last Updated: 2026-01-26 Status: Production Ready
The hyper2kvm TUI (Terminal User Interface) provides a comprehensive, interactive interface for managing VM migrations directly from your terminal. Built with Textual, it offers a professional, keyboard-driven alternative to CLI commands.
pip install 'hyper2kvm[tui]'
pip install 'hyper2kvm[full]'
This includes all optional dependencies:
python3 -c "import textual; print(f'Textual {textual.__version__} installed')"
Should output: Textual 0.47.0 (or higher) installed
# Method 1: Direct command
hyper2kvm-tui
# Method 2: Python module
python3 -m hyper2kvm.tui.main_app
# Method 3: With configuration
hyper2kvm-tui --config /path/to/config.yaml
The TUI features 6 main panels accessible via tabs:
Welcome dashboard with:
Quick Actions:
5-step interactive migration setup:
| Source Selection: vSphere | Local VMDK | Hyper-V | OVA |
Navigation:
Multi-source VM browser:
Sources:
Features:
Real-time migration monitoring:
Display Columns:
Controls:
Statistics Footer:
Batch migration management:
Features:
Actions:
Comprehensive configuration panel with 6 categories:
General Settings:
Migration Settings:
vSphere Settings:
Offline Fixes Settings:
Performance Settings:
Advanced Settings:
Choose the source of your VMs:
βοΈ VMware vSphere / vCenter:
πΎ Local VMDK File(s):
πͺ Microsoft Hyper-V:
π¦ OVA / OVF Package:
Selection:
Varies by source type:
vSphere Source:
ββ Connect to vSphere ββββββββββββββββ
β vCenter Server: vcenter.example.comβ
β Username: administrator@vsphere... β
β Password: ******** β
β [Connect & Browse VMs] β
ββββββββββββββββββββββββββββββββββββββ
After connection:
Local Source:
ββ Select VMDK file(s) βββββββββββββββ
β VMDK Path: /path/to/vm.vmdk β
β [Browse...] β
β β
β π‘ Tip: Multiple files supported β
ββββββββββββββββββββββββββββββββββββββ
Validation:
Configure conversion output:
Output Format:
Output Directory:
/tmp/hyper2kvm-outputOptions:
Advanced: Click for additional options (quality, cache mode, etc.)
Configure automated fixes for Linux VMs:
Recommended Fixes:
| Mode: Stabilize all | Boot only | Disabled |
Info Box:
βΉοΈ These fixes ensure VMs boot correctly on KVM
Recommended for all Linux VMs migrated from VMware/Hyper-V
Final review before starting:
π Review migration configuration
**Source:**
Type: local
Path: /home/user/vms/ubuntu.vmdk
**Output:**
Format: qcow2
Directory: /tmp/hyper2kvm-output
Compression: Yes
**Offline Fixes:**
Stabilize fstab: Yes
Regenerate initramfs: Yes
Update GRUB: Yes
Fix network: Yes
β
Ready to start migration
Click 'Start Migration' to begin the conversion process
Actions:
vcenter.example.comadministrator@vsphere.localOnce connected, youβll see a DataTable:
βββββββ¬βββββββββββββββββββ¬ββββββββββ¬βββββββ¬βββββββββ¬ββββββββββ¬βββββββββββββββββ
βSel β VM Name β State β CPUs β Memory β Disk β OS β
βββββββΌβββββββββββββββββββΌββββββββββΌβββββββΌβββββββββΌββββββββββΌβββββββββββββββββ€
β[x] β web-server-01 β Running β 2 β 4 GB β 50 GB β Ubuntu 22.04 β
β[ ] β database-server β Running β 4 β 16 GB β 500 GB β CentOS 8 β
β[x] β app-server-03 β Stopped β 2 β 8 GB β 100 GB β RHEL 9 β
βββββββ΄βββββββββββββββββββ΄ββββββββββ΄βββββββ΄βββββββββ΄ββββββββββ΄βββββββββββββββββ
Selected: 2 VMs Total size: 150 GB
[Migrate Selected] [Clear Selection]
Operations:
βββββββ¬ββββββββββββββββββββββββ¬βββββββββββ¬ββββββββββββββββββββββ
β Sel β Filename β Size β Modified β
βββββββΌββββββββββββββββββββββββΌβββββββββββΌββββββββββββββββββββββ€
β[x] β ubuntu-20.04.vmdk β 8.5 GB β 2026-01-20 14:30 β
β[ ] β windows-server.vmdk β 40 GB β 2026-01-15 09:15 β
β[x] β centos-7.vmdk β 12 GB β 2026-01-18 16:45 β
βββββββ΄ββββββββββββββββββββββββ΄βββββββββββ΄ββββββββββββββββββββββ
Features:
The Migrations panel shows live updates:
ββ Active Migrations βββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ID β VM Name β Status βProgressβ Stage βThroughputβ ETA β
βββββββΌβββββββββββββββββΌββββββββββΌβββββββββΌβββββββββββΌβββββββββββΌββββββββ€
β 001 β web-server-01 βrunning β 45% β convert β 120 MB/s β 5m30s β
β 002 β database-srv βrunning β 78% β validate β 95 MB/s β 2m15s β
β 003 β app-server-03 β paused β 23% β transfer β 0 MB/s β - β
β 004 β backup-server βcomplete β 100% β done β - β 0s β
β 005 β dev-machine β failed β 23% β transfer β - β - β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Running: 2 Paused: 1 Completed: 1 Failed: 1 Avg Speed: 107 MB/s
Stages in order:
Pause Migration:
Resume Migration:
Cancel Migration:
View Details:
ββ Batch Migration Manager βββββββββββββββββββββββββββββββββββββββββββββββ
β ID β VM Name β Status βProgressβ Stage βThroughputβ ETA β
βββββββΌβββββββββββββββββΌββββββββββββΌβββββββββΌββββββββββΌβββββββββββΌββββββββ€
β 001 β web-server-01 β active β 45% βconvert β 120 MB/s β 5m30s β
β 002 β database-srv β active β 78% βvalidate β 95 MB/s β 2m15s β
β 003 β app-server-03 β queued β 0% βpending β - β - β
β 004 β backup-server β completed β 100% βdone β - β 0s β
β 005 β dev-machine β failed β 23% βtransfer β - β - β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Active: 2 Queued: 1 Completed: 1 Failed: 1 Total: 5
Each setting has:
Example:
ββ General Settings ββββββββββββββββββββββββββββββββββ
β Default Output Directory: [/tmp/hyper2kvm-output] β
β Default directory for converted VM images β
β β
β Log Level: [Info βΌ] β
β Verbosity of log messages β
β β
β β Enable file logging β
β Log File Path: [/tmp/hyper2kvm.log] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Actions:
Settings are saved to:
~/.config/hyper2kvm/tui-settings.yaml (Linux)C:\Users\<user>\AppData\Local\hyper2kvm\tui-settings.yaml (Windows)Available from any panel:
| Shortcut | Action | Description |
|---|---|---|
| Ctrl+Q | Quit | Exit application |
| F1 | Help | Show help dialog |
| F2 | Wizard | Open migration wizard |
| F3 | Browse | Open VM browser |
| F5 | Refresh | Refresh current view |
| Ctrl+S | Settings | Open settings panel |
| Tab | Next Tab | Switch to next tab |
| Shift+Tab | Prev Tab | Switch to previous tab |
Wizard:
Browser:
Migrations:
Batch:
Settings:
Error: ModuleNotFoundError: No module named 'textual'
Solution:
pip install 'hyper2kvm[tui]'
Problem: Characters not displaying correctly
Solutions:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
Problem: F-keys or Ctrl+key not responding
Solutions:
Error: Connection refused or SSL certificate verification failed
Solutions:
ping vcenter.example.com
telnet vcenter.example.com 443
Problem: Progress not advancing
Solutions:
/tmp/hyper2kvm.logProblem: TUI slow or laggy
Solutions:
from hyper2kvm.tui.main_app import run_hyper2kvm_tui
# Launch with default settings
run_hyper2kvm_tui()
from hyper2kvm.core.optional_imports import App, ComposeResult, TabbedContent, TabPane
from hyper2kvm.tui.wizard import MigrationWizard
from hyper2kvm.tui.vm_browser import VMBrowser
class MyCustomApp(App):
def compose(self) -> ComposeResult:
with TabbedContent():
with TabPane("Wizard"):
yield MigrationWizard()
with TabPane("Browser"):
yield VMBrowser()
app = MyCustomApp()
app.run()
from hyper2kvm.tui.migrations_panel import MigrationsPanel
class IntegratedApp(App):
def __init__(self, orchestrator):
super().__init__()
self.orchestrator = orchestrator
self.migration_panel = None
def on_mount(self):
self.migration_panel = self.query_one(MigrationsPanel)
# Connect orchestrator callbacks
self.orchestrator.on_progress(self.on_migration_progress)
def on_migration_progress(self, migration_id, status, progress):
# Update TUI display
self.migration_panel.update_migration(
migration_id,
status=status,
progress=progress
)
# custom_theme.py
CUSTOM_CSS = """
Screen {
background: #001122;
}
Header {
background: #2d5f8d;
color: white;
}
Tab.-active {
background: #2d5f8d;
color: #00ff00;
}
Button {
background: #2d5f8d;
}
Button:hover {
background: #3d7fad;
}
"""
# Apply theme
from hyper2kvm.tui.main_app import Hyper2KVMApp
class ThemedApp(Hyper2KVMApp):
CSS = CUSTOM_CSS
app = ThemedApp()
app.run()
# Environment variable
export HYPER2KVM_DEBUG=1
hyper2kvm-tui
# Command line
hyper2kvm-tui --debug
# In code
from hyper2kvm.tui.main_app import Hyper2KVMApp
app = Hyper2KVMApp()
app.run(debug=True) # Shows Textual DevTools
Press Ctrl+I (when debug mode enabled) to open Textual DevTools:
Having issues with the TUI? Want to request features?
Document Info: