# WirePlumber

WirePlumber is a modular session / policy manager for PipeWire and a GObject-based high-level library that wraps PipeWire's API, providing convenience for writing the daemon's modules as well as external tools for managing PipeWire.

The WirePlumber daemon implements the session & policy management service. It follows a modular design, having plugins that implement the actual management functionality.

The WirePlumber Library provides API that allows you to extend the WirePlumber daemon, to write management or status tools for PipeWire (apps that don't do actual media streaming) and to write custom session managers for embedded devices.

## Documentation

The latest version of the documentation is available online here

# Table of Contents

The WirePlumber Daemon

- Installing WirePlumber
  - Dependencies
  - Compilation
  - Additional options
  - Installation
- Running the WirePlumber daemon
  - Systemd
  - Run from the PipeWire source tree
  - Run independently or without installing
  - Replacing pipewire-media-session
- Configuration
  - The configuration file
  - Components & Profiles
  - Configuration option types
  - Modifying configuration
  - Migrating configuration from 0.4
  - Well-known features
  - Well-known settings
  - ALSA configuration
  - Bluetooth configuration
  - Access configuration
- Locations of WirePlumber's files
  - Location of configuration files
  - Location of scripts
  - Location of modules
- Debug Logging
  - Changing log level at runtime
  - Changing log level via static configuration
  - Examples
  - Relationship with the GLib log handler & G_MESSAGES_DEBUG
  - Relationship with the PipeWire log handler & PIPEWIRE_DEBUG
- Running multiple instances
  - Systemd integration

WirePlumber's Design

- Understanding Session Management
  - High-level areas of operation
- Understanding WirePlumber
  - The library
  - The daemon
- Events and Hooks
  - Events
  - Hooks
  - The Event Dispatcher
  - Scheduling of events and hooks

WirePlumber's Policies

- Linking Policy
  - Introduction
  - Stream node linking properties
  - Linking settings
- Smart Filters
  - Introduction
  - Filter properties
  - Filters metadata
- Automatic Software DSP
  - Introduction
  - Activating
  - Matching a node
  - Configurable properties
  - Examples

The WirePlumber Library

- C API Documentation
  - Library Initialization
  - Core
  - WpObject
  - Object Manager
  - Object Interest
  - Iterator
  - Transitions
  - Error Codes
  - Debug Logging
  - PipeWire Proxy
  - PipeWire Object
  - PipeWire Global Object Proxy
  - PipeWire Node
  - PipeWire Port
  - PipeWire Link
  - PipeWire Device
  - PipeWire Client
  - PipeWire Metadata
  - Spa Device
  - Local Nodes
  - Local Modules
  - Properties Dictionary
  - Spa Type Information
  - Spa Json
  - Spa Pod (Plain Old Data)
  - Plugins
  - Component Loader
  - Settings
  - Static Configuration
  - Session Items
  - Session Items Interfaces
  - Session Items Factory
  - State Storage
  - Base Directories File Lookup

Scripting

- Lua API Documentation
  - Introduction
  - GObject Integration
  - Core
  - Debug Logging
  - WpObject
  - Object Manager
  - Object Interest
  - PipeWire Proxies
  - Session Item
  - Spa Device
  - Spa Pod
  - Local Modules
- Existing Scripts
  - Default Nodes Scripts
  - Device Profile/Route Management Scripts
  - Linking Scripts
- Custom Scripts
  - Full example

Tools

- wpctl(1)
  - SYNOPSIS
  - DESCRIPTION
  - COMMANDS
  - SPECIAL IDENTIFIERS
  - EXIT STATUS
  - EXAMPLES
  - NOTES
  - SEE ALSO

Resources

- Contributing to WirePlumber
  - Coding style
  - Tests
  - Running in gdb / valgrind / etc...
  - Merge requests
- Testing
  - Automated unit tests
  - WirePlumber examples
  - Native API clients
  - PulseAudio compat API clients
  - ALSA compat API clients
  - JACK compat API clients
  - Device Reservation
- Community Resources
  - Discussion chat room
  - Mailing list
  - Reporting issues
- Releases
  - WirePlumber 0.5.14
  - Past releases