## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Quick Start

This guide walks you through creating your first VM in under a minute.

## Imperative (One-Off)

Create and start a VM from an Ubuntu cloud image:

    vmctl create \
      --name demo \
      --image-url https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img \
      --vcpus 2 \
      --memory 2048 \
      --start

Wait a moment for the image to download and the VM to boot, then connect:

    vmctl ssh demo

When you're done:

    vmctl destroy demo

## Declarative (Reproducible)

Create a `VMFile.kdl` in your project directory:

    vm "demo" {
        image-url "https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"
        vcpus 2
        memory 2048

        cloud-init {
            hostname "demo"
        }

        ssh {
            user "ubuntu"
        }
    }

Bring it up:

    vmctl up

vmctl will download the image (cached for future use), create a QCOW2 overlay, generate an Ed25519 SSH keypair, build a cloud-init ISO, and boot the VM.

Connect:

    vmctl ssh

Tear it down:

    vmctl down

Or destroy it completely (removes all VM files):

    vmctl down --destroy

## Next Steps

- Concepts: How vmctl Works for an understanding of what happens under the hood.
- Tutorials: Declarative Workflow for a complete walkthrough with provisioning.
- VMFile.kdl Reference for the full configuration format.