Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Dead simple virtual machine management over many hypervisors.
Branch: master


Virtuoso is a Ruby library that provides dead simple virtual machine management across many hypervisors, using the powerful libvirt library underneath. Libvirt is an extremely powerful library, and the focus of Virtuoso is to provide an extremely simple, common API for managing virtual machines at the cost of sacrificing some of libvirt's power.

Currently supported hypervisors:

  • VirtualBox

Since Virtuoso is built on top of libvirt, it isn't too difficult to add support for another hypervisor. The reason a libvirt-supported hypervisor may not be supportd by Virtuoso at this time is most likely because I don't have experience using that hypervisor. Open an issue if you'd like to see support for another hypervisor.


The library is packaged as a gem:

gem install virtuoso

Additionally, you may need to install libvirt, the C-library used to interface with the various hypervisors. On OS X the recommended way is using homebrew:

brew install libvirt

If you're on linux, your package manager should contain a compatible version of libvirt.

Project Status and Warning

Warning: This project is extremely alpha. The API will most definitely change multiple times in the near future and the project itself will be a fast moving target. This status will be updated in time as the project matures.


Below is an example of starting a VM with VirtualBox. All drivers (for different hypervisors) are required to conform to the same API, so the usage is the same for all other hypervisors.

require 'virtuoso'

# Connect to a libvirt instance. Virtuoso instantiates the proper
# hypervisor.
hypervisor = Virtuoso.connect("vbox:///session")

# Create a new VM within the hypervisor and start it
vm = hypervisor.new_vm = "My Virtuoso VM"
vm.disk_image = "/home/mitchellh/lucid.vmdk"

# Watch it booting...
sleep 5

# Stop and destroy it
sleep 3
Something went wrong with that request. Please try again.