{"id":13442263,"url":"https://github.com/zpm-zsh/zpm","last_synced_at":"2025-03-20T13:33:15.243Z","repository":{"id":29110120,"uuid":"32639671","full_name":"zpm-zsh/zpm","owner":"zpm-zsh","description":"Zpm— Zsh Plugin Manager","archived":false,"fork":false,"pushed_at":"2024-04-10T19:49:29.000Z","size":2571,"stargazers_count":349,"open_issues_count":2,"forks_count":21,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-08-01T03:39:24.686Z","etag":null,"topics":["android","linux","macos","openwrt","plugin","raspberry-pi","rasspberry","shell","termux","zpm","zpm-plugins","zsh","zsh-plugin","zsh-plugins"],"latest_commit_sha":null,"homepage":"https://github.com/zpm-zsh/zpm","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zpm-zsh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2015-03-21T16:21:44.000Z","updated_at":"2024-07-29T18:26:23.000Z","dependencies_parsed_at":"2024-03-04T00:31:15.589Z","dependency_job_id":"02546875-30f3-440f-9993-efdcb2e4ec26","html_url":"https://github.com/zpm-zsh/zpm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpm-zsh%2Fzpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpm-zsh%2Fzpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpm-zsh%2Fzpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zpm-zsh%2Fzpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zpm-zsh","download_url":"https://codeload.github.com/zpm-zsh/zpm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221768518,"owners_count":16877653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","linux","macos","openwrt","plugin","raspberry-pi","rasspberry","shell","termux","zpm","zpm-plugins","zsh","zsh-plugin","zsh-plugins"],"created_at":"2024-07-31T03:01:43.669Z","updated_at":"2025-03-20T13:33:15.232Z","avatar_url":"https://github.com/zpm-zsh.png","language":"Shell","funding_links":[],"categories":["HarmonyOS","Shell","Shells"],"sub_categories":["Windows Manager","ZSH"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Logo\" src=\"images/logo.svg\" height=\"180\" /\u003e\n  \u003ch1 align=\"center\"\u003eZPM - Zsh Plugin Manager\u003c/h1\u003e\n  \u003cp align=\"center\"\u003e\n    Fastest, configurable and extensible zsh plugin manager\n  \u003c/p\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"/LICENSE\"\u003e\n      \u003cimg alt=\"Software License\" src=\"https://img.shields.io/github/license/zpm-zsh/zpm?style=flat-square\"\u003e\n    \u003c/a\u003e\n    \u003cimg alt=\"Travis\" src=\"https://img.shields.io/github/languages/code-size/zpm-zsh/zpm?style=flat-square\"\u003e\n    \u003cimg alt=\"Go Report Card\" src=\"https://img.shields.io/github/last-commit/zpm-zsh/zpm?logo=github\u0026style=flat-square\"\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\nZpm is a plugin manager for ZSH who combines the imperative and declarative approach. At first run, zpm will do complex logic and generate cache, after that will be used cache only, so it makes this framework to be very fast.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"images/demo.gif\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Speed**. Fastest plugin manager (Really, after the first run, zpm will not be used at all)\n- **Compatibility**. Zpm plugins are compatible with [oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh)\n- **Portability**. Zpm runs on Linux, Android, OpenWrt, FreeBSD and macOS\n- Support for async loading\n- Dependencies between packages\n- Hooks\n- Function autoloading\n- Extensible\n- Possibility to use github/gitlab/bitbucket mirrors (useful for China)\n\n## Table of Contents\n\n- [Features](#features)\n- [Table of Contents](#table-of-contents)\n- [Stats](#stats)\n- [Base dependences](#base-dependences)\n- [Installation](#installation)\n- [How to use](#how-to-use)\n  - [Load plugin](#load-plugin)\n  - [Plugin name](#plugin-name)\n  - [Plugin tags](#plugin-tags)\n  - [`if` and `if-not` conditions](#if-and-if-not-conditions)\n  - [Upgrade](#upgrade)\n  - [Clean](#clean)\n- [Configuration](#configuration)\n- [Troubleshooting](#troubleshooting)\n- [Developing process](#developing-process)\n- [TODO](#todo)\n- [Changelog](#changelog)\n\n## Stats\n\n\u003cdetails\u003e\n  \u003csummary\u003eTest on Intel I7-8750H, SanDisk SD7SN6S, 16GB RAM\u003c/summary\u003e\n\u003cp\u003e\n\n```sh\nzsh -i -c exit  0.00s user 0.00s system 102% cpu 0.006 total\nzsh -i -c exit  0.01s user 0.00s system 101% cpu 0.006 total\nzsh -i -c exit  0.00s user 0.01s system 99% cpu 0.006 total\nzsh -i -c exit  0.01s user 0.00s system 102% cpu 0.007 total\nzsh -i -c exit  0.00s user 0.00s system 100% cpu 0.007 total\nzsh -i -c exit  0.01s user 0.00s system 100% cpu 0.007 total\nzsh -i -c exit  0.00s user 0.00s system 101% cpu 0.007 total\nzsh -i -c exit  0.00s user 0.00s system 100% cpu 0.006 total\nzsh -i -c exit  0.00s user 0.00s system 101% cpu 0.007 total\nzsh -i -c exit  0.00s user 0.00s system 100% cpu 0.008 total\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eTest on Raspberry Pi Zero W, Raspbian 10, 1GHz Broadcom BCM2835 ARMv6, 512MB RAM\u003c/summary\u003e\n\u003cp\u003e\n\n```sh\nzsh -i -c exit  0.14s user 0.05s system 85% cpu 0.219 total\nzsh -i -c exit  0.14s user 0.05s system 43% cpu 0.436 total\nzsh -i -c exit  0.14s user 0.05s system 58% cpu 0.325 total\nzsh -i -c exit  0.12s user 0.07s system 90% cpu 0.206 total\nzsh -i -c exit  0.15s user 0.05s system 84% cpu 0.231 total\nzsh -i -c exit  0.15s user 0.04s system 46% cpu 0.407 total\nzsh -i -c exit  0.13s user 0.06s system 62% cpu 0.306 total\nzsh -i -c exit  0.11s user 0.08s system 83% cpu 0.227 total\nzsh -i -c exit  0.14s user 0.05s system 47% cpu 0.403 total\nzsh -i -c exit  0.11s user 0.08s system 62% cpu 0.307 total\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eTest on MikroTik RouterBOARD 951Ui-2HnD, OpenWrt 19.07.7, 600MHz Atheros AR9344 MIPS, 128MB RAM\u003c/summary\u003e\n\u003cp\u003e\n\n```sh\nzsh -i -c exit  0.09s user 0.03s system 83% cpu 0.144 total\nzsh -i -c exit  0.10s user 0.02s system 29% cpu 0.412 total\nzsh -i -c exit  0.10s user 0.02s system 69% cpu 0.173 total\nzsh -i -c exit  0.10s user 0.03s system 73% cpu 0.165 total\nzsh -i -c exit  0.10s user 0.02s system 81% cpu 0.150 total\nzsh -i -c exit  0.10s user 0.02s system 71% cpu 0.170 total\nzsh -i -c exit  0.10s user 0.02s system 85% cpu 0.141 total\nzsh -i -c exit  0.10s user 0.02s system 42% cpu 0.283 total\nzsh -i -c exit  0.11s user 0.02s system 68% cpu 0.176 total\nzsh -i -c exit  0.10s user 0.02s system 75% cpu 0.161 total\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eWith this set of plugins. 51 total\u003c/summary\u003e\n\u003cp\u003e\n\n```sh\nzpm-zsh/helpers\nzpm-zsh/colors\nzpm-zsh/tmux\nzpm-zsh/vte\nzpm-zsh/core-config\nzpm-zsh/ignored-users\nzpm-zsh/check-deps\nzpm-zsh/minimal-theme\nzpm-zsh/material-colors\nzpm-zsh/pr-is-root\nzpm-zsh/pr-user\nzpm-zsh/pr-return\nzpm-zsh/pr-exec-time\nzpm-zsh/pretty-time-zsh\nzpm-zsh/pr-git\nzpm-zsh/pr-cwd\nzpm-zsh/pr-php\nzpm-zsh/pr-rust\nzpm-zsh/pr-node\nzpm-zsh/pr-2\nzpm-zsh/pr-eol\nzpm-zsh/pr-zcalc\nzpm-zsh/pr-correct\nzpm-zsh/ls\nzpm-zsh/colorize\nzpm-zsh/ssh\nzpm-zsh/dot\nzpm-zsh/undollar\nzpm-zsh/dropbox\nlukechilds/zsh-better-npm-completion\nzpm-zsh/clipboard\nzpm-zsh/mysql-colorize\nzpm-zsh/zshmarks\nvoronkovich/gitignore.plugin.zsh\nzpm-zsh/autoenv\nmdumitru/fancy-ctrl-z\nzsh-users/zsh-history-substring-search\nzdharma/fast-syntax-highlighting\nzsh-users/zsh-autosuggestions\npsprint/history-search-multi-word\nzpm-zsh/zpm-readme\nzpm-zsh/zpm-info\nzpm-zsh/zpm-telemetry\nzpm-zsh/zpm-link\n@omz/extract\n@omz/command-not-found\n@omz/pip\n@empty/npm\n@empty/rustup\nzpm-zsh/create-zsh-plugin\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n## Base dependences\n\n- [zsh](https://www.zsh.org/)\n- [git](https://git-scm.com/)\n- One of these:\n  - [GNU Parallel](https://www.gnu.org/software/parallel/) for fastest parallel execution.\n  - [Rush](https://github.com/shenwei356/rush) for fastest parallel execution.\n  - [xargs](https://www.gnu.org/software/findutils/) as fallback\n- [curl](https://curl.se/) for GitHub Gists\n- [Termux](http://termux.com/) for Android\n- [cli-html](https://www.npmjs.com/package/cli-html) view html in terminal. _Optional_\n- [cli-markdown](https://www.npmjs.com/package/cli-markdown) view markdown in terminal. _Optional_\n\n## Installation\n\nAdd the following text into `.zshrc`\n\n```sh\nif [[ ! -f ~/.zpm/zpm.zsh ]]; then\n  git clone --recursive https://github.com/zpm-zsh/zpm \"${XDG_DATA_HOME:-$HOME/.local/share}/zsh/plugins/@zpm\"\nfi\nsource \"${XDG_DATA_HOME:-$HOME/.local/share}/zsh/plugins/@zpm/zpm.zsh\"\n# Or source our zshrc\n# source \"${XDG_DATA_HOME:-$HOME/.local/share}/zsh/plugins/@zpm/zshrc\"\n```\n\nIf you don't have `.zshrc` copy example of `.zshrc` from zpm\n\n```sh\nln -sf ~/.zpm/zshrc ~/.zshrc\n```\n\n## How to use\n\nCurrently zpm has following commands\n\n- load - will download and load plugin [See](#load-plugin)\n- if/if-not - conditions for following command [See](#if-and-if-not-conditions)\n- upgrade - will upgrade plugin, without parameters will upgrade all plugins [See](#upgrade)\n- clean - will clean zpm cache [See](#clean)\n\nThe set of commands can be expanded extended using plugins\n\n\u003cdetails\u003e\n\u003csummary\u003ePlugins for zpm itself\u003c/summary\u003e\n\u003cp\u003e\n\n- [zpm-readme](https://github.com/zpm-zsh/zpm-readme) - Show plugin readme in terminal\n- [zpm-info](https://github.com/zpm-zsh/zpm-info) - Show plugin info in terminal\n- [zpm-telemetry](https://github.com/zpm-zsh/zpm-telemetry) - Send telemetry data. Keep calm. Data is sent using GitHub and you can see it before sending.\n\n\u003c/p\u003e\n\u003c/details\u003e\n\n### Load plugin\n\n**Important**\n\n\u003e Be carefully, zpm doesn't guarantee loading order in call. So if you need to load a plugin **before** antoher, you should do 2 separate `zpm load` calls.\n\u003e This is very important for oh-my-zsh plugins, because @omz-core should be loaded before\n\nPlugin name must have next form: `@plugin-type/user/plugin-name`. This plugin can be enabled using\n\n```sh\n# Add to `~/.zshrc` after zpm initialization:\nzpm load @plugin-type/user/plugin-name\n```\n\n\u003e Notice: if you change `~/.zshrc`, you need to remove zpm cache using: `zpm clean`\n\nAdditionaly they can have some tags. Tags must be separated by commas `,` without spaces, tag parameters must be separated from tag names or another tag parameters by `:`\n\n```sh\n# plugin type\n#    |   plugin name\n#    |      |     tag\n#    |      |      |  tag parameters,\n#    |      |      |  divided by `:`    boolean tag\n#    |      |      |         |              |\n#    ↓      ↓      ↓         ↓              ↓\n@type/some/plugin,apply:source:path:fpath,async\n```\n\n### Plugin name\n\nIf plugin name starts with `@word`, this word will be used as plugin type. Plugin name will be used to detect plugin origin url.\n\n- `@github/` or `@gh/` - plugin will be cloned from GitHub, this is default value, so you don't need to set it\n- `@gitlab/` or `@gl/` - plugin will be cloned from GitLab\n- `@bitbucket/` or `@bb/` - plugin will be cloned from Bitbucket\n- `@git/` - plugin will be cloned via git. Be careful, zpm can't detect origin for this plugin type, you must specify origin using tag `origin:`\n- `@gist/` - plugin will be downloaded from GitHub Gist\n- `@omz/` - zpm will use a plugin from oh-my-zsh, oh-my-zsh will be download if not installed. **Important**: you shoud load `@omz` before any other plugin from on-my-zsh: `zpm load @omz`.\n\n  - `@omz/theme/` - will load a theme from omz dir: `\u003comz-dir\u003e/themes/*.zsh-theme`\n  - `@omz/lib/` - will load a lib from omz dir: `\u003comz-dir\u003e/lib/*.zsh`\n  - \u003cdetails\u003e\n    \u003csummary\u003e\n    Example:\n    \u003c/summary\u003e\n    \u003cp\u003e\n\n    See: \u003chttps://github.com/zpm-zsh/zpm/issues/24\u003e\n\n    ```sh\n    # Pull in OMZ (doesn't actually source anything)\n    zpm load @omz\n\n    # Load any OMZ libraries we want or our OMZ plugins require\n    zpm load                \\\n      @omz/lib/compfix      \\\n      @omz/lib/completion   \\\n      @omz/lib/directories  \\\n      @omz/lib/functions    \\\n      @omz/lib/git          \\\n      @omz/lib/grep         \\\n      @omz/lib/history      \\\n      @omz/lib/key-bindings \\\n      @omz/lib/misc         \\\n      @omz/lib/spectrum     \\\n      @omz/lib/theme-and-appearance\n\n      # Load some OMZ plugins and theme\n      zpm load          \\\n        @omz/virtualenv \\\n        @omz/git\n\n      zpm load @omz/theme/robbyrussell\n    ```\n\n    \u003c/p\u003e\n    \u003c/details\u003e\n\n- `@dir` - special type, zpm will create a symlink to local directory from `origin` tag\n- `@file` - special type, zpm will create a symlink to file from `origin` tag. Should be used for plugins that are written in single file, without additional dependencies\n- `@remote/` - plugin will be downloaded using curl, for example from an HTTP site. Be careful, zpm can't detect origin for this plugin type, you must specify origin using tag `origin:`\n- `@exec/` - special type, zpm will create plugin, completion or binary via executing of `origin` tag content. See `destination` tag\n- `@empty/` - special type, zpm will create empty dir without files. Useful with `hook` tag.\n\n```sh\nplugin-from/github  # @github doesn't necessary\n@gitlab/plugin-from/gitlab\n@bitbucket/plugin-from/bitbucket\n@omz/some-plugin\n@empty/custom/empty-plugin\n@empty/another-empty-plugin\n```\n\n### Plugin tags\n\n#### `apply` tag\n\nThis tag has 3 possible arguments divided by `:`\n\n- `source` - load zsh plugin file, enabled by default. File name can be changed using `source` tag\n- `path` - add directory to your `$PATH`, by default - `/bin` dir, enabled by default. Directory name can be changed using `path` tag\n- `fpath` - add directory to your `$fpath`, by default or `/functions` dir if it exists, or plugin root dir if exist at least one `_*` file, enabled by default. Directory name can be changed using `fpath` tag\n\n```sh\nzpm load some/plugin,apply:source:path:fpath\nzpm load another/plugin,apply:path # zpm will only add /bin dir to $PATH, plugin will not be sourced, nor be added to $fpath\n```\n\n#### `async` tag\n\nIf this tag is present, zsh plugin will be loaded async\n\n#### `source` tag\n\nDefine own file that will be loaded\n\n```sh\nzpm some/plugin,source:/other.file.zsh\n```\n\n#### `path` and `fpath` tags\n\nUsing these tags you can change the destination of folders which will be added to `$PATH` or `$fpath`\n\n```sh\nzpm some/plugin,path:/executables\nzpm another/plugin,fpath:/completions\n```\n\n#### `autoload` tag\n\nThis tag defines functions that will be autoloaded by zpm (using `autoload -Uz`) divided by `:`\n\n```sh\nzpm load some/plugin,autoload:one:two:three\n```\n\n#### `origin` tag\n\nAll plugins have internal origin type property, like: git, dir, file, remote.\nYou can define own origin, but you can't mix different types of origin types.\nSo, you can define Gitlab origin for GitHub plugin, or different origin for GitHub Gist plugin.\n\n- Git plugins: `@github`, `@gitlab`, `@bitbucket`, `@git`\n\n```sh\nzpm load some/plugin,origin:https://github.com/another/origin # This plugin will be loaded from https://github.com/another/origin, but will have internal name some/plugin\n\nzpm load @git/my-plugin,git://my.site/plugin.git # This plugin will be loaded from 3-party origin\n```\n\n- Remote: `@gist`, `@remote`\n\n```sh\nzpm load @gist/user/hash,origin:https://another-site/file.zsh # This file will be downloaded instead of gist\nzpm load @remote/plugin,origin:https://mysite.com/plugin.zsh # In this case origin should be declared, because zpm can't detect origin\n```\n\n- Dir: `@dir`\n\n```sh\nzpm load @dir/plugin,origin:/home/user/Projects/plugin # Internal plugin directory will be linked to your local directory\n```\n\n- File: `@file`\n\n```sh\nzpm load @file/plugin-file,origin:/home/user/Projects/plugin.zsh # Internal plugin file will be linked to your local file\n```\n\n- Some special types, like: `@empty`, `@omz`, `@omz/theme`, `@omz/lib`\n\nDo not declare own `origin:`, because this can produce side effects\n\n#### `hook` tag\n\nThis tag parameter contains command who will be run in the plugin directory after instalation or upgrade\n\n```sh\nzpm plugin/name,hook:\"make; make install\"\n```\n\n### `if` and `if-not` conditions\n\nIf condition allows you to run the following commands only if the condition is true\n\n```sh\nzpm if some-condition (another commands)\n```\n\nConditions:\n\n- `linux` - if current OS is Linux\n- `bsd` - if current OS is \\*BSD\n- `openwrt` - if current OS is OpenWrt\n- `macos` - if current OS is macOS\n- `termux` - if current session run in [Termux](http://termux.com/)\n- `ssh` - if session run on remote host\n- `vte` - if session run on VTE based terminal emulator\n\nResult of condition can be negated using `if-not` tag\n\nThe condition can be combined `zpm if macos if-not ssh load repo/plugin`\n\n\u003e Notice: conditions will be verified only at first run, after that will be used generated cache\n\n### Upgrade\n\nRun `zpm upgrade` for upgrading, or run `zpm upgrade some-plugin another-plugin` if you want to upgrade only these plugins\n\n### Clean\n\nBy default zpm will generate cache file at first run, but if you will change `~/.zshrc` this cache should be removed using `zpm clean` command\n\n## Configuration\n\nYou can use another mirror for GitHub/Gitlab/Bitbucket:\n\n```sh\n# Declare this before zpm load\nGITHUB_MIRROR=\"https://hub.fastgit.org\"\nGITLAB_MIRROR=\"Some url\"\nBITBUCKET_MIRROR=\"Some url\"\n```\n\n## Troubleshooting\n\n### Powerlevel10k\n\nPowerlevel10k loads extra modules in its installation directory, which it [automatically detects by taking the file containing its init code, making it absolute, and taking its directory](https://github.com/romkatv/powerlevel10k/blob/0cc19ac2ede35fd8accff590fa71df580dc7e109/powerlevel10k.zsh-theme#L20). However, as zpm combines plugins into one fast-loading cache file, this automatic detection would break.\n\nAs a workaround, you have to explicitly tell Powerlevel10k where it is installed. This needs to be done before the cache file is loaded, which means before zpm itself is loaded, like this:\n\n```sh\n# Adjust the path accordingly if your zpm is not installed at `~/.zpm` or you're\n# using a powerlevel10k fork\nexport POWERLEVEL9K_INSTALLATION_DIR=~/.zpm/plugins/romkatv---powerlevel10k\nsource ~/.zpm/zpm.zsh\n\n# ...\n\nzpm load romkatv/powerlevel10k\n```\n\n### Update to latest zpm\n\nIf you have problems with `zpm` try updating:\n\n```sh\nrm -rf \"${TMPDIR:-/tmp}/zsh-${UID:-user}\" # clear the cache\ncd ~/.zpm\ngit pull\n```\n\n## Developing process\n\n\u003e You can see debug information by setting the system variable `DEBUG=zpm`\n\nWhen you make changes, add information about them to the change log in **next** section. Also add link to pr and link to your GitHub profile.\n\n## TODO\n\n- [x] Create logo\n- [ ] Improve readme\n  - [ ] Describe installation process\n- [ ] Improve completions\n  - [ ] Now `zpm load`, `zpm upgrade` or `zpm subcommand` will complete only one argument\n\n## Changelog\n\n- 7.0\n\n  - Move zpm to `$XDG_DATA_HOME/zsh/plugins/zpm`\n\n- 6.0\n\n  - Add workarouds for powerlevel10k, zsh-syntax-highlighting, zsh-history-substring-search, sindresorhus/pure\n\n- 5.3\n\n  - Change plugin file path detector\n\n- 5.2\n\n  - Remove old omz tag\n\n- 5.1\n\n  - Change internal functions\n\n- 5.0\n\n  - Removed `gen-plugin` and `gen-completion` tags\n  - `@omz-theme/` and `@omz-lib/` changed to `@omz/theme/` and `@omz/lib/`\n\n- 4.2\n\n  - Replace `$ZERO` with `$0`. Fixed [#43](https://github.com/zpm-zsh/zpm/issues/43)\n  - Update README. [#44](https://github.com/zpm-zsh/zpm/pull/44)\n\n- 4.1\n\n  - Added possibility to change parallel runner, e.g. GNU Parallel, Rush, Xargs\n  - Optimize plugin load\n  - Change some plugin urls\n\n- 4.0\n\n  - Refactoring of internal logic\n  - Added new plugin types: `@gist`, `@remote`\n\n- 3.6\n\n  - Added new plugin types `@dir` and `@file`\n  - `@link` now is an alias for `@dir`\n  - Fixed [#35](https://github.com/zpm-zsh/zpm/issues/35)\n\n- 3.5\n\n  - Added new logo\n  - Added possibility to use mirrors for GitHub/Gitlab/Bitbucket. See [issue](https://github.com/zpm-zsh/zpm/issues/31)\n\n- 3.4\n\n  - Added GNU Parallel\n\n- 3.3\n\n  - Added `origin` tag\n  - Removed `autoload-all` tag\n\n- 3.2\n\n  - Fix plugin load order\n  - Use sched for background run\n\n- 3.1\n\n  - Fix completions\n  - Add example for @omz\n\n- 3.0\n\n  - Remove unused `@link`\n  - Remove `tr` calls\n  - Deprecate `type:` tag\n  - Internal changes for basename/name,hyperlink\n  - Add support for oh-my-zsh themes and libs\n    - `zpm load @omz-theme/theme-name`\n    - `zpm load @omz-lib/lib`\n  - Upgrade from 2.x:\n    - Add `zpm load @omz` if you use at least one oh-my-zsh plugin.\n    - Replace `type:plugin-type` with `@plugin-type/plugin/name`\n\n- 2.3\n\n  - Improve **README**\n  - Remove suppot for `zsh_loaded_plugins`\n  - Add config for Markdownlint\n\n- 2.2\n\n  - Add support for OpenWrt\n  - Improve oh-my-zsh-support [@igetgames](https://github.com/igetgames)\n  - Support for calling plugin functions from command tags [@igetgames](https://github.com/igetgames)\n  - Fix autoload option processing [@igetgames](https://github.com/igetgames)\n\n- 2.1\n\n  - Optimizations\n  - Now all content of `/functions` and `/bin` will be copied into single dir, in zpm cache dir\n  - Change `zpm` to `@zpm`\n  - Remove unused vars\n  - Some vars will be loaded async\n  - Fixed colors\n  - Notes\n    - Now for update zpm need to run `zpm u @zpm`\n\n- 2.0\n  - `omz/` prefix replaced by `@omz/`\n  - Added plugin type `empty`\n  - Added `autoload` and `autoload-all` tags\n  - Added `gen-plugin` and `gen-completion` tags\n  - Notes:\n    - Replace `omz/` to `@omz/` in your `.zshrc`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzpm-zsh%2Fzpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzpm-zsh%2Fzpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzpm-zsh%2Fzpm/lists"}