PULL REQUESTS ARE IGNORED. Read-only mirror of https://libvirt.org/git/?p=libvirt-rust.git
Switch branches/tags
Nothing to show
Clone or download
berrange travis: fix syntax for script commands
The script: commands were listed without a leading '-' which caused
travis to concatenate them into a single command. This meant the second
command became a set of arguments to the first command. Historically
cargo ignored these extra args so the mistake was not noticed, but it
now generates a fatal error.

Reviewed-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Latest commit 18e97bd Apr 24, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
tools add filter_by arg Apr 14, 2017
.gitpublish git: add config file telling git-publish how to send patches Apr 24, 2018
COPYING adds licensing Apr 11, 2017
README.md README: update libvirt.org links Dec 7, 2017


This crate provides a Rust bindings to the libvirt C library

The bindings try to be a direct mapping of the underling C API with some differences to match Rust conventions.

Important considerations

Make sure the libvirt-dev or libvirt-devel package is installed (or that the development files are in your include path).

The bindings do not implement all of what the C library is providing but we do consider the current API quite stable.

The bindings use standard errors handling from Rust. Each method (there are some exceptions) returns a type Option or Result.



CI is executing tests automatically from libvirt 1.2.0 to 3.3.0. Using Rust from stable, beta to nightly.

To execute locally tests and other excerices

cargo test --verbose

Integration tests use a real connection to libvirtd. For instance integration_qemu.rs uses a qemu:///system connection. They are all ignored by default.

cargo test --verbose -- --ignored

Similar to libvirt-go, the integration tests also require that libvirtd listens on localhost with sasl auth. This can be setup by editing /etc/libvirt/libvirtd.conf as follows:


and starting libvirtd with the --listen flag (this can be set in /etc/sysconfig/libvirtd to make it persistent).

Then create a sasl user

saslpasswd2 -a libvirt user

and enter "pass" as the password.

To run examples

# cargo run --example hello
# cargo run --example migrate -- qemu:///system tcp+qemu:// myguest


The libvirt project aims to add support for new APIs to libvirt-rs as soon as they are added to the main libvirt C library. If you are submitting changes to the libvirt C library API, please submit a libvirt-rs change at the same time.

Bug fixes and other improvements to the libvirt-rs library are welcome at any time. The preferred submission method is to use git send-email to submit patches to the libvir-list@redhat.com mailing list. eg. to send a single patch

git send-email --to libvir-list@redhat.com --subject-prefix "PATCH rust"
--smtp-server=$HOSTNAME -1

Or to send all patches on the current branch, against master

git send-email --to libvir-list@redhat.com --subject-prefix "PATCH rust"
--smtp-server=$HOSTNAME --no-chain-reply-to --cover-letter --annotate

Note the master GIT repository is at

The following automatic read-only mirrors are available as a convenience to allow contributors to "fork" the repository:

While you can send pull-requests to these mirrors, they will be re-submitted via email to the mailing list for review before being merged, unless they are trivial/obvious bug fixes.

The list of missing methods can be displayed with:

$ python tools/api_tests.py virDomain
{'file': 'libvirt-domain', 'name': 'virDomainMigrateSetMaxSpeed', 'module': 'libvirt-domain'}
{'file': 'libvirt-domain', 'name': 'virDomainRef', 'module': 'libvirt-domain'}
{'file': 'libvirt-domain', 'name': 'virDomainGetMemoryParameters', 'module': 'libvirt-domain'}