Skip to main content

What is the Built-in UI?

The built-in UI provides an interactive text-based interface for managing multiple Undying Terminal sessions from a single client instance. Before v1.1.0: Each session required a separate terminal window and manual credential tracking. With v1.1.0+: Launch the UI and manage all your sessions from one place.

Launching the UI

./undying-terminal.exe --ui
You’ll see the UI prompt:
Undying Terminal built-in UI
Built-in UI commands:
  help
  add <name> <host> <port> <client_id> <passkey>
  set-tunnel <name> <spec>
  set-flag <name> <noexit|tunnel-only|predictive-echo> <on|off>
  start <name>
  stop <name>
  remove <name>
  list
  quit
ut-ui>

UI Commands

add - Create a Session Profile

Create a named profile with connection details:
ut-ui> add dev localhost 2022 abc123 mysecretkey
Profile 'dev' added

ut-ui> add prod prod-server.com 2022 xyz789 productionkey
Profile 'prod' added
Parameters:
  • name - Unique profile name
  • host - Server hostname or IP address
  • port - Server port (usually 2022)
  • client_id - Client ID from terminal
  • passkey - Passkey from terminal

set-tunnel - Configure Port Forwarding

Add tunnel specifications to a profile:
ut-ui> set-tunnel dev 5432:db-server:5432
Tunnel '5432:db-server:5432' added to profile 'dev'

ut-ui> set-tunnel prod 8080:internal-api:80
Tunnel '8080:internal-api:80' added to profile 'prod'
Tunnel Format: local_port:remote_host:remote_port

set-flag - Configure Options

Enable/disable session options:
ut-ui> set-flag dev noexit on
Flag 'noexit' set to 'on' for profile 'dev'

ut-ui> set-flag prod predictive-echo on
Flag 'predictive-echo' set to 'on' for profile 'prod'

ut-ui> set-flag prod tunnel-only on
Flag 'tunnel-only' set to 'on' for profile 'prod'
Available Flags:
  • noexit - Keep session alive after command execution
  • predictive-echo - Enable local echo for high-latency connections
  • tunnel-only - Port forwarding without terminal (v1.1.0+)

start - Launch a Session

Start a session in a new console window:
ut-ui> start dev
started 'dev' (pid=12345)

ut-ui> start prod
started 'prod' (pid=12346)
Each session runs in its own console window. Switch between sessions via your taskbar or Alt+Tab.

stop - Stop a Running Session

Gracefully terminate a session:
ut-ui> stop dev
stopped 'dev'
This terminates the process. Any running commands in that session will be interrupted.

remove - Delete a Profile

Remove a profile from the UI:
ut-ui> remove dev
removed profile 'dev'
You must stop a session before removing its profile.

list - Show All Profiles

View all profiles and their status:
ut-ui> list
- dev host=localhost port=2022 running=yes tunnel-only=off predictive-echo=off
- prod host=prod-server.com port=2022 running=no tunnel-only=off predictive-echo=on

help - Show Available Commands

ut-ui> help
Built-in UI commands:
  help
  add <name> <host> <port> <client_id> <passkey>
  set-tunnel <name> <spec>
  set-flag <name> <noexit|tunnel-only|predictive-echo> <on|off>
  start <name>
  stop <name>
  remove <name>
  list
  quit

quit - Exit the UI

ut-ui> quit
Quitting the UI does not stop running sessions. They continue in their own windows.

Complete Workflow Example

Scenario: Managing dev, staging, and production environments.
# Launch UI
./undying-terminal.exe --ui

# Create profiles
ut-ui> add dev localhost 2022 dev-client-id dev-passkey
ut-ui> add staging staging.example.com 2022 staging-id staging-key
ut-ui> add prod prod.example.com 2022 prod-id prod-key

# Configure tunnels for database access
ut-ui> set-tunnel dev 5432:localhost:5432
ut-ui> set-tunnel staging 5433:staging-db:5432
ut-ui> set-tunnel prod 5434:prod-db:5432

