Vior

Turn your phone into a second monitor.
Stream, control, transfer — from any browser.

Installation

Option 1: Download Desktop App

Download the latest release for your platform from GitHub Releases.

Option 2: Install CLI

If you have Go installed:

go install github.com/subhashraveendran/vior/cmd/vior@latest

Option 3: Build from Source

git clone https://github.com/subhashraveendran/Vior.git
cd Vior
make build      # CLI only
make desktop    # Desktop app

Desktop App — Step by Step

  1. Launch Vior

    Open the Vior app. You'll see the idle screen with a "Start Server" button.

  2. Start the Server

    Click Start Server. Vior picks a free port automatically and starts listening for connections. A QR code appears.

  3. Connect Your Phone

    On your phone, scan the QR code or click "Use web browser" to see the URL. Open it in any browser. The phone reports its screen dimensions automatically.

  4. Use It

    Vior creates a virtual display matching your phone's resolution. Drag windows onto it from your computer. Touch on the phone controls the cursor. Rotate for landscape.

  5. Transfer Files

    Switch to the Files tab in the connected view. Click Send File or drag files onto the app to transfer them to your phone.

  6. Disconnect

    Click Disconnect to stop. The virtual display is automatically removed.

CLI — Step by Step

Basic Usage

# Start server — waits for phone to connect
vior start

# Phone connects → virtual display created → streaming begins
# Press Ctrl+C to stop

Manual Resolution (Legacy Mode)

# Skip WebSocket handshake, set resolution manually
vior start --virtual-width 1179 --virtual-height 2556

USB Connection

# Check ADB status
vior usb status

# Set up USB forwarding
vior usb setup

# Then start normally
vior start

Display Management

# List all displays
vior displays

# Mirror display 1 onto display 0
vior display mirror --source 1 --target 0

# Set display 1 to extended mode
vior display extend 1

All Options

vior start [flags]
  -p, --port int          Port (default: auto)
  -q, --quality int       JPEG quality 1-100 (default: 80)
  -f, --fps int           Frames per second (default: 30)
  -d, --display int       Display index (default: 0)
      --no-websocket      Legacy mode (no WebSocket handshake)
      --no-discovery      Disable UDP broadcast

Phone / Tablet Setup

Web Browser (Any Device)

  1. Open Browser

    Open Safari, Chrome, or any browser on your phone.

  2. Enter URL or Scan QR

    Type the URL shown by Vior, or scan the QR code from the desktop app.

  3. Stream Starts

    The stream begins automatically. Your phone reports its screen dimensions and Vior creates a matching virtual display.

  4. Touch & Fullscreen

    Touch the screen to control the cursor. Tap the fullscreen button for immersive mode. Rotate for landscape.

USB Connection (Android)

  1. Enable USB Debugging

    On your Android phone: Settings → Developer Options → USB Debugging → On.

  2. Connect USB Cable

    Plug your phone into your computer with a USB cable.

  3. Enable USB in Vior

    In Settings, toggle USB on. Or run vior usb setup in CLI. ADB downloads automatically if needed.

  4. Open Browser

    On your phone, open http://localhost:8080 — it connects over USB.

Features

Auto Resolution

Phone reports its screen size. Virtual display matches automatically. No presets needed.

Touch Control

Touch on phone maps to mouse on computer. Tap, drag, scroll — all forwarded in real-time.

Orientation

Rotate phone to landscape. Display resizes automatically. Works both ways.

File Transfer

Send files in both directions. Drag & drop on desktop. Image previews. Progress tracking.

USB Mode

Connect via USB for lower latency. ADB auto-downloads. No manual setup needed.

Works Everywhere

Any browser on any device. No app install on phone. macOS, Linux, Windows server.

Platform Support

PlatformVirtual DisplayScreen CaptureStatus
macOS 13+CGVirtualDisplayCGDisplayCreateImageFull support
Linux (X11)xrandr + dummy driverkbinani/screenshotPartial
Windows 10+Win32 + IDD driverkbinani/screenshotPartial