Documentation Index Fetch the complete documentation index at: https://mintlify.com/daytonaio/daytona/llms.txt
Use this file to discover all available pages before exploring further.
The Computer Use API provides comprehensive desktop automation capabilities, enabling programmatic control of mouse, keyboard, screenshots, and screen recording within sandbox environments.
Overview
Daytona’s Computer Use functionality enables:
Mouse control - Move, click, drag, and scroll
Keyboard control - Type text and press keys
Screenshots - Capture full screen or regions
Display management - Query display information and windows
Screen recording - Record and download desktop sessions
Getting Started
Start Computer Use
Initialize the desktop environment:
const result = await sandbox . computerUse . start ();
console . log ( 'Desktop started:' , result . message );
This starts all required processes (Xvfb, xfce4, x11vnc, novnc).
Check Status
const status = await sandbox . computerUse . getStatus ();
console . log ( 'Status:' , status . status );
Stop Computer Use
const result = await sandbox . computerUse . stop ();
console . log ( 'Desktop stopped:' , result . message );
Mouse Operations
Get Mouse Position
const position = await sandbox . computerUse . mouse . getPosition ();
console . log ( `Mouse at: ${ position . x } , ${ position . y } ` );
Move Mouse
const result = await sandbox . computerUse . mouse . move ( 100 , 200 );
console . log ( `Moved to: ${ result . x } , ${ result . y } ` );
Click Mouse
// Single left click
const result = await sandbox . computerUse . mouse . click ( 100 , 200 );
// Double click
const doubleClick = await sandbox . computerUse . mouse . click (
100 , 200 ,
'left' , // button
true // double
);
// Right click
const rightClick = await sandbox . computerUse . mouse . click (
100 , 200 ,
'right'
);
// Middle click
const middleClick = await sandbox . computerUse . mouse . click (
100 , 200 ,
'middle'
);
Mouse button: ‘left’ (default), ‘right’, or ‘middle’
Whether to perform a double-click. Default is false.
Drag Mouse
const result = await sandbox . computerUse . mouse . drag (
50 , 50 , // start x, y
150 , 150 // end x, y
);
console . log ( `Dragged from ( ${ result . from . x } , ${ result . from . y } ) to ( ${ result . to . x } , ${ result . to . y } )` );
Mouse button to use for dragging. Default is ‘left’.
// Scroll up
const scrollUp = await sandbox . computerUse . mouse . scroll (
100 , 200 , // x, y
'up' , // direction
3 // amount
);
// Scroll down
const scrollDown = await sandbox . computerUse . mouse . scroll (
100 , 200 ,
'down' ,
5
);
X coordinate to scroll at
Y coordinate to scroll at
Amount to scroll. Default is 1.
Keyboard Operations
Type Text
// Type text normally
await sandbox . computerUse . keyboard . type ( 'Hello, World!' );
// Type with delay between characters
await sandbox . computerUse . keyboard . type (
'Slow typing' ,
100 // 100ms delay
);
Delay between characters in milliseconds. Default is 0.
Press Keys
// Press Enter
await sandbox . computerUse . keyboard . press ( 'Return' );
// Press Escape
await sandbox . computerUse . keyboard . press ( 'Escape' );
// Press Tab
await sandbox . computerUse . keyboard . press ( 'Tab' );
// Press with modifiers (Ctrl+C)
await sandbox . computerUse . keyboard . press ( 'c' , [ 'ctrl' ]);
// Press with multiple modifiers (Ctrl+Shift+T)
await sandbox . computerUse . keyboard . press ( 't' , [ 'ctrl' , 'shift' ]);
Key to press (e.g., ‘Return’, ‘Escape’, ‘Tab’, ‘a’, ‘A’)
Modifier keys: ‘ctrl’, ‘alt’, ‘meta’, ‘shift’. Default is empty array.
Press Hotkeys
// Copy
await sandbox . computerUse . keyboard . hotkey ( 'ctrl+c' );
// Paste
await sandbox . computerUse . keyboard . hotkey ( 'ctrl+v' );
// Save
await sandbox . computerUse . keyboard . hotkey ( 'ctrl+s' );
// Alt+Tab
await sandbox . computerUse . keyboard . hotkey ( 'alt+tab' );
// Cmd+Shift+T (Mac)
await sandbox . computerUse . keyboard . hotkey ( 'cmd+shift+t' );
Hotkey combination (e.g., ‘ctrl+c’, ‘alt+tab’, ‘cmd+shift+t’)
Screenshots
Full Screen Screenshot
const screenshot = await sandbox . computerUse . screenshot . takeFullScreen ();
console . log ( `Screenshot: ${ screenshot . width } x ${ screenshot . height } ` );
console . log ( `Base64 image: ${ screenshot . image . substring ( 0 , 50 ) } ...` );
// With cursor visible
const withCursor = await sandbox . computerUse . screenshot . takeFullScreen ( true );
Whether to show cursor in screenshot. Default is false.
Region Screenshot
Capture a specific screen region:
const region = { x: 100 , y: 100 , width: 300 , height: 200 };
const screenshot = await sandbox . computerUse . screenshot . takeRegion ( region );
console . log ( `Captured region: ${ screenshot . region . width } x ${ screenshot . region . height } ` );
Region to capture X coordinate of top-left corner
Y coordinate of top-left corner
Compressed Screenshots
Take compressed screenshots for smaller file sizes:
// Default compression
const screenshot = await sandbox . computerUse . screenshot . takeCompressed ();
// High quality JPEG
const jpeg = await sandbox . computerUse . screenshot . takeCompressed ({
format: 'jpeg' ,
quality: 95 ,
showCursor: true
});
// Scaled down PNG
const scaled = await sandbox . computerUse . screenshot . takeCompressed ({
format: 'png' ,
scale: 0.5 // 50% size
});
// Compressed region
const region = { x: 0 , y: 0 , width: 800 , height: 600 };
const compressed = await sandbox . computerUse . screenshot . takeCompressedRegion (
region ,
{
format: 'webp' ,
quality: 80
}
);
console . log ( `Compressed size: ${ compressed . size_bytes } bytes` );
Compression and display options Show cursor in screenshot
Image format: ‘jpeg’, ‘png’, ‘webp’
Compression quality (0-100)
Scale factor (e.g., 0.5 for 50% size)
Get Display Info
const info = await sandbox . computerUse . display . getInfo ();
console . log ( `Primary display: ${ info . primary_display . width } x ${ info . primary_display . height } ` );
console . log ( `Total displays: ${ info . total_displays } ` );
info . displays . forEach (( display , index ) => {
console . log ( `Display ${ index } : ${ display . width } x ${ display . height } at ( ${ display . x } , ${ display . y } )` );
});
List Open Windows
const windows = await sandbox . computerUse . display . getWindows ();
console . log ( `Found ${ windows . count } open windows:` );
windows . windows . forEach ( window => {
console . log ( `- ${ window . title } (ID: ${ window . id } )` );
});
Screen Recording
Start Recording
const recording = await sandbox . computerUse . recording . start ( 'my-recording' );
console . log ( 'Recording ID:' , recording . id );
console . log ( 'File path:' , recording . filePath );
Optional custom label for the recording
Stop Recording
const result = await sandbox . computerUse . recording . stop ( recording . id );
console . log ( `Recording stopped: ${ result . durationSeconds } seconds` );
console . log ( `Saved to: ${ result . filePath } ` );
List Recordings
const recordings = await sandbox . computerUse . recording . list ();
console . log ( `Found ${ recordings . recordings . length } recordings` );
recordings . recordings . forEach ( rec => {
console . log ( `- ${ rec . fileName } : ${ rec . status } ` );
console . log ( ` Duration: ${ rec . durationSeconds } s` );
console . log ( ` Size: ${ rec . sizeBytes } bytes` );
});
Get Recording Details
const recording = await sandbox . computerUse . recording . get ( recordingId );
console . log ( 'Recording:' , recording . fileName );
console . log ( 'Status:' , recording . status );
console . log ( 'Duration:' , recording . durationSeconds , 'seconds' );
Download Recording
await sandbox . computerUse . recording . download (
recordingId ,
'local-recording.mp4'
);
console . log ( 'Recording downloaded' );
ID of the recording to download
Local path to save the recording file
Delete Recording
await sandbox . computerUse . recording . delete ( recordingId );
console . log ( 'Recording deleted' );
Process Management
Get Process Status
const xvfbStatus = await sandbox . computerUse . getProcessStatus ( 'xvfb' );
const noVncStatus = await sandbox . computerUse . getProcessStatus ( 'novnc' );
console . log ( 'Xvfb status:' , xvfbStatus . status );
console . log ( 'NoVNC status:' , noVncStatus . status );
Restart Process
const result = await sandbox . computerUse . restartProcess ( 'xfce4' );
console . log ( 'XFCE4 restarted:' , result . message );
Get Process Logs
const logs = await sandbox . computerUse . getProcessLogs ( 'novnc' );
console . log ( 'NoVNC logs:' , logs . logs );
const errors = await sandbox . computerUse . getProcessErrors ( 'x11vnc' );
console . log ( 'X11VNC errors:' , errors . errors );
Complete Example
import { Daytona } from '@daytonaio/sdk' ;
const daytona = new Daytona ();
const sandbox = await daytona . create ();
try {
// Start desktop environment
console . log ( 'Starting desktop...' );
await sandbox . computerUse . start ();
// Wait for desktop to initialize
await new Promise ( resolve => setTimeout ( resolve , 3000 ));
// Get display info
const displayInfo = await sandbox . computerUse . display . getInfo ();
console . log ( `Display: ${ displayInfo . primary_display . width } x ${ displayInfo . primary_display . height } ` );
// Start recording
const recording = await sandbox . computerUse . recording . start ( 'automation-demo' );
console . log ( 'Recording started:' , recording . id );
// Move mouse to center
const centerX = displayInfo . primary_display . width / 2 ;
const centerY = displayInfo . primary_display . height / 2 ;
await sandbox . computerUse . mouse . move ( centerX , centerY );
// Open terminal with keyboard
await sandbox . computerUse . keyboard . hotkey ( 'ctrl+alt+t' );
await new Promise ( resolve => setTimeout ( resolve , 1000 ));
// Type a command
await sandbox . computerUse . keyboard . type ( 'echo "Hello from automation!"' );
await sandbox . computerUse . keyboard . press ( 'Return' );
// Wait a bit
await new Promise ( resolve => setTimeout ( resolve , 2000 ));
// Take screenshot
const screenshot = await sandbox . computerUse . screenshot . takeFullScreen ( true );
console . log ( `Screenshot captured: ${ screenshot . width } x ${ screenshot . height } ` );
// Stop recording
const result = await sandbox . computerUse . recording . stop ( recording . id );
console . log ( `Recording saved: ${ result . durationSeconds } s` );
// Download recording
await sandbox . computerUse . recording . download (
recording . id ,
'automation-demo.mp4'
);
console . log ( 'Automation complete!' );
} finally {
await daytona . delete ( sandbox );
}
Best Practices
Wait for desktop initialization
After starting computer use, wait a few seconds for the desktop to fully initialize: await sandbox . computerUse . start ();
await new Promise ( resolve => setTimeout ( resolve , 3000 ));
Add delays between actions
Add small delays between UI interactions to allow applications to respond: await sandbox . computerUse . keyboard . type ( 'command' );
await new Promise ( resolve => setTimeout ( resolve , 500 ));
await sandbox . computerUse . keyboard . press ( 'Return' );
Use compressed screenshots
For screenshots that will be transmitted or stored, use compression: const screenshot = await sandbox . computerUse . screenshot . takeCompressed ({
format: 'jpeg' ,
quality: 85
});
Delete recordings when no longer needed to save storage: await sandbox . computerUse . recording . delete ( recordingId );
Process Execution Execute commands in the desktop environment
PTY Sessions Interactive terminal sessions