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.