Questions, by who's asking
FAQ
For AI Agents & LLMs
What can an AI agent do through flash-mcp?
flash-mcp gives MCP-compatible agents direct access to the complete FlashVM lifecycle. An agent can create and inspect VMs, run commands inside them and copy files in and out (flash_exec, flash_cp), fork a running VM into copies, apply resource policies, stream metrics and logs, diagnose workload health, capture snapshots, restore or clone execution state, and remove VMs when the work is complete. The same interface also exposes the underlying CLI and HTTP API for advanced workflows.
Does flash-mcp use the same control plane as the CLI?
Yes. flash-mcp maps each operation to either the flash CLI or HTTP over the VM's own endpoint — a Unix socket on Linux and macOS, a named pipe on Windows. The same twenty tools, with the same parameters, ship on every platform. Agents and human operators use the same lifecycle, resource, and observability paths, so automation behaves consistently with established operator workflows.
Can an agent create fully configured FlashVMs?
Yes. Through flash_cli, an agent launches a VM with a bundle, its shape (--vcpus and --mem-mib, both required), a workload entry point, and a CPU template. Every limit — CPU, disk capacity, disk I/O, and per-NIC bandwidth and packet rate — is optional: pass it and it is enforced, omit it and that resource is uncapped. Nothing picks a limit on the agent's behalf, and a limit the platform cannot enforce is refused rather than silently dropped. On Linux, flashnet establishes bridge, NAT, or routed networking while the VMM itself stays unprivileged.
Can agents watch workloads in real time?
Yes. flash_watch streams metrics, workload logs, guest console output, lifecycle events, or guest messages through Server-Sent Events. Progress is delivered as it happens, giving the calling agent live operational context instead of a series of disconnected polling results.
Can an agent operate an entire fleet?
Yes. flash_ls provides host inventory, while flash_watch_fleet follows multiple VMs concurrently and prefixes every result with its VM identity. Each FlashVM retains its own process, socket, limits, and telemetry stream, so fleet automation can act on individual workloads without funneling control through a central daemon.
Can an agent snapshot, restore, and clone a running workload?
Yes. An agent can capture the running state through the snapshot API, restore the original VM through flash_cli, or clone the snapshot into a new identity. Starting the source VM with a CPU template gives the restored workload an explicit CPU compatibility contract wherever it resumes.
How does an agent run a command inside a FlashVM?
With flash_exec (or flash exec --json): pass the VM and an argv, get back exit_code, stdout, stderr, state and how long it took. There is no network or SSH involved — the command rides a dedicated virtio-console port to the guest agent. Timeouts kill the whole process tree, output is kept up to 16 MiB per stream, and up to 64 commands can run at once. flash_cp moves files and directory trees in and out; flash del removes them.
Can I stop a FlashVM from reaching the internet, or limit what it reaches?
Yes. --egress public lets an agent browse the whole internet but reach nothing private — not your LAN, not the host, not cloud metadata — and deny: adds a blocklist. --egress none lets nothing out but link setup; --egress allow:pypi.org,*.github.com,10.0.0.0/8 lets the VM reach those names (at the addresses its own DNS lookups returned) and CIDRs, and nothing else — a lookup of any other name is answered "refused" before it leaves the host. It is enforced by FlashVMM's network path outside the guest on every OS, survives snapshot/restore and fork, can be changed on a running VM with flash set --egress, and flash connections (MCP: flash_connections) lists every connection and DNS question the VM made, allowed or refused.
How does an agent in a FlashVM call its model without the API key being inside the VM?
Give the VM --secret-proxy model=KEYFILE,upstream=https://.... The agent calls $FLASH_PROXY_MODEL_URL in plain HTTP; FlashVMM, outside the VM, adds the key, forwards over TLS, streams the reply and logs the call (flash proxies). The key never enters the guest, and with --egress none the model is the only thing the agent can reach. Caps (max-calls, max-bytes) answer 429 inside the VM.
Can an agent fork a running VM?
Yes. flash fork VM --count N (through flash_cli) starts N children that continue from the parent's state at that instant — same memory, same running program — each with its own identity, while the parent keeps running. A parent started with --forkable forks with its RAM frozen in place, and later forks are diffs: 15 ms on Linux x86_64. It is how an agent tries several approaches from one prepared state.
Can an agent claim a warm-pool VM?
Yes. A warm-pool spare is already booted and waiting for work. An agent can claim it, assign the workload entry point and — only if it wants one — a CPU or disk cap, and begin execution without putting a cold boot on the request path. This makes warm pools a natural fit for latency-sensitive agent workloads and bursty task queues.
Can a claim also restore a snapshot instead of running a program?
Yes — restore-via-claim. Instead of an entry point, flash_cli(["claim", ...]) (or flash_api's POST /v1/flashvm/claim) can hand a warm-pool spare a snapshot to become. The spare's own already-running process is reused, so the restore pays neither the cold boot's kernel-init time nor a fresh process's spawn and privilege-drop cost. Available on arm64 hosts today; see LLM-native operations for the exact tool call.
Can agents and human operators manage the same VM?
Yes. Both use the same per-VM control socket and see the same state. A human can inspect an agent-created VM with the CLI, while an agent can continue from a VM created by an operator. That shared model makes handoffs straightforward and keeps operational behavior predictable.
How is agent access controlled?
Access follows the operating system's own permissions on each VM's endpoint: file ownership and permissions on the Unix socket on Linux and macOS, and the named pipe on Windows. Teams apply familiar user, group, service-account, and process-isolation policies without a separate credential system inside the VMM.
For Developers
What do I need to run FlashVMM?
FlashVMM runs on macOS, Linux, and Windows:
- macOS — Apple Silicon, macOS 15 or later, on Apple's Hypervisor.framework. No host configuration.
- Linux — x86_64 or arm64 with
/dev/kvm, on bare metal or in a VM with nested virtualization enabled. - Windows — Windows 10/11 x64 or Windows 11 on ARM, with the Windows Hypervisor Platform feature enabled.
Each installer provides the CLI, VMM, flash-mcp, the warm-pool daemon, and a guest kernel and root filesystem as one standalone distribution.
Does it run on macOS?
Yes — natively on Apple Silicon (macOS 15 or later). The same install command installs a Developer ID-signed, notarized package that runs FlashVMM on Apple's Hypervisor.framework, with the same flash CLI, Unix-socket API, and flash-mcp tools you use everywhere else. Unprivileged user-mode NAT networking works out of the box, and you move to a new release by re-running the installer.
Does it run on Windows?
Yes — natively on both x64 and ARM64 (Windows 11 on ARM), on the Windows Hypervisor Platform. Enable that Windows feature once, then install the signed MSI for your architecture; it places FlashVMM in %ProgramFiles%\FlashVMM and puts flash on your PATH. You get the same flash CLI, HTTP API (over a per-VM named pipe), and flash-mcp tools, with user-mode NAT networking and snapshot, restore, clone, and warm pools. See Developer for the install commands.
How do I start my first FlashVM?
Use flash run --bundle PATH --vcpus N --mem-mib N with the workload entry point. The shape is required; every limit — CPU, disk capacity, disk throughput, disk IOPS, and network — is optional, and applies only if you pass it. The command can stay attached for interactive use or detach for service and automation workflows.
Can developers run FlashVMs without root privileges?
Yes. On Linux, developers run VMs through a private registry under $XDG_RUNTIME_DIR; the separate flashnet helper performs host networking setup, drops its capabilities, and then launches the unprivileged VMM, keeping network administration out of the long-running VM process. On macOS and Windows, VMs run as the ordinary user with user-mode NAT networking — no elevation is needed after installation.
How do I connect a FlashVM to the network?
On Linux, flashnet supports bridge, NAT, and routed modes, and a VM can have multiple interfaces. On macOS and Windows, NAT is user-mode and needs no host setup; every OS allows up to 8 NICs per VM. Each NIC can carry optional egress bandwidth, packet-rate, and ingress bandwidth caps — omitted means uncapped — and they can be changed while the VM is running.
Can I run x86_64 Linux binaries on a Mac?
Yes, on the vz engine: flash run --engine vz … boots the VM on Apple's Virtualization.framework and registers Rosetta in the arm64 guest, so an x86_64 Linux binary simply runs. It needs Rosetta installed on the Mac (softwareupdate --install-rosetta). The vz engine enforces NIC rate caps; CPU and disk caps, snapshots and warm pools need the default hvf engine.
Can I share files between the host and guest?
Yes. Add a share when the VM is created to mount a host directory at an absolute path inside the guest — virtio-9p, or virtio-fs on the macOS vz engine. It is a direct way to provide source trees, build inputs, configuration, or generated artifacts without packaging them into the root filesystem.
Which resource controls can I change at runtime?
CPU allocation, disk capacity, disk throughput, disk IOPS, and per-NIC bandwidth and packet-rate caps can be set, changed, or removed (a value of 0 removes a cap) through the CLI or API. Memory is established as the VM's ceiling at creation, with virtio ballooning available for live reclamation inside that allocation — and, for a VM created with a reserved memory region, virtio-mem for live, host-driven growth and shrinkage of that region, no reboot required.
How do snapshots, restore, and cloning work?
flash snapshot captures a running VM's execution state. flash restore resumes the original VM, while flash clone creates a new VM identity from the same artifact using copy-on-write memory. The workload continues from the captured point instead of starting over.
What is a CPU template?
A CPU template defines the processor features presented to the guest and creates a clear compatibility contract for snapshots. host-raw is the direct choice for workloads that remain on equivalent hosts, while fleet templates provide a consistent feature set for portable restore and migration workflows.
How fast can a workload start?
FlashVMM cold-starts in milliseconds across x86_64 and arm64. For latency-sensitive paths, warm pools boot FlashVMs before demand arrives; claiming a spare assigns the workload and resource policy to an already-running VM, moving boot work entirely out of the request path.
How does FlashVMM handle block I/O?
Virtio block reads and writes are batched through a 256-entry io_uring queue, reducing syscall overhead and increasing throughput under concurrent I/O. A synchronous path remains available for host compatibility, while flush, discard, and write-zero operations preserve their direct semantics.
Can I integrate FlashVMM with CI or custom tooling?
Yes. The flash CLI is scriptable, every running VM exposes HTTP over its own endpoint (a Unix socket on Linux and macOS, a named pipe on Windows), and metrics, logs, and lifecycle events stream over SSE. CI systems, internal platforms, operator tools, and flash-mcp all build on the same control surface.
For Fleet & Cloud Operators
How does FlashVMM scale across a fleet?
Each FlashVM runs in its own process and owns its own Unix socket, resource policy, and telemetry stream. There is no central VMM daemon in the execution path. Fleet controllers can place, observe, update, snapshot, move, and remove VMs independently through the CLI, API, or MCP interface.
How should a scheduler determine host density?
The scheduler places VMs against available host capacity, while FlashVMM enforces exactly the caps the scheduler passes for each workload — and applies none it did not pass. CPU, memory, disk capacity, disk throughput, disk IOPS, and network policies remain scoped to the individual VM, giving the orchestration layer a clear and enforceable resource contract.
How does FlashVMM preserve predictable performance between tenants?
Resource controls are independent rather than bundled into a single coarse quota. CPU time is enforced by a signal-driven pacer, disk growth uses host-side admission control, disk I/O uses token buckets, and every NIC has separate egress bandwidth, egress packet-rate, and ingress bandwidth policies.
How does CPU enforcement handle continuously busy guests?
FlashVMM does not depend on the guest yielding voluntarily. A background pacer forces regular exits from guest execution, measures per-thread CPU time, and delays vCPU threads that have consumed their assigned budget. The policy stays effective even for continuously busy workloads.
How are disk capacity and I/O protected?
Disk capacity is reserved before writes are admitted, so the host enforces the VM's allocation independently of guest accounting. Separate throughput and IOPS token buckets shape the virtio block path. Operators can inspect current usage and policy through the same per-VM control API.
How does FlashVMM control network-heavy workloads?
Each NIC combines bandwidth and packet-rate enforcement. Egress traffic must satisfy both its byte and packet budgets, while ingress shaping applies backpressure through the host tap queue. Policies can be updated while the VM remains online.
How is memory managed at fleet scale?
Every VM receives a fixed memory ceiling at placement, giving the scheduler a stable capacity commitment. Virtio ballooning provides live reclamation within that ceiling; a virtio-mem region lets the host resize a tenant's live footprint on demand within its own declared bound, so density decisions are the host's to make and enforce, not the guest's to cooperate with. Copy-on-write cloning lets related workloads share unchanged snapshot pages instead of allocating a private copy for every replica.
How do warm pools handle burst demand?
Warm-pool spares boot ahead of demand and wait at zero workload CPU. A claim assigns the workload, identity, and any CPU or disk cap the controller passes to an already-running VM. Fleet controllers can maintain the pool depth they need and absorb bursts without turning every request into a cold start. A claim can also carry a snapshot instead of a workload entry point — restore-via-claim — reusing the spare's own process so a restore skips the fresh-process spawn cost too, on arm64 hosts.
How are running workloads moved between hosts?
FlashVMM composes migration from capture, transfer, and restore. The destination resumes the captured execution state rather than restarting the application, and CPU templates define the feature contract the destination must satisfy. Because each step is exposed through the standard control surface, operators can integrate migration directly into maintenance and placement workflows. Restoring onto a warm-pool spare instead of a fresh process is the same restore, applied without the spawn cost.
How do I observe a large FlashVMM fleet?
Metrics, logs, lifecycle events, and guest messages stream from every VM over SSE. Consumers receive explicit continuity signals and can persist the streams in their existing observability stack. flash_watch_fleet provides a ready-made concurrent view with every event labeled by VM identity.
How does distributed control improve fleet resilience?
VM execution and control remain local to each flashvmm process. A controller can restart, move, or upgrade independently of running workloads, and each VM continues to operate within its own process boundary rather than depending on a host-wide VMM daemon.
How fast is FlashVMM?
A full VM with its own kernel boots in 18 ms on macOS and 42 ms on Linux x86. A warm VM is claimed from a pool in 1.2 to 2 ms, a snapshot restores in as little as 7.8 ms, a sleeping VM wakes in 8.4 ms, and 50 VMs come up together in 125 ms. See Performance for every platform.
For Corporate IT
What is the FlashVMM isolation model?
Each workload runs behind a hardware virtualization boundary — KVM on Linux, Hypervisor.framework on macOS, the Windows Hypervisor Platform on Windows — in its own VMM process and guest kernel. On Linux, before guest execution begins, FlashVMM drops capabilities, enables no_new_privs, disables dumpability and core dumps, sets a file-descriptor ceiling, and applies a dedicated seccomp allowlist to every thread.
How does FlashVMM apply least privilege?
The long-running VMM never holds CAP_NET_ADMIN. Host networking is handled by the separate flashnet helper, which completes the privileged setup and removes its capabilities before launching flash run. Deployments can add dedicated users, groups, and filesystem confinement through --run-as, --run-as-group, and --jail-root.
How is access to the control API secured?
Every VM exposes its API through its own endpoint protected by the operating system: a Unix socket with file ownership and permissions on Linux and macOS, a named pipe on Windows. Private registries and sockets make the operating system the authorization boundary, so existing service-account, group, filesystem, namespace, and host-access policies carry directly into FlashVMM deployments.
How does the architecture limit blast radius?
One VM means one process, one address space, one socket, and one set of thread-level syscall policies. Workloads do not share a VMM daemon, and seccomp enforcement is applied per thread. This keeps execution and control boundaries narrow across a multi-tenant host.
Can FlashVMM operate independently of cloud services and external infrastructure?
Yes. FlashVMM is a standalone product with its own distribution, signing keys, updater, CLI, control API, and runtime. VM operation does not depend on another product's repository, CDN, control plane, or hosted account.
Can FlashVMM run in an air-gapped environment?
Yes. Core operation has no phone-home requirement or external runtime dependency. Organizations can mirror the signed distribution inside their own network and operate FlashVMM entirely within their existing security boundary.
How does FlashVMM integrate with existing infrastructure?
The CLI supports automation, the per-VM HTTP API supports platform integration, and SSE streams feed metrics, logs, and lifecycle events into existing observability and security systems. flash-mcp adds agent-driven operation without creating a separate management path.
What data does FlashVMM collect?
The website uses no analytics and sets no cookies; it stores only the visitor's theme preference in local browser storage. The FlashVMM runtime has no phone-home behavior. See Privacy for the complete policy.
What licensing and support options are available?
Licensing, deployment guidance, and commercial support can be tailored to the needs of your organization. Contact the FlashVMM team to discuss fleet size, operating environment, integration requirements, and support coverage.
For Enthusiasts
What is a microVM?
A microVM keeps the hardware isolation and private guest kernel of a virtual machine while removing legacy device emulation that modern workloads do not need. FlashVM is FlashVMM's high-performance implementation of that model, built for millisecond startup and a small resource footprint.
How is a FlashVM different from a container?
Containers share the host kernel. A FlashVM runs its own guest kernel behind hardware virtualization, inside a dedicated process and address space. That gives each workload a VM boundary while preserving the speed and operational simplicity expected from modern application infrastructure.
Can I run FlashVMM on a home server?
Yes. Any Linux x86_64 or arm64 host with KVM, an Apple Silicon Mac, or a Windows x64 or ARM64 PC with the Windows Hypervisor Platform can run FlashVMM — including compact home servers and virtual machines with nested virtualization enabled. It installs as a standalone distribution and is managed directly through the flash CLI.
Does FlashVMM run on Raspberry Pi?
Yes. FlashVMM supports 64-bit ARM systems with KVM and runs on Raspberry Pi 5, including snapshot and restore. The same arm64 build runs on ARM64 servers, giving one FlashVM model a path from compact edge hardware to large ARM infrastructure.
What hardware can run FlashVMM?
No specific server brand or accelerator is required. FlashVMM runs on macOS (Apple Silicon), Linux (x86_64 and arm64 with KVM — bare metal, nested virtualization, home servers, Raspberry Pi 5), and Windows (x64 and ARM64 with the Windows Hypervisor Platform).
How much systems experience do I need?
If you are comfortable using a terminal, you can work with FlashVMM. The CLI handles VM creation, inspection, networking, snapshots, restore, cloning, and cleanup. Kernel or hypervisor development experience is not required.
What makes FlashVMM distinctive?
FlashVMM combines fast cold starts, instant warm-pool claims, copy-on-write cloning, cross-host workload movement, per-VM resource enforcement, streaming observability, and an MCP-native control plane. It delivers these capabilities in a standalone architecture with one process and one control socket per VM.
Is FlashVMM a good fit for self-hosting?
Yes. FlashVMM provides fast, isolated Linux guest environments on a Mac, a Linux box, or a Windows PC, without requiring a hosted control plane or dashboard. It is especially well suited to developers and operators who want direct CLI control, scriptable automation, predictable resource policies, and snapshots they can move between machines.
Where should I start?
Start with installation and the first-run workflow on the Developer page. From there, explore warm pools, snapshots, cloning, migration, and LLM-native operations using the same standalone installation.