{"id":13530011,"url":"https://github.com/rossmacarthur/zsh-plugin-manager-benchmark","last_synced_at":"2025-04-06T15:12:19.009Z","repository":{"id":37792132,"uuid":"286494137","full_name":"rossmacarthur/zsh-plugin-manager-benchmark","owner":"rossmacarthur","description":"Benchmark the speed of different Zsh plugin managers","archived":false,"fork":false,"pushed_at":"2025-02-09T17:51:07.000Z","size":469,"stargazers_count":97,"open_issues_count":5,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-30T14:09:52.638Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rossmacarthur.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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,"publiccode":null,"codemeta":null}},"created_at":"2020-08-10T14:14:30.000Z","updated_at":"2025-03-25T01:38:31.000Z","dependencies_parsed_at":"2024-01-03T04:15:17.873Z","dependency_job_id":"a53fa1ff-bb7a-4798-b4aa-27c4fa4c28e0","html_url":"https://github.com/rossmacarthur/zsh-plugin-manager-benchmark","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/rossmacarthur%2Fzsh-plugin-manager-benchmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rossmacarthur%2Fzsh-plugin-manager-benchmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rossmacarthur%2Fzsh-plugin-manager-benchmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rossmacarthur%2Fzsh-plugin-manager-benchmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rossmacarthur","download_url":"https://codeload.github.com/rossmacarthur/zsh-plugin-manager-benchmark/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247500468,"owners_count":20948880,"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":[],"created_at":"2024-08-01T07:00:42.131Z","updated_at":"2025-04-06T15:12:18.979Z","avatar_url":"https://github.com/rossmacarthur.png","language":"Shell","funding_links":[],"categories":["Frameworks","Shell"],"sub_categories":[],"readme":"# zsh-plugin-manager-benchmark\n\nBenchmark different Zsh plugin managers.\n\n## Summary\n\n- [antibody\u003csup\u003e⚠️\u003c/sup\u003e][antibody], [antidote],\n  [antigen\u003csup\u003e⚠️\u003c/sup\u003e][antigen], [sheldon], [zimfw] all have excellent\n  performance in both install time and load time and performance would not be\n  a reason to choose one over the other.\n- [zgen\u003csup\u003e⚠️\u003c/sup\u003e][zgen] and [zgenom] are on par with the above when it comes\n  to load time, but don't seem to do installation in parallel.\n- [zinit], [zplug] and [zpm] have notably bad load time performance.\n\n## Introduction\n\n- The following plugin managers are benchmarked:\n  - [antibody] v6.1.1 (⚠️ archived)\n  - [antidote] v1.9.7\n  - [antigen] v2.2.2 (⚠️ unmaintained)\n  - [sheldon] v0.8.0\n  - [zgen] master @ 0b669d2 (⚠️ unmaintained)\n  - [zgenom] main @ ebb37d1\n  - [zimfw] v1.16.0\n  - [zinit] master @ c346949\n  - [zplug] master @ ac6c2a3\n  - [zpm] master @ d4173b3\n  - *If you would like to add a new plugin manager feel free to open an issue\n    and/or pull request.*\n\n- For each plugin manager the *install* time and the *load* time was tested\n  - *install* time is the the time taken on the first time loading `~/.zshrc`\n    until a prompt appears.\n  - *load* time is the time taken for each subsequent load of the `~/.zshrc`\n    until a prompt appears.\n\n- 23 of some of the most popular plugins (by GitHub stars) listed in [Awesome\n  Zsh Plugins](https://github.com/unixorn/awesome-zsh-plugins/) were used as as\n  test case. See [plugins.txt](./src/plugins.txt). The plugins were extracted\n  using [awesome-star-count].\n\n- [hyperfine] was used as a benchmarking tool. All benchmarks were run on a\n  quiet cloud VM.\n\n- No deferred loading of plugins was done. For example: many plugin managers can\n  be used in conjunction with [zsh-defer]. Or [zinit] could be run using `wait`\n  which defers the plugin loading until after a prompt.\n\n[awesome-star-count]: https://github.com/rossmacarthur/awesome-star-count\n[hyperfine]: https://github.com/sharkdp/hyperfine\n[zsh-defer]: https://github.com/romkatv/zsh-defer\n\n[antibody]: https://github.com/getantibody/antibody\n[antidote]: https://github.com/mattmc3/antidote\n[antigen]: https://github.com/zsh-users/antigen\n[sheldon]: https://github.com/rossmacarthur/sheldon\n[zgen]: https://github.com/tarjoilija/zgen\n[zgenom]: https://github.com/jandamm/zgenom\n[zimfw]: https://github.com/zimfw/zimfw\n[zinit]: https://github.com/zdharma-continuum/zinit\n[zplug]: https://github.com/zplug/zplug\n[zpm]: https://github.com/zpm-zsh/zpm\n\n## Results\n\n### Load time\n\n\u003cimg alt=\"Load time\" src=\"results/load.png\" width=\"600\"/\u003e\n\nLower is better. This is the metric we care about most because its the time it\ntakes to open a new shell until we get a usable prompt.\n\n### Install time\n\n\u003cimg alt=\"Install time\" src=\"results/install.png\" width=\"600\"/\u003e\n\nLower is better. Although install time is not as important as load time it is\nprobably at least worth doing the install in parallel. From these results its\nvery clear which plugin managers install in parallel vs sequential. Note:\nnetwork jitter can cause some variation in the results for install time.\n\n### Details\n\n#### Host\n\n- Apple M2 Max\n- 32 GB RAM\n- macOS 15.2\n- Docker for Mac v4.38.0\n  - Engine: v27.5.1\n\n## Usage\n\nTo benchmark the 'install' step run the following.\n```sh\n./bench.sh install\n```\n\nTo benchmark the 'load' step run the following.\n```sh\n./bench.sh load\n```\n\nThese commands will output results to `results/`. You can then create charts\nfrom these results using the following.\n\nFirst install Python dependencies.\n\n```\npip install seaborn pandas\n```\n\n```sh\n./chart.py install\n```\n\nor\n\n```sh\n./chart.py load\n```\n\n## License\n\nThis project is distributed under the terms of both the MIT license and the\nApache License (Version 2.0).\n\nSee [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frossmacarthur%2Fzsh-plugin-manager-benchmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frossmacarthur%2Fzsh-plugin-manager-benchmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frossmacarthur%2Fzsh-plugin-manager-benchmark/lists"}