{"id":44091099,"url":"https://github.com/hrdtr/guantr","last_synced_at":"2026-05-03T21:02:59.210Z","repository":{"id":243171982,"uuid":"809246685","full_name":"Hrdtr/guantr","owner":"Hrdtr","description":"Flexible, type-safe JavaScript library for efficient authorization and permission checking","archived":false,"fork":false,"pushed_at":"2026-02-02T18:58:24.000Z","size":281,"stargazers_count":13,"open_issues_count":12,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-02T22:37:27.497Z","etag":null,"topics":["authorization","javascript","security","typescript"],"latest_commit_sha":null,"homepage":"https://guantr.hrdtr.dev/","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/Hrdtr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["Hrdtr"]}},"created_at":"2024-06-02T06:18:04.000Z","updated_at":"2026-01-27T03:16:32.000Z","dependencies_parsed_at":"2024-08-03T16:47:59.417Z","dependency_job_id":"4ab5dd3b-7ef4-4ac2-9da5-38a422ae89d2","html_url":"https://github.com/Hrdtr/guantr","commit_stats":null,"previous_names":["hrdtr/guantr"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/Hrdtr/guantr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrdtr%2Fguantr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrdtr%2Fguantr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrdtr%2Fguantr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrdtr%2Fguantr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hrdtr","download_url":"https://codeload.github.com/Hrdtr/guantr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hrdtr%2Fguantr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29228558,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T09:43:19.170Z","status":"ssl_error","status_checked_at":"2026-02-08T09:42:55.556Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["authorization","javascript","security","typescript"],"created_at":"2026-02-08T11:03:37.021Z","updated_at":"2026-05-03T21:02:59.196Z","avatar_url":"https://github.com/Hrdtr.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Hrdtr"],"categories":[],"sub_categories":[],"readme":"# Guantr\n\n\u003c!-- automd:badges color=yellow --\u003e\n\n[![npm version](https://img.shields.io/npm/v/guantr?color=yellow)](https://npmjs.com/package/guantr)\n[![npm downloads](https://img.shields.io/npm/dm/guantr?color=yellow)](https://npm.chart.dev/guantr)\n\n\u003c!-- /automd --\u003e\n\nFlexible, type-safe JavaScript library for efficient authorization and permission checking. Easily manage permissions, and context-aware access control with minimal overhead and a simple API.\n\n## Usage\n\nInstall package:\n\n\u003c!-- automd:pm-install --\u003e\n\n```sh\n# ✨ Auto-detect\nnpx nypm install guantr\n\n# npm\nnpm install guantr\n\n# yarn\nyarn add guantr\n\n# pnpm\npnpm add guantr\n\n# bun\nbun install guantr\n\n# deno\ndeno install npm:guantr\n```\n\n\u003c!-- /automd --\u003e\n\nImport:\n\n\u003c!-- automd:jsimport cjs cdn name=\"guantr\" imports=\"createGuantr\" --\u003e\n\n**ESM** (Node.js, Bun, Deno)\n\n```js\nimport { createGuantr } from 'guantr';\n```\n\n**CommonJS** (Legacy Node.js)\n\n```js\nconst { createGuantr } = require('guantr');\n```\n\n**CDN** (Deno and Browsers)\n\n```js\nimport { createGuantr } from 'https://esm.sh/guantr';\n```\n\n\u003c!-- /automd --\u003e\n\nInitialize:\n\n```ts\nconst guantr = await createGuantr();\n\n// With Typescript Meta:\ntype Meta = GuantrMeta\u003c{\n  post: {\n    action: 'create' | 'read' | 'update' | 'delete';\n    model: {\n      id: number;\n      title: string;\n      published: boolean;\n    };\n  };\n}\u003e;\n\nconst guantr = await createGuantr\u003cMeta\u003e();\n\n// Contextual\nconst user = {\n  id: number,\n  name: 'John Doe',\n  roles: ['admin'],\n};\nconst guantrWithContext = await createGuantr\u003cMeta, { user: typeof user }\u003e({\n  getContext: () =\u003e ({ user }),\n});\n```\n\nSetting rules:\n\n```js\nawait guantr.setRules((can, cannot) =\u003e {\n  can('read', 'post');\n  cannot('read', ['post', { published: ['eq', false] }]);\n});\n// Or\nawait guantr.setRules([\n  {\n    resource: 'post',\n    action: 'read',\n    condition: null,\n    effect: 'allow',\n  },\n  {\n    resource: 'post',\n    action: 'read',\n    condition: {\n      published: ['eq', false],\n    },\n    effect: 'deny',\n  },\n]);\n```\n\nRules also can be set on instance creation:\n\n```ts\nconst guantr = await createGuantr\u003cMeta\u003e([\n  {\n    resource: 'post',\n    action: 'read',\n    condition: {\n      published: ['eq', false],\n    },\n    effect: 'deny',\n  },\n]);\n```\n\nAuthorize:\n\n```js\nawait guantr.can('read', 'post'); // true\n\nconst post = {\n  id: 1,\n  title: 'Hello World',\n  published: false,\n};\nawait guantr.can('read', ['post', post]); // false\n```\n\n## Development\n\n\u003cdetails\u003e\n\n\u003csummary\u003elocal development\u003c/summary\u003e\n\n- Clone this repository\n- Install latest LTS version of [Node.js](https://nodejs.org/en/)\n- Enable [Corepack](https://github.com/nodejs/corepack) using `corepack enable`\n- Install dependencies using `pnpm install`\n- Run interactive tests using `pnpm dev`\n\n\u003c/details\u003e\n\n## License\n\n\u003c!-- automd:contributors license=MIT --\u003e\n\nPublished under the [MIT](https://github.com/Hrdtr/guantr/blob/main/LICENSE) license.\nMade by [community](https://github.com/Hrdtr/guantr/graphs/contributors) 💛\n\u003cbr\u003e\u003cbr\u003e\n\u003ca href=\"https://github.com/Hrdtr/guantr/graphs/contributors\"\u003e\n\u003cimg src=\"https://contrib.rocks/image?repo=Hrdtr/guantr\" /\u003e\n\u003c/a\u003e\n\n\u003c!-- /automd --\u003e\n\n\u003c!-- automd:with-automd --\u003e\n\n---\n\n_🤖 auto updated with [automd](https://automd.unjs.io)_\n\n\u003c!-- /automd --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhrdtr%2Fguantr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhrdtr%2Fguantr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhrdtr%2Fguantr/lists"}