diff --git a/extra/pipewire/PKGBUILD b/extra/pipewire/PKGBUILD
index 0f8b629c0..794f8830c 100644
--- a/extra/pipewire/PKGBUILD
+++ b/extra/pipewire/PKGBUILD
@@ -5,7 +5,7 @@
 #  - remove makedepend on valgrind
 
 pkgname=pipewire
-pkgver=0.2.2
+pkgver=0.2.3
 pkgrel=1
 pkgdesc="Server and user space API to deal with multimedia pipelines"
 url="https://pipewire.org"
@@ -14,11 +14,11 @@ arch=(x86_64)
 depends=(gstreamer gst-plugins-base v4l-utils sbc ffmpeg rtkit)
 makedepends=(git meson doxygen graphviz xmltoman)
 install=pipewire.install
-_commit=327ae5db6ef93724640c4c74664d693d7a530dbe  # tags/0.2.2
+_commit=8d53d3018f2d3bccd72bffb901ec36095d430382  # tags/0.2.3
 source=("git+https://github.com/PipeWire/pipewire#commit=$_commit"
-        unhide-providers.diff)
+        pkgconfig.diff)
 sha256sums=('SKIP'
-            '8692ddbfc433bb4a56e3e4594683f9a7047b6cce539c7322dd3b74157a727f99')
+            'c4e145b4e18aa2d218b8f8ce96d5ba01626599e9349955226300b17779817fb5')
 
 
 pkgver() {
@@ -29,9 +29,7 @@ pkgver() {
 prepare() {
   cd $pkgname
 
-  # the pipewireprovider is broken: the devices provided have no caps
-  # at least don't hide other providers until this is fixed
-  patch -Np1 -i ../unhide-providers.diff
+  patch -Np1 -i ../pkgconfig.diff
 
   # Reduce docs size
   printf '%s\n' >>doc/Doxyfile.in \
@@ -40,9 +38,9 @@ prepare() {
 
 build() {
   arch-meson $pkgname build \
-    -D enable_docs=true \
-    -D enable_man=true \
-    -D enable_gstreamer=true
+    -D docs=true \
+    -D man=true \
+    -D gstreamer=true
   ninja -C build
 }
 
diff --git a/extra/pipewire/pkgconfig.diff b/extra/pipewire/pkgconfig.diff
new file mode 100644
index 000000000..56949a385
--- /dev/null
+++ b/extra/pipewire/pkgconfig.diff
@@ -0,0 +1,142 @@
+ meson.build                 |  4 ++--
+ pkgconfig/libpipewire.pc.in | 11 -----------
+ pkgconfig/libspa.pc.in      |  7 -------
+ pkgconfig/meson.build       | 25 -------------------------
+ spa/meson.build             |  6 ++++++
+ src/pipewire/meson.build    | 11 ++++++++++-
+ 6 files changed, 18 insertions(+), 46 deletions(-)
+
+diff --git c/meson.build i/meson.build
+index 443da44c..bcbe35e9 100644
+--- c/meson.build
++++ i/meson.build
+@@ -1,6 +1,6 @@
+ project('pipewire', 'c',
+   version : '0.2.3',
+-  meson_version : '>= 0.36.0',
++  meson_version : '>= 0.42.0',
+   default_options : [ 'warning_level=1',
+                       'c_std=gnu99',
+                       'buildtype=debugoptimized' ])
+@@ -34,6 +34,7 @@ modules_install_dir = join_paths(pipewire_libdir, 'pipewire-@0@'.format(apiversi
+ spa_plugindir = join_paths(pipewire_libdir, 'spa')
+ 
+ gnome = import('gnome')
++pkgconfig = import('pkgconfig')
+ 
+ cc = meson.get_compiler('c')
+ 
+@@ -164,7 +165,6 @@ endif
+ 
+ subdir('spa')
+ subdir('src')
+-subdir('pkgconfig')
+ 
+ if get_option('docs')
+   doxygen = find_program('doxygen', required : false)
+diff --git c/pkgconfig/libpipewire.pc.in i/pkgconfig/libpipewire.pc.in
+deleted file mode 100644
+index ca302fbe..00000000
+--- c/pkgconfig/libpipewire.pc.in
++++ /dev/null
+@@ -1,11 +0,0 @@
+-prefix=@prefix@
+-exec_prefix=@exec_prefix@
+-libdir=@libdir@
+-includedir=@includedir@/
+-moduledir=@moduledir@
+-
+-Name: libpipewire
+-Description: PipeWire Interface
+-Version: @VERSION@
+-Libs: -L${libdir} -lpipewire-@PIPEWIRE_API_VERSION@
+-Cflags: -I${includedir} -D_REENTRANT
+diff --git c/pkgconfig/libspa.pc.in i/pkgconfig/libspa.pc.in
+deleted file mode 100644
+index e5878d2d..00000000
+--- c/pkgconfig/libspa.pc.in
++++ /dev/null
+@@ -1,7 +0,0 @@
+-prefix=@prefix@
+-includedir=@includedir@/
+-
+-Name: libspa
+-Description: Simple Plugin API
+-Version: @VERSION@
+-Cflags: -I${includedir} -D_REENTRANT
+diff --git c/pkgconfig/meson.build i/pkgconfig/meson.build
+deleted file mode 100644
+index 9d575784..00000000
+--- c/pkgconfig/meson.build
++++ /dev/null
+@@ -1,25 +0,0 @@
+-pkgconf = configuration_data()
+-
+-pkgconf.set('prefix', get_option('prefix'))
+-pkgconf.set('exec_prefix', '${prefix}')
+-pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir')))
+-pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir')))
+-pkgconf.set('moduledir', '${prefix}/@0@'.format(modules_install_dir))
+-pkgconf.set('PIPEWIRE_API_VERSION', apiversion)
+-pkgconf.set('VERSION', pipewire_version)
+-
+-pkg_install_dir = '@0@/pkgconfig'.format(get_option('libdir'))
+-
+-pkg_files = [
+-  [ 'libpipewire', apiversion ],
+-  [ 'libspa', spaversion ],
+-]
+-
+-foreach p : pkg_files
+-  infile = p.get(0) + '.pc.in'
+-  outfile = p.get(0) + '-@0@.pc'.format(p.get(1))
+-  configure_file(input : infile,
+-    output : outfile,
+-    configuration : pkgconf,
+-    install_dir : pkg_install_dir)
+-endforeach
+diff --git c/spa/meson.build i/spa/meson.build
+index 09e1c2f0..d190b9b2 100644
+--- c/spa/meson.build
++++ i/spa/meson.build
+@@ -24,3 +24,9 @@ subdir('include')
+ subdir('plugins')
+ subdir('tools')
+ subdir('tests')
++
++pkgconfig.generate(filebase : 'libspa-@0@'.format(spaversion),
++  name : 'libspa',
++  description : 'Simple Plugin API',
++  version : pipewire_version,
++  extra_cflags : '-D_REENTRANT')
+diff --git c/src/pipewire/meson.build i/src/pipewire/meson.build
+index 8aeb6f57..d2d75b84 100644
+--- c/src/pipewire/meson.build
++++ i/src/pipewire/meson.build
+@@ -74,16 +74,25 @@ libpipewire_c_args = [
+   '-D_POSIX_C_SOURCE',
+ ]
+ 
+-libpipewire = shared_library('pipewire-@0@'.format(apiversion), pipewire_sources,
++libpipewire_name = 'pipewire-@0@'.format(apiversion)
++libpipewire = shared_library(libpipewire_name, pipewire_sources,
+   version : libversion,
+   soversion : soversion,
+   c_args : libpipewire_c_args,
+   include_directories : [pipewire_inc, configinc, spa_inc],
+   install : true,
+   dependencies : [dl_lib, mathlib, pthread_lib],
+ )
+ 
+ pipewire_dep = declare_dependency(link_with : libpipewire,
+   include_directories : [pipewire_inc, configinc, spa_inc],
+   dependencies : [pthread_lib],
+ )
++
++pkgconfig.generate(filebase : 'lib@0@'.format(libpipewire_name),
++  libraries : [libpipewire],
++  name : 'libpipewire',
++  description : 'PipeWire Interface',
++  version : pipewire_version,
++  extra_cflags : '-D_REENTRANT',
++  variables : ['moduledir=${libdir}/@0@'.format(libpipewire_name)])
diff --git a/extra/pipewire/unhide-providers.diff b/extra/pipewire/unhide-providers.diff
deleted file mode 100644
index 48913d28d..000000000
--- a/extra/pipewire/unhide-providers.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git i/src/gst/gstpipewiredeviceprovider.c w/src/gst/gstpipewiredeviceprovider.c
-index fefdb57b..f41ea524 100644
---- i/src/gst/gstpipewiredeviceprovider.c
-+++ w/src/gst/gstpipewiredeviceprovider.c
-@@ -279,12 +279,6 @@ get_core_info (struct pw_remote          *remote,
- 
-     GST_DEBUG_OBJECT (provider, "have hidden providers: %s", value);
- 
--    for (i = 0; monitors[i]; i++) {
--      if (strcmp (monitors[i], "v4l2") == 0)
--        gst_device_provider_hide_provider (provider, "v4l2deviceprovider");
--      else if (strcmp (monitors[i], "alsa") == 0)
--        gst_device_provider_hide_provider (provider, "pulsedeviceprovider");
--    }
-     g_strfreev (monitors);
-   }
- }