NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #253 by repository stars
Last release 2 months ago
29 Jul 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 10 of 10 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
2823 releases · first in 2019
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Security Fixes : Fixed a security vulnerability where the code method did not respect the highest_available setting. Refer to the security advisory fo…
We are thrilled to announce the release of Ory Kratos v1.3.0! This release includes significant updates, enhancements, and fixes to improve your experience with Ory Kratos.
Enhance your sign-in experience with Identifier First Authentication. This feature allows users to first identify themselves (e.g., by providing their email or username) and then proceed with the chosen authentication method, whether it be OTP code, passkeys, passwords, or social login. By streamlining the sign-in process, users can select the authentication method that best suits their needs, reducing friction and enhancing security. Identifier First Authentication improves user flow and reduces the likelihood of errors, resulting in a more user-friendly and efficient login experience.
The UI for OpenID Connect (OIDC) account linking has been improved to provide better user guidance and error messages during the linking process. As a result, account linking error rates have dropped significantly, making it easier for users to link multiple identities (e.g., social login and email-based accounts) to the same profile. This improvement enhances user convenience, reduces support inquiries, and offers a seamless multi-account experience.
You can now use Salesforce as an identity provider, expanding the range of supported identity providers. This integration allows organizations already using Salesforce for identity management to leverage their existing infrastructure, simplifying user management and enhancing the authentication experience.
Social sign-in has been enhanced with better detection and handling of double-submit issues, especially for platforms like Facebook and Apple mobile login. These changes make the social login process more reliable, reducing errors and improving the user experience. Additionally, Ory Kratos now supports social providers in credential discovery, offering more flexibility during sign-up and sign-in flows.
One-Time Password (OTP) MFA has been improved with more robust handling of code-based authentication. The enhancements ensure a smoother flow when using OTP for multi-factor authentication (MFA), providing clearer guidance to users and improving fallback mechanisms. These updates help to prevent users from being locked out due to misconfigurations or errors during the MFA process, increasing security without compromising user convenience.
Deprecated via Parameter for SMS 2FA: The via parameter is now deprecated when performing SMS 2FA. If not included, users will see all their phone/email addresses to perform the flow. This parameter will be removed in a future version. Ensure your identity schema has the appropriate code configuration for passwordless or 2FA login.
Endpoint Change: The /admin/session/.../extend endpoint will now return 204 No Content for new Ory Network projects. Returning 200 with the session body will be deprecated in future versions.
SDK Enhancements: Added new methods and support for additional actions in the SDK, improving integration capabilities.
Password Migration Hook: Added a password migration hook to facilitate migrating passwords where the hash is unavailable, easing the transition to Ory Kratos.
Partially Failing Batch Inserts: When batch-inserting multiple identities, conflicts or validation errors of a subset of identities in the batch still allow the rest of the identities to be inserted. The returned JSON contains the error details that led to the failure.
Security Fixes: Fixed a security vulnerability where the code method did not respect the highest_availablesetting. Refer to the security advisory for more details.
Session Extension Issues: Fixed issues related to session extension to prevent long response times on /session/whoami when extending sessions simultaneously.
OIDC and Social Sign-In: Fixed UI and error handling for OpenID Connect and social sign-in flows, improving the overall experience.
Credential Identifier Handling: Corrected handling of code credential identifiers, ensuring proper detection of phone numbers and correct functioning of SMS/email MFA.
Concurrent Updates for Webhooks: Fixed concurrent map update issues for webhook headers, improving webhook reliability.
Passwordless & 2FA Login: Before upgrading, ensure your identity schema has the appropriate code configuration when using the code method for passwordless or 2FA login.
Code Method for 2FA: If you use the code method for 2FA or 1FA login but haven't configured the code identifier, set selfservice.methods.code.config.missing_credential_fallback_enabled to true to avoid user lockouts.
We hope you enjoy the new features and improvements in Ory Kratos v1.3.0. Please remember to leave a GitHub star and check out our other open-source projects. Your feedback is valuable to us, so join the Ory community and help us shape the future of identity management.
When using two-step registration, it was previously possible to send method=profile:back to get to the previous screen. This feature was not documented in the SDK API yet. Going forward, please instead use screen=previous.
Please note that the via parameter is deprecated when performing SMS 2FA. It will be removed in a future version. If the parameter is not included in the request, the user will see all their phone/email addresses from which to perform the flow.
Before upgrading, ensure that your identity schema has the appropriate code configuration when using the code method for passwordless or 2fa login.
If you are using the code method for 2FA login already, or you are using it for 1FA login but have not yet configured the code identifier, set selfservice.methods.code.config.missing_credential_fallback_enabled to true to prevent users from being locked out.
Please note that the via parameter is deprecated when performing SMS 2FA. It will be removed in a future version. If the parameter is not included in the request, the user will see all their phone/email addresses from which to perform the flow.
Before upgrading, ensure that your identity schema has the appropriate code configuration when using the code method for passwordless or 2fa login.
If you are using the code method for 2FA login already, or you are using it for 1FA login but have not yet configured the code identifier, set selfservice.methods.code.config.missing_credential_fallback_enabled to true to prevent users from being locked out.
Going forward, the /admin/session/.../extend endpoint will return 204 no content for new Ory Network projects. We will deprecate returning 200 + session body in the future.
Add continue with only for json browser requests (#4002) (e0a4010)
Add fallback to providerLabel (#3999) (d26f204):
This adds a fallback to the provider label when trying to register a duplicate identifier with an oidc.
Current error message:
Signing in will link your account to "test@test.com" at provider "". If you do not wish to link that account, please start a new login flow.
The label represents an optional label for the UI, but in my case it's always empty. I suggest we fallback to the provider when the label is not present. In case the label is present, the behaviour won't change.
Fallback to provider:
Signing in will link your account to "test@test.com" at provider "google". If you do not wish to link that account, please start a new login flow.
Add missing JS triggers (7597bc6)
Do not populate id_first first step for account linking flows (#4074) (6ab2637)
Emit SelfServiceMethodUsed in SettingsSucceeded event (#4056) (76af303)
Include duplicate credentials in account linking message (#4079) (122b63d)
Incorrect append of code credential identifier (#4102) (3215792), closes #4076
Move password migration hook config (#3986) (b5a66e0):
This moves the password migration hook to
selfservice:
methods:
password:
config:
migrate_hook:
...Normalize code credentials and deprecate via parameter (c417b4a):
Before this, code credentials for passwordless and mfa login were incorrectly stored and normalized. This could cause issues where the system would not detect the user's phone number, and where SMS/email MFA would not properly work with the highest_available setting.
Passthrough correct organization ID to CompletedLoginForWithProvider (#4124) (ad1acd5)
Password migration hook config (#4001) (50deedf):
This fixes the config loading for the password migration hook.
Replace submit with continue button for recovery and verification and add maxlength (04850f4)
Return credentials in FindByCredentialsIdentifier (#4068) (f949173):
Instead of re-fetching the credentials later (expensive), we load them only once.
Return error if invalid UUID is supplied to ids filter (#4116) (98140f2)
security: Code credential does not respect highest_available setting (b0111d4):
This patch fixes a security vulnerability which prevents the code method to properly report it's credentials count to the highest_available mechanism.
For more details on this issue please refer to the security advisory.
Timestamp precision on mysql (9a1f171)
Transient_payload is lost when verification flow started as part of registration (#3983) (192f10f)
Trigger oidc web hook on sign in after registration (#4027) (ad5fb09)
Validate page tokens for better error codes (#4021) (32737dc)
Add additional messages (735fc5b)
Add browser return_to continue_with action (7b636d8)
Add if method to sdk (612e3bf)
Add redirect to continue_with for SPA flows (99c945c):
This patch adds the new continue_with action redirect_browser_to, which contains the redirect URL the app should redirect to. It is only supported for SPA (not server-side browser apps, not native apps) flows at this point in time.
Add social providers to credential discovery as well (5f4a2bf)
Add support for Salesforce as identity provider (#4003) (3bf1ca9)
Allow deletion of an individual OIDC credential (#3968) (a43cef2):
This extends the existing DELETE /admin/identities/{id}/credentials/{type} API to accept an ?identifier=foobar query parameter for {type}==oidc like such:
DELETE /admin/identities/{id}/credentials/oidc?identifier=github%3A012345
This will delete the GitHub OIDC credential with the identifier github:012345 (012345 is the subject as returned by GitHub).
To find out which OIDC credentials exist, call GET /admin/identities/{id}?include_credential=oidc beforehand.
This will allow you to delete individual OIDC credentials for users even if they have several set up.
Allow partially failing batch inserts (#4083) (4ba7033):
When batch-inserting multiple identities, conflicts or validation errors of a subset of identities in the batch still allow the rest of the identities to be inserted. The returned JSON contains the error details that lead to the failure.
Better detection if credentials exist on identifier first login (#3963) (42ade94)
Change method=profile:back to screen=previous (#4119) (2cd8483)
Client-side PKCE take 3 (#4078) (f7c1024):
This change introduces a new configuration for OIDC providers: pkce with values auto (default), never, force.
When auto is specified or the field is omitted, Kratos will perform autodiscovery and perform PKCE when the server advertises support for it. This requires the issuer_url to be set for the provider.
never completely disables PKCE support. This is only theoretically useful: when a provider advertises PKCE support but doesn't actually implement it.
force always sends a PKCE challenge in the initial redirect URL, regardless of what the provider advertises. This setting is useful when the provider offers PKCE but doesn't advertise it in his ./well-known/openid-configuration.
Important: When setting pkce: force, you must whitelist a different return URL for your OAuth2 client in the provider's configuration. Instead of /self-service/methods/oidc/callback/, you must use /self-service/methods/oidc/callback (note missing last path segment). This is to enable the use of the same OAuth client ID+secret when configuring several Kratos OIDC providers, without having to whitelist individual redirect_uris for each Kratos provider config.
chore: regenerate SDK, bump DB versions, cleanup tool install
chore: get final organization ID from provider config during registration and login
chore: fixup OIDC function signatures and improve tests
Identifier first auth (1bdc19a)
Identifier first login for all first factor login methods (638b274)
Improve session extend performance (#3948) (4e3fad4):
This patch improves the performance for extending session lifespans. Lifespan extension is tricky as it is often part of the middleware of Ory Kratos consumers. As such, it is prone to transaction contention when we read and write to the same session row at the same time (and potentially multiple times).
To address this, we:
Be aware that all reads on the session table will have to wait for the transaction to commit before they return a value. This may cause long(er) response times on /session/whoami for sessions that are being extended at the same time.
Password migration hook (#3978) (c9d5573):
This adds a password migration hook to easily migrate passwords for which we do not have the hash.
For each user that needs to be migrated to Ory Network, a new identity is created with a credential of type password with a config of {"use_password_migration_hook": true} .
When a user logs in, the credential identifier and password will be sent to the password_migration web hook if all of these are true:
The user’s identity’s password credential is {"use_password_migration_hook": true}
The password_migration hook is configured
After calling the password_migration hook, the HTTP status code will be inspected:
On 200, we parse the response as JSON and look for {"status": "password_match"}. The password credential config will be replaced with the hash of the actual password.
On any other status code, we assume that the password is not valid.
sdk: Add missing profile discriminator to update registration (0150795)
sdk: Avoid eval with javascript triggers (dd6e53d):
Using OnLoadTrigger and OnClickTrigger one can now map the trigger to the corresponding JavaScript function.
For example, trigger {"on_click_trigger":"oryWebAuthnRegistration"} should be translated to window.oryWebAuthnRegistration():
if (attrs.onClickTrigger) {
window[attrs.onClickTrigger]()
}
Separate 2fa refresh from 1st factor refresh (#3961) (89355d8)
Set maxlength for totp input (51042d9)
Merge commit from fork (123e807):
highest_available settingThis patch fixes a security vulnerability which prevents the code method to properly report it's credentials count to the highest_available mechanism.
For more details on this issue please refer to the security advisory.
Before this, code credentials for passwordless and mfa login were incorrectly stored and normalized. This could cause issues where the system would not detect the user's phone number, and where SMS/email MFA would not properly work with the highest_available setting.
Update .github/workflows/ci.yaml (2d60772)
method=profile:back to screen=previous (#4119)Note truncated.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This patch fixes a security vulnerability which prevents the code method to properly report it's credentials count to the highest_available mechanism.
autogen: pin v1.3.0-pre.0 release commit
Please note that the via parameter is deprecated when performing SMS 2FA. It
will be removed in a future version. If the parameter is not included in the
request, the user will see all their phone/email addresses from which to perform
the flow.
Before upgrading, ensure that your identity schema has the appropriate code configuration when using the code method for passwordless or 2fa login.
If you are using the code method for 2FA login already, or you are using it for
1FA login but have not yet configured the code identifier, set
selfservice.methods.code.config.missing_credential_fallback_enabled to true
to prevent users from being locked out.
Please note that the via parameter is deprecated when performing SMS 2FA. It
will be removed in a future version. If the parameter is not included in the
request, the user will see all their phone/email addresses from which to perform
the flow.
Before upgrading, ensure that your identity schema has the appropriate code configuration when using the code method for passwordless or 2fa login.
If you are using the code method for 2FA login already, or you are using it for
1FA login but have not yet configured the code identifier, set
selfservice.methods.code.config.missing_credential_fallback_enabled to true
to prevent users from being locked out.
Going forward, the /admin/session/.../extend endpoint will return 204 no
content for new Ory Network projects. We will deprecate returning 200 + session
body in the future.
Add continue with only for json browser requests (#4002) (e0a4010)
Add fallback to providerLabel (#3999) (d26f204):
This adds a fallback to the provider label when trying to register a duplicate identifier with an oidc.
Current error message:
Signing in will link your account to "test@test.com" at provider "". If you do not wish to link that account, please start a new login flow.
The label represents an optional label for the UI, but in my case it's always empty. I suggest we fallback to the provider when the label is not present. In case the label is present, the behaviour won't change.
Fallback to provider:
Signing in will link your account to "test@test.com" at provider "google". If you do not wish to link that account, please start a new login flow.
Add missing JS triggers (7597bc6)
Do not populate id_first first step for account linking flows
(#4074)
(6ab2637)
Emit SelfServiceMethodUsed in SettingsSucceeded event (#4056) (76af303)
Include duplicate credentials in account linking message (#4079) (122b63d)
Incorrect append of code credential identifier (#4102) (3215792), closes #4076
Move password migration hook config (#3986) (b5a66e0):
This moves the password migration hook to
selfservice:
methods:
password:
config:
migrate_hook: ...
Normalize code credentials and deprecate via parameter (c417b4a):
Before this, code credentials for passwordless and mfa login were incorrectly
stored and normalized. This could cause issues where the system would not
detect the user's phone number, and where SMS/email MFA would not properly
work with the highest_available setting.
Password migration hook config (#4001) (50deedf):
This fixes the config loading for the password migration hook.
Replace submit with continue button for recovery and verification and add maxlength (04850f4)
Return credentials in FindByCredentialsIdentifier (#4068) (f949173):
Instead of re-fetching the credentials later (expensive), we load them only once.
Return error if invalid UUID is supplied to ids filter (#4116) (98140f2)
security: Code credential does not respect highest_available setting
(b0111d4):
This patch fixes a security vulnerability which prevents the code method to
properly report it's credentials count to the highest_available mechanism.
For more details on this issue please refer to the security advisory.
Timestamp precision on mysql (9a1f171)
Transient_payload is lost when verification flow started as part of registration (#3983) (192f10f)
Trigger oidc web hook on sign in after registration (#4027) (ad5fb09)
Validate page tokens for better error codes (#4021) (32737dc)
Add additional messages (735fc5b)
Add browser return_to continue_with action (7b636d8)
Add if method to sdk (612e3bf)
Add redirect to continue_with for SPA flows (99c945c):
This patch adds the new continue_with action redirect_browser_to, which
contains the redirect URL the app should redirect to. It is only supported for
SPA (not server-side browser apps, not native apps) flows at this point in
time.
Add social providers to credential discovery as well (5f4a2bf)
Add support for Salesforce as identity provider (#4003) (3bf1ca9)
Allow deletion of an individual OIDC credential (#3968) (a43cef2):
This extends the existing DELETE /admin/identities/{id}/credentials/{type}
API to accept an ?identifier=foobar query parameter for {type}==oidc like
such:
DELETE /admin/identities/{id}/credentials/oidc?identifier=github%3A012345
This will delete the GitHub OIDC credential with the identifier
github:012345 (012345 is the subject as returned by GitHub).
To find out which OIDC credentials exist, call
GET /admin/identities/{id}?include_credential=oidc beforehand.
This will allow you to delete individual OIDC credentials for users even if they have several set up.
Allow partially failing batch inserts (#4083) (4ba7033):
When batch-inserting multiple identities, conflicts or validation errors of a subset of identities in the batch still allow the rest of the identities to be inserted. The returned JSON contains the error details that lead to the failure.
Better detection if credentials exist on identifier first login (#3963) (42ade94)
Client-side PKCE take 3 (#4078) (f7c1024):
This change introduces a new configuration for OIDC providers: pkce with values auto (default), never, force.
When auto is specified or the field is omitted, Kratos will perform autodiscovery and perform PKCE when the server advertises support for it. This requires the issuer_url to be set for the provider.
never completely disables PKCE support. This is only theoretically useful: when a provider advertises PKCE support but doesn't actually implement it.
force always sends a PKCE challenge in the initial redirect URL, regardless of what the provider advertises. This setting is useful when the provider offers PKCE but doesn't advertise it in his ./well-known/openid-configuration.
Important: When setting pkce: force, you must whitelist a different return URL for your OAuth2 client in the provider's configuration. Instead of <base-url>/self-service/methods/oidc/callback/<provider>, you must use <base-url>/self-service/methods/oidc/callback (note missing last path segment). This is to enable the use of the same OAuth client ID+secret when configuring several Kratos OIDC providers, without having to whitelist individual redirect_uris for each Kratos provider config.
chore: regenerate SDK, bump DB versions, cleanup tool install
chore: get final organization ID from provider config during registration and login
chore: fixup OIDC function signatures and improve tests
Identifier first auth (1bdc19a)
Identifier first login for all first factor login methods (638b274)
Improve session extend performance (#3948) (4e3fad4):
This patch improves the performance for extending session lifespans. Lifespan extension is tricky as it is often part of the middleware of Ory Kratos consumers. As such, it is prone to transaction contention when we read and write to the same session row at the same time (and potentially multiple times).
To address this, we:
Be aware that all reads on the session table will have to wait for the
transaction to commit before they return a value. This may cause long(er)
response times on /session/whoami for sessions that are being extended at
the same time.
Password migration hook (#3978) (c9d5573):
This adds a password migration hook to easily migrate passwords for which we do not have the hash.
For each user that needs to be migrated to Ory Network, a new identity is created with a credential of type password with a config of {"use_password_migration_hook": true} . When a user logs in, the credential identifier and password will be sent to the password_migration web hook if all of these are true: The user’s identity’s password credential is {"use_password_migration_hook": true} The password_migration hook is configured After calling the password_migration hook, the HTTP status code will be inspected: On 200, we parse the response as JSON and look for {"status": "password_match"}. The password credential config will be replaced with the hash of the actual password. On any other status code, we assume that the password is not valid.
sdk: Add missing profile discriminator to update registration (0150795)
sdk: Avoid eval with javascript triggers (dd6e53d):
Using OnLoadTrigger and OnClickTrigger one can now map the trigger to the
corresponding JavaScript function.
For example, trigger {"on_click_trigger":"oryWebAuthnRegistration"} should
be translated to window.oryWebAuthnRegistration():
if (attrs.onClickTrigger) {
window[attrs.onClickTrigger]()
}
Separate 2fa refresh from 1st factor refresh (#3961) (89355d8)
Set maxlength for totp input (51042d9)
Merge commit from fork (123e807):
highest_available settingThis patch fixes a security vulnerability which prevents the code method to
properly report it's credentials count to the highest_available mechanism.
For more details on this issue please refer to the security advisory.
Before this, code credentials for passwordless and mfa login were incorrectly
stored and normalized. This could cause issues where the system would not
detect the user's phone number, and where SMS/email MFA would not properly
work with the highest_available setting.
Update .github/workflows/ci.yaml (2d60772)
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →