Time
About 30 secondsonce the image is downloaded
Download
Under 1 GBUbuntu 26.04 LTS Server, QCOW2
You get
Ubuntu Serveryour account, key and hostname set
Disk size
Just type itgrown for you, no qemu-img
VideoThe whole thing in real time, from choosing the image to a signed-in terminal. No cuts.

Every step below has a screenshot, and you can click any of them to see it full size. Most were taken on an Intel MacBook Pro, which is why the file names end in amd64. On an Apple silicon Mac, Velo Workspaces picks the arm64 image and everything else looks the same.

Start a new workspace

In the sidebar, under Library, pick the kind of workspace you want: Developer, Office & Study, AI or Disposable. The kind decides where the workspace is listed and which hardware profile it starts with; you can change the hardware later. Then click + at the top right of the window.

Velo Workspaces main window with the + button highlighted in the top-right cornerClick to enlarge
An empty library. The + button at the top right opens the new-workspace assistant.

Choose Cloud image

The assistant has four steps: Source, Image, Configure and Review. On the first, choose Cloud image. It's marked Recommended because there's no installer to sit through: a cloud image is an installed system, and Velo Workspaces personalizes it the first time it starts.

Select Image step with Cloud image highlightedClick to enlarge
Cloud image, Installer image or an existing disk. This guide uses Cloud image.

The other two choices lead elsewhere: Installer image runs a distribution's own installer, and Boot from an existing virtual disk starts from a disk you already have, including a QCOW2 file from UTM or QEMU.

Pick Ubuntu and download it

Choose Ubuntu in the Distributions list, then a release. 26.04 LTS (Resolute Raccoon) is the recommended one; 24.04 LTS (Noble Numbat) is there if you need to match an older server. Click Download. The image comes straight from cloud-images.ubuntu.com and is under 1 GB.

Choose a Cloud Image step with Ubuntu selected and releases 26.04 LTS and 24.04 LTSClick to enlarge
Ubuntu's releases, 26.04 LTS recommended. This Mac already had an older build, so the button reads Download Update.
Ubuntu cloud image downloading, 303.5 MB of 865.1 MBClick to enlarge
The download keeps going if you close the window.
Ubuntu cloud image downloaded and verified, with Continue highlightedClick to enlarge
Verified against Ubuntu's checksum and selected.

When the download finishes, Velo Workspaces checks the file against the SHA-256 checksum Ubuntu publishes and marks it Verified. The image stays in your library, so your next Ubuntu workspace skips the download; when Ubuntu publishes a newer build, this panel says so. Click Continue.

Configure the workspace

This screen is the whole setup. cloud-init applies all of it the first time the workspace starts.

Configure step with workspace name, hardware profiles, the Storage field highlighted, account and SSH public keysClick to enlarge
Name, hardware profile, disk size and the account cloud-init creates.
  • Workspace Name is also the guest's hostname: “Ubuntu” becomes ubuntu.
  • Profile sets CPU and memory, for example Code & Build (4 CPU, 8 GB) or AI Sandbox (8 CPU, 16 GB). Show Advanced Settings lets you set exact numbers, and turn on a shared folder, AI Bridge or Rosetta for Linux.
  • Storage is the disk size Ubuntu gets: type the size you need, anything from 8 GB up. More on that just below, because it's the step that usually hurts.
  • Username and Password are for your account. The password is required even if you only sign in with keys, because sudo and the console ask for it.
  • SSH Public Keys already lists this Mac's key, which the built-in terminal signs in with. To use Terminal or VS Code with your own key too, click Add Other Public Keys… and paste your ~/.ssh/id_ed25519.pub.
  • Allow SSH logins with the password is off, so SSH accepts keys only. Leave it that way unless you have a reason not to.

Copy your public key with pbcopy < ~/.ssh/id_ed25519.pub in Terminal, then paste it into the box. No key yet? ssh-keygen -t ed25519 makes one.

The disk size: type it, and you’re done

Ubuntu publishes its cloud image with a disk of about 3.5 GB, barely more than the system on it. Boot it as it is and you're out of space after the first few packages. That's why “how do I resize a cloud image” is one of the most common questions about them, and the usual answer is a chore:

The usual way

# on the host, with the VM stopped
qemu-img resize ubuntu.img 40G

