WebSQL (openDatabase) is absent for Chrome ≥ 119
Check id opendatabase-removed
What an ordinary browser yields
On a Chrome ≥119 UA, window.openDatabase does not exist.
What a detector infers
WebSQL was removed from Chrome in version 119, so window.openDatabase should not exist on any newer Chromium. This check parses the Chrome major version out of the user-agent string and only applies on Blink when that major is 119 or above; every other case — Firefox, which never shipped WebSQL, Safari, which still does, or an older Chrome UA — reports N/A rather than a verdict. Within that gate the logic is a direct contradiction test: the UA claims a version whose engine deleted the API, so the API's presence means the engine predates the version string it is advertising. A detector reading both signals can infer the browser is an older Chromium wearing a newer version number, because no genuine build can be on both sides of the removal at once.
How to resolve it
Resolve the contradiction by aligning the claimed version with the engine actually running: either advertise the Chromium version you're really on, or run a build at or above the version you advertise. Deleting window.openDatabase from JS papers over this one cell while leaving every other version-gated API to disagree — upgrading the engine, or lowering the UA claim, is the coherent fix.
Nearby checks in Environment & locale
- the analyser byte spectrum is the defined quantisation of its float spectrum
audio-analyser-float-vs-byteAn AnalyserNode publishes the same spectrum twice. getFloatFrequencyData returns decibels, and getByteFrequencyData returns that spectrum… - speech synthesis voices (host OS speech engine)
speech-voicesspeechSynthesis.getVoices() enumerates the host operating system's speech engine — a resource stealth stacks essentially never touch, which… - the voice list arrives the way Chrome delivers it
speech-voices-async-pathspeech-voices reads WHAT is in the voice list. This reads HOW the list arrived, which is a separate fact and survives a roster whose every… - an OS that ships a speech synthesiser enumerates at least one voice
speech-voices-vs-platformThe plain speech-voices readout above refuses to score an empty list, and as written it is right to: Chrome does not build the voice list in… - a live audio destination corresponds to an audio device that exists
audio-sink-vs-device-listA resource oracle, and deliberately a different resource from the voice list. - BatteryManager fields satisfy the spec's mutual-exclusion invariants
battery-spec-invariantsThe probe calls navigator.getBattery() once and records four fields together: level, charging, chargingTime, dischargingTime. - enumerateDevices exposes audiooutput on a Chromium claim
media-kinds-vs-engineThe probe calls navigator.mediaDevices.enumerateDevices() and keeps only each entry's .kind, sorted — never labels or deviceIds, which is… - mediaCapabilities and canPlayType agree about the same codec
mediacapabilities-vs-canplaytypeTwo different APIs answer from the same platform decoder registry.
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Environment & locale checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Environment & locale — the family opendatabase-removed belongs to.