A drop-in Reactive Web block that gives users live feedback on how strong their password is as they type — a colored segmented bar, a strength label (Weak → Very strong), and an optional criteria checklist. It raises an event so you can enable your Submit button only once the password is strong enough. Pure client-side: no database, no server calls, no dependencies.
Platform: OutSystems 11 (O11) · Type: Reactive Web · Curation target: Community
Password Strength Meter watches a password value and, in real time, shows how strong it is. It scores the password against five criteria — minimum length, a lowercase letter, an uppercase letter, a number, and a symbol — and reflects the result as a five-segment bar that fills and changes color from red to green, plus a text label and an optional checklist showing which criteria are met.
Beyond the visual, it tells your screen whether the password is acceptable via the OnScoreChanged event, so you can gate the Submit button and stop weak passwords from being submitted.
OnScoreChanged
.oap
PasswordValue
Password = PasswordValue
IsStrongEnough
CanSubmit
Input (password) → PasswordValue PasswordStrength Password = PasswordValue OnScoreChanged(Score, IsStrongEnough): CanSubmit = IsStrongEnough Submit button Enabled = CanSubmit
As the user types, the meter updates live and the button enables only when the password qualifies.
PasswordStrength
Password
MinLength
8
ShowChecklist
True
ShowLabel
Score
The password earns one point for each of these five criteria it satisfies:
The total (0–5) maps to the label and bar:
IsStrongEnough is True when the password meets the minimum length and scores at least 4. This threshold is intentionally reasonable rather than extreme; if you need a stricter or gentler policy, it's a one-line change in the block's logic.
The strength label sits in a live region so screen readers announce strength changes as the user types, and the segment animation respects the user's "reduce motion" system preference. The meter is feedback only — it never blocks typing; you decide whether to gate submission via OnScoreChanged.
The component ships with a clean default look and prefixes all its classes with psm-. To restyle, override these in your app theme:
psm-
psm-bar
psm-seg
psm-seg-on
psm-weak
psm-fair
psm-good
psm-strong
psm-label
psm-checklist
psm-check
psm-check-mark
psm-met
For example, to change the "strong" color, override .psm-strong .psm-seg-on { background: #0ea5e9; }.
.psm-strong .psm-seg-on { background: #0ea5e9; }
The meter doesn't update as I type.Make sure your password Input is bound to a variable and that same variable is passed to the block's Password input. The block recalculates on parameter change, which fires as the bound value updates.
My Submit button never enables.Confirm you're handling OnScoreChanged and setting a variable from IsStrongEnough, and that the Submit button's Enabled is bound to that variable. Also check MinLength isn't higher than the passwords you're testing.
I want a different pass threshold.The "strong enough" rule (length met and score ≥ 4) is a single condition in the block; adjust it to require more or fewer criteria.
The checklist or label is showing when I don't want it.Set ShowChecklist or ShowLabel to False.
False
This component uses a clear, rule-based score (five criteria) that's easy to understand and explain to users. For a more sophisticated, real-world strength estimate — one that penalizes common passwords, keyboard patterns, and dictionary words — a future version can integrate a library-based estimator (such as zxcvbn) behind the same interface. The rule-based version is a solid, dependency-free default.
Published on the OutSystems Forge as open, reusable code. Free to use and adapt in your OutSystems projects.