# Introduction {#mainpage} The Qpid Proton C++ API enables writing clients and servers that send and receive messages using the AMQP protocol. It is part of the [Qpid Proton](https://qpid.apache.org/proton/index.html) suite of messaging APIs. The @ref overview_page presents the API's central concepts and mechanics. The @ref tutorial_page guides you through some basic examples. See [**Examples**](examples.html) for a complete list of the sample programs, including more advanced ones. Qpid Proton C++ can be used in single- and multithreaded applications. See @ref mt_page for guidance on writing efficient multithreaded messaging applications. ## Namespaces The main @ref proton namespace contains classes and functions representing AMQP concepts and key elements of the API. Together they form a "protocol engine" API to create AMQP @ref proton::connection "connections" and @ref proton::link "links", handle @ref proton::messaging\_handler "events", and send and receive @ref proton::message "messages". See @ref overview_page for more information. The main @ref proton namespace also contains C++ classes and functions for handling AMQP- and API-specific data types. See @ref types_page for more information. The @ref proton::codec namespace contains interfaces for AMQP data encoding and decoding. The @ref proton::io namespace contains interfaces for integrating with platform-native network IO. See @ref io_page for more information. ## Conventions Elements of the API marked as **Unsettled API**, including any elements contained within them, are still evolving and thus are subject to change. They are available to use, but newer versions of Proton may require changes to your application source code. Elements marked **Deprecated** are slated for removal in a future release. Sections labeled **Thread safety** describe when and where it is safe to call functions or access data across threads. Sections called **C++ versions** discuss features of the API that depend on particular versions of C++ such as C++11. ## URLs The API uses URLs to identify three different kinds of resources. All URL argument names are suffixed with `_url`. Connection URLs (`conn_url` in argument lists) specify a target for outgoing network connections. The path part of the URL is ignored. Address URLs (`addr_url`) extend the connection URL to reference an AMQP node such as a queue or topic. The path of the URL, minus the leading slash, is treated as the AMQP address of the node. Listener URLs (`listen_url`) specify a local network address and port for accepting incoming TCP connections. The path part of the URL is ignored. The host part may be empty, meaning "listen on all available interfaces".