# VirtualBox Main API Documentation

Welcome to the VirtualBox Main documentation. This describes the so-called VirtualBox "Main API", which comprises all public COM interfaces and components provided by the VirtualBox server and by the VirtualBox client library.

VirtualBox employs a client-server design, meaning that whenever any part of VirtualBox is running -- be it the Qt GUI, the VBoxManage command-line interface or any virtual machine --, a background server process named VBoxSVC runs in the background. This allows multiple processes to cooperate without conflicts. Some of the COM objects described by this Main documentation "live" in that server process, others "live" in the local client process. In any case, processes that use the Main API are using inter-process communication to communicate with these objects, but the details of this are hidden by the COM API.

On Windows platforms, the VirtualBox Main API uses Microsoft COM, a native COM implementation. On all other platforms, Mozilla XPCOM, an open-source COM implementation, is used.

All the parts that a typical VirtualBox user interacts with (the Qt GUI, the VBoxManage command-line interface and the VBoxVRDP server) are technically front-ends to the Main API and only use the interfaces that are documented in this Main API documentation. This ensures that, with any given release version of VirtualBox, all capabilities of the product that could be useful to an external client program are always exposed by way of this API.

The complete API is described in a source IDL file, called VirtualBox.idl. This contains all public interfaces exposed by the Main API. Two interfaces are of supreme importance and will be needed in order for any front-end program to do anything useful: these are IVirtualBox and ISession. It is recommended to read the documentation of these interfaces first.

Note:
  VirtualBox.idl is automatically generated from a generic internal file to define all interfaces in a platform-independent way for documentation purposes. This generated file is not a syntactically valid IDL file and must not be used for programming.