PipeWire API

The PipeWire API consists of several parts:

- The Stream for a convenient way to send and receive data streams from/to PipeWire.
- The Filter for a convenient way to implement processing filters.
- The Core API to access a PipeWire instance. This API is used by all clients that need to communicate with the PipeWire Daemon and provides the necessary structs to interface with the daemon.
- The Implementation API is primarily used by the PipeWire Daemon itself but also by the PipeWire Session Manager and modules/extensions that need to build objects in the graph.
- The Utilities containing various utility functions and structures.
- The Extensions for interfacing with certain extension modules.

The APIs work through proxy objects, so that calling a method on an object invokes that same method on the remote side. Marshalling and de-marshalling is handled transparently by the PipeWire Module: Protocol Native. The below graph illustrates this approach:

It is common for clients to use both the Core API and the Implementation API and both APIs are provided by the same library.

- Client Implementation
- Proxy
- Streams
- Thread Loop