Repository: ory/kratos
Pull request #792 (2020-10-27 15:18:49)

refactor: move pkger and ioutil helpers to ory/x
## Related issue

<!--
Please link the GitHub issue this pull request resolves in the format of `#1234`. If you discussed this change
with a maintainer, please mention her/him using the `@` syntax (e.g. `@aeneasr`).

If this change neither resolves an existing issue nor has sign-off from one of the maintainers, there is a
chance substantial changes will be requested or that the changes will be rejected.

You can discuss changes with maintainers either in the [ORY Community Forums](https://community.ory.sh/) or
join the [ORY Chat](https://www.ory.sh/chat).
-->

## Proposed changes

<!--
Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request.
-->

## Checklist

<!--
Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of
them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.
-->

- [ ] I have read the [contributing guidelines](../blob/master/CONTRIBUTING.md).
- [ ] I have read the [security policy](../security/policy).
- [ ] I confirm that this pull request does not address a security
      vulnerability. If this pull request addresses a security. vulnerability, I
      confirm that I got green light (please contact
      [security@ory.sh](mailto:security@ory.sh)) from the maintainers to push
      the changes.
- [ ] I have added tests that prove my fix is effective or that my feature
      works.
- [ ] I have added or changed [the documentation](docs/docs).

## Further comments

<!--
If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution
you did and what alternatives you considered, etc...
-->



Patch:
diff --git a/.goreleaser.yml b/.goreleaser.yml
index 58a56141f..6f6b12953 100644
--- a/.goreleaser.yml
+++ b/.goreleaser.yml
@@ -179,6 +179,8 @@ brews:
     commit_author:
       name: aeneasr
       email: 3372410+aeneasr@users.noreply.github.com
+    install: |
+      bin.install "kratos"
 
 scoop:
   bucket:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a95d5e1b4..6eab2522d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,86 +4,88 @@
 <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
 **Table of Contents**
 
-- [Unreleased (2020-10-27)](#unreleased-2020-10-27)
-  - [0.5.3-alpha.1 (2020-10-27)](#053-alpha1-2020-10-27)
+- [Unreleased (2020-10-29)](#unreleased-2020-10-29)
     - [Bug Fixes](#bug-fixes)
     - [Documentation](#documentation)
+  - [0.5.3-alpha.1 (2020-10-27)](#053-alpha1-2020-10-27)
+    - [Bug Fixes](#bug-fixes-1)
+    - [Documentation](#documentation-1)
     - [Features](#features)
     - [Tests](#tests)
   - [0.5.2-alpha.1 (2020-10-22)](#052-alpha1-2020-10-22)
-    - [Bug Fixes](#bug-fixes-1)
-    - [Documentation](#documentation-1)
-    - [Tests](#tests-1)
-  - [0.5.1-alpha.1 (2020-10-20)](#051-alpha1-2020-10-20)
     - [Bug Fixes](#bug-fixes-2)
     - [Documentation](#documentation-2)
+    - [Tests](#tests-1)
+  - [0.5.1-alpha.1 (2020-10-20)](#051-alpha1-2020-10-20)
+    - [Bug Fixes](#bug-fixes-3)
+    - [Documentation](#documentation-3)
     - [Features](#features-1)
     - [Tests](#tests-2)
     - [Unclassified](#unclassified)
 - [0.5.0-alpha.1 (2020-10-15)](#050-alpha1-2020-10-15)
-    - [Bug Fixes](#bug-fixes-3)
+    - [Bug Fixes](#bug-fixes-4)
     - [Code Refactoring](#code-refactoring)
-    - [Documentation](#documentation-3)
+    - [Documentation](#documentation-4)
     - [Features](#features-2)
     - [Tests](#tests-3)
     - [Unclassified](#unclassified-1)
     - [BREAKING CHANGES](#breaking-changes)
   - [0.4.6-alpha.1 (2020-07-13)](#046-alpha1-2020-07-13)
-    - [Bug Fixes](#bug-fixes-4)
-  - [0.4.5-alpha.1 (2020-07-13)](#045-alpha1-2020-07-13)
     - [Bug Fixes](#bug-fixes-5)
-  - [0.4.4-alpha.1 (2020-07-10)](#044-alpha1-2020-07-10)
+  - [0.4.5-alpha.1 (2020-07-13)](#045-alpha1-2020-07-13)
     - [Bug Fixes](#bug-fixes-6)
-    - [Documentation](#documentation-4)
-  - [0.4.3-alpha.1 (2020-07-08)](#043-alpha1-2020-07-08)
+  - [0.4.4-alpha.1 (2020-07-10)](#044-alpha1-2020-07-10)
     - [Bug Fixes](#bug-fixes-7)
-  - [0.4.2-alpha.1 (2020-07-08)](#042-alpha1-2020-07-08)
+    - [Documentation](#documentation-5)
+  - [0.4.3-alpha.1 (2020-07-08)](#043-alpha1-2020-07-08)
     - [Bug Fixes](#bug-fixes-8)
-- [0.4.0-alpha.1 (2020-07-08)](#040-alpha1-2020-07-08)
+  - [0.4.2-alpha.1 (2020-07-08)](#042-alpha1-2020-07-08)
     - [Bug Fixes](#bug-fixes-9)
+- [0.4.0-alpha.1 (2020-07-08)](#040-alpha1-2020-07-08)
+    - [Bug Fixes](#bug-fixes-10)
     - [Code Refactoring](#code-refactoring-1)
-    - [Documentation](#documentation-5)
+    - [Documentation](#documentation-6)
     - [Features](#features-3)
     - [Unclassified](#unclassified-2)
     - [BREAKING CHANGES](#breaking-changes-1)
 - [0.3.0-alpha.1 (2020-05-15)](#030-alpha1-2020-05-15)
-    - [Bug Fixes](#bug-fixes-10)
+    - [Bug Fixes](#bug-fixes-11)
     - [Code Refactoring](#code-refactoring-2)
-    - [Documentation](#documentation-6)
+    - [Documentation](#documentation-7)
     - [Features](#features-4)
     - [Unclassified](#unclassified-3)
     - [BREAKING CHANGES](#breaking-changes-2)
   - [0.2.1-alpha.1 (2020-05-05)](#021-alpha1-2020-05-05)
-    - [Documentation](#documentation-7)
+    - [Documentation](#documentation-8)
 - [0.2.0-alpha.2 (2020-05-04)](#020-alpha2-2020-05-04)
-    - [Bug Fixes](#bug-fixes-11)
+    - [Bug Fixes](#bug-fixes-12)
     - [Code Refactoring](#code-refactoring-3)
-    - [Documentation](#documentation-8)
+    - [Documentation](#documentation-9)
     - [Features](#features-5)
     - [Unclassified](#unclassified-4)
     - [BREAKING CHANGES](#breaking-changes-3)
   - [0.1.1-alpha.1 (2020-02-18)](#011-alpha1-2020-02-18)
-    - [Bug Fixes](#bug-fixes-12)
+    - [Bug Fixes](#bug-fixes-13)
     - [Code Refactoring](#code-refactoring-4)
-    - [Documentation](#documentation-9)
+    - [Documentation](#documentation-10)
 - [0.1.0-alpha.6 (2020-02-16)](#010-alpha6-2020-02-16)
-    - [Bug Fixes](#bug-fixes-13)
+    - [Bug Fixes](#bug-fixes-14)
     - [Code Refactoring](#code-refactoring-5)
-    - [Documentation](#documentation-10)
+    - [Documentation](#documentation-11)
     - [Features](#features-6)
 - [0.1.0-alpha.5 (2020-02-06)](#010-alpha5-2020-02-06)
-    - [Documentation](#documentation-11)
+    - [Documentation](#documentation-12)
     - [Features](#features-7)
 - [0.1.0-alpha.4 (2020-02-06)](#010-alpha4-2020-02-06)
-    - [Documentation](#documentation-12)
+    - [Documentation](#documentation-13)
 - [0.1.0-alpha.3 (2020-02-06)](#010-alpha3-2020-02-06)
 - [0.1.0-alpha.2 (2020-02-03)](#010-alpha2-2020-02-03)
-    - [Bug Fixes](#bug-fixes-14)
-    - [Documentation](#documentation-13)
+    - [Bug Fixes](#bug-fixes-15)
+    - [Documentation](#documentation-14)
     - [Features](#features-8)
     - [Unclassified](#unclassified-5)
 - [0.1.0-alpha.1 (2020-01-31)](#010-alpha1-2020-01-31)
-    - [Documentation](#documentation-14)
+    - [Documentation](#documentation-15)
   - [0.0.3-alpha.15 (2020-01-31)](#003-alpha15-2020-01-31)
     - [Unclassified](#unclassified-6)
   - [0.0.3-alpha.14 (2020-01-31)](#003-alpha14-2020-01-31)
@@ -113,14 +115,30 @@
   - [0.0.1-alpha.3 (2020-01-28)](#001-alpha3-2020-01-28)
   - [0.0.1-alpha.2 (2020-01-28)](#001-alpha2-2020-01-28)
   - [0.0.1-alpha.1 (2020-01-28)](#001-alpha1-2020-01-28)
-    - [Documentation](#documentation-15)
+    - [Documentation](#documentation-16)
     - [Unclassified](#unclassified-18)
 
 <!-- END doctoc generated TOC please keep comment here to allow auto update -->
 
-# Unreleased (2020-10-27)
+# [Unreleased](https://github.com/ory/kratos/compare/v0.5.3-alpha.1...15bae9f893c2e2910167326d987455246c110001) (2020-10-29)
+
+
+### Bug Fixes
+
+* Case in settings handler method ([#798](https://github.com/ory/kratos/issues/798)) ([83eb4e0](https://github.com/ory/kratos/commit/83eb4e0021621014d2b543e57a01401381f07fe4))
+* Force brew install statement ([#796](https://github.com/ory/kratos/issues/796)) ([ad542ad](https://github.com/ory/kratos/commit/ad542ad5919205ac26a757145474e5a46f3937ec)):
+
+    > Closes https://github.com/ory/homebrew-kratos/issues/1
+
+
+### Documentation
+
+* Fix another broken link ([15bae9f](https://github.com/ory/kratos/commit/15bae9f893c2e2910167326d987455246c110001))
+* Fix broken links ([#795](https://github.com/ory/kratos/issues/795)) ([0ab0e7e](https://github.com/ory/kratos/commit/0ab0e7eca8e95d6c26d028c177cbbd1f06b68871)), closes [#793](https://github.com/ory/kratos/issues/793)
+* Fix links ([#800](https://github.com/ory/kratos/issues/800)) ([5fcc272](https://github.com/ory/kratos/commit/5fcc272e625de9e583b2ec24d5679895a6d24c1b))
+* Fix oidc config examples ([#799](https://github.com/ory/kratos/issues/799)) ([8a4f480](https://github.com/ory/kratos/commit/8a4f480121995d9899668f037382086fcdd2da4c))
+* Use correct links ([#797](https://github.com/ory/kratos/issues/797)) ([a4de293](https://github.com/ory/kratos/commit/a4de29399e4f1b5d0a33acc85478f2d38579a174))
 
-No significant changes have been made for this release.
 
 
 ## [0.5.3-alpha.1](https://github.com/ory/kratos/compare/v0.5.2-alpha.1...v0.5.3-alpha.1) (2020-10-27)
diff --git a/docs/docs/concepts/identity-data-model.md b/docs/docs/concepts/identity-data-model.md
index 91547566f..15d4b55bf 100644
--- a/docs/docs/concepts/identity-data-model.md
+++ b/docs/docs/concepts/identity-data-model.md
@@ -1,5 +1,5 @@
 ---
-id: identity-user-model
+id: identity-data-model
 title: Identity Data Model
 ---
 
diff --git a/docs/docs/concepts/index.md b/docs/docs/concepts/index.md
index a1847a87c..f18a5ff67 100644
--- a/docs/docs/concepts/index.md
+++ b/docs/docs/concepts/index.md
@@ -271,7 +271,7 @@ system:
   attached to the profile.
 
 ORY Kratos implements both scenarios by using
-[JSON Schemas for Identities](./identity-user-model)
+[JSON Schemas for Identities](./identity-data-model)
 
 ### Forget passport-js, oidc-client, ...
 
@@ -280,5 +280,5 @@ Open Source provides a base solution for many use cases. For example, ORY Kratos
 integrates with ORY Oathkeeper, a Reverse Proxy solution. Defining Access Rules
 is as easy as writing a few lines of JSON / JSON5 / YAML!
 
-Please consult the [Quickstart documentation](../quickstart), for further
+Please consult the [Quickstart documentation](../quickstart.mdx), for further
 information.
diff --git a/docs/docs/guides/sign-in-with-github-google-facebook-linkedin.mdx b/docs/docs/guides/sign-in-with-github-google-facebook-linkedin.mdx
index c470883c0..3a21fa884 100644
--- a/docs/docs/guides/sign-in-with-github-google-facebook-linkedin.mdx
+++ b/docs/docs/guides/sign-in-with-github-google-facebook-linkedin.mdx
@@ -42,13 +42,13 @@ To set up "Sign in with Discord" you must create a [Discord OAuth2 Application](
 Set the "Redirect URI" to:
 
 ```
-http://127.0.0.1:4455/.ory/kratos/public/self-service/browser/flows/strategies/oidc/callback/discord
+http://127.0.0.1:4433/self-service/methods/oidc/callback/discord
 ```
 
 The pattern of this URL is:
 
 ```
-http(s)://<domain-of-ory-kratos>:<public-port>/self-service/browser/flows/strategies/oidc/callback/<provider-id>
+http(s)://<domain-of-ory-kratos>:<public-port>/self-service/methods/oidc/callback/<provider-id>
 ```
 
 The provider ID must point to the provider's ID set in the ORY Kratos
@@ -110,7 +110,7 @@ Now, enable the Discord provider in the ORY Kratos config located at
 ```yaml title="contrib/quickstart/kratos/email-password/.kratos.yml"
 # $ kratos -c path/to/my/kratos/config.yml serve
 selfservice:
-  strategies:
+  methods:
     oidc:
       enabled: true
       config:
@@ -225,13 +225,13 @@ To set up "Sign in with GitLab" you must create a [GitLab OAuth2 Application](ht
 Set the "Redirect URI" to:
 
 ```
-http://127.0.0.1:4455/.ory/kratos/public/self-service/browser/flows/strategies/oidc/callback/gitlab
+http://127.0.0.1:4433/self-service/methods/oidc/callback/gitlab
 ```
 
 The pattern of this URL is:
 
 ```
-http(s)://<domain-of-ory-kratos>:<public-port>/self-service/browser/flows/strategies/oidc/callback/<provider-id>
+http(s)://<domain-of-ory-kratos>:<public-port>/self-service/methods/oidc/callback/<provider-id>
 ```
 
 :::note
@@ -266,7 +266,7 @@ Now, enable the GitLab provider in the ORY Kratos config located at
 ```yaml title="contrib/quickstart/kratos/email-password/.kratos.yml"
 # $ kratos -c path/to/my/kratos/config.yml serve
 selfservice:
-  strategies:
+  methods:
     oidc:
       enabled: true
       config:
@@ -377,13 +377,13 @@ To set up "Sign in with Twitch" you must create a [Twitch OAuth2 Application](ht
 Set the "Redirect URI" to:
 
 ```
-http://127.0.0.1:4455/.ory/kratos/public/self-service/browser/flows/strategies/oidc/callback/twitch
+http://127.0.0.1:4433/self-service/methods/oidc/callback/twitch
 ```
 
 The pattern of this URL is:
 
 ```
-http(s)://<domain-of-ory-kratos>:<public-port>/self-service/browser/flows/strategies/oidc/callback/<provider-id>
+http(s)://<domain-of-ory-kratos>:<public-port>/self-service/methods/oidc/callback/<provider-id>
 ```
 
 The provider ID must point to the provider's ID set in the ORY Kratos
diff --git a/docs/docs/milestones.md b/docs/docs/milestones.md
index e2b0acf97..99ecacb9b 100644
--- a/docs/docs/milestones.md
+++ b/docs/docs/milestones.md
@@ -129,12 +129,14 @@ Something is not working.
 - [x] Segmentation fault when running kratos ([kratos#685](https://github.com/ory/kratos/issues/685)) - [@Patrik](https://github.com/zepatrik)
 - [x] Endpoint whoami returns valid session after user logout ([kratos#686](https://github.com/ory/kratos/issues/686)) - [@hackerman](https://github.com/aeneasr)
 - [x] CSRF-detection is broken for Login API flows ([kratos#785](https://github.com/ory/kratos/issues/785)) - [@hackerman](https://github.com/aeneasr)
+- [x] Fix quickstart doc link ([kratos#793](https://github.com/ory/kratos/issues/793)) - [@Vincent](https://github.com/vinckr)
 
 #### Pull Requests
 
 - [x] fix: escape jsx characters in api documentation ([kratos#703](https://github.com/ory/kratos/pull/703)) - [@hackerman](https://github.com/aeneasr)
 - [x] fix: mark flow methods' fields as required ([kratos#708](https://github.com/ory/kratos/pull/708)) - [@hackerman](https://github.com/aeneasr)
 - [x] Resolve SQLite runtime issues ([kratos#777](https://github.com/ory/kratos/pull/777)) - [@hackerman](https://github.com/aeneasr)
+- [x] fix: force brew install statement ([kratos#796](https://github.com/ory/kratos/pull/796)) - [@hackerman](https://github.com/aeneasr)
 
 ### [Feat](https://github.com/ory/kratos/labels/feat)
 
@@ -143,7 +145,6 @@ New feature or request.
 #### Issues
 
 - [ ] Implement React SPA sample app ([kratos#668](https://github.com/ory/kratos/issues/668)) - [@hackerman](https://github.com/aeneasr)
-- [ ] Implement React Native sample application consuming API ([kratos#667](https://github.com/ory/kratos/issues/667)) - [@hackerman](https://github.com/aeneasr)
 - [ ] Rename strategy to method in internal APIs and Documentation ([kratos#683](https://github.com/ory/kratos/issues/683)) - [@hackerman](https://github.com/aeneasr)
 - [x] Implement JSON capabilities in ErrorHandler ([kratos#61](https://github.com/ory/kratos/issues/61)) - [@hackerman](https://github.com/aeneasr)
 - [x] Allow attaching credentials to identities in CRUD create ([kratos#200](https://github.com/ory/kratos/issues/200))
@@ -157,6 +158,7 @@ New feature or request.
 - [x] Implement a test-error for implementing the Error UI ([kratos#610](https://github.com/ory/kratos/issues/610))
 - [x] Design of the client cli ([kratos#663](https://github.com/ory/kratos/issues/663)) - [@Patrik](https://github.com/zepatrik)
 - [x] Rename `request_lifespan` to `lifespan` ([kratos#666](https://github.com/ory/kratos/issues/666)) - [@hackerman](https://github.com/aeneasr)
+- [x] Implement React Native sample application consuming API ([kratos#667](https://github.com/ory/kratos/issues/667)) - [@hackerman](https://github.com/aeneasr)
 - [x] Configurable CORS headers ([kratos#712](https://github.com/ory/kratos/issues/712)) - [@hackerman](https://github.com/aeneasr)
 
 #### Pull Requests
@@ -173,6 +175,7 @@ Affects documentation.
 
 - [x] Document multi-tenant set up ([kratos#370](https://github.com/ory/kratos/issues/370))
 - [x] Remove reverse proxy from node example and rely on port and the domain parameter ([kratos#661](https://github.com/ory/kratos/issues/661)) - [@hackerman](https://github.com/aeneasr)
+- [x] Fix quickstart doc link ([kratos#793](https://github.com/ory/kratos/issues/793)) - [@Vincent](https://github.com/vinckr)
 
 #### Pull Requests
 
@@ -199,3 +202,11 @@ Blocks milestones or other issues or pulls.
 
 - [x] feat: implement API-based self-service flows ([kratos#624](https://github.com/ory/kratos/pull/624)) - [@hackerman](https://github.com/aeneasr)
 - [x] fix: escape jsx characters in api documentation ([kratos#703](https://github.com/ory/kratos/pull/703)) - [@hackerman](https://github.com/aeneasr)
+
+### [Ci](https://github.com/ory/kratos/labels/ci)
+
+Affects Continuous Integration (CI).
+
+#### Pull Requests
+
+- [x] fix: force brew install statement ([kratos#796](https://github.com/ory/kratos/pull/796)) - [@hackerman](https://github.com/aeneasr)
diff --git a/docs/docs/self-service/flows/user-settings.mdx b/docs/docs/self-service/flows/user-settings.mdx
index e83ae7f9b..55dff849d 100644
--- a/docs/docs/self-service/flows/user-settings.mdx
+++ b/docs/docs/self-service/flows/user-settings.mdx
@@ -265,7 +265,7 @@ curl -s -X GET \
 ```
 
 The form fields depend on the
-[Identity's Schema JSON](../../concepts/identity-user-model).
+[Identity's Schema JSON](../../concepts/identity-data-model).
 
 ### Update Password
 
diff --git a/docs/sidebar.json b/docs/sidebar.json
index e320ed4f6..296f13431 100644
--- a/docs/sidebar.json
+++ b/docs/sidebar.json
@@ -4,7 +4,7 @@
     "concepts/index", 
     "concepts/terminology", 
     "concepts/ui-user-interface", 
-    "concepts/identity-user-model", 
+    "concepts/identity-data-model", 
     {
       "label": "Identity Credentials",
       "type": "category",
diff --git a/docs/versioned_docs/version-v0.5/concepts/identity-data-model.md b/docs/versioned_docs/version-v0.5/concepts/identity-data-model.md
index 91547566f..15d4b55bf 100644
--- a/docs/versioned_docs/version-v0.5/concepts/identity-data-model.md
+++ b/docs/versioned_docs/version-v0.5/concepts/identity-data-model.md
@@ -1,5 +1,5 @@
 ---
-id: identity-user-model
+id: identity-data-model
 title: Identity Data Model
 ---
 
diff --git a/docs/versioned_docs/version-v0.5/concepts/index.md b/docs/versioned_docs/version-v0.5/concepts/index.md
index a1847a87c..e46350e80 100644
--- a/docs/versioned_docs/version-v0.5/concepts/index.md
+++ b/docs/versioned_docs/version-v0.5/concepts/index.md
@@ -271,7 +271,7 @@ system:
   attached to the profile.
 
 ORY Kratos implements both scenarios by using
-[JSON Schemas for Identities](./identity-user-model)
+[JSON Schemas for Identities](./identity-data-model.md)
 
 ### Forget passport-js, oidc-client, ...
 
@@ -280,5 +280,5 @@ Open Source provides a base solution for many use cases. For example, ORY Kratos
 integrates with ORY Oathkeeper, a Reverse Proxy solution. Defining Access Rules
 is as easy as writing a few lines of JSON / JSON5 / YAML!
 
-Please consult the [Quickstart documentation](../quickstart), for further
+Please consult the [Quickstart documentation](../quickstart.mdx), for further
 information.
diff --git a/docs/versioned_docs/version-v0.5/guides/sign-in-with-github-google-facebook-linkedin.mdx b/docs/versioned_docs/version-v0.5/guides/sign-in-with-github-google-facebook-linkedin.mdx
index c470883c0..3a21fa884 100644
--- a/docs/versioned_docs/version-v0.5/guides/sign-in-with-github-google-facebook-linkedin.mdx
+++ b/docs/versioned_docs/version-v0.5/guides/sign-in-with-github-google-facebook-linkedin.mdx
@@ -42,13 +42,13 @@ To set up "Sign in with Discord" you must create a [Discord OAuth2 Application](
 Set the "Redirect URI" to:
 
 ```
-http://127.0.0.1:4455/.ory/kratos/public/self-service/browser/flows/strategies/oidc/callback/discord
+http://127.0.0.1:4433/self-service/methods/oidc/callback/discord
 ```
 
 The pattern of this URL is:
 
 ```
-http(s)://<domain-of-ory-kratos>:<public-port>/self-service/browser/flows/strategies/oidc/callback/<provider-id>
+http(s)://<domain-of-ory-kratos>:<public-port>/self-service/methods/oidc/callback/<provider-id>
 ```
 
 The provider ID must point to the provider's ID set in the ORY Kratos
@@ -110,7 +110,7 @@ Now, enable the Discord provider in the ORY Kratos config located at
 ```yaml title="contrib/quickstart/kratos/email-password/.kratos.yml"
 # $ kratos -c path/to/my/kratos/config.yml serve
 selfservice:
-  strategies:
+  methods:
     oidc:
       enabled: true
       config:
@@ -225,13 +225,13 @@ To set up "Sign in with GitLab" you must create a [GitLab OAuth2 Application](ht
 Set the "Redirect URI" to:
 
 ```
-http://127.0.0.1:4455/.ory/kratos/public/self-service/browser/flows/strategies/oidc/callback/gitlab
+http://127.0.0.1:4433/self-service/methods/oidc/callback/gitlab
 ```
 
 The pattern of this URL is:
 
 ```
-http(s)://<domain-of-ory-kratos>:<public-port>/self-service/browser/flows/strategies/oidc/callback/<provider-id>
+http(s)://<domain-of-ory-kratos>:<public-port>/self-service/methods/oidc/callback/<provider-id>
 ```
 
 :::note
@@ -266,7 +266,7 @@ Now, enable the GitLab provider in the ORY Kratos config located at
 ```yaml title="contrib/quickstart/kratos/email-password/.kratos.yml"
 # $ kratos -c path/to/my/kratos/config.yml serve
 selfservice:
-  strategies:
+  methods:
     oidc:
       enabled: true
       config:
@@ -377,13 +377,13 @@ To set up "Sign in with Twitch" you must create a [Twitch OAuth2 Application](ht
 Set the "Redirect URI" to:
 
 ```
-http://127.0.0.1:4455/.ory/kratos/public/self-service/browser/flows/strategies/oidc/callback/twitch
+http://127.0.0.1:4433/self-service/methods/oidc/callback/twitch
 ```
 
 The pattern of this URL is:
 
 ```
-http(s)://<domain-of-ory-kratos>:<public-port>/self-service/browser/flows/strategies/oidc/callback/<provider-id>
+http(s)://<domain-of-ory-kratos>:<public-port>/self-service/methods/oidc/callback/<provider-id>
 ```
 
 The provider ID must point to the provider's ID set in the ORY Kratos
diff --git a/docs/versioned_docs/version-v0.5/self-service/flows/user-settings.mdx b/docs/versioned_docs/version-v0.5/self-service/flows/user-settings.mdx
index e83ae7f9b..55dff849d 100644
--- a/docs/versioned_docs/version-v0.5/self-service/flows/user-settings.mdx
+++ b/docs/versioned_docs/version-v0.5/self-service/flows/user-settings.mdx
@@ -265,7 +265,7 @@ curl -s -X GET \
 ```
 
 The form fields depend on the
-[Identity's Schema JSON](../../concepts/identity-user-model).
+[Identity's Schema JSON](../../concepts/identity-data-model).
 
 ### Update Password
 
diff --git a/docs/versioned_sidebars/version-v0.5-sidebars.json b/docs/versioned_sidebars/version-v0.5-sidebars.json
index d9800cbac..2b83a3fdb 100644
--- a/docs/versioned_sidebars/version-v0.5-sidebars.json
+++ b/docs/versioned_sidebars/version-v0.5-sidebars.json
@@ -42,7 +42,7 @@
         },
         {
           "type": "doc",
-          "id": "version-v0.5/concepts/identity-user-model"
+          "id": "version-v0.5/concepts/identity-data-model"
         },
         {
           "collapsed": true,
diff --git a/driver/registry_default_schemas.go b/driver/registry_default_schemas.go
index 91746755f..94f5e7f40 100644
--- a/driver/registry_default_schemas.go
+++ b/driver/registry_default_schemas.go
@@ -1,9 +1,8 @@
 package driver
 
 import (
-	"net/url"
-
 	"github.com/ory/kratos/schema"
+	"net/url"
 )
 
 func (m *RegistryDefault) IdentityTraitsSchemas() schema.Schemas {
diff --git a/go.mod b/go.mod
index a18dfe8f2..8ea80ffe2 100644
--- a/go.mod
+++ b/go.mod
@@ -50,7 +50,7 @@ require (
 	github.com/julienschmidt/httprouter v1.2.0
 	github.com/leodido/go-urn v1.1.0 // indirect
 	github.com/luna-duclos/instrumentedsql/opentracing v0.0.0-20201015064105-f9d01e123f16 // indirect
-	github.com/markbates/pkger v0.17.0
+	github.com/markbates/pkger v0.17.1
 	github.com/mattn/goveralls v0.0.5
 	github.com/mikefarah/yq v1.15.0
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
@@ -67,7 +67,7 @@ require (
 	github.com/ory/mail/v3 v3.0.0
 	github.com/ory/nosurf v1.2.3
 	github.com/ory/viper v1.7.5
-	github.com/ory/x v0.0.153
+	github.com/ory/x v0.0.158
 	github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
 	github.com/pkg/errors v0.9.1
 	github.com/prometheus/client_golang v1.4.0
diff --git a/go.sum b/go.sum
index c9f1350bc..c06f53029 100644
--- a/go.sum
+++ b/go.sum
@@ -658,6 +658,8 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-github/v27 v27.0.1 h1:sSMFSShNn4VnqCqs+qhab6TS3uQc+uVR6TD1bW6MavM=
 github.com/google/go-github/v27 v27.0.1/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0=
 github.com/google/go-jsonnet v0.15.1-0.20200415122941-8a0084e64395 h1:PftVLaNFPyiHId46033ADWFgXAWIwSDK9ESNRIKdj1Q=
@@ -1102,8 +1104,10 @@ github.com/ory/x v0.0.127 h1:goEspwhiKRoKRMBb6T6nDiv5L2mMU4EQUGwu90WM+Ao=
 github.com/ory/x v0.0.127/go.mod h1:FwUujfFuCj5d+xgLn4fGMYPnzriR5bdAIulFXMtnK0M=
 github.com/ory/x v0.0.148 h1:LLTGOS0gVcNgqFN1Nmq5CgfJEwhI8wnvDhpKXMreCWE=
 github.com/ory/x v0.0.148/go.mod h1:kYT14ajKGfDV8pRPRzQD3begYqRISZq1IQUgOVliQCE=
-github.com/ory/x v0.0.153 h1:Ili9wYHmpO4uq7sBQpOOj0/2QWQGrCCN3FADO9Fw/z0=
-github.com/ory/x v0.0.153/go.mod h1:0gChD0a8jhUSuiCavAjcbdQxOe0PHFHlMHey2YXpQC4=
+github.com/ory/x v0.0.157 h1:c7abbQdewDeiDcTrVT/kKu4OdtDIbUZAQNYeeA1nvtk=
+github.com/ory/x v0.0.157/go.mod h1:kN7lYzWLtZbJpoZvbzo988tzaGUlnR+6EIGuRxlh/wU=
+github.com/ory/x v0.0.158 h1:UqgIrJO8MwumDVhnx3XaKmIJw5P5u0mwdh2wb7mVCUg=
+github.com/ory/x v0.0.158/go.mod h1:kN7lYzWLtZbJpoZvbzo988tzaGUlnR+6EIGuRxlh/wU=
 github.com/parnurzeal/gorequest v0.2.15/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
@@ -1348,8 +1352,12 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
 go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
 go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=
+go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.13.0 h1:T6W6DcsRSLxMCv2J96fAkHaKu+V3tW/8vXdPNe/1B1A=
+go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.13.0/go.mod h1:TwTkyRaTam1pOIb2wxcAiC2hkMVbokXkt6DEt5nDkD8=
 go.opentelemetry.io/otel v0.6.0 h1:+vkHm/XwJ7ekpISV2Ixew93gCrxTbuwTF5rSewnLLgw=
 go.opentelemetry.io/otel v0.6.0/go.mod h1:jzBIgIzK43Iu1BpDAXwqOd6UPsSAk+ewVZ5ofSXw4Ek=
+go.opentelemetry.io/otel v0.13.0 h1:2isEnyzjjJZq6r2EKMsFj4TxiQiexsM04AVhwbR/oBA=
+go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY=
 go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
diff --git a/schema/extension.go b/schema/extension.go
index 548064664..2c4c66d5b 100644
--- a/schema/extension.go
+++ b/schema/extension.go
@@ -3,14 +3,13 @@ package schema
 import (
 	"bytes"
 	"encoding/json"
+	"github.com/ory/x/pkgerx"
 	"path"
 
 	"github.com/markbates/pkger"
 	"github.com/pkg/errors"
 
 	"github.com/ory/jsonschema/v3"
-
-	"github.com/ory/kratos/x"
 )
 
 var schemas = pkger.Dir("/schema/.schema")
@@ -59,7 +58,7 @@ type (
 
 func NewExtensionRunner(meta ExtensionRunnerMetaSchema, runners ...Extension) (*ExtensionRunner, error) {
 	var err error
-	schema, err := x.PkgerRead(pkger.Open(path.Join(string(schemas), string(meta))))
+	schema, err := pkgerx.Read(pkger.Open(path.Join(string(schemas), string(meta))))
 	if err != nil {
 		return nil, errors.WithStack(err)
 	}
diff --git a/selfservice/flow/settings/handler.go b/selfservice/flow/settings/handler.go
index b96bc59b7..c316faed3 100644
--- a/selfservice/flow/settings/handler.go
+++ b/selfservice/flow/settings/handler.go
@@ -77,7 +77,7 @@ func (h *Handler) RegisterPublicRoutes(public *x.RouterPublic) {
 	public.GET(RouteInitBrowserFlow, h.d.SessionHandler().IsAuthenticated(h.initBrowserFlow, redirect))
 	public.GET(RouteInitAPIFlow, h.d.SessionHandler().IsAuthenticated(h.initApiFlow, nil))
 
-	public.GET(RouteGetFlow, h.d.SessionHandler().IsAuthenticated(h.fetchPublicFLow, OnUnauthenticated(h.c, h.d)))
+	public.GET(RouteGetFlow, h.d.SessionHandler().IsAuthenticated(h.fetchPublicFlow, OnUnauthenticated(h.c, h.d)))
 }
 
 func (h *Handler) RegisterAdminRoutes(admin *x.RouterAdmin) {
@@ -228,7 +228,7 @@ type getSelfServiceSettingsFlowParameters struct {
 //       404: genericError
 //       410: genericError
 //       500: genericError
-func (h *Handler) fetchPublicFLow(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
+func (h *Handler) fetchPublicFlow(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
 	if err := h.fetchFlow(w, r, true); err != nil {
 		h.d.Writer().WriteError(w, r, err)
 		return
diff --git a/selfservice/strategy/link/strategy_recovery.go b/selfservice/strategy/link/strategy_recovery.go
index f6829dbc6..990764116 100644
--- a/selfservice/strategy/link/strategy_recovery.go
+++ b/selfservice/strategy/link/strategy_recovery.go
@@ -1,6 +1,7 @@
 package link
 
 import (
+	"github.com/ory/x/pkgerx"
 	"net/http"
 	"net/url"
 	"time"
@@ -486,7 +487,7 @@ func (s *Strategy) decodeRecovery(r *http.Request, decodeBody bool) (*completeSe
 	if decodeBody {
 		if err := s.dx.Decode(r, &body,
 			decoderx.MustHTTPRawJSONSchemaCompiler(
-				x.MustPkgerRead(pkger.Open("/selfservice/strategy/link/.schema/email.schema.json")),
+				pkgerx.MustRead(pkger.Open("/selfservice/strategy/link/.schema/email.schema.json")),
 			),
 			decoderx.HTTPDecoderSetValidatePayloads(false),
 			decoderx.HTTPDecoderJSONFollowsFormFormat()); err != nil {
diff --git a/selfservice/strategy/link/strategy_verification.go b/selfservice/strategy/link/strategy_verification.go
index f2e3cf2ea..89c5cf709 100644
--- a/selfservice/strategy/link/strategy_verification.go
+++ b/selfservice/strategy/link/strategy_verification.go
@@ -1,6 +1,7 @@
 package link
 
 import (
+	"github.com/ory/x/pkgerx"
 	"net/http"
 	"net/url"
 	"time"
@@ -59,7 +60,7 @@ func (s *Strategy) decodeVerification(r *http.Request, decodeBody bool) (*comple
 	if decodeBody {
 		if err := s.dx.Decode(r, &body,
 			decoderx.MustHTTPRawJSONSchemaCompiler(
-				x.MustPkgerRead(pkger.Open("/selfservice/strategy/link/.schema/email.schema.json")),
+				pkgerx.MustRead(pkger.Open("/selfservice/strategy/link/.schema/email.schema.json")),
 			),
 			decoderx.HTTPDecoderSetValidatePayloads(false),
 			decoderx.HTTPDecoderJSONFollowsFormFormat()); err != nil {
diff --git a/selfservice/strategy/password/login.go b/selfservice/strategy/password/login.go
index 2eae9c3b6..ba620defe 100644
--- a/selfservice/strategy/password/login.go
+++ b/selfservice/strategy/password/login.go
@@ -3,6 +3,7 @@ package password
 import (
 	"bytes"
 	"encoding/json"
+	"github.com/ory/x/pkgerx"
 	"net/http"
 
 	"github.com/julienschmidt/httprouter"
@@ -107,7 +108,7 @@ func (s *Strategy) handleLogin(w http.ResponseWriter, r *http.Request, _ httprou
 	}
 
 	var p CompleteSelfServiceLoginFlowWithPasswordMethod
-	if err := s.hd.Decode(r, &p, decoderx.MustHTTPRawJSONSchemaCompiler(x.MustPkgerRead(
+	if err := s.hd.Decode(r, &p, decoderx.MustHTTPRawJSONSchemaCompiler(pkgerx.MustRead(
 		pkger.Open("/selfservice/strategy/password/.schema/login.schema.json")))); err != nil {
 		s.handleLoginError(w, r, ar, &p, err)
 		return
diff --git a/selfservice/strategy/password/registration.go b/selfservice/strategy/password/registration.go
index ac32f18a1..67cbe3470 100644
--- a/selfservice/strategy/password/registration.go
+++ b/selfservice/strategy/password/registration.go
@@ -2,6 +2,7 @@ package password
 
 import (
 	"encoding/json"
+	"github.com/ory/x/pkgerx"
 	"net/http"
 
 	"github.com/julienschmidt/httprouter"
@@ -77,7 +78,7 @@ func (s *Strategy) handleRegistrationError(w http.ResponseWriter, r *http.Reques
 }
 
 func (s *Strategy) decode(p *RegistrationFormPayload, r *http.Request) error {
-	raw, err := sjson.SetBytes(x.MustPkgerRead(pkger.Open("/selfservice/strategy/password/.schema/registration.schema.json")),
+	raw, err := sjson.SetBytes(pkgerx.MustRead(pkger.Open("/selfservice/strategy/password/.schema/registration.schema.json")),
 		"properties.traits.$ref", s.c.DefaultIdentityTraitsSchemaURL().String()+"#/properties/traits")
 	if err != nil {
 		return errors.WithStack(err)
diff --git a/selfservice/strategy/password/settings.go b/selfservice/strategy/password/settings.go
index b9a260975..3af61a476 100644
--- a/selfservice/strategy/password/settings.go
+++ b/selfservice/strategy/password/settings.go
@@ -2,6 +2,7 @@ package password
 
 import (
 	"encoding/json"
+	"github.com/ory/x/pkgerx"
 	"net/http"
 	"net/url"
 	"time"
@@ -139,7 +140,7 @@ func (s *Strategy) submitSettingsFlow(w http.ResponseWriter, r *http.Request, ps
 }
 
 func (s *Strategy) decodeSettingsFlow(r *http.Request, dest interface{}) error {
-	compiler, err := decoderx.HTTPRawJSONSchemaCompiler(x.MustPkgerRead(pkger.Open("/selfservice/strategy/password/.schema/settings.schema.json")))
+	compiler, err := decoderx.HTTPRawJSONSchemaCompiler(pkgerx.MustRead(pkger.Open("/selfservice/strategy/password/.schema/settings.schema.json")))
 	if err != nil {
 		return errors.WithStack(err)
 	}
diff --git a/selfservice/strategy/profile/strategy.go b/selfservice/strategy/profile/strategy.go
index fa4822e77..341084696 100644
--- a/selfservice/strategy/profile/strategy.go
+++ b/selfservice/strategy/profile/strategy.go
@@ -3,6 +3,7 @@ package profile
 import (
 	"context"
 	"encoding/json"
+	"github.com/ory/x/pkgerx"
 	"net/http"
 	"net/url"
 
@@ -332,7 +333,7 @@ func (s *Strategy) newSettingsProfileDecoder(i *identity.Identity) (decoderx.HTT
 	if err != nil {
 		return nil, err
 	}
-	raw, err := sjson.SetBytes(x.MustPkgerRead(pkger.Open(
+	raw, err := sjson.SetBytes(pkgerx.MustRead(pkger.Open(
 		"/selfservice/strategy/password/.schema/settings.schema.json")),
 		"properties.traits.$ref", ss.URL.String()+"#/properties/traits")
 	if err != nil {
diff --git a/x/config.go b/x/config.go
index 55d67c468..3a425c8a1 100644
--- a/x/config.go
+++ b/x/config.go
@@ -2,13 +2,14 @@ package x
 
 import (
 	"github.com/markbates/pkger"
+	"github.com/ory/x/pkgerx"
 
 	"github.com/ory/x/logrusx"
 	"github.com/ory/x/viperx"
 )
 
 func WatchAndValidateViper(log *logrusx.Logger) {
-	schema := MustPkgerRead(pkger.Open("/.schema/config.schema.json"))
+	schema := pkgerx.MustRead(pkger.Open("/.schema/config.schema.json"))
 	viperx.WatchAndValidateViper(log, schema,
 		"ORY Kratos", []string{"serve", "profiling", "log"}, "")
 }
diff --git a/x/nosurf.go b/x/nosurf.go
index 0e7564cba..1fb4f8120 100644
--- a/x/nosurf.go
+++ b/x/nosurf.go
@@ -96,6 +96,8 @@ func NewCSRFHandler(
 		Domain:   domain,
 		HttpOnly: true,
 		Secure:   secure,
+		// SameSiteNoneMode is set because
+		SameSite: http.SameSiteNoneMode,
 	})
 	n.SetFailureHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		logger.
diff --git a/x/pkger.go b/x/pkger.go
deleted file mode 100644
index f55ca781e..000000000
--- a/x/pkger.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package x
-
-import (
-	"io/ioutil"
-
-	"github.com/markbates/pkger/pkging"
-)
-
-func MustPkgerRead(f pkging.File, err error) []byte {
-	if err != nil {
-		panic(err)
-	}
-	defer f.Close()
-	return MustReadAll(f)
-}
-
-func PkgerRead(f pkging.File, err error) ([]byte, error) {
-	if err != nil {
-		return nil, err
-	}
-	defer f.Close()
-	return ioutil.ReadAll(f)
-}


Test patch:
diff --git a/continuity/manager_test.go b/continuity/manager_test.go
index 1751552ae..966282ec2 100644
--- a/continuity/manager_test.go
+++ b/continuity/manager_test.go
@@ -5,6 +5,7 @@ import (
 	"context"
 	"encoding/json"
 	"fmt"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/http/httptest"
 	"testing"
@@ -127,7 +128,7 @@ func TestManager(t *testing.T) {
 						require.NoError(t, err)
 						t.Cleanup(func() { require.NoError(t, res.Body.Close()) })
 
-						body := x.MustReadAll(res.Body)
+						body := ioutilx.MustReadAll(res.Body)
 						require.Equal(t, http.StatusBadRequest, res.StatusCode)
 						assert.Contains(t, gjson.GetBytes(body, "error.reason").String(), "resumable session")
 					})
@@ -143,7 +144,7 @@ func TestManager(t *testing.T) {
 						require.NoError(t, err)
 						t.Cleanup(func() { require.NoError(t, res.Body.Close()) })
 
-						body := x.MustReadAll(res.Body)
+						body := ioutilx.MustReadAll(res.Body)
 						if tc.expectedErr != nil {
 							require.Equal(t, http.StatusGone, res.StatusCode, "%s", body)
 							return
@@ -171,7 +172,7 @@ func TestManager(t *testing.T) {
 						res, err = cl.Do(x.NewTestHTTPRequest(t, "GET", href, nil))
 						require.NoError(t, err)
 						require.Equal(t, http.StatusBadRequest, res.StatusCode)
-						body := x.MustReadAll(res.Body)
+						body := ioutilx.MustReadAll(res.Body)
 						t.Cleanup(func() { require.NoError(t, res.Body.Close()) })
 						assert.Contains(t, gjson.GetBytes(body, "error.reason").String(), "resumable session")
 					})
@@ -186,7 +187,7 @@ func TestManager(t *testing.T) {
 						var b bytes.Buffer
 						require.NoError(t, json.NewEncoder(&b).Encode(tc.expected))
 
-						body := x.MustReadAll(res.Body)
+						body := ioutilx.MustReadAll(res.Body)
 						assert.JSONEq(t, b.String(), gjson.GetBytes(body, "payload").Raw, "%s", body)
 						assert.Contains(t, href, gjson.GetBytes(body, "name").String(), "%s", body)
 					})
@@ -208,7 +209,7 @@ func TestManager(t *testing.T) {
 						t.Cleanup(func() { require.NoError(t, res.Body.Close()) })
 
 						require.Equal(t, http.StatusBadRequest, res.StatusCode)
-						body := x.MustReadAll(res.Body)
+						body := ioutilx.MustReadAll(res.Body)
 						assert.Contains(t, gjson.GetBytes(body, "error.reason").String(), "resumable session")
 					})
 				})
diff --git a/internal/testhelpers/selfservice_login.go b/internal/testhelpers/selfservice_login.go
index 5114ce0f3..5b783e624 100644
--- a/internal/testhelpers/selfservice_login.go
+++ b/internal/testhelpers/selfservice_login.go
@@ -2,6 +2,7 @@ package testhelpers
 
 import (
 	"bytes"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/http/httptest"
 	"net/url"
@@ -97,7 +98,7 @@ func LoginMakeRequest(
 	require.NoError(t, err)
 	defer res.Body.Close()
 
-	return string(x.MustReadAll(res.Body)), res
+	return string(ioutilx.MustReadAll(res.Body)), res
 }
 
 // SubmitLoginForm initiates a login flow (for Browser and API!), fills out the form and modifies
diff --git a/internal/testhelpers/selfservice_recovery.go b/internal/testhelpers/selfservice_recovery.go
index debc2468e..b2ea6dbbd 100644
--- a/internal/testhelpers/selfservice_recovery.go
+++ b/internal/testhelpers/selfservice_recovery.go
@@ -4,6 +4,7 @@ package testhelpers
 import (
 	"bytes"
 	"encoding/json"
+	"github.com/ory/x/ioutilx"
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
@@ -129,7 +130,7 @@ func VerificationMakeRequest(
 	require.NoError(t, err)
 	defer res.Body.Close()
 
-	return string(x.MustReadAll(res.Body)), res
+	return string(ioutilx.MustReadAll(res.Body)), res
 }
 
 // SubmitVerificationForm initiates a registration flow (for Browser and API!), fills out the form and modifies
diff --git a/internal/testhelpers/selfservice_registration.go b/internal/testhelpers/selfservice_registration.go
index 95fe2294c..4b8a4366f 100644
--- a/internal/testhelpers/selfservice_registration.go
+++ b/internal/testhelpers/selfservice_registration.go
@@ -2,6 +2,7 @@ package testhelpers
 
 import (
 	"bytes"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/http/httptest"
 	"net/url"
@@ -77,7 +78,7 @@ func RegistrationMakeRequest(
 	require.NoError(t, err)
 	defer res.Body.Close()
 
-	return string(x.MustReadAll(res.Body)), res
+	return string(ioutilx.MustReadAll(res.Body)), res
 }
 
 // SubmitRegistrationForm (for Browser and API!), fills out the form and modifies
diff --git a/internal/testhelpers/selfservice_settings.go b/internal/testhelpers/selfservice_settings.go
index c28c29467..1941c20e0 100644
--- a/internal/testhelpers/selfservice_settings.go
+++ b/internal/testhelpers/selfservice_settings.go
@@ -4,6 +4,7 @@ package testhelpers
 import (
 	"bytes"
 	"context"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/url"
 	"strings"
@@ -238,7 +239,7 @@ func SettingsMakeRequest(
 	require.NoError(t, err)
 	defer res.Body.Close()
 
-	return string(x.MustReadAll(res.Body)), res
+	return string(ioutilx.MustReadAll(res.Body)), res
 }
 
 // SubmitSettingsForm initiates a settings flow (for Browser and API!), fills out the form and modifies
diff --git a/internal/testhelpers/selfservice_verification.go b/internal/testhelpers/selfservice_verification.go
index e009d44e1..e6eda4faa 100644
--- a/internal/testhelpers/selfservice_verification.go
+++ b/internal/testhelpers/selfservice_verification.go
@@ -4,6 +4,7 @@ package testhelpers
 import (
 	"bytes"
 	"encoding/json"
+	"github.com/ory/x/ioutilx"
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
@@ -129,7 +130,7 @@ func RecoveryMakeRequest(
 	require.NoError(t, err)
 	defer res.Body.Close()
 
-	return string(x.MustReadAll(res.Body)), res
+	return string(ioutilx.MustReadAll(res.Body)), res
 }
 
 // SubmitRecoveryForm initiates a registration flow (for Browser and API!), fills out the form and modifies
diff --git a/selfservice/flow/settings/handler_test.go b/selfservice/flow/settings/handler_test.go
index f010de260..eec91dbb5 100644
--- a/selfservice/flow/settings/handler_test.go
+++ b/selfservice/flow/settings/handler_test.go
@@ -2,6 +2,7 @@ package settings_test
 
 import (
 	"context"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/url"
 	"testing"
@@ -113,7 +114,7 @@ func TestHandler(t *testing.T) {
 				defer res.Body.Close()
 				t.Logf("%+v", user1.Jar)
 				assert.Len(t, res.Header.Get("Set-Cookie"), 0)
-				body := x.MustReadAll(res.Body)
+				body := ioutilx.MustReadAll(res.Body)
 				id := gjson.GetBytes(body, "id")
 				require.NotEmpty(t, id)
 
@@ -121,7 +122,7 @@ func TestHandler(t *testing.T) {
 				require.NoError(t, err)
 				defer res.Body.Close()
 				require.EqualValues(t, res.StatusCode, http.StatusForbidden)
-				body = x.MustReadAll(res.Body)
+				body = ioutilx.MustReadAll(res.Body)
 				assert.Contains(t, gjson.GetBytes(body, "error.reason").String(), "Access privileges are missing", "%s", body)
 			})
 
@@ -146,7 +147,7 @@ func TestHandler(t *testing.T) {
 			res, err := primaryUser.PostForm(pointerx.StringR(f.Action), url.Values{"foo": {"bar"}})
 			require.NoError(t, err)
 			defer res.Body.Close()
-			body := x.MustReadAll(res.Body)
+			body := ioutilx.MustReadAll(res.Body)
 			assert.EqualValues(t, 200, res.StatusCode, "should return a 400 error because CSRF token is not set: %s", body)
 			assert.Contains(t, string(body), "A request failed due to a missing or invalid csrf_token value.")
 		})
diff --git a/selfservice/strategy/link/strategy_recovery_test.go b/selfservice/strategy/link/strategy_recovery_test.go
index f7dff29fd..5fbb89318 100644
--- a/selfservice/strategy/link/strategy_recovery_test.go
+++ b/selfservice/strategy/link/strategy_recovery_test.go
@@ -3,6 +3,7 @@ package link_test
 import (
 	"context"
 	"encoding/json"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/url"
 	"testing"
@@ -251,7 +252,7 @@ func TestRecovery(t *testing.T) {
 			assert.Equal(t, http.StatusOK, res.StatusCode)
 			assert.Contains(t, res.Request.URL.String(), conf.SelfServiceFlowSettingsUI().String())
 
-			body := x.MustReadAll(res.Body)
+			body := ioutilx.MustReadAll(res.Body)
 			assert.Equal(t, text.NewRecoverySuccessful(time.Now().Add(time.Hour)).Text,
 				gjson.GetBytes(body, "messages.0.text").String())
 		}
diff --git a/selfservice/strategy/link/strategy_verification_test.go b/selfservice/strategy/link/strategy_verification_test.go
index 9fbaec1c4..802717c0e 100644
--- a/selfservice/strategy/link/strategy_verification_test.go
+++ b/selfservice/strategy/link/strategy_verification_test.go
@@ -3,6 +3,7 @@ package link_test
 import (
 	"context"
 	"encoding/json"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/url"
 	"testing"
@@ -224,7 +225,7 @@ func TestVerification(t *testing.T) {
 
 			assert.Equal(t, http.StatusOK, res.StatusCode)
 			assert.Contains(t, res.Request.URL.String(), conf.SelfServiceFlowVerificationUI().String())
-			body := string(x.MustReadAll(res.Body))
+			body := string(ioutilx.MustReadAll(res.Body))
 			assert.EqualValues(t, "passed_challenge", gjson.Get(body, "state").String())
 
 			id, err := reg.PrivilegedIdentityPool().GetIdentityConfidential(context.Background(), identityToVerify.ID)
diff --git a/selfservice/strategy/oidc/strategy_helper_test.go b/selfservice/strategy/oidc/strategy_helper_test.go
index 2897c7abc..c01f1f1de 100644
--- a/selfservice/strategy/oidc/strategy_helper_test.go
+++ b/selfservice/strategy/oidc/strategy_helper_test.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"encoding/json"
 	"fmt"
+	"github.com/ory/x/ioutilx"
 	"io"
 	"net/http"
 	"net/http/cookiejar"
@@ -90,7 +91,7 @@ func newHydraIntegration(t *testing.T, remote *string, subject *string, scope *[
 		require.NoError(t, err)
 		defer res.Body.Close()
 
-		body := x.MustReadAll(res.Body)
+		body := ioutilx.MustReadAll(res.Body)
 		require.Equal(t, http.StatusOK, res.StatusCode, "%s", body)
 
 		var response struct {
diff --git a/selfservice/strategy/password/login_test.go b/selfservice/strategy/password/login_test.go
index c19c8845e..cd7beba55 100644
--- a/selfservice/strategy/password/login_test.go
+++ b/selfservice/strategy/password/login_test.go
@@ -5,6 +5,7 @@ import (
 	"context"
 	"encoding/json"
 	"fmt"
+	"github.com/ory/x/ioutilx"
 	"io/ioutil"
 	"net/http"
 	"net/url"
@@ -211,7 +212,7 @@ func TestCompleteLogin(t *testing.T) {
 					require.NoError(t, err)
 					defer res.Body.Close()
 
-					actual := string(x.MustReadAll(res.Body))
+					actual := string(ioutilx.MustReadAll(res.Body))
 					assert.EqualValues(t, http.StatusBadRequest, res.StatusCode)
 					assert.Contains(t, actual, tc.exp)
 				})
@@ -423,7 +424,7 @@ func TestCompleteLogin(t *testing.T) {
 					res, err := c.Do(testhelpers.NewHTTPGetJSONRequest(t, publicTS.URL+login.RouteInitAPIFlow))
 					require.NoError(t, err)
 					defer res.Body.Close()
-					body := x.MustReadAll(res.Body)
+					body := ioutilx.MustReadAll(res.Body)
 
 					require.EqualValues(t, http.StatusBadRequest, res.StatusCode)
 					assertx.EqualAsJSON(t, login.ErrAlreadyLoggedIn, json.RawMessage(gjson.GetBytes(body, "error").Raw), "%s", body)
@@ -433,7 +434,7 @@ func TestCompleteLogin(t *testing.T) {
 					res, err := c.Do(testhelpers.NewHTTPGetJSONRequest(t, publicTS.URL+login.RouteInitAPIFlow+"?refresh=true"))
 					require.NoError(t, err)
 					defer res.Body.Close()
-					body := x.MustReadAll(res.Body)
+					body := ioutilx.MustReadAll(res.Body)
 
 					assert.True(t, gjson.GetBytes(body, "forced").Bool())
 					assert.Equal(t, identifier, gjson.GetBytes(body, "methods.password.config.fields.#(name==identifier).value").String(), "%s", body)
diff --git a/selfservice/strategy/password/registration_test.go b/selfservice/strategy/password/registration_test.go
index 123d6ba58..390877c48 100644
--- a/selfservice/strategy/password/registration_test.go
+++ b/selfservice/strategy/password/registration_test.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"encoding/json"
 	"fmt"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/url"
 	"strings"
@@ -101,7 +102,7 @@ func TestRegistration(t *testing.T) {
 				require.NoError(t, err)
 				assert.Len(t, res.Cookies(), 0)
 				defer res.Body.Close()
-				assertx.EqualAsJSON(t, registration.ErrAlreadyLoggedIn, json.RawMessage(gjson.GetBytes(x.MustReadAll(res.Body), "error").Raw))
+				assertx.EqualAsJSON(t, registration.ErrAlreadyLoggedIn, json.RawMessage(gjson.GetBytes(ioutilx.MustReadAll(res.Body), "error").Raw))
 			})
 		})
 
@@ -291,7 +292,7 @@ func TestRegistration(t *testing.T) {
 						require.NoError(t, err)
 						defer res.Body.Close()
 
-						actual := string(x.MustReadAll(res.Body))
+						actual := string(ioutilx.MustReadAll(res.Body))
 						assert.EqualValues(t, http.StatusBadRequest, res.StatusCode)
 						assert.Contains(t, actual, tc.exp)
 					})
diff --git a/selfservice/strategy/password/settings_test.go b/selfservice/strategy/password/settings_test.go
index 6972e63b5..682c42573 100644
--- a/selfservice/strategy/password/settings_test.go
+++ b/selfservice/strategy/password/settings_test.go
@@ -5,6 +5,7 @@ import (
 	"context"
 	"encoding/json"
 	"fmt"
+	"github.com/ory/x/ioutilx"
 	"net/http"
 	"net/url"
 	"strings"
@@ -260,7 +261,7 @@ func TestSettings(t *testing.T) {
 				require.NoError(t, err)
 				defer res.Body.Close()
 
-				actual := string(x.MustReadAll(res.Body))
+				actual := string(ioutilx.MustReadAll(res.Body))
 				assert.EqualValues(t, http.StatusBadRequest, res.StatusCode)
 				assert.Contains(t, actual, tc.exp)
 			})
diff --git a/selfservice/strategy/profile/strategy_test.go b/selfservice/strategy/profile/strategy_test.go
index fe3564a8e..80e484008 100644
--- a/selfservice/strategy/profile/strategy_test.go
+++ b/selfservice/strategy/profile/strategy_test.go
@@ -5,6 +5,7 @@ import (
 	"context"
 	"encoding/json"
 	"fmt"
+	"github.com/ory/x/ioutilx"
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
@@ -149,7 +150,7 @@ func TestStrategyTraits(t *testing.T) {
 				require.NoError(t, err)
 				defer res.Body.Close()
 
-				actual := string(x.MustReadAll(res.Body))
+				actual := string(ioutilx.MustReadAll(res.Body))
 				assert.EqualValues(t, http.StatusBadRequest, res.StatusCode)
 				assert.Contains(t, actual, tc.exp)
 			})
diff --git a/test/e2e/cypress/support/commands.js b/test/e2e/cypress/support/commands.js
index 057a71331..411a45e8e 100644
--- a/test/e2e/cypress/support/commands.js
+++ b/test/e2e/cypress/support/commands.js
@@ -29,7 +29,8 @@ import {
   gen,
   KRATOS_ADMIN,
   KRATOS_PUBLIC,
-  MAIL_API, MOBILE_URL,
+  MAIL_API,
+  MOBILE_URL,
   parseHtml,
   pollInterval,
   privilegedLifespan,