# then, inside the VM
sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1

Three tools, two places, and the right device and partition names to find first. If the partition table's backup header is left in the middle of the bigger disk, fix that before growpart will cooperate.

In Velo Workspaces

Type 40 in Storage.

That's all. The disk, its partition and its filesystem are all 40 GB when you first sign in. Nothing to run on your Mac, nothing to run in Ubuntu.

Here's what happens behind that one field. While Velo Workspaces converts the image, it grows the disk to the size you typed and moves the partition table's backup copy to the new end of the disk, before Ubuntu ever sees it. On the first boot, cloud-init grows the root partition and the filesystem to fill the disk. The disk is sparse, too: a 40 GB workspace uses only as much space on your Mac as Ubuntu has actually written. If you'd like to see every step done by hand, Ubuntu cloud images on a Mac, by hand walks through them with QEMU.

Pick the size you'll need now. Creation is when all of this happens by itself. You can enlarge the disk later in the workspace's Resources tab while it's stopped, but then growing the partition inside Linux is up to you, with growpart and resize2fs, as the app reminds you. Since unused space costs nothing on your Mac, it's fine to be generous.

Review and create

Review & Launch lists what's about to happen. Setup reads Automatic: cloud-init and the source disk shows Verified. Click Create Workspace.

Review and Launch step showing all checks passed, Setup Automatic cloud-init, and the Create Workspace buttonClick to enlarge
Everything in one place before anything is created.

Velo Workspaces then turns the downloaded QCOW2 file into the raw disk Apple's Virtualization framework boots, at the size you chose. It takes a few seconds, once per workspace, and the image in your library stays as it is.

Converting disk image progress at 43 percentClick to enlarge
Converting disk image and growing it to your size: a few seconds, once per workspace.

Watch it boot

The workspace starts at once and its console opens. The kernel and systemd scroll past, then a login prompt appears. You don't need to sign in here: while it booted, cloud-init grew the filesystem to fill the disk, created your account, set the hostname and installed your keys.

Ubuntu console showing systemd boot messagesClick to enlarge
First boot, a second or two in.
Ubuntu console showing the ubuntu login promptClick to enlarge
The login prompt means the boot is done.

Open the terminal

Select the workspace and open its Access tab. It has everything for getting in: host, user and port, a ready-made ssh command, and a green SSH ready as soon as the workspace answers.

Access tab with SSH details, SSH ready, Open Terminal highlighted, serial console and VS Code Remote settingsClick to enlarge
SSH details, a command for other computers, the serial console and a block for VS Code.

Click Open Terminal. A terminal window opens, already signed in as your user with this Mac's key. It has tabs: + opens another session.

Built-in terminal signed in to Ubuntu 26.04, showing usage of / as 10.6% of 18.25GBClick to enlarge
Signed in over SSH as the account from step 4. Note the size of /.

Look at the system information Ubuntu prints when you sign in: Usage of /: 10.6% of 18.25GB. This workspace was given 20 GB in step 4, and the root filesystem already fills it, from an image that started at about 3.5 GB. No qemu-img, no growpart. Run df -h / any time to see the same thing.

Pro feature. The built-in terminal is part of Velo Workspaces Pro, which you can try free for a week. Without it, copy the ssh command from the Access tab into Terminal. That uses the keys in your ~/.ssh folder, so the workspace has to trust one of them: the SSH and VS Code guide shows how.

If something doesn't work

SSH ready never appears

Velo Workspaces needs Local Network access to reach a workspace. If macOS turned it off, the Access tab says so and has a button that opens the setting: System Settings › Privacy & Security › Local Network. Otherwise, give the first boot a few more seconds.

Terminal says Permission denied (publickey)

The ssh command in Terminal uses the keys in ~/.ssh, not the one Velo Workspaces keeps in your Keychain. Add your own public key when you create the workspace, or use one key for everything as the SSH and VS Code guide describes.

I need a bigger disk

Enlarge it in the workspace's Resources tab while the workspace is stopped, then grow the partition and filesystem inside Ubuntu: sudo growpart /dev/vda 1 and sudo resize2fs /dev/vda1 on Ubuntu's default layout (check yours with lsblk). Next time, give it more when you create it, where it all happens for you.

Where to go next