# Enable predictive echo for remote connections
ut-ui> set-flag staging predictive-echo on
ut-ui> set-flag prod predictive-echo on

# Start development session
ut-ui> start dev
started 'dev' (pid=12345)

# Work in dev, then switch to staging
ut-ui> stop dev
stopped 'dev'
ut-ui> start staging
started 'staging' (pid=12346)

# View all profiles
ut-ui> list
- dev host=localhost port=2022 running=no tunnel-only=off predictive-echo=off
- staging host=staging.example.com port=2022 running=yes tunnel-only=off predictive-echo=on
- prod host=prod.example.com port=2022 running=no tunnel-only=off predictive-echo=on

# Exit UI (sessions continue running)
ut-ui> quit

Tips and Best Practices

Profile Naming

Use clear, consistent naming:
# Good
ut-ui> add web-prod web-server.com 2022 ...
ut-ui> add api-prod api-server.com 2022 ...
ut-ui> add db-prod db-server.com 2022 ...

# Avoid
ut-ui> add server1 ...  # Unclear which server
ut-ui> add test ...     # Which environment?

Secure Credential Storage

The UI stores credentials in memory only (not on disk). For security:
  1. Use environment variables for sensitive data:
# Set credentials in environment
$env:DEV_CLIENT_ID = "abc123"
$env:DEV_PASSKEY = "secretkey"

# Then reference them when adding profiles
ut-ui> add dev localhost 2022 %DEV_CLIENT_ID% %DEV_PASSKEY%
  1. Consider a password manager integration:
# Use 1Password CLI
$Cred = op item get "Undying Terminal Dev" --fields username,password
$ClientID = $Cred[0]
$Passkey = $Cred[1]

./undying-terminal.exe --ui
# Then paste values

Session Persistence

Running sessions survive UI restart:
# Start sessions
ut-ui> start dev
ut-ui> start prod
ut-ui> quit

# Later - sessions still running
./undying-terminal.exe --ui
ut-ui> list
- dev host=localhost port=2022 running=yes ...
- prod host=prod.example.com port=2022 running=yes ...
Profiles are stored in memory and lost when the UI exits. For persistent profiles, consider creating a startup script.

Automation with Scripts

Create a PowerShell script to pre-populate profiles:
# setup-ui.ps1
$Profiles = @(
    @{ Name = "dev"; Host = "localhost"; Port = 2022; ID = "dev123"; Key = "devkey" },
    @{ Name = "staging"; Host = "staging.example.com"; Port = 2022; ID = "staging456"; Key = "stagingkey" }
)

# Start UI with commands
$Commands = $Profiles | ForEach-Object {
    "add $($_.Name) $($_.Host) $($_.Port) $($_.ID) $($_.Key)"
}

# Save to file for manual input or use Expect-like automation
$Commands | Out-File setup-commands.txt

Write-Host "Run: ./undying-terminal.exe --ui"
Write-Host "Then paste commands from setup-commands.txt"

Comparison: UI vs Direct Connection

FeatureDirect ConnectionBuilt-in UI
SetupCommand-line argumentsInteractive prompts
Multiple sessionsMultiple terminalsSingle UI, multiple windows
Credential managementManual trackingNamed profiles
Tunnel configurationCommand-lineset-tunnel command
Best forOne-off connectionsDaily workflows
Learning curveLower (familiar CLI)Higher (new commands)

Troubleshooting

”profile is not running”

ut-ui> stop dev
profile is not running
Cause: Trying to stop a session that isn’t active. Solution: Check list to see which profiles are running.

”stop failed: TerminateProcess error 5”

ut-ui> stop dev
stop failed: TerminateProcess error 5
Cause: Access denied (session may have already exited or requires elevated permissions). Solution:
  • Check if the session window closed manually
  • Run the UI as Administrator if needed

”stop session before removing”

ut-ui> remove dev
stop session before removing
Cause: Attempting to remove a profile with a running session. Solution:
ut-ui> stop dev
ut-ui> remove dev

Next Steps