{"id":13426142,"url":"https://github.com/anvaka/pm","last_synced_at":"2025-09-29T07:13:07.714Z","repository":{"id":31897989,"uuid":"35466866","full_name":"anvaka/pm","owner":"anvaka","description":"package managers visualization","archived":false,"fork":false,"pushed_at":"2025-02-17T04:36:38.000Z","size":11695,"stargazers_count":1702,"open_issues_count":33,"forks_count":143,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-09-27T23:13:35.620Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://anvaka.github.io/pm/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anvaka.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,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-05-12T04:29:45.000Z","updated_at":"2025-09-24T02:10:22.000Z","dependencies_parsed_at":"2024-07-31T02:27:29.289Z","dependency_job_id":"97f9eba5-f34d-4565-9b2d-c1d4a52bac1a","html_url":"https://github.com/anvaka/pm","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/anvaka/pm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvaka%2Fpm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvaka%2Fpm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvaka%2Fpm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvaka%2Fpm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anvaka","download_url":"https://codeload.github.com/anvaka/pm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvaka%2Fpm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277479028,"owners_count":25824913,"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","status":"online","status_checked_at":"2025-09-29T02:00:09.175Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-07-31T00:01:27.331Z","updated_at":"2025-09-29T07:13:07.656Z","avatar_url":"https://github.com/anvaka.png","language":"JavaScript","readme":"# Software Galaxies\n\nThis repository combines visualizations of major software package managers.\n\nAll visualizations are available here: http://anvaka.github.io/pm/#/\n\nPlease read [operating manual](https://github.com/anvaka/pm/tree/master/about#software-galaxies-documentation) -\nit is short and describes basic navigation principles.\n\nRepository was create for my talk at [CascadiaJS 2015](http://2015.cascadiajs.com/browser/)\n\n**After conference update** - [**video**](https://www.youtube.com/watch?v=vZ6Yhlxv7Os) -\n[slides](http://anvaka.github.io/talks/cascadia2015/#/)\n\nFriends, you are awesome! I can't express how much I appreciate all your\nkind words and warm feedback. It really means a world for me. Thank you!\n\n# Individual Visualizations\n\nEach graph is indexed individually, and data is pushed to `gh-pages` branch\nof [galactic-data](https://github.com/anvaka/galactic-data).\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eBower\u003c/h3\u003e\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/bower?l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/bower_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allbower\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/bower?l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003ePHP Composer\u003c/h3\u003e\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/composer?l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/composer_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allcomposer\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/composer?l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eRuby gems\u003c/h3\u003e\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/rubygems?l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/ruby_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allgems\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/rubygems?l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003enpm\u003c/h3\u003e\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/npm?l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/npm_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allnpm\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/npm?l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eGo\u003c/h3\u003e\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/gosearch?l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/go_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allgo\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/gosearch?l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eR language\u003c/h3\u003e\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/cran?cx=-2482\u0026cy=-5685\u0026cz=-291\u0026lx=0.2264\u0026ly=-0.6790\u0026lz=0.4330\u0026lw=0.5480\u0026ml=200\u0026s=2.75\u0026l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/cran_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allcran\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"http://anvaka.github.io/pm/#/galaxy/cran?cx=-2482\u0026cy=-5685\u0026cz=-291\u0026lx=0.2264\u0026ly=-0.6790\u0026lz=0.4330\u0026lw=0.5480\u0026ml=200\u0026s=2.75\u0026l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eDebian\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/debian?cx=-201\u0026cy=-6170\u0026cz=-6841\u0026lx=0.5676\u0026ly=-0.7456\u0026lz=0.2400\u0026lw=0.2536\u0026ml=150\u0026s=1.75\u0026l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/debian_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/alldebian\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/debian?cx=-201\u0026cy=-6170\u0026cz=-6841\u0026lx=0.5676\u0026ly=-0.7456\u0026lz=0.2400\u0026lw=0.2536\u0026ml=150\u0026s=1.75\u0026l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eArch Linux\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/arch?cx=870\u0026cy=-3968\u0026cz=-2010\u0026lx=0.7695\u0026ly=-0.3554\u0026lz=0.3109\u0026lw=0.4299\u0026ml=150\u0026s=1.75\u0026l=1\u0026v=no-aur\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/archlinux_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/phiresky/crawl-arch\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/arch?cx=870\u0026cy=-3968\u0026cz=-2010\u0026lx=0.7695\u0026ly=-0.3554\u0026lz=0.3109\u0026lw=0.4299\u0026ml=150\u0026s=1.75\u0026l=1\u0026v=no-aur\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eArch Linux + AUR\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/arch?cx=870\u0026cy=-3968\u0026cz=-2010\u0026lx=0.7695\u0026ly=-0.3554\u0026lz=0.3109\u0026lw=0.4299\u0026ml=150\u0026s=1.75\u0026l=1\u0026v=including-aur\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/archlinux_aur_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/phiresky/crawl-arch\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/arch?cx=2655\u0026cy=859\u0026cz=7898\u0026lx=0.2160\u0026ly=0.0620\u0026lz=0.8560\u0026lw=0.4656\u0026ml=150\u0026s=1.75\u0026l=1\u0026v=including-aur\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eNuGet\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/nuget?l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/nuget_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allnuget\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/nuget?l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eHomebrew\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/brew?cx=-803\u0026cy=-3622\u0026cz=-1640\u0026lx=0.3774\u0026ly=-0.7360\u0026lz=0.4338\u0026lw=0.3573\u0026ml=200\u0026s=2.75\u0026l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/brew_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allbrew\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/brew?cx=-803\u0026cy=-3622\u0026cz=-1640\u0026lx=0.3774\u0026ly=-0.7360\u0026lz=0.4338\u0026lw=0.3573\u0026ml=200\u0026s=2.75\u0026l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003ePyPI\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/python?cx=-2700\u0026cy=377\u0026cz=5622\u0026lx=-0.0869\u0026ly=-0.2315\u0026lz=-0.0338\u0026lw=0.9684\u0026ml=150\u0026s=1.75\u0026l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/composer_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/anvaka/allpypi\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/python?cx=-2700\u0026cy=377\u0026cz=5622\u0026lx=-0.0869\u0026ly=-0.2315\u0026lz=-0.0338\u0026lw=0.9684\u0026ml=150\u0026s=1.75\u0026l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eFedora\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/fedora?cx=1539\u0026cy=409\u0026cz=7141\u0026lx=0.0164\u0026ly=0.1453\u0026lz=-0.0027\u0026lw=0.9892\u0026ml=150\u0026s=1.75\u0026l=1\"\u003e\n          \u003cimg src=\"https://raw.githubusercontent.com/wiki/anvaka/pm/images/debian_fly_first.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/shaded-enmity/allrpm\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/fedora?cx=1539\u0026cy=409\u0026cz=7141\u0026lx=0.0164\u0026ly=0.1453\u0026lz=-0.0027\u0026lw=0.9892\u0026ml=150\u0026s=1.75\u0026l=1\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eRust Crates\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/crates?cx=6617\u0026cy=467\u0026cz=353\u0026lx=0.0169\u0026ly=0.7328\u0026lz=0.0495\u0026lw=0.6785\u0026ml=200\u0026s=1.75\u0026l=1\u0026v=2020-02-19T00-00-00Z\"\u003e\n          \u003cimg src=\"https://i.imgur.com/vAPK5lT.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/brandly/allcrates\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/crates?cx=6617\u0026cy=467\u0026cz=353\u0026lx=0.0169\u0026ly=0.7328\u0026lz=0.0495\u0026lw=0.6785\u0026ml=200\u0026s=1.75\u0026l=1\u0026v=2020-02-19T00-00-00Z\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\n        \u003ch3\u003eElm\u003c/h3\u003e\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/elm?cx=-247\u0026cy=-1794\u0026cz=1804\u0026lx=0.4062\u0026ly=0.1564\u0026lz=-0.3016\u0026lw=0.8483\u0026ml=150\u0026s=1.75\u0026l=1\u0026v=2020-02-21T00-00-00Z\"\u003e\n          \u003cimg src=\"https://i.imgur.com/44Sj8Js.png\"\u003e\n        \u003c/a\u003e\u003cbr /\u003e\n        \u003ca href=\"https://github.com/brandly/allelm\"\u003eindexer\u003c/a\u003e |\n        \u003ca href=\"https://anvaka.github.io/pm/#/galaxy/elm?cx=-247\u0026cy=-1794\u0026cz=1804\u0026lx=0.4062\u0026ly=0.1564\u0026lz=-0.3016\u0026lw=0.8483\u0026ml=150\u0026s=1.75\u0026l=1\u0026v=2020-02-21T00-00-00Z\"\u003edemo\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n# local development\n\n```\ngit clone https://github.com/anvaka/pm\ncd pm\nnpm i\nnpm start\n```\n\nThis will start local development sever with auto-rebuild.\n\n## Your own graphs\n\nThis section has detailed instructions about how to use the tool\nwith your own graphs. Before you read any further, if your graph\nis smaller than 10k nodes, consider using [ngraph.pixel](https://github.com/anvaka/ngraph.pixel)\nor [VivaGraph](https://github.com/anvaka/VivaGraphJS) both should\nbe able to provide interactive layout.\n\nIf you have an interesting graph but don't have JavaScript experience,\nplease feel free to reach out to me and I'll try to make visualization\nfor you (my email is `anvaka@gmail.com`).\n\nOtherwise, if you want to hack on your own, please keep reading.\n\n### Graph\n\nFirst, you will need a graph in [ngraph.graph](https://github.com/anvaka/ngraph.graph)\nformat. The `ngraph.graph` has detailed documentation about how to create graph,\nbut it also has several loaders from popular graph formats (e.g. [dot](https://github.com/anvaka/ngraph.fromdot),\n[gexf](https://github.com/anvaka/ngraph.gexf))\n\n### Layout\n\nNow that you have a graph we need to compute the layout.\n\nIf your graph is smaller than 200k nodes, consider using [ngraph.offline.layout](https://github.com/anvaka/ngraph.offline.layout). This module was\ncreated exactly for the purpose of the `pm` project, it is well documented, and\nshould be easy to get started with. You can also read `layout.js` of `all[gems|go|bower]`\npackages to see more examples.\n\nIf your graph is much larger than 200k nodes, then consider using\n[ngraph.native](https://github.com/anvaka/ngraph.native) - this module\nis harder to work with (as it requires C++ knowledge), but it is much\nfaster.\n\nThe secret GitHub visualization is using [ngraph.native](https://github.com/anvaka/ngraph.native).\n\n### Data format\n\nOnce layout is computed, we are ready to visualize. Just save the graph using\n[ngraph.tobinary](https://github.com/anvaka/ngraph.tobinary#ngraphtobinary)\nand store it along with latest positions file (produced by layout) into a folder.\n\nThe folder structure should look like this:\n\n```\n.\n└── my-pm-data-server\n    └── my-graph\n        ├── manifest.json\n        └── version-1\n            ├── labels.json         /* this file is produced by ngraph.tobinary */\n            ├── links.bin           /* this file is produced by ngraph.tobinary */\n            └── positions.bin       /* this file is produced by ngraph.native   */\n```\n\nThe file `manifest.json` describes what version of the graph are available and has the following\ncontent:\n\n``` json\n{\n  \"all\": [\"version-1\"],\n  \"last\": \"version-1\"\n}\n```\n\nInside `my-pm-data-server` we launch a web server. I personally prefer [http-server](https://www.npmjs.com/package/http-server). Once it is installed globally (`npm i http-server -g`), you can launch it like this:\n\n```\nhttp-server --cors -p 9090\n```\n\nThis will start a local data server at `http://127.0.0.1:9090/`\n\nUpdate the [config.js](https://github.com/anvaka/pm/blob/master/src/config.js) in\nthis repository to point to your data server, and your graph should be accessible at\n\nhttp://127.0.0.1:8081/#/galaxy/my-graph\n\n\n#### Note\nThe [`galactic-data`](https://github.com/anvaka/galactic-data/tree/gh-pages/npm) follows the same\ndata structure as described above. Use it for the reference if you need an example\n\n# The secret visualization\n\nThe last shown visualization was secret GitHub followers visualization.\nIt shows all GitHub users who has more than two followers.\n\nThe visualization has more than 1,100,000 nodes, and renders\nat 60 fps when flying around. The FPS drops when you hover-over\nnodes to 20-30, This is because we are doing hit-testing,\nto find what's under cursor.\n\nWith this many nodes, it runs well in the browser. Unfortunately\nit requires more than 1GB of RAM. Which may or may not crash\nyour phone browser - sorry about this.\n\nWith all warnings said, here are the links:\n* Indexed by [allgithub](https://github.com/anvaka/allgithub)\n* [Live demo](http://anvaka.github.io/pm/#/galaxy/github?l=1)\n\n# Feedback\n\nPlease do not hesitate to provide your feedback or bug fixes.\nEven if it is something small like fixing a typo - I'd be glad to\nhear from you!\n","funding_links":[],"categories":["JavaScript","[↑](#contents) Graph","Linux","others"],"sub_categories":["Red Hat/Fedora"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanvaka%2Fpm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanvaka%2Fpm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanvaka%2Fpm/lists"}