Freestyle Docs

Freestyle / Docs

Base Snapshots

Ready-to-boot public images and their sizes.

Boot a base snapshot by passing its slug as snapshotId. They start in about a second:

const { vm } = await freestyle.vms.create({
  // Required: a VM reaches nothing it has not been allowed to.
  firewall: { rules: [{ action: "allow", source: {}, destination: { public: true } }] }, snapshotId: "freestyle/debian-13" });

Hardware is baked in: a snapshot boots with the vCPU, memory, and disk listed below. Omit snapshotId to get the default.

Available images

SlugBasevCPUMemoryDisk
BusyBox1128 MiB1 GB
BusyBox2512 MiB2 GB
Debian 1348 GiB16 GB
Debian 13816 GiB32 GB
Debian 131632 GiB64 GB
defaultUbuntu 24.04 LTS48 GiB16 GB
Ubuntu 24.04 LTS816 GiB32 GB
Ubuntu 24.04 LTS, systemd48 GiB16 GB

Click a slug to copy it.

Which sizes you can use depends on your plan’s per-VM maximums.

Which one to pick

  • freestyle/ubuntu-2404 — the default. Broadest compatibility; everything in the guides works here. It is built from the Ubuntu container base image, so it starts where a container starts: no systemd, and no ping/curl until you apt install them.
  • freestyle/ubuntu-2404-systemd — the same Ubuntu, built to be a machine instead. systemd is pid 1, so systemctl, journalctl, units, and timers all work; ping, curl, dig, ss, traceroute, tcpdump, git, python3, vim, sudo, and man pages are already there; and wg/wg-quick run against a kernel with WireGuard built in, so a VM can join a tunnel with nothing to install. There is an ubuntu user with passwordless sudo alongside root. Newer than the others — pick it when you want a normal Linux box, and freestyle/ubuntu-2404 when you want the long-standing default.
  • freestyle/debian-13 — leaner Ubuntu alternative: apt and glibc without the extras. Also a container base image, with the same caveat.
  • freestyle/busybox-nano — minimal appliance: no package manager, musl, sh only. For smoke tests and CI. Too small for editor connections: the VS Code/Cursor remote server needs a dynamic libc and more than nano’s 128 MiB of memory. Terminal SSH is fine — for IDE work, pick an Ubuntu or Debian snapshot.
  • -large/-xl are the same images with more memory and disk.

Custom snapshots

Start from a base snapshot, set it up however you want, resize if you need more, and capture its exact memory and disk. The source VM must be running or paused:

const { snapshotId, snapshot } = await vm.snapshot({
  slug: "configured-worker",
});

const { vm: clone } = await freestyle.vms.create({
  // Required: a VM reaches nothing it has not been allowed to.
  firewall: { rules: [{ action: "allow", source: {}, destination: { public: true } }] }, snapshotId });

New snapshots are private, and snapshot() returns once the snapshot is fully materialized and ready to boot.

Manage snapshots from freestyle.vms.snapshots:

const { snapshots } = await freestyle.vms.snapshots.list({ sourceVmId: vmId });
const current = await freestyle.vms.snapshots.get(snapshotId);
await freestyle.vms.snapshots.update(snapshotId, { slug: "golden-image" });
await freestyle.vms.snapshots.delete(snapshotId);
esc