{"id":13416697,"url":"https://github.com/ory/kratos","last_synced_at":"2025-12-15T17:35:24.296Z","repository":{"id":37285456,"uuid":"135321861","full_name":"ory/kratos","owner":"ory","description":"Headless cloud-native authentication and identity management written in Go. Scales to a billion+ users. Replace Homegrown, Auth0, Okta, Firebase with better UX and DX. Passkeys, Social Sign In, OIDC, Magic Link, Multi-Factor Auth, SMS, SAML, TOTP, and more. Runs everywhere, runs best on Ory Network. ","archived":false,"fork":false,"pushed_at":"2025-05-09T12:45:25.000Z","size":91699,"stargazers_count":11875,"open_issues_count":216,"forks_count":995,"subscribers_count":113,"default_branch":"master","last_synced_at":"2025-05-12T02:42:22.648Z","etag":null,"topics":["hacktoberfest","identity","identity-management","login","profile-management","registration","user","user-management","user-profile","user-profiles","users"],"latest_commit_sha":null,"homepage":"https://www.ory.sh/?utm_source=github\u0026utm_medium=banner\u0026utm_campaign=kratos","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-05-29T16:09:37.000Z","updated_at":"2025-05-11T16:52:48.000Z","dependencies_parsed_at":"2023-12-15T13:42:04.024Z","dependency_job_id":"e4e683aa-3f9b-4534-ab09-46a81cbbb7ea","html_url":"https://github.com/ory/kratos","commit_stats":{"total_commits":4367,"total_committers":242,"mean_commits":"18.045454545454547","dds":0.3384474467597893,"last_synced_commit":"bafd32a087f955880291d0649d77c442a7218030"},"previous_names":["ory/hive"],"tags_count":80,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fkratos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fkratos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fkratos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ory%2Fkratos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ory","download_url":"https://codeload.github.com/ory/kratos/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253672701,"owners_count":21945480,"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","identity","identity-management","login","profile-management","registration","user","user-management","user-profile","user-profiles","users"],"created_at":"2024-07-30T22:00:20.273Z","updated_at":"2025-12-15T17:35:24.215Z","avatar_url":"https://github.com/ory.png","language":"Go","funding_links":["https://patreon.com/_ory","https://opencollective.com/ory"],"categories":["Go","Popular","Authentication","Install from Source","Ecosystem","hacktoberfest","Tools","后端开发框架及项目","Security \u0026 Compliance","login","`Authentication Development`","Account Management"],"sub_categories":["Network Tools","Rust","\u003ca name=\"authN-golang\"\u003e\u003c/a\u003eGolang","管理面板","WebTools"],"readme":"\u003ch1 align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/ory/meta/master/static/banners/kratos.svg\" alt=\"Ory Kratos - Cloud native Identity and User Management\"\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/kratos/discussions\"\u003eDiscussions\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/kratos/docs/\"\u003eGuide\u003c/a\u003e |\n    \u003ca href=\"https://www.ory.sh/kratos/docs/sdk/api\"\u003eAPI Docs\u003c/a\u003e |\n    \u003ca href=\"https://godoc.org/github.com/ory/kratos\"\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/kratos/actions/workflows/ci.yaml\"\u003e\u003cimg src=\"https://github.com/ory/kratos/actions/workflows/ci.yaml/badge.svg?branch=master\u0026event=push\" alt=\"CI Tasks for Ory Kratos\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://codecov.io/gh/ory/kratos\"\u003e\u003cimg src=\"https://codecov.io/gh/ory/kratos/branch/master/graph/badge.svg?token=6t0QqOdurR\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://bestpractices.coreinfrastructure.org/projects/4979\"\u003e\u003cimg src=\"https://bestpractices.coreinfrastructure.org/projects/4979/badge\" alt=\"CII Best Practices\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://opencollective.com/ory\" alt=\"sponsors on Open Collective\"\u003e\u003cimg src=\"https://opencollective.com/ory/backers/badge.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://opencollective.com/ory\" 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/kratos/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/\u003e\n\nOry Kratos is _the_ developer-friendly, security-hardened and battle-tested\nIdentity, User Management and Authentication system for the Cloud. Finally, it\nis no longer necessary to implement User Login for the umpteenth time!\n\n## Ory Kratos 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 Identities** is powered by the Ory\nKratos open source identity 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=kratos-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### Quickstart\n\nInstall the [Ory CLI](https://www.ory.sh/docs/guides/cli/installation) and\ncreate a new project to get started with Ory Identities right away:\n\n```\n# If you don't have Ory CLI installed yet:\nbash \u003c(curl https://raw.githubusercontent.com/ory/meta/master/install.sh) -b . ory\nsudo mv ./ory /usr/local/bin/\n\n# Sign up\nory auth\n\n# Create project\nory create project\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**Table of Contents**\n\n- [Ory Kratos on the Ory Network](#ory-kratos-on-the-ory-network)\n  - [Quickstart](#quickstart)\n- [What is Ory Kratos?](#what-is-ory-kratos)\n  - [Who is using it?](#who-is-using-it)\n- [Getting Started](#getting-started)\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- [Documentation](#documentation)\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      - [Updating Test Fixtures](#updating-test-fixtures)\n      - [End-to-End Tests](#end-to-end-tests)\n    - [Build Docker](#build-docker)\n    - [Documentation Tests](#documentation-tests)\n    - [Preview API documentation](#preview-api-documentation)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## What is Ory Kratos?\n\nOry Kratos is an API-first Identity and User Management system that is built\naccording to\n[cloud architecture best practices](https://www.ory.sh/docs/ecosystem/software-architecture-philosophy).\nIt implements core use cases that almost every software application needs to\ndeal with:\n\n- **Self-service Login and Registration**: Allow end-users to create and sign\n  into accounts (we call them **identities**) using Username / Email and\n  password combinations, Social Sign In (\"Sign in with Google, GitHub\"),\n  Passwordless flows, and others.\n- **Multi-Factor Authentication (MFA/2FA)**: Support protocols such as TOTP\n  ([RFC 6238](https://tools.ietf.org/html/rfc6238) and\n  [IETF RFC 4226](https://tools.ietf.org/html/rfc4226) - better known as\n  [Google Authenticator](https://en.wikipedia.org/wiki/Google_Authenticator))\n- **Account Verification**: Verify that an E-Mail address, phone number, or\n  physical address actually belong to that identity.\n- **Account Recovery**: Recover access using \"Forgot Password\" flows, Security\n  Codes (in case of MFA device loss), and others.\n- **Profile and Account Management**: Update passwords, personal details, email\n  addresses, linked social profiles using secure flows.\n- **Admin APIs**: Import, update, delete identities.\n\nWe highly recommend reading the\n[Ory Kratos introduction docs](https://www.ory.sh/kratos/docs/) to learn more\nabout Ory Krato's background, feature set, and differentiation from other\nproducts.\n\n### Who is 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## Getting Started\n\nTo get started with some easy examples, head over to the\n[Get Started Documentation](https://www.ory.sh/docs/guides/protect-page-login/).\n\n### Installation\n\nHead over to the\n[Ory Developer Documentation](https://www.ory.sh/kratos/docs/install) to learn\nhow to install Ory Kratos on Linux, macOS, Windows, and Docker and how to build\nOry Kratos from source.\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\nRunning identity infrastructure requires\n[attention and knowledge of threat models](https://www.ory.sh/kratos/docs/concepts/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\nOry's services collect summarized, anonymized data that can optionally be turned\noff. Click [here](https://www.ory.sh/docs/ecosystem/sqa) to learn more.\n\n## Documentation\n\n### Guide\n\nThe Guide is available [here](https://www.ory.sh/kratos/docs).\n\n### HTTP API documentation\n\nThe HTTP API is documented [here](https://www.ory.sh/kratos/docs/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 the\n[CHANGELOG.md](./CHANGELOG.md). For upgrading, please visit the\n[upgrade guide](https://www.ory.sh/kratos/docs/guides/upgrade).\n\n### Command line documentation\n\nRun \u003ccode type=\"shell/command\"\u003ekratos -h\u003c/code\u003e or\n\u003ccode type=\"shell/command\"\u003ekratos help\u003c/code\u003e.\n\n### Develop\n\nWe encourage all contributions and encourage you to read our\n[contribution guidelines](./CONTRIBUTING.md)\n\n#### Dependencies\n\nYou need Go 1.16+ and (for the test suites):\n\n- Docker and Docker Compose\n- Makefile\n- NodeJS / npm\n\nIt is possible to develop Ory Kratos 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 three 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- End to end tests (do require databases and will use a test browser)\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\ncd client; go test -tags sqlite -short .\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 Makefile instead. Using dockertest can bloat the number\nof Docker Images on your system and are quite slow. Instead we recommend doing:\n\n\u003cpre type=\"make/command\"\u003e\nmake test\n\u003c/pre\u003e\n\nPlease be aware that \u003ccode type=\"make/command\"\u003emake test\u003c/code\u003e recreates the\ndatabases every time you run \u003ccode type=\"make/command\"\u003emake test\u003c/code\u003e. This\ncan be annoying if you are trying to fix something very specific and need the\ndatabase tests all the time. In that case we suggest that you initialize the\ndatabases with:\n\n\u003ca type=\"make/command\"\u003e\n\n```shell script\nmake test-resetdb\nexport TEST_DATABASE_MYSQL='mysql://root:secret@(127.0.0.1:3444)/mysql?parseTime=true'\nexport TEST_DATABASE_POSTGRESQL='postgres://postgres:secret@127.0.0.1:3445/kratos?sslmode=disable'\nexport TEST_DATABASE_COCKROACHDB='cockroach://root@127.0.0.1:3446/defaultdb?sslmode=disable'\n```\n\n\u003c/a\u003e\n\nThen you can run `go test` as often as you'd like:\n\n```shell script\ngo test -tags sqlite ./...\n\n# or in a module:\ncd client; go test  -tags sqlite  .\n```\n\n##### Updating Test Fixtures\n\nSome tests use fixtures. If payloads change, you can update them with:\n\n```\nmake test-update-snapshots\n```\n\nThis will only update the snapshots of the short tests. To update all snapshots,\nrun:\n\n```bash\nUPDATE_SNAPSHOTS=true go test -p 4 -tags sqlite ./...\n```\n\nYou can also run this command from a sub folder.\n\n##### End-to-End Tests\n\nWe use [Cypress](https://www.cypress.io) to run our e2e tests.\n\n⚠️ To run Cypress on ARM based Mac's, at the moment it is\n[necessary to install Rosetta 2](https://www.cypress.io/blog/2021/01/20/running-cypress-on-the-apple-m1-silicon-arm-architecture-using-rosetta-2/).\nTo install, use the command -\n`softwareupdate --install-rosetta --agree-to-license`\n\nThe simplest way to develop e2e tests is:\n\n\u003cpre type=\"repo/executable\"\u003e\n./test/e2e/run.sh --dev sqlite\n\u003c/pre\u003e\n\nYou can run all tests (with databases) using:\n\n\u003cpre type=\"make/command\"\u003e\nmake test-e2e\n\u003c/pre\u003e\n\nFor more details, run:\n\n\u003cpre type=\"repo/executable\"\u003e\n./test/e2e/run.sh\n\u003c/pre\u003e\n\n**Run only a singular test**\n\nAdd `.only` to the test you would like to run.\n\nFor example:\n\n```ts\nit.only('invalid remote recovery email template', () =\u003e {\n    ...\n})\n```\n\n**Run a subset of tests**\n\nThis will require editing the `cypress.json` file located in the `test/e2e/`\nfolder.\n\nAdd the `testFiles` option and specify the test to run inside the\n`cypress/integration` folder. As an example we will add only the `network`\ntests.\n\n```json\n\"testFiles\": [\"profiles/network/*\"],\n```\n\nNow start the tests again using the run script or makefile.\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\n#### Preview API documentation\n\n- update the SDK including the OpenAPI specification:\n  \u003ccode type=\"make/command\"\u003emake sdk\u003c/code\u003e\n- run preview server for API documentation: \u003ccode type=\"make/command\"\u003emake\n  docs/api\u003c/code\u003e\n- run preview server for swagger documentation: \u003ccode type=\"make/command\"\u003emake\n  docs/swagger\u003c/code\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fory%2Fkratos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fory%2Fkratos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fory%2Fkratos/lists"}