
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
@e2b/desktop
Advanced tools
E2B Desktop Sandbox - isolated cloud environment with a desktop-like interface powered by E2B. Ready for AI Computer Use
E2B Desktop Sandbox is a secure virtual desktop ready for Computer Use. Powered by E2B.
Each sandbox is isolated from the others and can be customized with any dependencies you want.
Check out the example open-source app in a separate repository.
Check out the examples directory for more examples on how to use the SDK:
The E2B Desktop Sandbox is built on top of E2B Sandbox.
Sign up at E2B and get your API key.
Set environment variable E2B_API_KEY
with your API key.
npm install @e2b/desktop
import { Sandbox } from '@e2b/desktop'
// Start a new desktop sandbox
const desktop = await Sandbox.create()
// Launch an application
await desktop.launch('google-chrome') // or vscode, firefox, etc.
// Wait 10s for the application to open
await desktop.wait(10000)
// Stream the application's window
// Note: there can be only one stream at a time
// You need to stop the current stream before streaming another application
await desktop.stream.start({
windowId: await desktop.getCurrentWindowId(), // if not provided the whole desktop will be streamed
requireAuth: true,
})
// Get the stream auth key
const authKey = desktop.stream.getAuthKey()
// Print the stream URL
console.log('Stream URL:', desktop.stream.getUrl({ authKey }))
// Kill the sandbox after the tasks are finished
// await desktop.kill()
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Start the stream
await desktop.stream.start()
// Get stream URL
const url = desktop.stream.getUrl()
console.log(url)
// Stop the stream
await desktop.stream.stop()
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Start the stream
await desktop.stream.start({
requireAuth: true, // Enable authentication with an auto-generated key
})
// Retrieve the authentication key
const authKey = await desktop.stream.getAuthKey()
// Get stream URL
const url = desktop.stream.getUrl({ authKey })
console.log(url)
// Stop the stream
await desktop.stream.stop()
[!WARNING]
- Will throw an error if the desired application is not open yet
- The stream will close once the application closes
- Creating multiple streams at the same time is not supported, you may have to stop the current stream and start a new one for each application
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Get current (active) window ID
const windowId = await desktop.getCurrentWindowId()
// Get all windows of the application
const windowIds = await desktop.getApplicationWindows('Firefox')
// Start the stream
await desktop.stream.start({ windowId: windowIds[0] })
// Stop the stream
await desktop.stream.stop()
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
await desktop.doubleClick()
await desktop.leftClick()
await desktop.leftClick(100, 200)
await desktop.rightClick()
await desktop.rightClick(100, 200)
await desktop.middleClick()
await desktop.middleClick(100, 200)
await desktop.scroll(10) // Scroll by the amount. Positive for up, negative for down.
await desktop.moveMouse(100, 200) // Move to x, y coordinates
await desktop.drag([100, 100], [200, 200]) // Drag using the mouse
await desktop.mousePress('left') // Press the mouse button
await desktop.mouseRelease('left') // Release the mouse button
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Write text at the current cursor position with customizable typing speed
await desktop.write('Hello, world!')
await desktop.write('Fast typing!', { chunkSize: 50, delayInMs: 25 }) // Faster typing
// Press keys
await desktop.press('enter')
await desktop.press('space')
await desktop.press('backspace')
await desktop.press(['ctrl', 'c']) // Key combination
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Get current (active) window ID
const windowId = await desktop.getCurrentWindowId()
// Get all windows of the application
const windowIds = await desktop.getApplicationWindows('Firefox')
// Get window title
const title = await desktop.getWindowTitle(windowId)
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
const image = await desktop.screenshot()
// Save the image to a file
fs.writeFileSync('screenshot.png', image)
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Open file with default application
await desktop.files.write('/home/user/index.js', "console.log('hello')") // First create the file
await desktop.open('/home/user/index.js') // Then open it
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Launch the application
await desktop.launch('google-chrome')
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
// Run any bash command
const out = await desktop.commands.run('ls -la /home/user')
console.log(out)
import { Sandbox } from '@e2b/desktop'
const desktop = await Sandbox.create()
await desktop.wait(1000) // Wait for 1 second
The desktop-like environment is based on Linux and Xfce at the moment. We chose Xfce because it's a fast and lightweight environment that's also popular and actively supported. However, this Sandbox template is fully customizable and you can create your own desktop environment. Check out the sandbox template's code here.
FAQs
E2B Desktop Sandbox - isolated cloud environment with a desktop-like interface powered by E2B. Ready for AI Computer Use
The npm package @e2b/desktop receives a total of 813 weekly downloads. As such, @e2b/desktop popularity was classified as not popular.
We found that @e2b/desktop demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.