@ -579,7 +579,7 @@ make_config! {
authenticator_disable_time_drift : bool , true , def , false ;
authenticator_disable_time_drift : bool , true , def , false ;
/// Customize the enabled feature flags on the clients |> This is a comma separated list of feature flags to enable.
/// Customize the enabled feature flags on the clients |> This is a comma separated list of feature flags to enable.
experimental_client_feature_flags : String , false , def , "fido2-vault-credentials" . to_string ( ) ;
experimental_client_feature_flags : String , false , def , String ::new ( ) ;
/// Require new device emails |> When a user logs in an email is required to be sent.
/// Require new device emails |> When a user logs in an email is required to be sent.
/// If sending the email fails the login attempt will fail.
/// If sending the email fails the login attempt will fail.
@ -834,20 +834,30 @@ fn validate_config(cfg: &ConfigItems) -> Result<(), Error> {
}
}
// TODO: deal with deprecated flags so they can be removed from this list, cf. #4263
// TODO: deal with deprecated flags so they can be removed from this list, cf. #4263
// Server (v2025.4.2): https://github.com/bitwarden/server/blob/9ad96375153113abff36d28a3465f1c51ea604a0/src/Core/Constants.cs#L102
// Client (v2025.4.0): https://github.com/bitwarden/clients/blob/c86c73563140412ca8359cad0fedc6f74b29db84/libs/common/src/enums/feature-flag.enum.ts#L10
// Android (v2025.2.0): https://github.com/bitwarden/android/blob/8cd289cc89f729062f094d47b92c98b09c605e71/app/src/main/java/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt#L27
const KNOWN_FLAGS : & [ & str ] = & [
const KNOWN_FLAGS : & [ & str ] = & [
// Start Deprecated
"autofill-overlay" ,
"autofill-overlay" ,
"autofill-v2" ,
"autofill-v2" ,
"browser-fileless-import" ,
"browser-fileless-import" ,
"extension-refresh" ,
"extension-refresh" ,
"fido2-vault-credentials" ,
"fido2-vault-credentials" ,
// End Deprecated
// Autofill Team
"inline-menu-positioning-improvements" ,
"inline-menu-positioning-improvements" ,
"ssh-key-vault-item" ,
"inline-menu-totp " ,
"ssh-agent" ,
"ssh-agent" ,
// Key Management Team
"ssh-key-vault-item" ,
// Tools
"export-attachments" ,
// Mobile Team
"anon-addy-self-host-alias" ,
"anon-addy-self-host-alias" ,
"simple-login-self-host-alias" ,
"simple-login-self-host-alias" ,
"mutual-tls" ,
"mutual-tls" ,
"export-attachments" ,
"export-attachments" ,
"inline-menu-totp" ,
] ;
] ;
let configured_flags = parse_experimental_client_feature_flags ( & cfg . experimental_client_feature_flags ) ;
let configured_flags = parse_experimental_client_feature_flags ( & cfg . experimental_client_feature_flags ) ;
let invalid_flags : Vec < _ > = configured_flags . keys ( ) . filter ( | flag | ! KNOWN_FLAGS . contains ( & flag . as_str ( ) ) ) . collect ( ) ;
let invalid_flags : Vec < _ > = configured_flags . keys ( ) . filter ( | flag | ! KNOWN_FLAGS . contains ( & flag . as_str ( ) ) ) . collect ( ) ;