{"_id":"@getdashfy/ext-github","_rev":"4-8998282e9f8e2f356e45b556ddd9ced0","name":"@getdashfy/ext-github","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@getdashfy/ext-github","version":"0.1.0","keywords":["dashfy","dashboard","widgets","extension","github","charts","recharts"],"author":{"url":"https://github.com/brenopolanski","name":"Breno Polanski","email":"breno@dashfy.dev"},"license":"AGPL-3.0-or-later","_id":"@getdashfy/ext-github@0.1.0","maintainers":[{"name":"breno.polanski","email":"breno.polanski@gmail.com"}],"homepage":"https://github.com/dashfy/dashfy-ext-github#readme","bugs":{"url":"https://github.com/dashfy/dashfy-ext-github/issues"},"dist":{"shasum":"28389649da7699803fd02c170cad6e0fe5a1df0b","tarball":"https://registry.npmjs.org/@getdashfy/ext-github/-/ext-github-0.1.0.tgz","fileCount":16,"integrity":"sha512-Q/0TZPdix1dUeoGyN5AgweqzRH3almbQ9bEtLCoNhQrqMOaj93c1z42cNytgE37a6hdqiXcscV5wDq8xam60MQ==","signatures":[{"sig":"MEYCIQC/1jCrdY+B16Ueo5Ao5CSTKgcxlk3LBO4g9qYeJ0vXvgIhAMSoB0nDQBhOXaT4v7/yumyH8eD52GxuLghAlNWHcZ8l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456686},"main":"./dist/index.js","type":"module","_from":"file:getdashfy-ext-github-0.1.0.tgz","types":"./dist/index.d.ts","dashfy":{"id":"github","docs":"Create a token at https://github.com/settings/tokens","title":"GitHub","client":{"mode":"poll","import":"@getdashfy/ext-github/client","factory":"createGitHubClient","options":"{ token: process.env.GITHUB_TOKEN! }"},"envVars":["GITHUB_TOKEN"],"starter":[{"widget":"RepoBadge","repository":"facebook/react"},{"widget":"Status"}],"widgets":["UserBadge","OrgBadge","RepoBadge","Status","Branches","PullRequests","ContributorsStats","CommitActivityLine","Gitmap"],"categories":["developer"]},"module":"./dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.cjs"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest run","build":"tsup","clean":"rm -rf dist node_modules","format":"pnpm prettier --write","verify":"pnpm check:all && pnpm test && pnpm build","lint:fix":"eslint . --fix","prettier":"prettier \"**/*.{js,mjs,ts,tsx,css,json,md}\"","changeset":"changeset","check:all":"pnpm check:fix && pnpm check:circular","check:fix":"pnpm format && pnpm lint:fix && pnpm typecheck","typecheck":"tsc --noEmit","test:watch":"vitest","lint-staged":"lint-staged","format:check":"pnpm prettier --check","check:circular":"madge --circular --extensions ts,tsx src/","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"breno.polanski","email":"breno.polanski@gmail.com"},"_resolved":"/private/var/folders/40/yqjd7mn110s9hm89bcd98dfc0000gn/T/f32c5ce1597c773401f0aa0f42fd9b65/getdashfy-ext-github-0.1.0.tgz","_integrity":"sha512-Q/0TZPdix1dUeoGyN5AgweqzRH3almbQ9bEtLCoNhQrqMOaj93c1z42cNytgE37a6hdqiXcscV5wDq8xam60MQ==","repository":{"url":"git+ssh://git@github.com/dashfy/dashfy-ext-github.git","type":"git"},"_npmVersion":"11.18.0","description":"Dashfy GitHub extension - Display GitHub data with beautiful widgets and charts","directories":{},"_nodeVersion":"25.0.0","dependencies":{"colord":"^2.9.3","@getdashfy/utils":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","husky":"^9.1.7","jsdom":"^25.0.1","madge":"^8.0.0","react":"^19.2.0","eslint":"^9.17.0","vitest":"^2.1.4","globals":"^15.13.0","prettier":"^3.4.2","recharts":"^2.15.0","react-dom":"^19.2.0","@eslint/js":"^9.17.0","typescript":"^5.7.0","@types/node":"^22.8.6","lint-staged":"^15.2.11","@types/react":"^19.2.0","lucide-react":"^0.454.0","@getdashfy/ui":"^0.2.1","@changesets/cli":"^2.29.8","@commitlint/cli":"^19.6.1","@getdashfy/types":"^0.1.1","@types/react-dom":"^19.2.0","typescript-eslint":"^8.18.1","eslint-plugin-react":"^7.37.2","@vitejs/plugin-react":"^4.3.3","@testing-library/react":"^16.0.1","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.14","prettier-plugin-tailwindcss":"^0.7.1","@changesets/changelog-github":"^0.5.2","eslint-plugin-unused-imports":"^4.3.0","@commitlint/config-conventional":"^19.6.1","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"react":"^19.0.0","recharts":"^2.15.0","react-dom":"^19.0.0","lucide-react":"^0.454.0","@getdashfy/ui":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/ext-github_0.1.0_1784919888811_0.06142611867363601","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@getdashfy/ext-github","version":"0.1.1","keywords":["dashfy","dashboard","widgets","extension","github","charts","recharts"],"author":{"url":"https://github.com/brenopolanski","name":"Breno Polanski","email":"breno@dashfy.dev"},"license":"AGPL-3.0-or-later","_id":"@getdashfy/ext-github@0.1.1","maintainers":[{"name":"breno.polanski","email":"breno.polanski@gmail.com"}],"homepage":"https://github.com/dashfy/dashfy-ext-github#readme","bugs":{"url":"https://github.com/dashfy/dashfy-ext-github/issues"},"dist":{"shasum":"3273edf7e49560bc618530244106f13457cb31be","tarball":"https://registry.npmjs.org/@getdashfy/ext-github/-/ext-github-0.1.1.tgz","fileCount":16,"integrity":"sha512-J7JxNbeyfMUona0yYR9qu0qJ+v+bhoptbJrJn4VIwgoxeCtMpWuxRgrftPk6UseFAapvtQBcBs2xuX2MEFOrXA==","signatures":[{"sig":"MEUCIQDBbfe0D8ukySmwVAGTG+iwOX4bDujvP9GH0LbEe0wnjAIgI4g5Hgr51WcKtFg2mu9ZsgWsfJ6yeo7onKwACzMdTWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":439623},"main":"./dist/index.js","type":"module","_from":"file:getdashfy-ext-github-0.1.1.tgz","types":"./dist/index.d.ts","dashfy":{"id":"github","docs":"Create a token at https://github.com/settings/tokens","title":"GitHub","client":{"mode":"poll","import":"@getdashfy/ext-github/client","factory":"createGitHubClient","options":"{ token: process.env.GITHUB_TOKEN! }"},"envVars":["GITHUB_TOKEN"],"starter":[{"widget":"RepoBadge","repository":"react/react"},{"widget":"Status"}],"widgets":["UserBadge","OrgBadge","RepoBadge","Status","Branches","PullRequests","ContributorsStats","CommitActivityLine","TrafficViewsHistogram","TrafficClonesHistogram","Gitmap"],"categories":["developer"]},"module":"./dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.cjs"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest run","build":"tsup","clean":"rm -rf dist node_modules","format":"pnpm prettier --write","verify":"pnpm check:all && pnpm test && pnpm build","lint:fix":"eslint . --fix","prettier":"prettier \"**/*.{js,mjs,ts,tsx,css,json,md}\"","changeset":"changeset","check:all":"pnpm check:fix && pnpm check:circular","check:fix":"pnpm format && pnpm lint:fix && pnpm typecheck","typecheck":"tsc --noEmit","test:watch":"vitest","lint-staged":"lint-staged","format:check":"pnpm prettier --check","check:circular":"madge --circular --extensions ts,tsx src/ --ts-config tsconfig.json","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"breno.polanski","email":"breno.polanski@gmail.com"},"_resolved":"/private/var/folders/40/yqjd7mn110s9hm89bcd98dfc0000gn/T/1f82ec099160f467fc9e4966f06df5ff/getdashfy-ext-github-0.1.1.tgz","_integrity":"sha512-J7JxNbeyfMUona0yYR9qu0qJ+v+bhoptbJrJn4VIwgoxeCtMpWuxRgrftPk6UseFAapvtQBcBs2xuX2MEFOrXA==","repository":{"url":"git+ssh://git@github.com/dashfy/dashfy-ext-github.git","type":"git"},"_npmVersion":"11.18.0","description":"GitHub extension for Dashfy - Display GitHub data with beautiful widgets and charts","directories":{},"_nodeVersion":"25.0.0","dependencies":{"colord":"^2.9.3","@getdashfy/utils":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","husky":"^9.1.7","jsdom":"^25.0.1","madge":"^8.0.0","react":"^19.2.0","eslint":"^9.17.0","vitest":"^2.1.4","globals":"^15.13.0","prettier":"^3.4.2","recharts":"^2.15.0","react-dom":"^19.2.0","@eslint/js":"^9.17.0","typescript":"^5.7.0","@types/node":"^22.8.6","lint-staged":"^15.2.11","@types/react":"^19.2.0","lucide-react":"^0.454.0","@getdashfy/ui":"^0.2.1","@changesets/cli":"^2.29.8","@commitlint/cli":"^19.6.1","@getdashfy/types":"^0.1.1","@types/react-dom":"^19.2.0","typescript-eslint":"^8.18.1","eslint-plugin-react":"^7.37.2","@vitejs/plugin-react":"^4.3.3","@testing-library/react":"^16.0.1","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.14","prettier-plugin-tailwindcss":"^0.7.1","@changesets/changelog-github":"^0.5.2","eslint-plugin-unused-imports":"^4.3.0","@commitlint/config-conventional":"^19.6.1","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"react":"^19.0.0","recharts":"^2.15.0","react-dom":"^19.0.0","lucide-react":"^0.454.0","@getdashfy/ui":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/ext-github_0.1.1_1785164011681_0.22898193702345182","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@getdashfy/ext-github","version":"0.2.0","keywords":["dashfy","dashboard","widgets","extension","github","charts","recharts"],"author":{"url":"https://github.com/brenopolanski","name":"Breno Polanski","email":"breno@dashfy.dev"},"license":"AGPL-3.0-or-later","_id":"@getdashfy/ext-github@0.2.0","maintainers":[{"name":"breno.polanski","email":"breno.polanski@gmail.com"}],"homepage":"https://github.com/dashfy/dashfy-ext-github#readme","bugs":{"url":"https://github.com/dashfy/dashfy-ext-github/issues"},"dist":{"shasum":"8085139809bb2cdcfa23ea54a9c326108496e95d","tarball":"https://registry.npmjs.org/@getdashfy/ext-github/-/ext-github-0.2.0.tgz","fileCount":16,"integrity":"sha512-j78n2tNiQ3Xn518BR+GACA4FQ0vuIPMcNWCO94opMbK6SkedxDp+NmO7+Am83485rxadYoTRYiyUPf5IGxxByQ==","signatures":[{"sig":"MEQCIHb9v+SkpHA0bcRXDkiE1DJsRTtZkme3gwYmqzJb405AAiADTDPLciSNcbXtFbttt/jyGzfbBTYxYVmtu0z2toEpNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":439910},"main":"./dist/index.js","type":"module","_from":"file:getdashfy-ext-github-0.2.0.tgz","types":"./dist/index.d.ts","dashfy":{"id":"github","docs":"Create a token at https://github.com/settings/tokens","title":"GitHub","client":{"mode":"poll","import":"@getdashfy/ext-github/client","factory":"createGitHubClient","options":"{ token: process.env.GITHUB_TOKEN! }"},"envVars":["GITHUB_TOKEN"],"starter":[{"widget":"RepoBadge","repository":"react/react"},{"widget":"Status"}],"widgets":["UserBadge","OrgBadge","RepoBadge","Status","Branches","PullRequests","ContributorsStats","CommitActivityLine","TrafficViewsHistogram","TrafficClonesHistogram","Gitmap"],"categories":["developer"]},"module":"./dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.cjs"}},"scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest run","build":"tsup","clean":"rm -rf dist node_modules","format":"pnpm prettier --write","verify":"pnpm check:all && pnpm test && pnpm build","lint:fix":"eslint . --fix","prettier":"prettier \"**/*.{js,mjs,ts,tsx,css,json,md}\"","changeset":"changeset","check:all":"pnpm check:fix && pnpm check:circular","check:fix":"pnpm format && pnpm lint:fix && pnpm typecheck","typecheck":"tsc --noEmit","test:watch":"vitest","lint-staged":"lint-staged","sync:dashfy":"node scripts/sync-dashfy-deps.js","format:check":"pnpm prettier --check","check:circular":"madge --circular --extensions ts,tsx src/ --ts-config tsconfig.json","changeset:publish":"changeset publish","changeset:version":"changeset version"},"_npmUser":{"name":"breno.polanski","email":"breno.polanski@gmail.com"},"_resolved":"/private/var/folders/40/yqjd7mn110s9hm89bcd98dfc0000gn/T/117d8db6be2bbb13a9baf214ed42ec99/getdashfy-ext-github-0.2.0.tgz","_integrity":"sha512-j78n2tNiQ3Xn518BR+GACA4FQ0vuIPMcNWCO94opMbK6SkedxDp+NmO7+Am83485rxadYoTRYiyUPf5IGxxByQ==","repository":{"url":"git+ssh://git@github.com/dashfy/dashfy-ext-github.git","type":"git"},"_npmVersion":"11.18.0","description":"GitHub extension for Dashfy - Display GitHub data with beautiful widgets and charts","directories":{},"_nodeVersion":"25.0.0","dependencies":{"colord":"^2.9.3","@getdashfy/utils":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","husky":"^9.1.7","jsdom":"^25.0.1","madge":"^8.0.0","react":"^19.2.0","eslint":"^9.17.0","vitest":"^2.1.4","globals":"^15.13.0","prettier":"^3.4.2","recharts":"^2.15.0","react-dom":"^19.2.0","@eslint/js":"^9.17.0","typescript":"^5.7.0","@types/node":"^22.8.6","lint-staged":"^15.2.11","@types/react":"^19.2.0","lucide-react":"^0.454.0","@getdashfy/ui":"^0.3.1","@changesets/cli":"^2.29.8","@commitlint/cli":"^19.6.1","@getdashfy/types":"^0.3.0","@types/react-dom":"^19.2.0","typescript-eslint":"^8.18.1","eslint-plugin-react":"^7.37.2","@vitejs/plugin-react":"^4.3.3","@testing-library/react":"^16.0.1","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.14","prettier-plugin-tailwindcss":"^0.7.1","@changesets/changelog-github":"^0.5.2","eslint-plugin-unused-imports":"^4.3.0","@commitlint/config-conventional":"^19.6.1","eslint-plugin-simple-import-sort":"^12.1.1"},"peerDependencies":{"react":"^19.0.0","recharts":"^2.15.0","react-dom":"^19.0.0","lucide-react":"^0.454.0","@getdashfy/ui":"^0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/ext-github_0.2.0_1785958291942_0.32744451868090385","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@getdashfy/ext-github","version":"0.2.1","description":"GitHub extension for Dashfy - Display GitHub data with beautiful widgets and charts","keywords":["dashfy","dashboard","widgets","extension","github","charts","recharts"],"homepage":"https://github.com/dashfy/dashfy-ext-github#readme","bugs":{"url":"https://github.com/dashfy/dashfy-ext-github/issues"},"repository":{"type":"git","url":"git+ssh://git@github.com/dashfy/dashfy-ext-github.git"},"license":"AGPL-3.0-or-later","author":{"name":"Breno Polanski","email":"breno@dashfy.dev","url":"https://github.com/brenopolanski"},"type":"module","dashfy":{"id":"github","title":"GitHub","categories":["developer"],"docs":"Create a token at https://github.com/settings/tokens","widgets":["UserBadge","OrgBadge","RepoBadge","Status","Branches","PullRequests","ContributorsStats","CommitActivityLine","TrafficViewsHistogram","TrafficClonesHistogram","Gitmap"],"client":{"import":"@getdashfy/ext-github/client","factory":"createGitHubClient","mode":"poll","options":"{ token: process.env.GITHUB_TOKEN! }"},"envVars":["GITHUB_TOKEN"],"starter":[{"widget":"RepoBadge","repository":"react/react"},{"widget":"Status"}]},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.cjs"}},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","publishConfig":{"access":"public"},"engines":{"node":">=20.0.0"},"dependencies":{"@getdashfy/utils":"^0.1.1","colord":"^2.9.3"},"peerDependencies":{"@getdashfy/ui":"^0.3.1","lucide-react":">=0.454.0","react":"^19.0.0","react-dom":"^19.0.0","recharts":"^2.15.0"},"devDependencies":{"@changesets/changelog-github":"^0.5.2","@changesets/cli":"^2.29.8","@commitlint/cli":"^19.6.1","@commitlint/config-conventional":"^19.6.1","@eslint/js":"^9.17.0","@getdashfy/types":"^0.3.0","@getdashfy/ui":"^0.3.1","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.0.1","@types/node":"^22.8.6","@types/react":"^19.2.0","@types/react-dom":"^19.2.0","@vitejs/plugin-react":"^4.3.3","eslint":"^9.17.0","eslint-plugin-react":"^7.37.2","eslint-plugin-react-hooks":"^5.0.0","eslint-plugin-react-refresh":"^0.4.14","eslint-plugin-simple-import-sort":"^12.1.1","eslint-plugin-unused-imports":"^4.3.0","globals":"^15.13.0","husky":"^9.1.7","jsdom":"^25.0.1","lint-staged":"^15.2.11","lucide-react":"^0.555.0","madge":"^8.0.0","prettier":"^3.4.2","prettier-plugin-tailwindcss":"^0.7.1","react":"^19.2.0","react-dom":"^19.2.0","recharts":"^2.15.0","tsup":"^8.3.5","typescript":"^5.7.0","typescript-eslint":"^8.18.1","vitest":"^2.1.4"},"scripts":{"build":"tsup","changeset":"changeset","changeset:publish":"changeset publish","changeset:version":"changeset version","check:all":"pnpm check:fix && pnpm check:circular","check:circular":"madge --circular --extensions ts,tsx src/ --ts-config tsconfig.json","check:fix":"pnpm format && pnpm lint:fix && pnpm typecheck","clean":"rm -rf dist node_modules","dev":"tsup --watch","format":"pnpm prettier --write","format:check":"pnpm prettier --check","lint":"eslint .","lint-staged":"lint-staged","lint:fix":"eslint . --fix","prettier":"prettier \"**/*.{js,mjs,ts,tsx,css,json,md}\"","sync:dashfy":"node scripts/sync-dashfy-deps.js","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","verify":"pnpm check:all && pnpm test && pnpm build"},"_id":"@getdashfy/ext-github@0.2.1","_integrity":"sha512-9MpaveZE/r8QMSrf4lnAtJHbEB02F9bWFf2TZWxGHg/E/itXwvWn6vrOuLbfRFLOudrqwDzpOxkIpgnHoXa0LA==","_resolved":"/private/var/folders/40/yqjd7mn110s9hm89bcd98dfc0000gn/T/ca7e8b6e35bc195ae816c0d2becc26a5/getdashfy-ext-github-0.2.1.tgz","_from":"file:getdashfy-ext-github-0.2.1.tgz","_nodeVersion":"25.0.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-9MpaveZE/r8QMSrf4lnAtJHbEB02F9bWFf2TZWxGHg/E/itXwvWn6vrOuLbfRFLOudrqwDzpOxkIpgnHoXa0LA==","shasum":"35fbe0821104b58e63ed3e4dd307378f6c871e7b","tarball":"https://registry.npmjs.org/@getdashfy/ext-github/-/ext-github-0.2.1.tgz","fileCount":16,"unpackedSize":440237,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDLhkmNQlucRCMUKNb6n9vIivarAcW/cgxUm8C0aWih9wIhALr3Yqk2Wek4DHXXFdzCDRtCNix8LiqV715kFWUTpqj5"}]},"_npmUser":{"name":"breno.polanski","email":"breno.polanski@gmail.com"},"directories":{},"maintainers":[{"name":"breno.polanski","email":"breno.polanski@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ext-github_0.2.1_1786145322779_0.6493723049784037"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-24T19:04:48.648Z","modified":"2026-08-07T23:28:43.116Z","0.1.0":"2026-07-24T19:04:48.960Z","0.1.1":"2026-07-27T14:53:31.817Z","0.2.0":"2026-08-05T19:31:32.073Z","0.2.1":"2026-08-07T23:28:42.928Z"},"bugs":{"url":"https://github.com/dashfy/dashfy-ext-github/issues"},"author":{"name":"Breno Polanski","email":"breno@dashfy.dev","url":"https://github.com/brenopolanski"},"license":"AGPL-3.0-or-later","homepage":"https://github.com/dashfy/dashfy-ext-github#readme","keywords":["dashfy","dashboard","widgets","extension","github","charts","recharts"],"repository":{"type":"git","url":"git+ssh://git@github.com/dashfy/dashfy-ext-github.git"},"description":"GitHub extension for Dashfy - Display GitHub data with beautiful widgets and charts","maintainers":[{"name":"breno.polanski","email":"breno.polanski@gmail.com"}],"readme":"# `@getdashfy/ext-github`\n\n![Full README Row](https://shieldcn.dev/group/npm/@getdashfy/ext-github+github/stars/dashfy/dashfy-ext-github+github/ci/dashfy/dashfy-ext-github+github/license/dashfy/dashfy-ext-github.svg?variant=branded&size=xs)\n\n[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/dashfy?referralCode=INMsTa&utm_medium=integration&utm_source=template&utm_campaign=generic)\n\n> GitHub extension for [Dashfy](https://github.com/dashfy/dashfy) - Display GitHub data with beautiful widgets and charts.\n\nThis extension provides widgets to visualize GitHub repositories, users, organizations, pull requests, branches, contributions, and more.\n\n![Dashfy dashboard with GitHub extension widgets](https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/dashfy-ext-github.png)\n\n## Features\n\n- **📊 Repository stats**: Display repository information, stars, forks, issues, and activity\n- **👥 User & organization badges**: Show user and organization profiles\n- **🔀 Pull requests & branches**: Monitor open PRs and active branches\n- **📈 Charts & analytics**: Visualize commit activity, traffic views, and clones\n- **👨‍💻 Contributors**: Display top contributors with statistics\n- **🗓️ Contribution heatmap**: GitHub-style contribution calendar (Gitmap)\n- **🟢 GitHub status**: Monitor GitHub's system status\n- **⚡ Real-time updates**: Automatic data refresh via WebSocket subscriptions\n- **🎨 Theme support**: Works with all Dashfy themes (light/dark mode)\n\n## Installation\n\nInstall with your favorite package manager:\n\n#### `npm`\n\n```bash\nnpm install @getdashfy/ext-github\n```\n\n#### `pnpm`\n\n```bash\npnpm add @getdashfy/ext-github\n```\n\n#### `yarn`\n\n```bash\nyarn add @getdashfy/ext-github\n```\n\n#### `bun`\n\n```bash\nbun add @getdashfy/ext-github\n```\n\n## Quick start\n\n### 1. Server setup\n\nRegister the GitHub API client in your Dashfy server (`dashfy.server.ts`):\n\n```ts\nimport { Dashfy } from '@getdashfy/server'\nimport { createGitHubClient } from '@getdashfy/ext-github/client'\n\n// Create a new Dashfy server instance\nconst dashfy = new Dashfy()\n\n// Load dashboard configuration\nawait dashfy.configureFromFile('./dashfy.config.yml')\n\n// Register GitHub API\n// Get your token at: https://github.com/settings/tokens\n// Set it with: export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx in .env file\ndashfy.registerApi(\n  'github',\n  createGitHubClient({\n    token: process.env.GITHUB_TOKEN, // Optional but recommended\n  }),\n)\n\n// Start server\nawait dashfy.start()\n```\n\n### 2. Client setup\n\nRegister GitHub widgets in your React application (`App.tsx`):\n\n```tsx\nimport { WidgetRegistry } from '@getdashfy/ui'\nimport {\n  Branches,\n  CommitActivityLine,\n  ContributorsStats,\n  Gitmap,\n  OrgBadge,\n  PullRequests,\n  RepoBadge,\n  Status,\n  TrafficClonesHistogram,\n  TrafficViewsHistogram,\n  UserBadge,\n} from '@getdashfy/ext-github'\n\n// Register GitHub extension\nWidgetRegistry.addExtension('github', {\n  Branches,\n  CommitActivityLine,\n  ContributorsStats,\n  Gitmap,\n  OrgBadge,\n  PullRequests,\n  RepoBadge,\n  Status,\n  TrafficClonesHistogram,\n  TrafficViewsHistogram,\n  UserBadge,\n})\n```\n\n### 3. Dashboard configuration\n\nAdd GitHub widgets to your dashboard configuration (`dashfy.config.yml`):\n\n```yaml\ndashboards:\n  - title: GitHub Dashboard\n    columns: 3\n    rows: 2\n    widgets:\n      - extension: github\n        widget: RepoBadge\n        repository: react/react\n        x: 0\n        y: 0\n        columns: 1\n        rows: 1\n\n      - extension: github\n        widget: PullRequests\n        repository: vercel/next.js\n        state: open\n        x: 1\n        y: 0\n        columns: 2\n        rows: 1\n```\n\n## GitHub API configuration\n\n### Authentication\n\nWhile authentication is optional, it's **highly recommended** to provide a GitHub personal access token to:\n\n- Access private repositories\n- Increase API rate limits (5,000 requests/hour vs 60 requests/hour)\n- Access traffic data (requires push access)\n\n#### Creating a personal access token\n\n1. Go to [GitHub Settings → Tokens](https://github.com/settings/tokens)\n2. Click \"Generate new token (classic)\"\n3. Select scopes based on your needs:\n   - `public_repo` - Access public repositories\n   - `repo` - Access private repositories\n   - `read:org` - Read organization data\n4. Copy the generated token\n\n#### Configuration options\n\n```ts\ncreateGitHubClient({\n  // GitHub API base URL (useful for GitHub Enterprise)\n  baseUrl: 'https://api.github.com', // default\n\n  // Personal access token for authentication\n  token: process.env.GITHUB_TOKEN,\n\n  // Request timeout in milliseconds\n  timeout: 10_000, // default\n})\n```\n\n#### Environment variables\n\nYou can use environment variables for configuration:\n\n```bash\nGITHUB_TOKEN=ghp_your_token_here\n```\n\n```ts\ncreateGitHubClient({\n  token: process.env.GITHUB_TOKEN,\n})\n```\n\n### GitHub enterprise\n\nTo use with GitHub Enterprise, set the `baseUrl`:\n\n```ts\ncreateGitHubClient({\n  baseUrl: 'https://github.company.com/api/v3',\n  token: process.env.GITHUB_ENTERPRISE_TOKEN,\n})\n```\n\n## API endpoints\n\n`createGitHubClient` registers the endpoints below. Widgets subscribe to them through the `endpoint` parameter, and you can call any of them from your own custom widgets.\n\n| Endpoint            | Parameters              | Returns                                         |\n| ------------------- | ----------------------- | ----------------------------------------------- |\n| `user`              | `user`                  | User profile                                    |\n| `organization`      | `organization`          | Organization profile                            |\n| `repository`        | `repository`            | Repository details and stats                    |\n| `branches`          | `repository`, `perPage` | Branches sorted by most recent commit           |\n| `pullRequests`      | `repository`, `state`   | Pull requests filtered by state                 |\n| `issues`            | `repository`, `state`   | Issues filtered by state                        |\n| `contributorsStats` | `repository`            | Contributors with commit counts                 |\n| `commitActivity`    | `repository`            | Weekly commit totals for the last 52 weeks      |\n| `trafficViews`      | `repository`            | Views for the last 14 days (needs push access)  |\n| `trafficClones`     | `repository`            | Clones for the last 14 days (needs push access) |\n| `status`            | -                       | GitHub platform status                          |\n| `contributions`     | `user`                  | Contribution calendar data                      |\n\n`issues` has no built-in widget yet — it is available for custom widgets.\n\n## Available widgets\n\n### Badges\n\n#### `RepoBadge`\n\nDisplay repository information with stats (stars, forks, issues).\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.RepoBadge.png\" alt=\"RepoBadge widget preview\" width=\"320\" />\n\n**Parameters:**\n\n| Parameter    | Type   | Required | Default      | Description                       |\n| ------------ | ------ | -------- | ------------ | --------------------------------- |\n| `repository` | string | yes      | -            | Repository in format \"owner/repo\" |\n| `title`      | string | no       | \"Repository\" | Custom widget title               |\n| `api`        | string | no       | \"github\"     | API subscription ID               |\n| `endpoint`   | string | no       | \"repository\" | API endpoint to call              |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: RepoBadge\n  repository: react/react\n  title: React Repository\n  columns: 1\n  rows: 1\n```\n\n#### `UserBadge`\n\nDisplay GitHub user profile information.\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.UserBadge.png\" alt=\"UserBadge widget preview\" width=\"320\" />\n\n**Parameters:**\n\n| Parameter  | Type   | Required | Default       | Description          |\n| ---------- | ------ | -------- | ------------- | -------------------- |\n| `user`     | string | yes      | -             | GitHub username      |\n| `title`    | string | no       | \"GitHub User\" | Custom widget title  |\n| `api`      | string | no       | \"github\"      | API subscription ID  |\n| `endpoint` | string | no       | \"user\"        | API endpoint to call |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: UserBadge\n  user: torvalds\n  columns: 1\n  rows: 1\n```\n\n#### `OrgBadge`\n\nDisplay GitHub organization information.\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.OrgBadge.png\" alt=\"OrgBadge widget preview\" width=\"320\" />\n\n**Parameters:**\n\n| Parameter      | Type   | Required | Default        | Description          |\n| -------------- | ------ | -------- | -------------- | -------------------- |\n| `organization` | string | yes      | -              | Organization name    |\n| `title`        | string | no       | \"Organization\" | Custom widget title  |\n| `api`          | string | no       | \"github\"       | API subscription ID  |\n| `endpoint`     | string | no       | \"organization\" | API endpoint to call |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: OrgBadge\n  organization: facebook\n  columns: 1\n  rows: 1\n```\n\n### Repository data\n\n#### `Branches`\n\nDisplay repository branches with commit authors and dates.\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.Branches.png\" alt=\"Branches widget preview\" width=\"640\" />\n\n**Parameters:**\n\n| Parameter    | Type   | Required | Default    | Description                       |\n| ------------ | ------ | -------- | ---------- | --------------------------------- |\n| `repository` | string | yes      | -          | Repository in format \"owner/repo\" |\n| `perPage`    | number | no       | 30         | Number of branches to fetch       |\n| `title`      | string | no       | \"Branches\" | Custom widget title               |\n| `api`        | string | no       | \"github\"   | API subscription ID               |\n| `endpoint`   | string | no       | \"branches\" | API endpoint to call              |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: Branches\n  repository: vercel/next.js\n  columns: 2\n  rows: 1\n```\n\n#### `PullRequests`\n\nDisplay repository pull requests with authors and status.\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.PullRequests.png\" alt=\"PullRequests widget preview\" width=\"640\" />\n\n**Parameters:**\n\n| Parameter    | Type                        | Required | Default         | Description                       |\n| ------------ | --------------------------- | -------- | --------------- | --------------------------------- |\n| `repository` | string                      | yes      | -               | Repository in format \"owner/repo\" |\n| `state`      | \"open\" \\| \"closed\" \\| \"all\" | no       | \"open\"          | Pull request state filter         |\n| `title`      | string                      | no       | \"Pull Requests\" | Custom widget title               |\n| `api`        | string                      | no       | \"github\"        | API subscription ID               |\n| `endpoint`   | string                      | no       | \"pullRequests\"  | API endpoint to call              |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: PullRequests\n  repository: react/react\n  state: open\n  columns: 2\n  rows: 1\n```\n\n### Charts & Analytics\n\nEach chart ships in three flavours. The `Line` and `Histogram` widgets are thin wrappers that preset the chart style, while the base component accepts a `type` of `\"area\"` or `\"bar\"`:\n\n| Base component        | Area variant         | Bar variant               |\n| --------------------- | -------------------- | ------------------------- |\n| `CommitActivityChart` | `CommitActivityLine` | `CommitActivityHistogram` |\n| `TrafficViewsChart`   | `TrafficViewsLine`   | `TrafficViewsHistogram`   |\n| `TrafficClonesChart`  | `TrafficClonesLine`  | `TrafficClonesHistogram`  |\n\nAll three accept the same parameters, so the tables below apply to every variant.\n\n#### `CommitActivityLine`\n\nDisplay commit activity over the last year as an area chart.\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.CommitActivityLine.png\" alt=\"CommitActivityLine widget preview\" width=\"640\" />\n\n**Parameters:**\n\n| Parameter    | Type   | Required | Default           | Description                       |\n| ------------ | ------ | -------- | ----------------- | --------------------------------- |\n| `repository` | string | yes      | -                 | Repository in format \"owner/repo\" |\n| `title`      | string | no       | \"Commit Activity\" | Custom widget title               |\n| `api`        | string | no       | \"github\"          | API subscription ID               |\n| `endpoint`   | string | no       | \"commitActivity\"  | API endpoint to call              |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: CommitActivityLine\n  repository: nodejs/node\n  columns: 2\n  rows: 1\n```\n\n#### `ContributorsStats`\n\nDisplay top contributors with commit statistics.\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.ContributorsStats.png\" alt=\"ContributorsStats widget preview\" width=\"640\" />\n\n**Parameters:**\n\n| Parameter    | Type   | Required | Default             | Description                       |\n| ------------ | ------ | -------- | ------------------- | --------------------------------- |\n| `repository` | string | yes      | -                   | Repository in format \"owner/repo\" |\n| `title`      | string | no       | \"Contributors\"      | Custom widget title               |\n| `api`        | string | no       | \"github\"            | API subscription ID               |\n| `endpoint`   | string | no       | \"contributorsStats\" | API endpoint to call              |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: ContributorsStats\n  repository: vercel/next.js\n  columns: 2\n  rows: 1\n```\n\n#### `TrafficViewsHistogram`\n\nDisplay repository traffic views over the last 14 days as a bar chart (requires push access).\n\n**Parameters:**\n\n| Parameter    | Type   | Required | Default        | Description                       |\n| ------------ | ------ | -------- | -------------- | --------------------------------- |\n| `repository` | string | yes      | -              | Repository in format \"owner/repo\" |\n| `title`      | string | no       | \"Visitors\"     | Custom widget title               |\n| `api`        | string | no       | \"github\"       | API subscription ID               |\n| `endpoint`   | string | no       | \"trafficViews\" | API endpoint to call              |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: TrafficViewsHistogram\n  repository: myorg/myrepo\n  columns: 2\n  rows: 1\n```\n\n#### `TrafficClonesHistogram`\n\nDisplay repository traffic clones over the last 14 days as a bar chart (requires push access).\n\n**Parameters:**\n\n| Parameter    | Type   | Required | Default         | Description                       |\n| ------------ | ------ | -------- | --------------- | --------------------------------- |\n| `repository` | string | yes      | -               | Repository in format \"owner/repo\" |\n| `title`      | string | no       | \"Clones\"        | Custom widget title               |\n| `api`        | string | no       | \"github\"        | API subscription ID               |\n| `endpoint`   | string | no       | \"trafficClones\" | API endpoint to call              |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: TrafficClonesHistogram\n  repository: myorg/myrepo\n  columns: 2\n  rows: 1\n```\n\n### User data\n\n#### `Gitmap`\n\nDisplay GitHub contribution heatmap (similar to GitHub's contribution graph).\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.Gitmap.png\" alt=\"Gitmap widget preview\" width=\"640\" />\n\n**Parameters:**\n\n| Parameter  | Type   | Required | Default         | Description          |\n| ---------- | ------ | -------- | --------------- | -------------------- |\n| `user`     | string | yes      | -               | GitHub username      |\n| `title`    | string | no       | \"Contributions\" | Custom widget title  |\n| `api`      | string | no       | \"github\"        | API subscription ID  |\n| `endpoint` | string | no       | \"contributions\" | API endpoint to call |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: Gitmap\n  user: torvalds\n  columns: 3\n  rows: 1\n```\n\n### System status\n\n#### `Status`\n\nDisplay GitHub's current system status.\n\n<img src=\"https://raw.githubusercontent.com/dashfy/dashfy-ext-github/refs/heads/main/preview/github.Status.png\" alt=\"Status widget preview\" width=\"320\" />\n\n**Parameters:**\n\n| Parameter  | Type   | Required | Default  | Description          |\n| ---------- | ------ | -------- | -------- | -------------------- |\n| `title`    | string | no       | \"GitHub\" | Custom widget title  |\n| `api`      | string | no       | \"github\" | API subscription ID  |\n| `endpoint` | string | no       | \"status\" | API endpoint to call |\n\n**Example:**\n\n```yaml\n- extension: github\n  widget: Status\n  columns: 1\n  rows: 1\n```\n\n## API rate limits\n\nGitHub API has rate limits that vary based on authentication:\n\n| Authentication | Rate Limit          |\n| -------------- | ------------------- |\n| No token       | 60 requests/hour    |\n| With token     | 5,000 requests/hour |\n\n**Recommendations:**\n\n- Always use a personal access token in production\n- Monitor rate limit usage in the Dashfy console panel\n- Consider caching strategies for high-frequency dashboards\n\n## Troubleshooting\n\n### \"API rate limit exceeded\"\n\n**Solution:** Add a GitHub personal access token to your configuration.\n\n### \"Resource not accessible by integration\"\n\n**Solution:** Ensure your token has the required scopes (e.g., `repo` for private repositories).\n\n### Traffic widgets showing errors\n\n**Solution:** Traffic data requires push access to the repository. Ensure your token has the necessary permissions.\n\n### Contribution heatmap not loading\n\n**Solution:** The Gitmap widget uses a third-party API ([github-contributions-api](https://github.com/grubersjoe/github-contributions-api)) which may have its own rate limits.\n\n## Contributing\n\nContributions are welcome. For issues and pull requests related to the extension, use the [dashfy/dashfy-ext-github](https://github.com/dashfy/dashfy-ext-github) repository. Framework contributions belong in [dashfy/dashfy](https://github.com/dashfy/dashfy).\n\n## Community\n\nJoin the community on [Dashfy's Discord server](https://dashfy.dev/discord) to discuss the project, ask questions, or get help.\n\nJoin the conversation on X (Twitter) and follow [@dashfydev](https://x.com/dashfydev) for updates and announcements.\n\n## License\n\nThis project is licensed under the AGPL-3.0 License - see the [LICENSE](./LICENSE) file for details.\n","readmeFilename":"README.md"}