Skip to main content
Beam virtual machines are named Linux environments that keep installed software and files between sessions. Each VM runs in a CPU microVM with its own kernel, systemd, a durable root filesystem, and stable service URLs. Use them for development, coding agents, browser automation, or persistent services. Manage VMs with beam vm, the Python or JavaScript VM class, or Virtual machines in the dashboard.

Create your first VM

Install or upgrade the CLI, then sign in:
Create a VM and connect over SSH:
The default VM has 4 CPUs, 8 GiB RAM, Ubuntu 24.04, and 50 GiB of writable root storage over the base image. SSH is enabled. beam vm new includes a desktop when building a fresh image; use --no-desktop to skip it. Python and JavaScript SDKs enable the desktop only when requested. Templates and prebuilt images retain their settings. The built-in browser terminal is protected by default; beam vm terminal devbox opens it with an authenticated link. Use beam vm open devbox PORT for any published HTTP application. CLI SSH uses your workspace credentials and a local SSH key through an authenticated tunnel. A persistent IPv6 address, when allocated, also supports direct SSH and published TCP ports.

Files survive stop and start

Stopping saves the filesystem and releases compute. Starting boots the same root disk, so files, apt packages, Python environments, and systemd units remain. Use pause and resume to preserve running processes and RAM too.
VMs keep running until you stop or pause them, remove them, or configure an idle TTL. Closing your terminal or Python client does not stop a VM. Running VMs incur compute usage even when no command is executing.

Use the SDKs

Install the package for your language. JavaScript examples use Node.js with ES modules:
Use VM.get("python-devbox") to read an existing VM’s state, or VM.connect("python-devbox") to start or resume it and wait until commands can run. VM.list() returns VM records. Names and IDs work for management operations; IDs start with vm-. In JavaScript, VM.create(), VM.get(), VM.connect(), and new VM(config).create() all return a VM object. See the SDK guide for the complete API.

VMs and sandboxes

Sandbox(use_vm=True) selects a microVM runtime for a sandbox. It does not turn the sandbox into a persistent, named VM with stop/start and a durable root.

VM guides

Configuration

Resources, images, environment variables, secrets, and metadata.

Secrets

Bind credentials, scope approved hosts, and rotate values without restarting.

Lifecycle

Stop/start, pause/resume, idle TTLs, and automatic resume.

Storage and snapshots

Durable files, restore points, forks, and private templates.

Commands and SSH

Execution, stdin, logs, systemd, file transfers, and coding agents.

Networking

Stable subdomains, protected URLs, private tunnels, and egress controls.

Desktop

Browser access, screenshots, keyboard and mouse control, and recording.

Docker and Compose

Build and run containers inside a VM.

CLI reference

All VM commands and creation options.

SDK

Python and JavaScript APIs for lifecycle, snapshots, desktop, and networking.

Usage and billing

See the pricing page for VM CPU and memory rates. Stopped and paused VMs release compute; running VMs accrue usage. The dashboard Usage page shows VM costs and CSV export under Virtual machines, separately from Sandboxes. Compute and credit allocation are finalized daily at 00:00 UTC. The current billing period can include an estimate for today. See pricing and billing for credits, invoices, and storage pricing.