How to Inspect and Manage App Extensions on macOS Using pluginkit

In macOS, modern applications frequently provide system extensions that integrate directly into native operating system workflows. These include Finder Sync overlays (used by cloud storage providers like Dropbox and Google Drive), Quick Look preview generators, Safari Web Extensions, Share menu actions, WidgetKit widgets, and Photo editing plugins. While Apple provides graphical management under System Settings, the graphical interface exposes only a fraction of registered plug-ins and offers no fine-grained diagnostic controls.

The native command-line utility pluginkit serves as the low-level administrative interface to the macOS PluginKit framework (pkd). By executing pluginkit commands in Terminal, system administrators, power users, and developers can inspect the complete registry of installed app extensions, match plugins by explicit protocol identities, verify code signatures, manually toggle activation flags, and remove orphaned extensions left behind by uninstalled applications.

Understanding PluginKit and the pkd Daemon

Every modern macOS extension conforms to Apple’s App Extension model and runs inside an isolated, sandboxed child process coordinated by the pkd (PluginKit Daemon) background service. Extensions are bundled within parent application containers in the Contents/PlugIns directory rather than residing in loose system directories.

When an application is installed, macOS registers its extensions with pkd. When host applications or system daemons need to present functionality—such as Finder displaying file sync badges or Safari loading browser extensions—pkd identifies compatible plugins based on uniform type identifiers (UTIs) and extension point protocols. If a plugin crashes repeatedly or conflicts with system stability, pluginkit allows direct querying and intervention without touching the parent application bundle.

Listing and Querying Registered App Extensions

To inspect all registered app extensions currently discovered by pkd on your Mac, open the Terminal application and execute the basic match command:

pluginkit -m

The output provides an extensive list of registered extensions, displaying their activation state and reverse-DNS bundle identifier. An exclamation mark (!) prefix indicates an enabled, active plugin, while a hyphen (-) indicates an installed but deactivated plugin.

To view detailed diagnostic information for each extension—including the parent bundle identifier, plugin UUID, binary architecture, and filesystem path—add the verbose flag:

pluginkit -m -v

Because the verbose list contains hundreds of entries across all system and user applications, filter the output for a specific software vendor or application name using grep:

pluginkit -m -v | grep -A 5 -i "dropbox"

Filtering Extensions by Extension Point Identifier

Rather than scanning every extension on the system, you can target specific extension points to audit particular categories of plugins. PluginKit groups extensions by standard Apple protocol strings.

To list all registered Finder Sync extensions responsible for file overlay icons and contextual menus, run:

pluginkit -m -p com.apple.FinderSync

To list all installed Quick Look preview generators responsible for document rendering in Finder, execute:

pluginkit -m -p com.apple.quicklook.preview

To query all registered Share menu extensions, execute:

pluginkit -m -p com.apple.share-services

To inspect Safari Web Extensions managed by the system, query the Safari extension point:

pluginkit -m -p com.apple.Safari.web-extension

Enabling and Disabling Extensions via Terminal

When troubleshooting application instability or testing new software builds, you can activate or deactivate specific plugins using their bundle identifiers.

To disable a misbehaving extension without uninstalling its parent application, pass the -e ignore option followed by the extension identifier:

pluginkit -e ignore -i com.example.app.findersync

Verify that the extension status reflects the deactivated state:

pluginkit -m -i com.example.app.findersync

The extension will now be prefixed with a hyphen (-). To re-enable the extension and permit pkd to launch it upon demand, execute:

pluginkit -e use -i com.example.app.findersync

Troubleshooting Orphaned Extensions and Cache Issues

When an application is deleted by moving it to the Trash, pkd occasionally retains stale registry records pointing to nonexistent bundle paths. This can result in phantom menu items in the Finder contextual menu or sluggish Share sheets.

To inspect the exact disk path associated with a registered extension, run:

pluginkit -m -v -i com.example.app.extension | grep "Path"

If the path points to an uninstalled or missing application bundle, manually unregister the stale plugin from the PluginKit database:

pluginkit -r /Applications/OldApp.app/Contents/PlugIns/OldAppExtension.appex

If the system extension database continues to display phantom entries across multiple applications, force the Launch Services and PluginKit daemons to rebuild their runtime cache by killing the local pkd process:

killall pkd

macOS immediately restarts the daemon in the background, rescanning all application bundles across /Applications and /System/Applications to assemble an updated, clean extension index.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.