# Overview

## Introduction to libnm

libnm is a client library for NetworkManager, the standard Linux network management service. NetworkManager supports a wide variety of network configuration scenarios, hardware devices and protocol families. Most of the functionality is exposed on a D-Bus API, allowing other tools to use the functionality provided by NetworkManager.

libnm provides C language bindings for functionality provided by NetworkManager, optionally useful from other language runtimes as well.

libnm maps fairly closely to the actual D-Bus API that NetworkManager provides, wrapping the remote D-Bus objects as native GObjects, mapping D-Bus signals and properties to GObject signals and properties, and providing helpful accessor and utility functions. However, unlike the old libnm-util/libnm-glib API, the mapping to the D-Bus API is not exact, and various inconveniences and historical anomolies of the D-Bus API are papered over.

The following is a rough overview of the libnm object structure and how to use the various parts of it: