{"id":30863478,"url":"https://github.com/gentleeduck/duck-ui","last_synced_at":"2026-05-30T08:01:30.057Z","repository":{"id":252546664,"uuid":"840754158","full_name":"gentleeduck/duck-ui","owner":"gentleeduck","description":"React component library, headless primitives, hooks, variants, and developer tooling for the Gentleduck design system.","archived":false,"fork":false,"pushed_at":"2026-05-29T18:17:38.000Z","size":131339,"stargazers_count":44,"open_issues_count":12,"forks_count":4,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-29T20:09:12.611Z","etag":null,"topics":["a11y","accessibility","cli","component-library","design-system","monorepo","nextjs","primitives","react","tailwindcss","typescript","ui"],"latest_commit_sha":null,"homepage":"https://gentleduck.org/duck-ui","language":"TypeScript","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/gentleeduck.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"gentelduck"}},"created_at":"2024-08-10T15:27:05.000Z","updated_at":"2026-05-29T18:17:41.000Z","dependencies_parsed_at":"2024-08-28T20:06:23.509Z","dependency_job_id":"c5508436-469a-453c-91b7-58846ea60a0b","html_url":"https://github.com/gentleeduck/duck-ui","commit_stats":null,"previous_names":["theduckui/ui","gentelduck/ui","gentleeduck/ui","gentleeduck/duck-ui","gentleeduck/gentleduck"],"tags_count":178,"template":false,"template_full_name":null,"purl":"pkg:github/gentleeduck/duck-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gentleeduck%2Fduck-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gentleeduck%2Fduck-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gentleeduck%2Fduck-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gentleeduck%2Fduck-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gentleeduck","download_url":"https://codeload.github.com/gentleeduck/duck-ui/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gentleeduck%2Fduck-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33684413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"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":["a11y","accessibility","cli","component-library","design-system","monorepo","nextjs","primitives","react","tailwindcss","typescript","ui"],"created_at":"2025-09-07T18:53:24.459Z","updated_at":"2026-05-30T08:01:30.051Z","avatar_url":"https://github.com/gentleeduck.png","language":"TypeScript","funding_links":["https://opencollective.com/gentelduck"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./public/logo-dark.svg\" alt=\"gentleduck/ui\" width=\"120\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e@gentleduck/ui\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  React component library, headless primitives, hooks, variants, and developer tooling for the Gentleduck design system.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"./LICENSE\"\u003eMIT\u003c/a\u003e -\n  \u003ca href=\"./CHANGELOG.md\"\u003eChangelog\u003c/a\u003e -\n  \u003ca href=\"./CONTRIBUTING.md\"\u003eContributing\u003c/a\u003e -\n  \u003ca href=\"https://gentleduck.org/duck-ui\"\u003eDocs\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@gentleduck/registry-ui\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@gentleduck/registry-ui.svg?label=registry-ui\" alt=\"registry-ui\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@gentleduck/primitives\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@gentleduck/primitives.svg?label=primitives\" alt=\"primitives\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@gentleduck/cli\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@gentleduck/cli.svg?label=cli\" alt=\"cli\"/\u003e\u003c/a\u003e\n  \u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/@gentleduck/registry-ui.svg\" alt=\"MIT\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Install\n\n```sh\nbunx @gentleduck/cli init\nbunx @gentleduck/cli add button dialog calendar\n```\n\n## Quick start\n\n```tsx\nimport { Button } from '@/components/ui/button'\n\nexport default function App() {\n  return \u003cButton variant=\"default\"\u003eQuack\u003c/Button\u003e\n}\n```\n\n## Workspace\n\n| Path | Package | Role |\n| --- | --- | --- |\n| [`packages/registry-ui`](packages/registry-ui) | [`@gentleduck/registry-ui`](https://www.npmjs.com/package/@gentleduck/registry-ui) | Styled Tailwind components |\n| [`packages/duck-primitives`](packages/duck-primitives) | [`@gentleduck/primitives`](https://www.npmjs.com/package/@gentleduck/primitives) | Headless a11y-first primitives |\n| [`packages/duck-variants`](packages/duck-variants) | [`@gentleduck/variants`](https://www.npmjs.com/package/@gentleduck/variants) | Type-safe `cva()` variant system |\n| [`packages/duck-motion`](packages/duck-motion) | [`@gentleduck/motion`](https://www.npmjs.com/package/@gentleduck/motion) | Motion primitives + reduced motion |\n| [`packages/duck-hooks`](packages/duck-hooks) | [`@gentleduck/hooks`](https://www.npmjs.com/package/@gentleduck/hooks) | React utility hooks |\n| [`packages/duck-libs`](packages/duck-libs) | [`@gentleduck/libs`](https://www.npmjs.com/package/@gentleduck/libs) | `cn()` + small utilities |\n| [`packages/duck-lazy`](packages/duck-lazy) | [`@gentleduck/lazy`](https://www.npmjs.com/package/@gentleduck/lazy) | Lazy-loading helpers |\n| [`packages/duck-calendar`](packages/duck-calendar) | [`@gentleduck/calendar`](https://www.npmjs.com/package/@gentleduck/calendar) | Headless calendar engine |\n| [`packages/duck-vim`](packages/duck-vim) | [`@gentleduck/vim`](https://www.npmjs.com/package/@gentleduck/vim) | Keyboard command engine |\n| [`packages/duck-query`](packages/duck-query) | [`@gentleduck/query`](https://www.npmjs.com/package/@gentleduck/query) | Atom + query primitives |\n| [`packages/duck-ttest`](packages/duck-ttest) | [`@gentleduck/ttest`](https://www.npmjs.com/package/@gentleduck/ttest) | Type-level testing utilities |\n| [`packages/duck-gen`](packages/duck-gen) | [`@gentleduck/gen`](https://www.npmjs.com/package/@gentleduck/gen) | Codegen helpers |\n| [`packages/duck-cli`](packages/duck-cli) | [`@gentleduck/cli`](https://www.npmjs.com/package/@gentleduck/cli) | Project scaffolding + add CLI |\n| [`packages/duck-docs`](packages/duck-docs) | [`@gentleduck/docs`](https://www.npmjs.com/package/@gentleduck/docs) | Shared docs app kit |\n| [`packages/duck-registry-build`](packages/duck-registry-build) | [`@gentleduck/registry-build`](https://www.npmjs.com/package/@gentleduck/registry-build) | Component registry build engine |\n| [`packages/registers`](packages/registers) | [`@gentleduck/registers`](https://www.npmjs.com/package/@gentleduck/registers) | Registry schema + types |\n\nPrivate docs-only: `registry-blocks`, `registry-examples`, `registry-internals`.\nWIP / deprecated lives under `packages/wip/` and `packages/deprecated/`.\n\n## Apps\n\n| Path | Role |\n| --- | --- |\n| [`apps/duck`](apps/duck) | Docs site at [gentleduck.org/duck-ui](https://gentleduck.org/duck-ui) |\n\n## Templates\n\n| Path | Stack |\n| --- | --- |\n| [`templates/acme`](templates/acme) | Next.js monorepo starter wired to the registry |\n\n## Build\n\n```sh\nbun install\nbunx turbo run build --filter='./packages/*'\nbunx turbo run test --filter='./packages/*'\nbunx turbo run check-types --filter='./packages/*'\n```\n\n## Docs\n\n- Site: [gentleduck.org/duck-ui](https://gentleduck.org/duck-ui)\n- Component docs: `apps/duck/content/docs/\u003cpackage\u003e/`\n- Sibling repos: [`@gentleduck/iam`](https://github.com/gentleeduck/duck-iam), [`@gentleduck/upload`](https://github.com/gentleeduck/duck-upload), [`@gentleduck/md`](https://github.com/gentleeduck/duck-md)\n\n## Contributing\n\nPR checklist + style notes in [`CONTRIBUTING.md`](CONTRIBUTING.md).\nSecurity: [`SECURITY.md`](SECURITY.md). Behaviour: [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md).\n\n## License\n\nMIT. See [`LICENSE`](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgentleeduck%2Fduck-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgentleeduck%2Fduck-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgentleeduck%2Fduck-ui/lists"}