diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+# 7.2.3
+
+## Packaging
+
+* Add a `wireplumber` flag, enabled by default, so package sets without
+  WirePlumber 0.5 development libraries can disable the WirePlumber-backed
+  audio modules and still build taffybar.
+
 # 7.2.2
 
 ## Packaging
diff --git a/src/System/Taffybar/Information/Audio.hs b/src/System/Taffybar/Information/Audio.hs
--- a/src/System/Taffybar/Information/Audio.hs
+++ b/src/System/Taffybar/Information/Audio.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE KindSignatures #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -44,11 +45,15 @@
 import Control.Monad.IO.Class (liftIO)
 import Control.Monad.STM (atomically)
 import Data.Proxy (Proxy (..))
+#ifdef WITH_WIREPLUMBER
 import qualified Data.Text as T
+#endif
 import GHC.TypeLits (KnownSymbol, SomeSymbol (..), Symbol, someSymbolVal, symbolVal)
 import System.Taffybar.Context (TaffyIO)
 import qualified System.Taffybar.Information.PulseAudio as PulseAudio
+#ifdef WITH_WIREPLUMBER
 import qualified System.Taffybar.Information.WirePlumber as WirePlumber
+#endif
 
 data AudioBackend
   = PulseAudioBackend
@@ -74,18 +79,26 @@
 
 audioBackendAvailable :: IO AudioBackend
 audioBackendAvailable = do
+#ifdef WITH_WIREPLUMBER
   pulseAvailable <- PulseAudio.pulseAudioAvailable
   pure $
     if pulseAvailable
       then PulseAudioBackend
       else WirePlumberBackend
+#else
+  pure PulseAudioBackend
+#endif
 
 getAudioInfo :: String -> String -> IO (Maybe AudioInfo)
 getAudioInfo pulseSink wirePlumberNode = do
   backend <- audioBackendAvailable
   case backend of
     PulseAudioBackend -> fmap fromPulseAudioInfo <$> PulseAudio.getPulseAudioInfo pulseSink
+#ifdef WITH_WIREPLUMBER
     WirePlumberBackend -> fmap fromWirePlumberInfo <$> WirePlumber.getWirePlumberInfo wirePlumberNode
+#else
+    WirePlumberBackend -> wirePlumberNode `seq` pure Nothing
+#endif
 
 getAudioInfoChan :: String -> String -> TaffyIO (TChan (Maybe AudioInfo))
 getAudioInfoChan pulseSink wirePlumberNode =
@@ -122,23 +135,35 @@
     PulseAudioBackend -> do
       (pulseChan, pulseVar) <- PulseAudio.getPulseAudioInfoChanAndVar pulseSink
       buildMappedChanVar fromPulseAudioInfo pulseChan pulseVar
+#ifdef WITH_WIREPLUMBER
     WirePlumberBackend -> do
       (wireChan, wireVar) <- WirePlumber.getWirePlumberInfoChanAndVar wirePlumberNode
       buildMappedChanVar fromWirePlumberInfo wireChan wireVar
+#else
+    WirePlumberBackend -> liftIO $ wirePlumberNode `seq` buildUnavailableChanVar
+#endif
 
 toggleAudioMute :: String -> String -> IO Bool
 toggleAudioMute pulseSink wirePlumberNode = do
   backend <- audioBackendAvailable
   case backend of
     PulseAudioBackend -> PulseAudio.togglePulseAudioMute pulseSink
+#ifdef WITH_WIREPLUMBER
     WirePlumberBackend -> WirePlumber.toggleWirePlumberMute wirePlumberNode
+#else
+    WirePlumberBackend -> wirePlumberNode `seq` pure False
+#endif
 
 adjustAudioVolume :: String -> String -> Int -> IO Bool
 adjustAudioVolume pulseSink wirePlumberNode deltaPercent = do
   backend <- audioBackendAvailable
   case backend of
     PulseAudioBackend -> PulseAudio.adjustPulseAudioVolume pulseSink deltaPercent
+#ifdef WITH_WIREPLUMBER
     WirePlumberBackend -> WirePlumber.adjustWirePlumberVolume wirePlumberNode deltaPercent
