HTTP/2 301
content-security-policy: script-src 'sha256-1az3CiAdXAaMP3TFl5msfrDjNuSHMdg1ecAgxfZPR50=' 'unsafe-inline' 'strict-dynamic'; object-src 'none'; base-uri 'none'; report-uri https://csp.withgoogle.com/csp/chromium-website/
location: https://www.chromium.org/developers/core-principles/no-hidden-preferences
content-type: text/plain; charset=utf-8
accept-ranges: bytes
date: Sat, 11 Oct 2025 14:15:07 GMT
x-served-by: cache-bom-vanm7210041-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1760192108.510436,VS0,VE125
vary: x-fh-requested-host, accept-encoding
alt-svc: h3=":443";ma=86400,h3-29=":443";ma=86400,h3-27=":443";ma=86400
content-length: 88
HTTP/2 301
content-security-policy: script-src 'sha256-1az3CiAdXAaMP3TFl5msfrDjNuSHMdg1ecAgxfZPR50=' 'unsafe-inline' 'strict-dynamic'; object-src 'none'; base-uri 'none'; report-uri https://csp.withgoogle.com/csp/chromium-website/
location: /developers/core-principles/no-hidden-preferences/
content-type: text/plain; charset=utf-8
accept-ranges: bytes
date: Sat, 11 Oct 2025 14:15:07 GMT
x-served-by: cache-bom-vanm7210047-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1760192108.704689,VS0,VE129
vary: x-fh-requested-host, accept-encoding
alt-svc: h3=":443";ma=86400,h3-29=":443";ma=86400,h3-27=":443";ma=86400
content-length: 65
HTTP/2 200
cache-control: max-age=3600
content-encoding: gzip
content-security-policy: script-src 'sha256-1az3CiAdXAaMP3TFl5msfrDjNuSHMdg1ecAgxfZPR50=' 'unsafe-inline' 'strict-dynamic'; object-src 'none'; base-uri 'none'; report-uri https://csp.withgoogle.com/csp/chromium-website/
content-type: text/html; charset=utf-8
etag: "3425df6f37f510acc5a1ca2cb9925045200b309a837c578ca98d513e2caf2354"
last-modified: Fri, 10 Oct 2025 02:31:02 GMT
strict-transport-security: max-age=31556926
accept-ranges: bytes
date: Sat, 11 Oct 2025 14:15:08 GMT
x-served-by: cache-bom-vanm7210047-BOM
x-cache: MISS
x-cache-hits: 0
x-timer: S1760192108.846677,VS0,VE155
vary: x-fh-requested-host, accept-encoding
alt-svc: h3=":443";ma=86400,h3-29=":443";ma=86400,h3-27=":443";ma=86400
content-length: 2605
No Hidden Preferences
One of the Core Principles is Simplicity:
We tend to avoid complex configuration steps in every aspect of the product,
from installation through options. We take care of keeping the software up to
date so you never need to be concerned about running the latest, safest
version of Chrome.
We try not to interrupt users with questions they are not prepared to answer,
or get in their way with cumbersome modal dialog boxes that they didn't ask
for.
The target user base for Chromium is incredibly diverse, and while we try to
make Chromium flexible and powerful enough to serve everyone well, the reality
is that we can't always do that. Some users might want different behaviors, and
the easy way out is to give them that option. That is a temptation that must be
resisted.
When we make a hidden preference, it is admitting failure. If our users complain
about a feature, do we add a preference for it to be turned off? If we do so
we're ignoring the feedback of our users that perhaps the feature could be
smarter in satisfying their needs. In addition, as software developers we
usually don't think about it, but setting a preference is a pretty technically
complicated task, so adding one wouldn't actually help the vast majority of the
users, who will end up suffering with the feature in silence. Take the feedback
to improve the feature, not to add a switch to turn it off.
Hidden settings also make it nearly impossible to do full testing. Each
boolean-valued preference means that the code can behave one of two ways. Do you
write all your tests to take those two branches into account? Each additional
preference means twice the number of code paths, meaning exponential growth.
This means preferences are bad for maintainability.
about:flags and command-line flags are only for temporary testing. Long-lived
command-line flags are prohibited except for rare cases where we need them for
long-term testing and development.
Recommended external links: