{"_id":"@dheerajsom/pinhub","_rev":"7-b3c3bfdffd427711ba6bda07466d4e8c","name":"@dheerajsom/pinhub","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@dheerajsom/pinhub","version":"0.1.0","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"license":"MIT","_id":"@dheerajsom/pinhub@0.1.0","maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"bin":{"ph":"dist/cli.js"},"dist":{"shasum":"b232bd7f62bba28428c5da3e29383a8b002922a4","tarball":"https://registry.npmjs.org/@dheerajsom/pinhub/-/pinhub-0.1.0.tgz","fileCount":37,"integrity":"sha512-IpZcPmcer4/ngs3xIUEWB456FsJtcJVhCH+SzCiNpTcCYNlu6Jm6ttlqTO0+wWwSJq0V2HnD0oS5afnb4GI52g==","signatures":[{"sig":"MEUCIFCR7jsQwsE51Ckx2zP64hh+yWKTYPJ8W9K4FPJ2aQ4TAiEA80rQcbvQsLYPBdvaS5VCyQR7KuK4zR8RLks1qa9RSmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67785},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":"./dist/index.js"},"gitHead":"679e20efd9826729a1f4dc3a752283b5050b5f39","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","package:check":"npm pack --dry-run","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"dheerajsom","email":"dheeru2605@gmail.com"},"_npmVersion":"11.11.0","description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.4.1","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.20.0","vitest":"^3.0.5","@eslint/js":"^9.20.0","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/pinhub_0.1.0_1783877934019_0.45284313039341995","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dheerajsom/pinhub","version":"0.1.1","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"license":"MIT","_id":"@dheerajsom/pinhub@0.1.1","maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"bin":{"ph":"dist/cli.js"},"dist":{"shasum":"c573eb088c54b79b226f918bf5501200e059cb57","tarball":"https://registry.npmjs.org/@dheerajsom/pinhub/-/pinhub-0.1.1.tgz","fileCount":39,"integrity":"sha512-zenW8FDvGq2jJ8ZJQHiL1QYC8f4aEOo81Do1+8MEjlLWB1MsRi8PNIeZn+24Eh1GhSOaPVA+Rhy7ebPt8sOz+Q==","signatures":[{"sig":"MEUCIErzdrNAs/hZZa6GpV4vWRpX6VeV7lWSPygQsGKuaiDLAiEA35QvW+P5h9tQfsI/HfxQzpRhs7mwPpdicfyMO5rF7Ts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1973539},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":"./dist/index.js"},"gitHead":"679e20efd9826729a1f4dc3a752283b5050b5f39","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","package:check":"npm pack --dry-run","prepublishOnly":"npm run lint && npm run test && npm run build","generate:boards":"tsx scripts/generate-boards.ts"},"_npmUser":{"name":"dheerajsom","email":"dheeru2605@gmail.com"},"_npmVersion":"11.11.0","description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.4.1","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.20.0","vitest":"^3.0.5","@eslint/js":"^9.20.0","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/pinhub_0.1.1_1783878854042_0.10002573914024504","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dheerajsom/pinhub","version":"0.1.2","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"license":"MIT","_id":"@dheerajsom/pinhub@0.1.2","maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"bin":{"ph":"dist/cli.js"},"dist":{"shasum":"5cd31cd5c780bbc719862d8ce4ad3e6034a5dc34","tarball":"https://registry.npmjs.org/@dheerajsom/pinhub/-/pinhub-0.1.2.tgz","fileCount":39,"integrity":"sha512-yrpk3/uEtnlpply88t7W7BXg/wpg+i7D3dzk8NvlhQYrefxAyAT8rB2J2RLqxO18Ca6BcZOXikW+FhZa1pK/UA==","signatures":[{"sig":"MEUCIQDHXCDBFHRHaEETTxwUFX3iB1erdKVZGm4XFBB71KGYGgIgF9R+azTY7+1pbVPJZ49PbGHlbENu+zLYvx3oYQxo9Qw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1973637},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":"./dist/index.js"},"gitHead":"679e20efd9826729a1f4dc3a752283b5050b5f39","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","version":"node scripts/sync-version.mjs && git add src/version.ts","package:check":"npm pack --dry-run","prepublishOnly":"npm run lint && npm run test && npm run build","generate:boards":"tsx scripts/generate-boards.ts"},"_npmUser":{"name":"dheerajsom","email":"dheeru2605@gmail.com"},"_npmVersion":"11.11.0","description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.4.1","commander":"^13.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","eslint":"^9.20.0","vitest":"^3.0.5","@eslint/js":"^9.20.0","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/pinhub_0.1.2_1783879127618_0.6638553340702213","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dheerajsom/pinhub","version":"0.2.0","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"license":"MIT","_id":"@dheerajsom/pinhub@0.2.0","maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"homepage":"https://github.com/Dheerajsom/PinHub#readme","bugs":{"url":"https://github.com/Dheerajsom/PinHub/issues"},"bin":{"ph":"dist/cli.js"},"dist":{"shasum":"4d14d7533d1dc29168050d389700848aa6b0c48b","tarball":"https://registry.npmjs.org/@dheerajsom/pinhub/-/pinhub-0.2.0.tgz","fileCount":44,"integrity":"sha512-zv8ZjKIxK4ExPG8pCZu+ApV6cS5gIPMmUzo/ADHO8P1qhP7fciZoXHx8h344E1FkbiqFQPnIG5ZJctvqptiWig==","signatures":[{"sig":"MEQCIB2BTLqsGQtz53TTmLrC699ckpTZmknLP/QAlXe8hGtKAiAWhKiNIeiWAqPkYt0hS8+QDKevUY1HqXZKFEZUckr0Vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2030288},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":"./dist/index.js"},"gitHead":"d532adf67ae16bde2394c6de9949efb4043448be","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","check:boards":"tsx scripts/generate-boards.ts --check","package:check":"npm pack --dry-run","prepublishOnly":"npm run check:boards && npm run lint && npm run test && npm run build","generate:boards":"tsx scripts/generate-boards.ts"},"_npmUser":{"name":"dheerajsom","email":"dheeru2605@gmail.com"},"repository":{"url":"git+https://github.com/Dheerajsom/PinHub.git","type":"git","directory":"cli"},"_npmVersion":"11.11.0","description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.4.1","commander":"^13.1.0","string-width":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"6.4.3","eslint":"^9.20.0","vitest":"3.2.7","@eslint/js":"^9.20.0","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/pinhub_0.2.0_1783891375021_0.7415201051794826","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dheerajsom/pinhub","version":"0.2.1","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"license":"MIT","_id":"@dheerajsom/pinhub@0.2.1","maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"homepage":"https://github.com/Dheerajsom/PinHub#readme","bugs":{"url":"https://github.com/Dheerajsom/PinHub/issues"},"bin":{"ph":"dist/cli.js"},"dist":{"shasum":"b6488c1dc0b64e586ee88dacc16a48ac95087086","tarball":"https://registry.npmjs.org/@dheerajsom/pinhub/-/pinhub-0.2.1.tgz","fileCount":45,"integrity":"sha512-cGVmT8n101Y25VNoFplIV5e4aaBbS0sC59+Tp7EGj7fS90RnOCKAaSMY9+3FLYFR2uNnYIllOfZNPESI68tXug==","signatures":[{"sig":"MEUCIQDP8kOB/0LbgAM5LJ9sfSamTjaH8qOgmvLHMdaRsqlAIwIgKsEucE9H6MYYsCIC+L5br+WJAk9Esz8jR6b88hN1weU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2031986},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":"./dist/index.js"},"gitHead":"d532adf67ae16bde2394c6de9949efb4043448be","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","check:boards":"tsx scripts/generate-boards.ts --check","package:check":"npm pack --dry-run","prepublishOnly":"npm run check:boards && npm run lint && npm run test && npm run build","generate:boards":"tsx scripts/generate-boards.ts"},"_npmUser":{"name":"dheerajsom","email":"dheeru2605@gmail.com"},"repository":{"url":"git+https://github.com/Dheerajsom/PinHub.git","type":"git","directory":"cli"},"_npmVersion":"11.11.0","description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.4.1","commander":"^13.1.0","string-width":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"6.4.3","eslint":"^9.20.0","vitest":"3.2.7","@eslint/js":"^9.20.0","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/pinhub_0.2.1_1784042886549_0.6821387047538023","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dheerajsom/pinhub","version":"0.3.0","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"license":"MIT","_id":"@dheerajsom/pinhub@0.3.0","maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"homepage":"https://github.com/Dheerajsom/PinHub#readme","bugs":{"url":"https://github.com/Dheerajsom/PinHub/issues"},"bin":{"ph":"dist/cli.js"},"dist":{"shasum":"11be148d42426dfab3d5e746078a94b1f6733189","tarball":"https://registry.npmjs.org/@dheerajsom/pinhub/-/pinhub-0.3.0.tgz","fileCount":45,"integrity":"sha512-6OTSzdnimD7auLfv1z/uE1Q+Y9M6aKCDC5/cMTUzdyMWYatgCw44Yavvi5ydIxRoDvf+XeLMxqF65LIUpwbABw==","signatures":[{"sig":"MEUCIQCZUnlhdjkMhL67aBRdt/YHDo1WFCerbnhID0SkFmeWtgIgUQ0Wbb14WsYyGTQOqG+7MQNeLbbBgU59qkC45KZ5IYE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2140612},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":"./dist/index.js"},"gitHead":"8236a9f634d6ef95539cce17861dfc4da0af6d9a","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","check:boards":"tsx scripts/generate-boards.ts --check","package:check":"npm pack --dry-run","prepublishOnly":"npm run check:boards && npm run lint && npm run test && npm run build","generate:boards":"tsx scripts/generate-boards.ts"},"_npmUser":{"name":"dheerajsom","email":"dheeru2605@gmail.com"},"repository":{"url":"git+https://github.com/Dheerajsom/PinHub.git","type":"git","directory":"cli"},"_npmVersion":"11.11.0","description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.4.1","commander":"^13.1.0","string-width":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"6.4.3","eslint":"^9.20.0","vitest":"3.2.7","@eslint/js":"^9.20.0","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.24.0"},"_npmOperationalInternal":{"tmp":"tmp/pinhub_0.3.0_1784937933665_0.6053195205230202","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"_id":"@dheerajsom/pinhub@0.4.0","bin":{"ph":"dist/cli.js"},"bugs":{"url":"https://github.com/Dheerajsom/PinHub/issues"},"dist":{"shasum":"a169b7509d9f36fccadfad618e08d20a9b62be44","tarball":"https://registry.npmjs.org/@dheerajsom/pinhub/-/pinhub-0.4.0.tgz","fileCount":53,"integrity":"sha512-3eHZ44vF20JV04yvPgrV2JJzObK9L9NAQr184QbSWSmuM7uB3H200l6I76qpEcDb04GRSj3fUZnRA1M3v2vtMw==","signatures":[{"sig":"MEUCIH+uKILrA2Qiu05BIUVLYohO31PuKq1gV9ZvW4Gdci/mAiEA/gvh5bt+VdnDkH3koSRo8Kq2lLNCCmxAyqoZ3zLvO3E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCe0Z8qfHFB22YD8FF5M/0y7E/6e5o5/gyavXaQuHOoLwIhALAQyu2V8CsEf/QCnZMxE4XJupSLDZEunfw6Gd9z5Irc"}],"unpackedSize":3985425},"main":"dist/index.js","name":"@dheerajsom/pinhub","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.18.0"},"exports":{".":"./dist/index.js"},"gitHead":"f4d701c2785f755b53865b79e6db3ab9b8b2fc31","license":"MIT","scripts":{"dev":"tsx src/cli.ts","lint":"eslint .","test":"vitest run","build":"tsc -p tsconfig.json","check:boards":"tsx --tsconfig ../tsconfig.json scripts/generate-boards.ts --check","package:check":"npm pack --dry-run","prepublishOnly":"npm run check:boards && npm run lint && npm run test && npm run build","generate:boards":"tsx --tsconfig ../tsconfig.json scripts/generate-boards.ts"},"version":"0.4.0","_npmUser":{"name":"dheerajsom","email":"dheeru2605@gmail.com"},"homepage":"https://github.com/Dheerajsom/PinHub#readme","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"repository":{"url":"git+https://github.com/Dheerajsom/PinHub.git","type":"git","directory":"cli"},"_npmVersion":"11.11.0","description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","directories":{},"maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.4.1","commander":"^13.1.0","string-width":"^7.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vite":"6.4.3","eslint":"^10.8.0","vitest":"5.0.0","@eslint/js":"^10.0.1","typescript":"^5.7.3","@types/node":"^22.13.0","typescript-eslint":"^8.65.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pinhub_0.4.0_1790732528788_0.8624092159563987"}}},"time":{"created":"2026-07-12T17:38:53.806Z","modified":"2026-09-30T01:42:09.259Z","0.1.0":"2026-07-12T17:38:54.170Z","0.1.1":"2026-07-12T17:54:14.177Z","0.1.2":"2026-07-12T17:58:47.772Z","0.2.0":"2026-07-12T21:22:55.165Z","0.2.1":"2026-07-14T15:28:06.697Z","0.3.0":"2026-07-25T00:05:33.837Z","0.4.0":"2026-09-30T01:42:08.906Z"},"bugs":{"url":"https://github.com/Dheerajsom/PinHub/issues"},"license":"MIT","homepage":"https://github.com/Dheerajsom/PinHub#readme","keywords":["pinout","gpio","raspberry-pi","arduino","esp32","pico","hardware","cli","terminal"],"repository":{"url":"git+https://github.com/Dheerajsom/PinHub.git","type":"git","directory":"cli"},"description":"Hardware board pinout diagrams in your terminal. `ph rpi5` and go.","maintainers":[{"name":"dheerajsom","email":"dheeru2605@gmail.com"}],"readme":"# PinHub CLI (`ph`)\r\n\r\nPinHub puts source-backed hardware pinouts directly in your terminal. The\r\ncross-platform `ph` command shows physical positions, GPIO names, power rails,\r\nalternate functions, and wiring warnings without opening a browser.\r\n\r\nBoard data ships with the package, so normal commands run locally with no\r\nnetwork access or telemetry. Source links favor official vendor documentation\r\nand are available from every board view.\r\n\r\n```text\r\n$ ph rpi5\r\n\r\nRaspberry Pi 5 - Raspberry Pi\r\nSource: Raspberry Pi GPIO documentation (official) - ph rpi5 --source\r\nX GPIO uses 3.3 V logic. Do not apply 5 V to any GPIO pin.\r\n\r\n40-pin GPIO header (J8)\r\n  +--------------------+----+----+--------------------+\r\n  | 3V3                |  1 |  2 | 5V                 |\r\n  | GPIO2 / SDA1       |  3 |  4 | 5V                 |\r\n  | GPIO3 / SCL1       |  5 |  6 | GND                |\r\n  | ...                | .. | .. | ...                |\r\n  +--------------------+----+----+--------------------+\r\n```\r\n\r\n## Requirements and installation\r\n\r\nPinHub requires Node.js 18.18 or newer, which includes npm.\r\n\r\n```bash\r\nnode --version\r\nnpm --version\r\nnpm install -g @dheerajsom/pinhub\r\nph --version\r\nph rpi5\r\n```\r\n\r\nIt works in PowerShell and Windows Terminal on Windows, Terminal and iTerm2 on\r\nmacOS, and common Linux terminals. Install Node.js from\r\n[nodejs.org](https://nodejs.org/) or with your platform package manager:\r\n\r\n```powershell\r\nwinget install OpenJS.NodeJS.LTS\r\n```\r\n\r\n```bash\r\n# macOS\r\nbrew install node\r\n\r\n# Debian/Ubuntu or Fedora\r\nsudo apt install nodejs npm\r\nsudo dnf install nodejs\r\n```\r\n\r\nIf a global npm install fails with permissions errors on macOS or Linux, prefer\r\nan npm-owned prefix instead of `sudo npm install -g`:\r\n\r\n```bash\r\nnpm config set prefix ~/.npm-global\r\n```\r\n\r\nThen add `~/.npm-global/bin` to your shell `PATH` and open a new terminal.\r\n\r\n### Install from this repository\r\n\r\n```bash\r\ngit clone https://github.com/Dheerajsom/PinHub.git\r\ncd PinHub/cli\r\nnpm install\r\nnpm run build\r\nnpm install -g .\r\nph rpi5\r\n```\r\n\r\nYou can also run the compiled command without installing it globally:\r\n\r\n```bash\r\nnode dist/cli.js rpi5\r\n```\r\n\r\n## Commands\r\n\r\n```bash\r\nph <board>            # render one board's pinout\r\nph pico sda           # show recorded SDA matches only\r\nph rpi5 --role spi    # show pins whose recorded role is SPI\r\nph list               # list the complete catalog\r\nph search <query>     # search names, aliases, and manufacturers\r\nph info <board>       # show description, warnings, headers, and aliases\r\nph <board> --source   # show documentation sources\r\nph completion <shell> # print a Tab-completion script\r\nph help               # show command help\r\nph --version          # show the installed version\r\n```\r\n\r\nNames are case-insensitive and forgiving. For example, `ph rpi5`, `ph pi5`,\r\n`ph raspberry-pi-5`, and `ph raspberry pi 5` resolve to the same board. If a\r\nquery does not match, `ph` suggests the closest entries.\r\n\r\nPin lookup matches recorded labels, aliases, roles, and derived nets; it does\r\nnot infer unrecorded alternate functions. Matching rows include the physical\r\nposition, connector group, role, net, and available pin notes or flags.\r\nUse `--json` for matching records or `--ascii`, `--compact`, and `--width`\r\nfor terminal formatting. An unmatched signal returns a clear error.\r\n\r\nCompatibility notes:\r\n\r\n- `arduino-uno-rev3` is the canonical UNO identifier; the former\r\n  `arduino-uno-r3` spelling remains an alias.\r\n- `esp32` selects the DOIT 30-pin `esp32-devkit-v1`; the distinct 38-pin\r\n  Espressif board is `esp32-devkitc`.\r\n- Educational aliases include `frdm-kl25z`, `nexys-a7`, and `de10-lite`.\r\n\r\n### Tab completion\r\n\r\nCompletion is not automatic — shells only complete a command they have been\r\ntaught about. `ph completion <shell>` prints that script to stdout; install it\r\nonce and reopen the shell, and Tab then completes board ids, short aliases,\r\nsubcommands, and flags.\r\n\r\n```powershell\r\n# PowerShell (Windows)\r\nNew-Item -ItemType File -Path $PROFILE -Force   # only if you have no profile yet\r\nph completion powershell | Out-File -Append -Encoding utf8 $PROFILE\r\n```\r\n\r\n```bash\r\n# bash — add to ~/.bashrc\r\neval \"$(ph completion bash)\"\r\n\r\n# or install as a bash-completion file\r\nph completion bash > ~/.local/share/bash-completion/completions/ph\r\n```\r\n\r\n```bash\r\n# zsh — add to ~/.zshrc, after compinit has run\r\neval \"$(ph completion zsh)\"\r\n```\r\n\r\n```fish\r\n# fish\r\nph completion fish > ~/.config/fish/completions/ph.fish\r\n```\r\n\r\nIf zsh reports `compdef: command not found`, add `autoload -Uz compinit &&\r\ncompinit` above the `eval` line.\r\n\r\nCompletion knows the context it is in:\r\n\r\n```text\r\nph rasp<Tab>          # every raspberry-pi-* board\r\nph rpi<Tab>           # short aliases: rpi3, rpi4, rpi5, rpi-pico, ...\r\nph info pic<Tab>      # pico, pico-w, pico-2, pico2w, ...\r\nph rpi5 --so<Tab>     # --source\r\nph list --<Tab>       # only the flags list accepts\r\nph completion <Tab>   # bash, fish, powershell, zsh\r\n```\r\n\r\nMatching is case-insensitive and covers both canonical ids\r\n(`raspberry-pi-pico-w`) and curated aliases (`picow`). The shell scripts call\r\nthe hidden `ph __complete` command, which reads the bundled catalog and never\r\ntouches the network.\r\n\r\nOne PowerShell quirk: it reserves a bare `-` or `--` for its own parameter\r\nparsing and never forwards those to a native completer, so `ph --<Tab>` lists\r\nnothing there. Type one more character — `ph --a<Tab>` completes to `--ascii`.\r\nbash, zsh, and fish complete a bare `--` normally.\r\n\r\n### Output options\r\n\r\n| Flag | Effect |\r\n| --- | --- |\r\n| `--compact` | Use a tighter borderless layout for small terminals |\r\n| `--ascii` | Use ASCII-only borders and symbols |\r\n| `--no-color` | Disable ANSI colors |\r\n| `--no-motion` | Disable the brief interactive signal pulse |\r\n| `--details` | Expand additional alternate pin functions |\r\n| `--json` | Emit machine-readable JSON for a board, list, or search |\r\n| `--source` | Print one board's source links |\r\n| `--width <n>` | Set a whole-number terminal width from 20 to 1000 |\r\n\r\nPresentation flags work in any position, such as `ph list --no-color`,\r\n`ph search pico --width 60`, and `ph info rpi5 --ascii`.\r\n\r\nJSON keeps stdout clean and returns arrays for `list` and `search`. It cannot be\r\ncombined with `--ascii`, `--compact`, `--details`, `--source`, or `--width`.\r\n`--source` and `--details` require a single board and cannot be combined with\r\n`list` or `search`.\r\n\r\n```bash\r\nph esp32\r\nph pico --compact\r\nph pico --details\r\nph rpi5 --ascii --no-color\r\nph uno --json | jq '.headers[].name'\r\nph search raspberry --json | jq '.[].id'\r\nph frdm-kl25z --source\r\n```\r\n\r\n## Catalog and accessibility\r\n\r\nThe CLI carries the complete PinHub website catalog across Raspberry Pi,\r\nArduino, Espressif, STM32, Nordic, TI, NXP, Digilent, Terasic, Lattice,\r\nTeensy, Adafruit, SparkFun, Seeed, BeagleBoard, Jetson, and other ecosystems.\r\nRun `ph list` for the current set.\r\n\r\n- Pin categories use color, labels, category names, and reserved markers, so\r\n  color is never the only signal.\r\n- [`NO_COLOR`](https://no-color.org/), `--no-color`, and redirected output all\r\n  disable ANSI color.\r\n- `--ascii` avoids Unicode box drawing for older terminals and assistive tools.\r\n- Layouts adapt from a bordered table to compact pairs and then a wrapped\r\n  vertical list as terminal width shrinks.\r\n- Warnings retain distinct symbols in color and monochrome modes.\r\n- The interactive signal pulse never runs for pipes, CI, `TERM=dumb`, help,\r\n  version, JSON, completion, `--no-color`, or `--no-motion`. Set\r\n  `PINHUB_NO_MOTION=1` to disable it persistently.\r\n- Tab completion works from the keyboard alone and needs no color or Unicode.\r\n- Board text and echoed arguments are stripped of terminal escape, control,\r\n  bidirectional-formatting, and forged line-break content before rendering.\r\n  The exported renderer also rejects non-finite or oversized header layouts\r\n  and out-of-range pin positions before producing terminal output.\r\n  Oversized fuzzy queries skip edit-distance scoring instead of consuming\r\n  unbounded CPU.\r\n\r\n## Troubleshooting\r\n\r\n### `ph` is not recognized or command not found\r\n\r\nFind the npm global prefix with `npm prefix -g`. On Windows, that directory\r\nitself (often `C:\\Users\\you\\AppData\\Roaming\\npm`) must be on `PATH`; on macOS\r\nand Linux, add `<prefix>/bin`. Open a new terminal after changing `PATH`.\r\n\r\n### Boxes render as `?` or garbled characters\r\n\r\nUse `ph <board> --ascii`. On Windows, prefer Windows Terminal; `chcp 65001` can\r\nalso help with piped output in legacy consoles.\r\n\r\n### Colors or animation are missing\r\n\r\nColor and motion turn off automatically for non-interactive output. Check\r\n`NO_COLOR`, `PINHUB_NO_MOTION`, and `TERM`, or explicitly use `--no-color` and\r\n`--no-motion` when deterministic output is desired.\r\n\r\n### Tab does not complete board names\r\n\r\nNothing is installed by default. Run the matching command in\r\n[Tab completion](#tab-completion), then open a new shell. Verify the data path\r\ndirectly with `ph __complete --prefix=rasp`, which should print board names; if\r\nthat works but Tab does not, the completion script was not loaded by your shell\r\nprofile.\r\n\r\n### The diagram is cramped\r\n\r\nWiden the terminal, use `--compact`, or supply an explicit width such as\r\n`--width 100`.\r\n\r\n### Uninstall\r\n\r\n```bash\r\nnpm uninstall -g @dheerajsom/pinhub\r\n```\r\n\r\n## Hardware safety\r\n\r\nPinout data is hardware-critical. Board variants and revisions can differ,\r\nespecially among ESP32 carrier boards. Before wiring, compare the result with\r\nyour exact board's silkscreen and run `ph <board> --source` to inspect the cited\r\nvendor documents. Never assume a 3.3 V GPIO is 5 V tolerant, and do not connect\r\npower until voltage, ground, boot-strap, reserved, and shared-peripheral pins\r\nhave been checked.\r\n\r\n## Contributing boards\r\n\r\nMost CLI data is generated from the website catalog in `src/lib/boards.ts` at\r\nthe repository root. Add or correct a board there first, keeping it backed by\r\nofficial pinouts, manuals, schematics, or datasheets. Then:\r\n\r\n```bash\r\ncd cli\r\nnpm run generate:boards\r\n```\r\n\r\nAdd short, normalized aliases people actually type to\r\n`scripts/curated-aliases.ts`. Catalog tests enforce source coverage, warning\r\ncoverage, alias uniqueness, connector positions, and generated-data parity.\r\n\r\nFive flagship boards (Pi 5, Pico, Pico W, UNO R3, and ESP32 DevKit V1) retain\r\nricher hand-written modules under `src/boards/`. For those modules:\r\n\r\n- Give every pin a physical number, grid position, label, and category.\r\n- Include at least one official source URL; clearly mark any necessary\r\n  third-party source.\r\n- Include voltage, boot-strap, reserved-pin, and revision warnings.\r\n\r\n## Development and release\r\n\r\n```bash\r\ncd cli\r\nnpm install\r\nnpm run dev -- rpi5     # run directly from TypeScript\r\nnpm run generate:boards # regenerate website-backed board modules\r\nnpm run check:boards    # verify generated data is current\r\nnpm run lint\r\nnpm test\r\nnpm run build\r\nnpm run package:check\r\n```\r\n\r\nThe entry point is `src/cli.ts`. `src/run.ts` contains the deterministic command\r\nsurface and writes to captured buffers for tests. Renderers under `src/render/`\r\nhandle dual-row, compact, and vertical layouts. `src/complete.ts` holds the\r\nshell-completion candidates and scripts, and is loaded on its own fast path so a\r\nTab press never pays for commander, chalk, or the renderers. CI exercises lint,\r\ntests, build, and smoke coverage on Windows, macOS, and Linux.\r\n\r\nTo publish an intentional SemVer release from `cli/`:\r\n\r\n```bash\r\nnpm version patch       # or minor / major\r\nnpm publish --access public\r\n```\r\n\r\nThe `prepublishOnly` hook checks generated board data, lint, tests, and build.\r\nThe package allowlist ships only compiled output and this README.\r\n\r\nMore links: [PinHub website](https://pinhub-mauve.vercel.app) ·\r\n[source and issues](https://github.com/Dheerajsom/PinHub)\r\n","readmeFilename":"README.md"}