+#else
+    WirePlumberBackend -> wirePlumberNode `seq` pure False
+#endif
 
 pulseSinkToWirePlumberNode :: String -> String
 pulseSinkToWirePlumberNode "" = defaultAudioWirePlumberNode
@@ -167,6 +192,15 @@
             writeTChan chan info
     pure $ AudioInfoChanVar (chan, var)
 
+#ifndef WITH_WIREPLUMBER
+buildUnavailableChanVar :: IO (AudioInfoChanVar a)
+buildUnavailableChanVar = do
+  chan <- newBroadcastTChanIO
+  var <- newMVar Nothing
+  atomically $ writeTChan chan Nothing
+  pure $ AudioInfoChanVar (chan, var)
+#endif
+
 fromPulseAudioInfo :: PulseAudio.PulseAudioInfo -> AudioInfo
 fromPulseAudioInfo info =
   AudioInfo
@@ -176,6 +210,7 @@
       audioBackend = PulseAudioBackend
     }
 
+#ifdef WITH_WIREPLUMBER
 fromWirePlumberInfo :: WirePlumber.WirePlumberInfo -> AudioInfo
 fromWirePlumberInfo info =
   AudioInfo
@@ -184,6 +219,7 @@
       audioNodeName = T.unpack $ WirePlumber.wirePlumberNodeName info,
       audioBackend = WirePlumberBackend
     }
+#endif
 
 encodeAudioSpecs :: String -> String -> String
 encodeAudioSpecs pulseSink wirePlumberNode = pulseSink ++ "\n" ++ wirePlumberNode
diff --git a/taffybar.cabal b/taffybar.cabal
--- a/taffybar.cabal
+++ b/taffybar.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.4
 name: taffybar
-version: 7.2.2
+version: 7.2.3
 synopsis: A desktop bar similar to xmobar, but with more GUI
 description: Taffybar is a desktop status bar with GTK widgets for window
   manager state, system information, tray icons, and custom user modules.
@@ -39,6 +39,11 @@
 flag Deprecated-Pager-Hints
   description: Enables the deprecated System.Taffybar.Support.PagerHints module, which has been moved to xmonad-contrib.
 
+flag wireplumber
+  description: Enables WirePlumber/PipeWire audio support.
+  default: True
+  manual: True
+
 common haskell
   default-extensions:
     DeriveGeneric
@@ -90,7 +95,6 @@
                , gi-gtk3 >= 3.0.44 && < 4
                , gi-gtk-hs >= 0.3.17 && < 0.4
                , gi-pango >= 1.0 && < 1.1
-               , gi-wireplumber >= 0.5.14.2 && < 0.6
                , gtk-scaling-image >= 0.1.0.1 && < 0.2
                , gtk-sni-tray >= 0.2.1.2 && < 0.3
                , gtk-strut >= 0.1.4.1 && < 0.2
@@ -143,7 +147,6 @@
                  , System.Taffybar.Information.Hyprland
                  , System.Taffybar.Information.HyprlandWorkspaceHistory
                  , System.Taffybar.Information.PulseAudio
-                 , System.Taffybar.Information.WirePlumber
                  , System.Taffybar.Information.AnthropicUsage
                  , System.Taffybar.Information.Backlight
                  , System.Taffybar.Information.ASUS
@@ -243,7 +246,6 @@
                  , System.Taffybar.Widget.Weather
                  , System.Taffybar.Widget.Windows
                  , System.Taffybar.Widget.Workspaces
-                 , System.Taffybar.Widget.WirePlumber
                  , System.Taffybar.Widget.Wlsunset
                  , System.Taffybar.Widget.WttrIn
                  , System.Taffybar.Widget.XDGMenu.Menu
@@ -253,6 +255,12 @@
   if flag(Deprecated-Pager-Hints)
     build-depends: xmonad >= 0.17 && < 0.19
     exposed-modules: System.Taffybar.Support.PagerHints
+
+  if flag(wireplumber)
+    build-depends: gi-wireplumber >= 0.5.14.2 && < 0.6
+    cpp-options: -DWITH_WIREPLUMBER
+    exposed-modules: System.Taffybar.Information.WirePlumber
+                   , System.Taffybar.Widget.WirePlumber
 
   other-modules: Paths_taffybar
                , System.Taffybar.DBus.Client.ChromeWindowInfo
