The Handbook

    Theme
    • Guides
        • Check a system before installing FreeBSD
        • Orient a Linux administrator on FreeBSD
        • Supported FreeBSD releases
        • Choose a FreeBSD documentation and support channel
        • Move files safely without GNU mv -t
        • Update, upgrade, or update packages?
        • Upgrade 14.4 or 15.0 to FreeBSD 15.1
        • Choose packages, ports, or poudriere
        • Choose the quarterly or latest package branch
        • Choose a FreeBSD download or package mirror
        • Make a system setting persistent
        • Configure locale, keyboard, and time zone
        • Configure a serial console for recovery
        • Choose a custom kernel, module, or loader setting
        • Run a Linux binary with the compatibility layer
        • Check desktop and laptop hardware before installation
        • Choose and check a graphics driver
        • Choose Xorg or Wayland
        • Build a maintainable desktop baseline
        • Install and check a desktop browser
        • Check laptop Wi-Fi, power, and suspend
        • Check multimedia readiness
        • Choose and configure a printing stack
        • Run Windows applications with Wine
        • Snapshot and replicate a ZFS dataset
        • Choose a filesystem and storage layout
        • Operate ZFS without losing the recovery path
        • Restore files from a ZFS snapshot
        • Read ZFS pool health and run a scrub
        • Replace a failed device in a ZFS mirror
        • Replicate a ZFS dataset over SSH
        • Change PF safely on a remote host
        • Configure a narrow WireGuard tunnel
        • Plan a FreeBSD home server
        • Choose a mail server or an outgoing relay
        • Publish a network service safely
        • Choose a jail network model
        • Choose native jails or a jail manager
        • Choose a jail or a bhyve virtual machine
        • Establish a FreeBSD security baseline
        • Choose a MAC policy
        • Audit security-relevant activity
        • Start a DTrace performance investigation
    • Integrations
        • Create a first jail with Bastille
        • Compare jail managers and OCI tooling
        • Publish a Bastille service through PF
        • Mount a ZFS dataset in a Bastille jail
        • Update and upgrade Bastille jails
        • Back up and restore a Bastille jail
        • Prepare bhyve and vm-bhyve
        • Choose NFS or Samba for file sharing
        • Choose ZFS backup automation
        • Operate a signed poudriere repository
        • Manage FreeBSD configuration with Ansible or Salt
        • Run Motion with webcamd on FreeBSD
        • Design a reverse proxy, certificates, and monitoring
    • FAQ
      • Troubleshooting
          • Recover an interrupted freebsd-update run
          • Resolve a package repository or ABI mismatch
          • Diagnose the FreeBSD boot path
          • Recover with a ZFS boot environment
          • Diagnose DNS, routing, and firewall paths
          • Diagnose network mbuf exhaustion
          • Bind a service to a low port without running it as root
          • Diagnose audio output or input
          • Diagnose webcamd, cuse, and a webcam
          • Fix USB device permissions without opening every device
      • About this handbook
      • Synopsis
      • Confirm the host can run bhyve
      • Decide storage and recovery
      • Install and initialize the maintained manager
      • Choose the virtual network before attaching it
      • Verify the control plane
      • Primary references

      Prepare bhyve and vm-bhyve

      Last reviewed
      13 August 2026
      Applies to
      15.1-RELEASE, 15.0-RELEASE, 14.4-RELEASE

      Synopsis #

      bhyve is the FreeBSD base-system hypervisor. vm-bhyve adds guest configuration, datastores, virtual switches, console handling, and rc.d integration. Current stewardship is under the FreeBSD organization at github.com/freebsd/vm-bhyve; obsolete repositories should not be used as implementation authority.

      This guide stops after host initialization and network design. Guest installation deserves testing against a specific image and firmware combination before tested_on metadata can be claimed.

      Confirm the host can run bhyve #

      On amd64, bhyve requires Intel EPT or AMD RVI/NPT. On aarch64, support has additional limitations. Review the boot messages:

      $ grep -E 'VT-x|EPT|POPCNT|SVM' /var/run/dmesg.boot
      # kldload vmm
      $ kldstat -n vmm
      

      Intel hosts should report EPT; unrestricted guest support is relevant for Linux guests and FreeBSD guests with more than one vCPU. Confirm firmware virtualization settings when the expected capability is absent.

      Decide storage and recovery #

      vm-bhyve can use a directory or ZFS dataset. A dedicated dataset makes capacity, snapshots, and replication visible:

      # zfs create tank/vm
      $ zfs list tank/vm
      

      A snapshot of a running guest disk is not automatically application-consistent. Define guest shutdown, filesystem freeze, or application quiescing before treating a host snapshot as a backup. Replicate the dataset according to Snapshot and replicate a ZFS dataset , with guest-consistency controls added.

      Install and initialize the maintained manager #

      Install the FreeBSD package and persist the datastore:

      # pkg install vm-bhyve
      # sysrc vm_enable=YES
      # sysrc vm_dir='zfs:tank/vm'
      # vm init
      

      Copy the packaged sample templates into the initialized datastore. Resolve the dataset mount point first rather than copying to a guessed path:

      $ zfs get -H -o value mountpoint tank/vm
      # cp /usr/local/share/examples/vm-bhyve/* /MOUNTPOINT/.templates/
      

      Replace /MOUNTPOINT with the returned mount point. Review a template before creating a guest; CPU, memory, disk, loader, and network values are policy.

      Choose the virtual network before attaching it #

      vm-bhyve virtual switches can bridge guests to a physical network or support other topologies. Bridging a physical interface can move the host address to a bridge and interrupt remote access. Make such changes from a console or with a tested recovery path.

      Inventory the existing host first:

      $ ifconfig -a
      $ netstat -rn
      # pfctl -sr
      # vm switch list
      

      Only after selecting an interface and understanding its host address configuration should a public switch be created and attached:

      # vm switch create public
      # vm switch add public em0
      # vm switch list
      

      em0 is an example, not a default. On a remote production host, follow Change PF safely on a remote host and the FreeBSD Handbook bridge warning before changing the live path.

      Verify the control plane #

      Confirm initialization without starting a guest:

      # service vm status
      # vm list
      # vm switch list
      $ zfs list -r tank/vm
      

      Keep vm-bhyve configuration, templates, downloaded-image provenance, guest backups, and network design under the same change-control boundary. Autostart should be added only after an individual guest shuts down cleanly and recovers after a host reboot.

      Primary references #

      • FreeBSD Handbook: bhyve
      • Current vm-bhyve repository
      • bhyve(8)
      • vmm(4)
      • bridge(4)

      Independent documentation. Not affiliated with or endorsed by the FreeBSD Project or the FreeBSD Foundation.

      Report a bug
      • Synopsis
      • Confirm the host can run bhyve
      • Decide storage and recovery
      • Install and initialize the maintained manager
      • Choose the virtual network before attaching it
      • Verify the control plane
      • Primary references