{"id":13400599,"url":"https://github.com/ory/keto","last_synced_at":"2025-05-11T05:47:44.371Z","repository":{"id":37536897,"uuid":"125619154","full_name":"ory/keto","owner":"ory","description":"The most scalable and customizable permission server on the market. Fix your slow or broken permission system with Google's proven \"Zanzibar\" approach. Supports ACL, RBAC, and more. Written in Go, cloud native, headless, API-first. Available as a service on Ory Network and for self-hosters.","archived":false,"fork":false,"pushed_at":"2025-05-07T03:28:36.000Z","size":35400,"stargazers_count":5016,"open_issues_count":56,"forks_count":356,"subscribers_count":55,"default_branch":"master","last_synced_at":"2025-05-11T05:47:34.637Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"https://www.ory.sh/?utm_source=github\u0026utm_medium=banner\u0026utm_campaign=keto","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ory.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":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"patreon":"_ory","open_collective":"ory"}},"created_at":"2018-03-17T10:40:15.000Z","updated_at":"2025-05-10T16:36:43.000Z","dependencies_parsed_at":"2023-09-23T16:15:55.038Z","dependency_job_id":"2f803e59-e646-4ce2-a5e4-f90a61ba75bb","html_url":"https://github.com/ory/keto","commit_stats":{"total_commits":1534,"total_committers":77,"mean_commits":19.92207792207792,"dds":0.5619295958279009,"last_synced_commit":"47548c058960de272472ccd3eb2e98f08e9c25a9"},"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fketo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fketo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fketo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fketo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ory","download_url":"https://codeload.github.com/ory/keto/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253523733,"owners_count":21921818,"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","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":["hacktoberfest"],"created_at":"2024-07-30T19:00:53.755Z","updated_at":"2025-05-11T05:47:44.318Z","avatar_url":"https://github.com/ory.png","language":"Go","readme":"\u003ch1 align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ory/meta/master/static/banners/keto.svg\" alt=\"Ory Keto - Open Source \u0026 Cloud Native Access Control Server\"\u003e\u003c/h1\u003e\n\n\u003ch4 align=\"center\"\u003e    \n    \u003ca href=\"https://www.ory.sh/chat\"\u003eChat\u003c/a\u003e |\n    \u003ca href=\"https://github.com/ory/keto/discussions\"\u003eDiscusssions\u003c/a\u003e |\n    \u003ca href=\"https://www.ory.sh/l/sign-up-newsletter\"\u003eNewsletter\u003c/a\u003e\u003cbr/\u003e\u003cbr/\u003e\n    \u003ca href=\"https://www.ory.sh/docs/keto/\"\u003eGuide\u003c/a\u003e |\n    \u003ca href=\"https://www.ory.sh/docs/keto/sdk/api\"\u003eAPI Docs\u003c/a\u003e |\n    \u003ca href=\"https://godoc.org/github.com/ory/keto\"\u003eCode Docs\u003c/a\u003e\u003cbr/\u003e\u003cbr/\u003e\n    \u003ca href=\"https://console.ory.sh/\"\u003eSupport this project!\u003c/a\u003e\u003cbr/\u003e\u003cbr/\u003e\n    \u003ca href=\"https://www.ory.sh/jobs/\"\u003eWork in Open Source, Ory is hiring!\u003c/a\u003e\n\u003c/h4\u003e\n\n---\n\n\u003cp align=\"left\"\u003e\n    \u003ca href=\"https://github.com/ory/keto/actions/workflows/ci.yaml\"\u003e\u003cimg src=\"https://github.com/ory/keto/actions/workflows/ci.yaml/badge.svg?branch=master\u0026event=push\" alt=\"CI Tasks for Ory keto\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://coveralls.io/github/ory/keto?branch=master\"\u003e \u003cimg src=\"https://coveralls.io/repos/ory/keto/badge.svg?branch=master\u0026service=github\" alt=\"Coverage Status\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/github.com/ory/keto\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/ory/keto\" alt=\"Go Report Card\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pkg.go.dev/github.com/ory/keto\"\u003e\u003cimg src=\"https://pkg.go.dev/badge/www.github.com/ory/keto\" alt=\"PkgGoDev\"\u003e\u003c/a\u003e\n    \u003ca href=\"#backers\" alt=\"sponsors on Open Collective\"\u003e\u003cimg src=\"https://opencollective.com/ory/backers/badge.svg\" /\u003e\u003c/a\u003e \u003ca href=\"#sponsors\" alt=\"Sponsors on Open Collective\"\u003e\u003cimg src=\"https://opencollective.com/ory/sponsors/badge.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/ory/keto/blob/master/CODE_OF_CONDUCT.md\" alt=\"Ory Code of Conduct\"\u003e\u003cimg src=\"https://img.shields.io/badge/ory-code%20of%20conduct-green\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nOry Keto is the first and most popular open source implementation of \"Zanzibar:\nGoogle's Consistent, Global Authorization System\"!\n\n## Get Started\n\nYou can use\n[Docker to run Ory Keto locally](https://www.ory.sh/docs/keto/install) or use\nthe Ory CLI to try out Ory Keto:\n\n```sh\n# This example works best in Bash\nbash \u003c(curl https://raw.githubusercontent.com/ory/meta/master/install.sh) -b . ory\nsudo mv ./ory /usr/local/bin/\n\n# Or with Homebrew installed\nbrew install ory/tap/cli\n```\n\ncreate a new project (you may also use\n[Docker](https://www.ory.sh/docs/keto/install))\n\n```sh\nory create project --name \"Ory Keto Example\"\nexport project_id=\"{set to the id from output}\"\n```\n\nand follow the quick \u0026 easy steps below.\n\n## Create a namespace with the Ory Permission Language\n\n```sh\n# Write a simple configuration with one namespace\necho \"class Document implements Namespace {}\" \u003e config.ts\n\n# Apply that configuration\nory patch opl --project $project_id -f file://./config.ts\n\n# Create a relationship that grants tom access to a document\necho \"Document:secret#read@tom\" \\\n  | ory parse relation-tuples --project=$project_id --format=json - \\\n  | ory create relation-tuples --project=$project_id -\n\n# List all relationships\nory list relation-tuples --project=$project_id\n# Output:\n#   NAMESPACE\tOBJECT\tRELATION NAME\tSUBJECT\n#   Document\tsecret\tread\t\ttom\n#\n#   NEXT PAGE TOKEN\n#   IS LAST PAGE\ttrue\n```\n\nNow, check out your project on the [Ory Network](https://console.ory.sh/) or\ncontinue with a [more in-depth guide](https://www.ory.sh/docs/keto/quickstart).\n\n### Ory Keto on the Ory Network\n\nThe [Ory Network](https://www.ory.sh/cloud) is the fastest, most secure and\nworry-free way to use Ory's Services. **Ory Permissions** is powered by the Ory\nKeto open source permission server, and it's fully API-compatible.\n\nThe Ory Network provides the infrastructure for modern end-to-end security:\n\n- Identity \u0026 credential management scaling to billions of users and devices\n- Registration, Login and Account management flows for passkey, biometric,\n  social, SSO and multi-factor authentication\n- Pre-built login, registration and account management pages and components\n- OAuth2 and OpenID provider for single sign on, API access and\n  machine-to-machine authorization\n- **Low-latency permission checks based on Google's Zanzibar model and with\n  built-in support for the Ory Permission Language**\n\nIt's fully managed, highly available, developer \u0026 compliance-friendly!\n\n- GDPR-friendly secure storage with data locality\n- Cloud-native APIs, compatible with Ory's Open Source servers\n- Comprehensive admin tools with the web-based Ory Console and the Ory Command\n  Line Interface (CLI)\n- Extensive documentation, straightforward examples and easy-to-follow guides\n- Fair, usage-based [pricing](https://www.ory.sh/pricing)\n\nSign up for a\n[**free developer account**](https://console.ory.sh/registration?utm_source=github\u0026utm_medium=banner\u0026utm_campaign=keto-readme)\ntoday!\n\n## Ory Network Hybrid Support Plan\n\nOry offers a support plan for Ory Network Hybrid, including Ory on private cloud\ndeployments. If you have a self-hosted solution and would like help, consider a\nsupport plan! The team at Ory has years of experience in cloud computing. Ory's\noffering is the only official program for qualified support from the\nmaintainers. For more information see the\n**[website](https://www.ory.sh/support/)** or\n**[book a meeting](https://www.ory.sh/contact/)**!\n\n## Ory Permissions, Keto and the Google's Zanzibar model\n\n\u003e Determining whether online users are authorized to access digital objects is\n\u003e central to preserving privacy. This paper presents the design, implementation,\n\u003e and deployment of Zanzibar, a global system for storing and evaluating access\n\u003e control lists. Zanzibar provides a uniform data model and configuration\n\u003e language for expressing a wide range of access control policies from hundreds\n\u003e of client services at Google, including Calendar, Cloud, Drive, Maps, Photos,\n\u003e and YouTube. Its authorization decisions respect causal ordering of user\n\u003e actions and thus provide external consistency amid changes to access control\n\u003e lists and object contents. Zanzibar scales to trillions of access control\n\u003e lists and millions of authorization requests per second to support services\n\u003e used by billions of people. It has maintained 95th-percentile latency of less\n\u003e than 10 milliseconds and availability of greater than 99.999% over 3 years of\n\u003e production use.\n\u003e\n\u003e [Source](https://research.google/pubs/pub48190/)\n\nIf you need to know if a user (or robot, car, service) is allowed to do\nsomething - Ory Permissions and Ory Keto are the right fit for you.\n\nCurrently, Ory Permissions [on the Ory Network] and the open-source Ory Keto\npermission server implement the API contracts for managing and checking\nrelations (\"permissions\") with HTTP and gRPC APIs, as well as global rules\ndefined through the Ory Permission Language (\"userset rewrites\"). Future\nversions will include features such as Zookies, reverse permission lookups, and\nmore.\n\n---\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Ory Permissions, Keto and the Google's Zanzibar model](#ory-permissions-keto-and-the-googles-zanzibar-model)\n- [Who's Using It?](#whos-using-it)\n  - [Installation](#installation)\n- [Ecosystem](#ecosystem)\n  - [Ory Kratos: Identity and User Infrastructure and Management](#ory-kratos-identity-and-user-infrastructure-and-management)\n  - [Ory Hydra: OAuth2 \u0026 OpenID Connect Server](#ory-hydra-oauth2--openid-connect-server)\n  - [Ory Oathkeeper: Identity \u0026 Access Proxy](#ory-oathkeeper-identity--access-proxy)\n  - [Ory Keto: Access Control Policies as a Server](#ory-keto-access-control-policies-as-a-server)\n- [Security](#security)\n  - [Disclosing Vulnerabilities](#disclosing-vulnerabilities)\n- [Telemetry](#telemetry)\n  - [Guide](#guide)\n  - [HTTP API Documentation](#http-api-documentation)\n  - [Upgrading and Changelog](#upgrading-and-changelog)\n  - [Command Line Documentation](#command-line-documentation)\n  - [Develop](#develop)\n    - [Dependencies](#dependencies)\n    - [Install From Source](#install-from-source)\n    - [Formatting Code](#formatting-code)\n    - [Running Tests](#running-tests)\n      - [Short Tests](#short-tests)\n      - [Regular Tests](#regular-tests)\n      - [End-to-End Tests](#end-to-end-tests)\n    - [Build Docker](#build-docker)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Who's Using It?\n\n\u003c!--BEGIN ADOPTERS--\u003e\n\nThe Ory community stands on the shoulders of individuals, companies, and\nmaintainers. The Ory team thanks everyone involved - from submitting bug reports\nand feature requests, to contributing patches and documentation. The Ory\ncommunity counts more than 50.000 members and is growing. The Ory stack protects\n7.000.000.000+ API requests every day across thousands of companies. None of\nthis would have been possible without each and everyone of you!\n\nThe following list represents companies that have accompanied us along the way\nand that have made outstanding contributions to our ecosystem. _If you think\nthat your company deserves a spot here, reach out to\n\u003ca href=\"mailto:office@ory.sh\"\u003eoffice@ory.sh\u003c/a\u003e now_!\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eName\u003c/th\u003e\n            \u003cth\u003eLogo\u003c/th\u003e\n            \u003cth\u003eWebsite\u003c/th\u003e\n            \u003cth\u003eCase Study\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eOpenAI\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/openai.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/openai.svg\" alt=\"OpenAI\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://openai.com/\"\u003eopenai.com\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/openai\"\u003eOpenAI Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eFandom\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/fandom.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/fandom.svg\" alt=\"Fandom\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.fandom.com/\"\u003efandom.com\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/fandom\"\u003eFandom Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eLumin\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/lumin.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/lumin.svg\" alt=\"Lumin\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.luminpdf.com/\"\u003eluminpdf.com\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/lumin\"\u003eLumin Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eSencrop\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/sencrop.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/sencrop.svg\" alt=\"Sencrop\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://sencrop.com/\"\u003esencrop.com\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/sencrop\"\u003eSencrop Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eOSINT Industries\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/osint.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/osint.svg\" alt=\"OSINT Industries\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.osint.industries/\"\u003eosint.industries\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/osint\"\u003eOSINT Industries Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eHGV\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/hgv.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/hgv.svg\" alt=\"HGV\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.hgv.it/\"\u003ehgv.it\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/hgv\"\u003eHGV Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eMaxroll\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/maxroll.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/maxroll.svg\" alt=\"Maxroll\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://maxroll.gg/\"\u003emaxroll.gg\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/maxroll\"\u003eMaxroll Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eZezam\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/zezam.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/zezam.svg\" alt=\"Zezam\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.zezam.io/\"\u003ezezam.io\u003c/a\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.ory.sh/case-studies/zezam\"\u003eZezam Case Study\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eT.RowePrice\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/troweprice.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/troweprice.svg\" alt=\"T.RowePrice\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.troweprice.com/\"\u003etroweprice.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eMistral\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/mistral.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/mistral.svg\" alt=\"Mistral\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.mistral.ai/\"\u003emistral.ai\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eAxel Springer\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/axelspringer.svg\" /\u003e\n                    \u003cimg height=\"22px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/axelspringer.svg\" alt=\"Axel Springer\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.axelspringer.com/\"\u003eaxelspringer.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eHemnet\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/hemnet.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/hemnet.svg\" alt=\"Hemnet\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.hemnet.se/\"\u003ehemnet.se\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eCisco\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/cisco.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/cisco.svg\" alt=\"Cisco\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.cisco.com/\"\u003ecisco.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003ePresidencia de la República Dominicana\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/republica-dominicana.svg\" /\u003e\n                    \u003cimg height=\"42px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/republica-dominicana.svg\" alt=\"Presidencia de la República Dominicana\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.presidencia.gob.do/\"\u003epresidencia.gob.do\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eMoonpig\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/moonpig.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/moonpig.svg\" alt=\"Moonpig\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.moonpig.com/\"\u003emoonpig.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eBooster\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/booster.svg\" /\u003e\n                    \u003cimg height=\"18px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/booster.svg\" alt=\"Booster\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.choosebooster.com/\"\u003echoosebooster.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eZaptec\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/zaptec.svg\" /\u003e\n                    \u003cimg height=\"24px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/zaptec.svg\" alt=\"Zaptec\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.zaptec.com/\"\u003ezaptec.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eKlarna\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/klarna.svg\" /\u003e\n                    \u003cimg height=\"24px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/klarna.svg\" alt=\"Klarna\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.klarna.com/\"\u003eklarna.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eRaspberry PI Foundation\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/raspi.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/raspi.svg\" alt=\"Raspberry PI Foundation\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.raspberrypi.org/\"\u003eraspberrypi.org\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eTulip\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/tulip.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/tulip.svg\" alt=\"Tulip Retail\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://tulip.com/\"\u003etulip.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eHootsuite\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/hootsuite.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/hootsuite.svg\" alt=\"Hootsuite\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://hootsuite.com/\"\u003ehootsuite.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eSegment\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/segment.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/segment.svg\" alt=\"Segment\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://segment.com/\"\u003esegment.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eArduino\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/arduino.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/arduino.svg\" alt=\"Arduino\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.arduino.cc/\"\u003earduino.cc\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eSainsbury's\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/sainsburys.svg\" /\u003e\n                    \u003cimg height=\"24px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/sainsburys.svg\" alt=\"Sainsbury's\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.sainsburys.co.uk/\"\u003esainsburys.co.uk\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eContraste\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/contraste.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/contraste.svg\" alt=\"Contraste\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://www.contraste.com/en\"\u003econtraste.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003einMusic\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/inmusic.svg\" /\u003e\n                    \u003cimg height=\"24px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/inmusic.svg\" alt=\"InMusic\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://inmusicbrands.com/\"\u003einmusicbrands.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003eBuhta\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/buhta.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/buhta.svg\" alt=\"Buhta\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://buhta.com/\"\u003ebuhta.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003c/tr\u003e\n            \u003ctr\u003e\n            \u003ctd\u003eAmplitude\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\n                \u003cpicture\u003e\n                    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/amplitude.svg\" /\u003e\n                    \u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/amplitude.svg\" alt=\"amplitude.com\"\u003e\n                \u003c/picture\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\u003ca href=\"https://amplitude.com/\"\u003eamplitude.com\u003c/a\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://tier4.jp/en/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/tieriv.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/tieriv.svg\" alt=\"TIER IV\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://kyma-project.io\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/kyma.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/kyma.svg\" alt=\"Kyma Project\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://serlo.org/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/serlo.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/serlo.svg\" alt=\"Serlo\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://padis.io/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/padis.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/padis.svg\" alt=\"Padis\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://cloudbear.eu/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/cloudbear.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/cloudbear.svg\" alt=\"Cloudbear\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://securityonionsolutions.com/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/securityonion.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/securityonion.svg\" alt=\"Security Onion Solutions\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://factlylabs.com/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/factly.svg\" /\u003e\u003cimg height=\"24px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/factly.svg\" alt=\"Factly\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://cashdeck.com.au/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/allmyfunds.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/allmyfunds.svg\" alt=\"All My Funds\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://nortal.com/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/nortal.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/nortal.svg\" alt=\"Nortal\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.ordermygear.com/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/ordermygear.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/ordermygear.svg\" alt=\"OrderMyGear\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://r2devops.io/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/r2devops.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/r2devops.svg\" alt=\"R2Devops\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.paralus.io/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/paralus.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/paralus.svg\" alt=\"Paralus\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://dyrector.io/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/dyrector_io.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/dyrector_io.svg\" alt=\"dyrector.io\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://pinniped.dev/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/pinniped.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/pinniped.svg\" alt=\"pinniped.dev\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://pvotal.tech/\"\u003e\u003cpicture\u003e\u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/light/pvotal.svg\" /\u003e\u003cimg height=\"32px\" src=\"https://raw.githubusercontent.com/ory/meta/master/static/adopters/dark/pvotal.svg\" alt=\"pvotal.tech\"\u003e\u003c/picture\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\nMany thanks to all individual contributors\n\n\u003ca href=\"https://opencollective.com/ory\" target=\"_blank\"\u003e\u003cimg src=\"https://opencollective.com/ory/contributors.svg?width=890\u0026limit=714\u0026button=false\" /\u003e\u003c/a\u003e\n\n\u003c!--END ADOPTERS--\u003e\n\n## Installation\n\nHead over to the documentation to learn about ways of\n[installing Ory Keto](https://www.ory.sh/docs/keto/install).\n\n## Ecosystem\n\n\u003c!--BEGIN ECOSYSTEM--\u003e\n\nWe build Ory on several guiding principles when it comes to our architecture\ndesign:\n\n- Minimal dependencies\n- Runs everywhere\n- Scales without effort\n- Minimize room for human and network errors\n\nOry's architecture is designed to run best on a Container Orchestration system\nsuch as Kubernetes, CloudFoundry, OpenShift, and similar projects. Binaries are\nsmall (5-15MB) and available for all popular processor types (ARM, AMD64, i386)\nand operating systems (FreeBSD, Linux, macOS, Windows) without system\ndependencies (Java, Node, Ruby, libxml, ...).\n\n### Ory Kratos: Identity and User Infrastructure and Management\n\n[Ory Kratos](https://github.com/ory/kratos) is an API-first Identity and User\nManagement system that is built according to\n[cloud architecture best practices](https://www.ory.sh/docs/next/ecosystem/software-architecture-philosophy).\nIt implements core use cases that almost every software application needs to\ndeal with: Self-service Login and Registration, Multi-Factor Authentication\n(MFA/2FA), Account Recovery and Verification, Profile, and Account Management.\n\n### Ory Hydra: OAuth2 \u0026 OpenID Connect Server\n\n[Ory Hydra](https://github.com/ory/hydra) is an OpenID Certified™ OAuth2 and\nOpenID Connect Provider which easily connects to any existing identity system by\nwriting a tiny \"bridge\" application. It gives absolute control over the user\ninterface and user experience flows.\n\n### Ory Oathkeeper: Identity \u0026 Access Proxy\n\n[Ory Oathkeeper](https://github.com/ory/oathkeeper) is a BeyondCorp/Zero Trust\nIdentity \u0026 Access Proxy (IAP) with configurable authentication, authorization,\nand request mutation rules for your web services: Authenticate JWT, Access\nTokens, API Keys, mTLS; Check if the contained subject is allowed to perform the\nrequest; Encode resulting content into custom headers (`X-User-ID`), JSON Web\nTokens and more!\n\n### Ory Keto: Access Control Policies as a Server\n\n[Ory Keto](https://github.com/ory/keto) is a policy decision point. It uses a\nset of access control policies, similar to AWS IAM Policies, in order to\ndetermine whether a subject (user, application, service, car, ...) is authorized\nto perform a certain action on a resource.\n\n\u003c!--END ECOSYSTEM--\u003e\n\n## Security\n\n### Disclosing Vulnerabilities\n\nIf you think you found a security vulnerability, please refrain from posting it\npublicly on the forums, the chat, or GitHub. You can find all info for\nresponsible disclosure in our\n[security.txt](https://www.ory.sh/.well-known/security.txt).\n\n## Telemetry\n\nOur services collect summarized, anonymized data which can optionally be turned\noff. Click [here](https://www.ory.sh/docs/ecosystem/sqa) to learn more.\n\n### Guide\n\nThe Guide is available [here](https://www.ory.sh/docs/keto/).\n\n### HTTP API Documentation\n\nThe HTTP API is documented [here](https://www.ory.sh/docs/keto/sdk/api).\n\n### Upgrading and Changelog\n\nNew releases might introduce breaking changes. To help you identify and\nincorporate those changes, we document these changes in\n[UPGRADE.md](./UPGRADE.md) and [CHANGELOG.md](./CHANGELOG.md).\n\n### Command Line Documentation\n\nRun `keto -h` or `keto help`.\n\n### Develop\n\nWe encourage all contributions and recommend you read our\n[contribution guidelines](./CONTRIBUTING.md).\n\n#### Dependencies\n\nYou need Go 1.19+ and (for the test suites):\n\n- Docker and Docker Compose\n- GNU Make 4.3\n- NodeJS / npm \u003e= v7\n\nIt is possible to develop Ory Keto on Windows, but please be aware that all\nguides assume a Unix shell like bash or zsh.\n\n#### Install From Source\n\n\u003cpre type=\"make/command\"\u003e\nmake install\n\u003c/pre\u003e\n\n#### Formatting Code\n\nYou can format all code using \u003ccode type=\"make/command\"\u003emake format\u003c/code\u003e. Our\nCI checks if your code is properly formatted.\n\n#### Running Tests\n\nThere are two types of tests you can run:\n\n- Short tests (do not require a SQL database like PostgreSQL)\n- Regular tests (do require PostgreSQL, MySQL, CockroachDB)\n\n##### Short Tests\n\nShort tests run fairly quickly. You can either test all of the code at once:\n\n```shell script\ngo test -short -tags sqlite ./...\n```\n\nor test just a specific module:\n\n```shell script\ngo test -tags sqlite -short ./internal/check/...\n```\n\n##### Regular Tests\n\nRegular tests require a database set up. Our test suite is able to work with\ndocker directly (using [ory/dockertest](https://github.com/ory/dockertest)) but\nwe encourage to use the script instead. Using dockertest can bloat the number of\nDocker Images on your system and starting them on each run is quite slow.\nInstead we recommend doing:\n\n```shell\nsource ./scripts/test-resetdb.sh\ngo test -tags sqlite ./...\n```\n\n##### End-to-End Tests\n\nThe e2e tests are part of the normal `go test`. To only run the e2e test, use:\n\n```shell\nsource ./scripts/test-resetdb.sh\ngo test -tags sqlite ./internal/e2e/...\n```\n\nor add the `-short` tag to only test against sqlite in-memory.\n\n#### Build Docker\n\nYou can build a development Docker Image using:\n\n\u003cpre type=\"make/command\"\u003e\nmake docker\n\u003c/pre\u003e\n","funding_links":["https://patreon.com/_ory","https://opencollective.com/ory"],"categories":["Go","Authentication and Authorization","Databases","身份验证和OAuth","Install from Source","Authentication and OAuth","Authorization","Ecosystem","身份认证与 OAuth","Authorization Development","Zanzibar Softwares and Services","Role Based Access Control","Tooling— Authentication and Authorization","Uncategorized","Policy Engines \u0026 Frameworks"],"sub_categories":["Permission Databases","Network Tools","\u003ca name=\"authZ-golang\"\u003e\u003c/a\u003eGolang","ABAC frameworks","Uncategorized","Zanzibar-Based"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fory%2Fketo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fory%2Fketo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fory%2Fketo/lists"}