Release notes¶
All notable changes to this project will be documented in there.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[unreleased]¶
Added¶
OIDC RP-Initiated Logout support. #157
HTMX page loading indicator displayed during in-flight requests.
[0.2.7] - 2026-04-14¶
Fixed¶
LDAP default timeout. A default timeout of 0 would fail if server don’t instantly respond.
[0.2.6] - 2026-04-14¶
Fixed¶
OIDC
pictureand SCIMphotosclaims now return absolute URLs.
[0.2.5] - 2026-04-13¶
Added¶
SQL database configuration parameters.
Pooled LDAP connection support.
Backend.count()method for efficient entry counting.
Fixed¶
SCIM
totalResultsnow returns the total number of matching entries instead of the page size.Logo embedded in emails is now read from disk for application-local URLs instead of being fetched through an HTTP loopback. Fixes a hang when sending mail with the default
EagerBrokeron a single-threaded server #340
[0.2.4] - 2026-04-08¶
Added¶
[0.2.3] - 2026-03-24¶
Fixed¶
SCIM server no longer crashes with a 500 error when querying or patching users that have a profile photo.
SCIM server no longer returns an
invalidSyntaxerror when a user has an emptyprofile_url.
[0.2.2] - 2025-03-20¶
Fixed¶
ui_locales_supportedin OIDC well-known now uses BCP 47 language tags (hyphens) instead of POSIX locale codes (underscores).
[0.2.1] - 2025-02-25¶
Fixed¶
Fix alg selection on JWT emission.
[0.2.0] - 2025-02-25¶
Added¶
Fixed¶
CSP violation caused by Fomantic-UI inline styles.
LDAP: OTP feature is now disabled when the OTP module is not loaded in OpenLDAP.
LDAP:
PostReadControlonly requests attributes that exist in the LDAP schema.Password reset no longer bypasses MFA.
Usernames don’t appear in the photos URLs.
Include missing Babel data in the pyinstaller binary. #318
ID token signing now selects a key compatible with the client’s
id_token_signed_response_alg.OIDC discovery signing algorithm claims are now dynamically computed from server keys. #323
Explicitly make RSA keys mandatory.
When the scope parameter is omitted from authorization requests, the client’s configured scope is now used as the default value.
Password field autofocus. #325
Broken photo upload. #327
Disable HTMX boosting for redirections after redirections. #334
Fix HTMX resetting inputs #335
[0.1.0] - 2025-11-13¶
Added¶
Multiple account sessions. #100
[0.0.89] - 2025-11-12¶
Added¶
Button to show and hide passwords. #160
Fixed¶
Fixed proxy header handling to correctly generate HTTPS URLs when behind reverse proxies.
[0.0.88] - 2025-11-06¶
Added¶
Restored the support for string
JWKSin configuration.
Fixed¶
Support OIDC
ui_localesparameter. #108
[0.0.87] - 2025-11-02¶
Warning
DYNAMIC_CLIENT_REGISTRATION_TOKENSremoved in favor of JWT tokens.MANAGE_GROUPSpermission is renamedMANAGE_ALL_GROUPS.CONFIGenvironment variable renamed toCANAILLE_CONFIG.ENV_FILEenvironment variable renamed toCANAILLE_ENV.
Added¶
Fixed¶
Password autofill.
Conditionally load CLI to avoid crash when optional dependencies are missing.
Changed¶
Remove
DYNAMIC_CLIENT_REGISTRATION_TOKENSin favor of JWT tokens. #272Rename
CONFIGtoCANAILLE_CONFIGandENV_FILEtoCANAILLE_ENVfor consistency.
Removed¶
Remove the web interface to see authorization codes.
[0.0.86] - 2025-09-30¶
Fixed¶
Hypercorn launch with proxy settings turned on.
[0.0.85] - 2025-09-25¶
Added¶
[0.0.84] - 2025-09-19¶
Fixed¶
The
max_ageparameter of session cookies is an int.
[0.0.83] - 2025-09-19¶
Warning
Manual migration required for LDAP backend: remove any existing oauthTrusted
attributes from client entries.
Please follow the Schema update section.
Added¶
OIDC originated connections display information about the client application on all the authentication pages. #271
Account selection screen on login page. Previously logged-in users are displayed as clickable cards with photos and names for quick re-authentication. #277
“Remember me” checkbox on login page. When checked (default), creates a 365-day session and adds user to login history. When unchecked, session expires on browser close and user is not saved to login history.
Changed¶
Replace client
trustedattribute with dynamicTRUSTED_DOMAINSconfiguration. Clients are now automatically trusted based on theirclient_uridomain matching patterns in theTRUSTED_DOMAINSsetting. #290
Fixed¶
The SCIM endpoint correctly manages patching user passwords.
Locale guessing prefer prefix matches. #128
Make the
getcommand flags accept negative boolean. #266The SQL backend can perform exact match searches on JSON list attributes. #278
Fix HTMX swapping for inline validation on email fields. #279
Fix Docker commands in the documentation. #283
Remove deprecated
X-XSS-Protectionheader example in web server configurations. #293
[0.0.82] - 2025-08-26¶
Fixed¶
Don’t display the welcome flash when redirected to a client application after login.
Sign OIDC
id_tokenaccording toid_token_signed_response_algclient metadata.
[0.0.81] - 2025-08-23¶
Fixed¶
JWK algorithm detection with OKP keys.
OIDC Client
acess_tokenandrefresh_tokenare unique in the SQL backend.The OIDC metadata indicate that some more algs, including EdDSA are supported.
Added¶
OIDC
iatclaims are now float, with milli/micro-second precision. #292LDAP dates are stored with milliseconds precision and timezones.
[0.0.80] - 2025-08-22¶
Fixed¶
Error during JWK generation.
[0.0.79] - 2025-08-22¶
Changed¶
Default JWK are OKP instead of RSA.
Fixed¶
SCIM server advertise that
externalIdfields are not supported.Fix a bug happening at OIDC logout when
post_logout_redirect_uriis empty.
Added¶
[0.0.78] - 2025-07-25¶
Fixed¶
Fix
fake_groupscall with no user.
[0.0.77] - 2025-06-20¶
Warning
This version comes with a configuration breaking change.
The authentication factors configuration part have been reworked:
CANAILLE.EMAIL_OTPandCANAILLE.SMS_OTPhave been removed.CANAILLE.AUTHENTICATION_FACTORShas been introduced as a replacement.
Changed¶
The configuration parameter
AUTHENTICATION_FACTORSis added. The configuration parametersEMAIL_OTPandSMS_OTPare removed. #279
[0.0.76] - 2025-06-06¶
Fixed¶
bs4 is not required for test mode.
[0.0.75] - 2025-06-06¶
Warning
This version comes with a configuration breaking change.
The OIDC configuration part have been reworked:
CANAILLE_OIDC.JWT.MAPPINGbecomesCANAILLE_OIDC.USERINFO_MAPPINGCANAILLE.JWTis removed. You can migrate your keys with this script:
import tomlkit
from joserfc import jwk
with open("canaille.toml") as fd:
config = tomlkit.load(fd)
key = jwk.RSAKey.import_key(config["CANAILLE_OIDC"]["JWT"]["PRIVATE_KEY"])
config["CANAILLE_OIDC"]["ACTIVE_JWKS"] = [key.as_dict()]
with open("canaille.toml", "w") as fd:
config = tomlkit.dump(config, fd)
Warning
This version comes with a schema breaking change. The LDAP schema has evolved. If you use the LDAP schema, please follow the Schema update section.
Changed¶
Added¶
Support for RFC9101 JWT-Secured Authorization Request (JAR) #254
Adds a docker image on hubdocker #262
Update the doc to use and update the docker image #260
Fixed¶
The email field was losing focus when updated with HTMX. #279
[0.0.74] - 2025-04-24¶
Added¶
Mock gettext when
flask-babeldependency is not installed.
[0.0.73] - 2025-04-23¶
Warning
This version comes with a schema breaking change. The LDAP schema has evolved. If you use the LDAP schema, please follow the Schema update section.
Added¶
Support for OIDC authorization endpoint
loginandconsentprompt parameters. #187
Fixed¶
[0.0.72] - 2025-04-07¶
Warning
This version comes with a schema breaking change. The LDAP schema has evolved. If you use the LDAP schema, please follow the Schema update section.
Added¶
updated_atclaim inid_tokenanduserinfoendpoint.Support for POST method in OIDC authorization endpoint. #263
Fixed¶
[0.0.71] - 2025-03-31¶
Fixed¶
Remove config dump in about page.
[0.0.70] - 2025-03-28¶
Added¶
Add a
FORCE_HTTPSconfiguration parameter to allow to disable https forced redirections.
[0.0.69] - 2025-03-28¶
Added¶
Configuration automatically discovers local SMTP server when available. #216
ENABLE_OIDCconfiguration parameter.Content Security Policy. #266
Fixed¶
[0.0.68] - 2025-03-18¶
Fixed¶
LDAP partial restore. #257
[0.0.67] - 2025-03-18¶
Warning
This version comes with a schema breaking change. The LDAP schema has evolved. If you use the LDAP schema, please follow the Schema update section.
Added¶
Full OIDC Dynamic Client Registration implementation. #231
[0.0.66] - 2025-03-18¶
Warning
This version comes with a CLI breaking change.
The delete command don’t take arguments anymore. canaille delete user XXX becomes canaille delete user --id XXX.
Added¶
The delete command can use filter parameters.
[0.0.65] - 2025-03-18¶
Important
This version comes with security fix. It is strongly advised to update to this version as soon as possible.
Added¶
Instructions in CONTRIBUTING.rst to update the docker image #59
Instructions in README.md to discover Canaille interface with a docker image #59
The cli dump command can dump only some given models.
Implement the
TRUSTED_HOSTSconfiguration parameter, to secure password reset e-mails.
Fixed¶
Prevent clients from registering with fragment components in their redirect uri #235
Ensure there is a redirect_uri in authorization requests from clients. #232
Display client TOS uri and policy uri in authorization page if set during client registration
User group membership is ordered with the SQL backend. #169
[0.0.64] - 2025-02-12¶
Warning
This version comes with a configuration breaking change.
The configuration parameter CANAILLE_LDAP.USER_FILTER is removed in favor of
LOGIN_ATTRIBUTES.
Added¶
Implement the
LOGIN_ATTRIBUTESconfiguration parameter, to tweak the login attributes. #196
Fixed¶
[0.0.63] - 2025-02-06¶
Added¶
[0.0.62] - 2025-02-05¶
Fixed¶
[0.0.61] - 2025-02-04¶
Added¶
Improve
canaille config checkoutput.
Fixed¶
Fix SQL
installcommand. #221
[0.0.60] - 2025-02-03¶
Added¶
Changed¶
Avoid displaying password strength progress bar in login form.
Mysql extra depends on
pymysqlinstead ofmysql-connector.SECRET_KEYis not mandatory anymore, but displays warnings when unset. #221Move the
canaille checkcommand undercanaille config.
Fixed¶
[0.0.59] - 2025-01-10¶
Fixed¶
Changed¶
Bump to HTMX 2.0.4
[0.0.58] - 2025-01-10¶
Added¶
--versionoption to the CLI. #209Password hashing scheme customization with the
PASSWORD_SCHEMESparameter. #175canaille dump command option to perform full database dumps.
Changed¶
CLI commands dump hashed passwords. #214
Fixed¶
A bug on updating user’s settings. #206
[0.0.57] - 2024-12-31¶
Added¶
Intruder lockout, controlled by the
ENABLE_INTRUDER_LOCKOUTconfiguration setting. #173Multi-factor authentication, controlled by the
OTP_METHOD,EMAIL_OTP,SMS_OTPconfiguration settings. #47Password compromission check, controlled by the
ENABLE_PASSWORD_COMPROMISSION_CHECKandPASSWORD_COMPROMISSION_CHECK_API_URLsettings. #179ADMIN_EMAILconfiguration setting.OIDC
client_credentialsflow implementation. #207Button in the client admin page to create client tokens.
Password expiry policy, controlled by the
PASSWORD_LIFETIMEconfiguration setting. #176
Changed¶
PostgreSQL and MySQL extras does not rely on libraries that need to be compiled.
.envfiles are not loaded by default. TheENV_FILEenv var must be passed so.envfiles are loaded.
[0.0.56] - 2024-11-07¶
Fixed¶
With LDAP backend, updating another user groups could result in a permission lost for the editor. #202
Added¶
MAX_PASSWORD_LENGTHandMIN_PASSWORD_LENGTHconfiguration options #174Password strength visual indicator. #174
Security events logs. #177
Support for Python 3.13. #186
Changed¶
Removed¶
End support for Python 3.9. #179
[0.0.55] - 2024-08-30¶
Changed¶
Use poetry-core build backend. #178
[0.0.54] - 2024-07-25¶
Added¶
Changed¶
Model identifier_attributes are fixed.
Bump to HTMX 1.9.12. #172
Fixed¶
Dark theme colors for better readability.
Crash for passwordless users at login when no SMTP server was configured.
[0.0.53] - 2024-04-22¶
Added¶
env_prefix create_app` variable can select the environment var prefix.
[0.0.52] - 2024-04-22¶
Added¶
env_file create_app variable can customize/disable the .env file.
Changed¶
Locked users cannot be impersonated anymore.
Minimum Python requirement is 3.9.
[0.0.51] - 2024-04-09¶
Changed¶
Display the menu bar on error pages.
[0.0.50] - 2024-04-09¶
Added¶
Sign in/out events are logged in. #177
Fixed¶
HTMX and JAVASCRIPT configuration settings.
Compatibility with old sessions IDs.
[0.0.49] - 2024-04-08¶
Fixed¶
LDAP user group removal.
Display an error message when trying to remove the last user from a group.
[0.0.48] - 2024-04-08¶
Fixed¶
LDAP
objectClassguessing exception.
[0.0.47] - 2024-04-08¶
Fixed¶
Lazy permission loading exception.
[0.0.46] - 2024-04-08¶
Fixed¶
Saving an object with the LDAP backend keeps the
objectClassun-managed by Canaille. #171
[0.0.45] - 2024-04-04¶
Changed¶
Internal indexation mechanism of
MemoryModel.
[0.0.44] - 2024-03-29¶
Fixed¶
Fix the default LDAP
USER_FILTERvalue.Fix the OIDC feature detection.
[0.0.43] - 2024-03-29¶
Warning
Configuration files must be updated.
Added¶
Changed¶
[0.0.42] - 2023-12-29¶
Fixed¶
Avoid to fail on imports if
cryptographyis missing.
[0.0.41] - 2023-12-25¶
Added¶
Fixed¶
Correctly set up
audienceduring OIDC dynamic registration.post_logout_redirect_uriswas ignored during OIDC dynamic registration.Group field error prevented the registration form validation.
[0.0.40] - 2023-12-22¶
Added¶
The
THEMEsetting can be a relative path.
[0.0.39] - 2023-12-15¶
Fixed¶
Crash when no ACL were defined.
OIDC Userinfo endpoint is also available in POST.
Fix redirection after password reset. #159
[0.0.38] - 2023-12-15¶
Changed¶
[0.0.37] - 2023-12-01¶
Fixed¶
[0.0.36] - 2023-12-01¶
Fixed¶
Avoid crashing when LDAP groups references unexisting users.
Password reset and initialization mails were only sent to the preferred user email address.
Password reset and initialization mails were not sent at all the user addresses if one email address could not be reached.
Password comparison was too permissive on login.
Encrypt passwords in the SQL backend.
[0.0.35] - 2023-11-25¶
Added¶
Changed¶
Fixed¶
Disable HTMX boosting during the OIDC dance. #160
[0.0.34] - 2023-10-02¶
Fixed¶
Canaille installations without account lockabilty could not delete users. #153
Added¶
[0.0.33] - 2023-08-26¶
Fixed¶
OIDC jwks endpoint do not return empty kid claim.
Added¶
Documentation details on the Canaille models.
[0.0.32] - 2023-08-17¶
Added¶
[0.0.31] - 2023-08-15¶
Added¶
Fixed¶
The check command uses the default configuration values.
Changed¶
[0.0.30] - 2023-07-06¶
Warning
Configuration files must be updated.
Check the new format with git diff 0.0.29 0.0.30 canaille/conf/config.sample.toml
Added¶
Configuration option to disable Javascript. #141
Changed¶
The configuration parameter
USER_FILTERis parsed with Jinja.Configuration use
PRIVATE_KEY_FILEinstead ofPRIVATE_KEYandPUBLIC_KEY_FILEinstead ofPUBLIC_KEY.
[0.0.29] - 2023-06-30¶
Fixed¶
Disabled HTMX boosting on OIDC forms to avoid errors.
[0.0.28] - 2023-06-30¶
Fixed¶
A template variable was misnamed.
[0.0.27] - 2023-06-29¶
Warning
Configuration files must be updated.
Check the new format with git diff 0.0.26 0.0.27 canaille/conf/config.sample.toml
Added¶
Changed¶
Bump to jquery 3.7.0. #138
Fixed¶
Removed¶
Stop support for Python 3.7. #131
[0.0.26] - 2023-06-03¶
Added¶
Fixed¶
Avoid setting
Nonein JWT claims when they have no value.Display password recovery button on OIDC login page. #129
[0.0.25] - 2023-05-05¶
Warning
- Configuration files must be updated.
Check the new format with
git diff 0.0.25 0.0.24 canaille/conf/config.sample.toml
Changed¶
Fixed¶
[0.0.24] - 2023-04-07¶
Fixed¶
Fixed avatar update. #122
[0.0.23] - 2023-04-05¶
Added¶
Changed¶
Fixed¶
CSRF protection on every forms. #119
[0.0.22] - 2023-03-13¶
Fixed¶
The Faker library is not imported anymore when the clean command is called.
[0.0.21] - 2023-03-12¶
Added¶
Display TOS and policy URI on the consent list page. #102
Revoked consents can be restored. #103
Trusted clients are displayed in the user consent list, and their consents can be revoked. #69 #103
A
populatecommand can be used to fill the database with random users generated with faker. #105SMTP SSL support. #108
Department number support. #129
Address edition support (but not in the OIDC claims yet). #112
Title edition support. #113
Fixed¶
Client deletion also deletes related
Consent,TokenandAuthorizationCodeobjects. #126 #98
Changed¶
Removed the DataTables Javascript library.
[0.0.20] - 2023-01-28¶
Added¶
Fixed¶
[0.0.19] - 2023-01-14¶
Fixed¶
Ensures the token expires_in claim and the access_token exp claim have the same value. #83
[0.0.18] - 2022-12-28¶
Fixed¶
OIDC end_session was not returning the
stateparameter in thepost_logout_redirect_uri. #82
[0.0.17] - 2022-12-26¶
Fixed¶
[0.0.16] - 2022-12-15¶
Fixed¶
Fixed LDAP operational attributes handling.
[0.0.15] - 2022-12-15¶
Added¶
[0.0.14] - 2022-11-29¶
Fixed¶
Fixed translation catalogs packaging.
[0.0.13] - 2022-11-21¶
Fixed¶
Fixed a bug on the contacts field in the admin client form following the LDAP schema update of 0.0.12.
Fixed a bug happening during RP initiated logout on clients without post_logout_redirect_uri defined.
Gitlab CI fix. #64
Fixed client_secret display on the client administration page. #65
Fixed non-square logo CSS. #67
Fixed schema path on installation. #68
Fixed RFC7591
software_statementclaim support. #70Fixed client preconsent disabling. #72
Added¶
Changed¶
Replaced the use of the deprecated FLASK_ENV environment variable by FLASK_DEBUG.
Dynamically generate the server metadata. Users won’t have to copy and manually edit
oauth-authorizationserver.jsonandopenid-configuration.json. #71The FROM_ADDR configuration option is not mandatory anymore. #73
The JWT.ISS configuration option is not mandatory anymore. #74
[0.0.12] - 2022-10-24¶
Added¶
[0.0.11] - 2022-08-11¶
Added¶
Default theme has a dark variant. #57
Fixed¶
Fixed missing
canaillebinary. #58
[0.0.10] - 2022-07-07¶
Fixed¶
[0.0.9] - 2022-06-05¶
Added¶
Changed¶
Fixed¶
[0.0.8] - 2022-03-15¶
Fixed¶
Fixed dependencies.
[0.0.7] - 2022-03-15¶
Fixed¶
Fixed spaces and escaped special char in LDAP
cn/dnattributes. #43
[0.0.6] - 2022-03-08¶
Changed¶
Access token are JWT. #38
Fixed¶
[0.0.5] - 2022-02-17¶
Changed¶
LDAP model objects have new identifiers. #37
Fixed¶
[0.0.4] - 2022-02-16¶
Added¶
Client pre-authorization. #11
LDAP permissions check with the check command. #12
Update consents when a scope required is larger than the scope of an already given consent. #13
Theme customization. #15
Logging configuration. #16
Installation command. #17
Invitation links. #18
Advanced permissions. #20
An option to not use OIDC. #23
Disable some features when no SMTP server is configured. #24
Login placeholder dynamically generated according to the configuration. #25
Added an option to tune object IDs. #26
Avatar support. #27
Dynamical and configurable JWT claims. #28
UI improvements. #29
Invitation links expiration. #30
Invitees can choose their IDs. #31
LDAP backend refactoring. #35
Fixed¶
[0.0.3] - 2021-10-13¶
Added¶
Fixed¶
[0.0.2] - 2021-01-06¶
Added¶
Login page is responsive. #1
Adapt mobile keyboards to login page fields. #2
Password recovery interface. #3
User profile interface. #4
Renamed the project Canaille. #5
Command to remove old tokens. #17
Use Flask SERVER_NAME configuration variable instead of URL. #24
Improved consents page. #27
Admin user page. #8
Project logo. #29
User account self-deletion can be enabled in the configuration with SELF_DELETION. #35
Admins can impersonate users. #39
Forgotten page UX improvement. #43
Admins can remove clients. #45
Option HIDE_INVALID_LOGIN that can be unactivated to let the user know if the login he attempt to sign in with exists or not. #48
Password initialization mail. #51
Fixed¶
Removed¶
‘My tokens’ page. #22
[0.0.1] - 2020-10-21¶
Added¶
Initial release.