An open-source general-purpose runtime tweak system for macOS Apple Silicon.
Warning
System Integrity Protection (SIP) must be partially disabled — csrutil enable --without debug — this allows us to access to initproc, as well as set hardware breakpoints on other processes. SIP only needs to allow debugging, not fully off.
Plugin Playground provides a framework for intercepting and modifying the behavior of running processes. It's the foundation for building runtime plugins, introspection tools, and behavior-modification tweaks on modern macOS.
The fangs tracer must run as arm64e (the system ABI for Apple Silicon) to attach to launchd. If arm64e is not available on your system, toggle Disable arm64e (PAC) in the configurator — this strips PAC signing from spawned processes so injection works without the native arm64e ABI.
The configuration app is installed to /Applications/Plugin Playground.app.
Tweaks are .dylib libraries injected into macOS processes at spawn time, before main() runs. They can modify any aspect of a running app — change UI rendering, alter window management, change system controls, or override literally any framework behavior. The injection is transparent and requires no modification to the target application. Below are two private examples a developer had created with the runtime.
- Classic Dock — replaces the modern macOS Dock with a pre-Yosemite style (3D shelf, reflective icons, unified minimize).

- Classic Scrollbars — restores legacy scrollbars with up/down arrows at both ends and the classic aqua thumb appearance.
The configurator's Use legacy Ammonia tweaks folder option lets Plugin Playground load tweaks from the old Ammonia path /private/var/ammonia/core/tweaks/ instead of /opt/pluginplayground/tweaks/. This is useful if you're migrating from an existing Ammonia setup.
If you use this option, the Ammonia daemon binary at /private/var/ammonia/core/ammonia must be disabled or removed first — otherwise Ammonia and Plugin Playground will conflict over injection control. Removing/adding tweaks via the legacy folder often requires a reboot to take full effect.
- macOS Apple Silicon (ARM64)
- Xcode Command Line Tools (
xcode-select --install) - CMake 3.16+
- git
- Internet connection (first build fetches Slint via FetchContent)
sh ./install.shThis builds everything and produces PluginPlayground-1.0.0.pkg. Run the .pkg to install, or pass a custom prefix path to install directly without the GUI installer:


