A fast, configurable, and extensible plugin manager for Zsh that combines imperative and declarative approaches.
ZPM is a plugin manager for the Zsh shell that focuses on speed, configurability, and extensibility. It combines imperative and declarative approaches to manage Zsh plugins, generating a cache after the first run to enable fast loading times for subsequent shell sessions. It solves the problem of slow shell startup times caused by plugin loading overhead.
Zsh users who want a fast and flexible plugin manager, especially those using many plugins or working on resource-constrained systems like Raspberry Pi or OpenWrt routers.
Developers choose ZPM for its exceptional speed after the initial cache generation, broad compatibility with existing oh-my-zsh plugins, and extensive features like async loading, dependency management, and cross-platform support.
Zpm— Zsh Plugin Manager
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
After the initial cache generation, ZPM loads plugins from cache only, achieving sub-second startup times even with dozens of plugins, as shown in benchmarks on Raspberry Pi and OpenWrt hardware.
Supports oh-my-zsh plugins using the @omz prefix, allowing seamless migration and access to a vast ecosystem without modifying plugin code.
Offers async loading, conditional execution with if/if-not tags, and dependency management, enabling optimized and context-aware plugin setups for different environments.
Runs on Linux, macOS, FreeBSD, Android via Termux, and OpenWrt, making it versatile for desktop, mobile, and embedded systems.
Any change to .zshrc requires running 'zpm clean' to regenerate the cache, which is cumbersome and error-prone for dynamic configurations.
For optimal speed, ZPM depends on GNU Parallel or Rush, adding setup complexity and potential compatibility issues in minimal environments without these tools.
Popular plugins like Powerlevel10k need manual configuration, such as setting environment variables before loading, undermining the promise of seamless management.
The README admits areas for improvement, and features like command completions are not fully developed, leading to a steeper learning curve.