{
  "_attribution": "Data from https://mygearcheck.com/ (CC BY 4.0). Please link back when you use it.",
  "dataset": "tests",
  "license": "CC BY 4.0",
  "documentation": "https://mygearcheck.com/api",
  "count": 11,
  "tests": [
    {
      "slug": "keyboard-test",
      "name": "Keyboard Test",
      "url": "https://mygearcheck.com/keyboard-test",
      "embedUrl": "https://mygearcheck.com/embed/keyboard-test",
      "category": "Input devices",
      "categoryUrl": "https://mygearcheck.com/category/input-devices",
      "summary": "Light up pressed keys on a virtual keyboard and find dead or stuck keys.",
      "description": "Press keys and watch them light up on your own layout, from full ANSI, ISO and JIS to Mac, laptop and 60%. Spot dead keys, chatter and ghosting in seconds.",
      "method": "This test listens for the standard keydown and keyup events on the document and marks the matching key on the layout you picked. Keys are identified by event.code, which describes the physical key position and does not change with your typing layout, so the highlight is correct on QWERTY, QWERTZ, AZERTY and Dvorak alike. The time between a keyup and the next keydown of the same key, taken from the event timestamps, is what the chatter rule uses. Nothing is forwarded or stored, and keys the operating system claims first, such as PrintScreen and most Fn combinations, never reach any page. MyGearCheck flags keyboard chatter when the same key sends a new keydown less than 30 ms after its keyup.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Keyboard key not working: how to tell hardware from software",
          "url": "https://mygearcheck.com/guides/keyboard-key-not-working"
        },
        {
          "title": "N-key rollover and ghosting explained, with a test you can run now",
          "url": "https://mygearcheck.com/guides/n-key-rollover-and-ghosting"
        },
        {
          "title": "How to check a second-hand laptop before you buy it",
          "url": "https://mygearcheck.com/guides/check-second-hand-laptop"
        }
      ]
    },
    {
      "slug": "key-code",
      "name": "Key Code Viewer",
      "url": "https://mygearcheck.com/key-code",
      "embedUrl": "https://mygearcheck.com/embed/key-code",
      "category": "Input devices",
      "categoryUrl": "https://mygearcheck.com/category/input-devices",
      "summary": "Read event.key, code, keyCode and which for any key you press.",
      "description": "See event.key, event.code, keyCode and which for the last key you pressed. Built for developers wiring up keyboard shortcuts.",
      "method": "This test attaches a keydown listener to the document and reads four properties straight off the event: event.key, event.code, the deprecated event.keyCode and the equally deprecated event.which, plus the four modifier booleans. Nothing is normalised, mapped or corrected on the way, so what you see is exactly what your browser reports on your operating system with your layout. That is the point: a specification tells you what should happen, and this tells you what does.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "event.key vs event.code vs keyCode: which one should you use",
          "url": "https://mygearcheck.com/guides/event-key-vs-event-code"
        }
      ]
    },
    {
      "slug": "mouse-test",
      "name": "Mouse Test",
      "url": "https://mygearcheck.com/mouse-test",
      "embedUrl": "https://mygearcheck.com/embed/mouse-test",
      "category": "Input devices",
      "categoryUrl": "https://mygearcheck.com/category/input-devices",
      "summary": "Check left, right, middle clicks, scroll and double-click behaviour.",
      "description": "Test left, right and middle clicks, scroll direction and double-click timing with live button-state indicators.",
      "method": "This test listens for mousedown, mouseup, contextmenu and wheel events on a target area and counts them, timing the gap between consecutive clicks with the event timestamps the browser supplies. The double-click detection is our own, based on that gap, rather than the browser's own dblclick event, because a chattering switch produces two clicks a few milliseconds apart and we want to see them as two. What no browser can do is measure your polling rate: pointer events are coalesced and delivered per frame, which the table further down sets out.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Mouse double-click chatter: what causes it and how to fix it",
          "url": "https://mygearcheck.com/guides/mouse-double-click-chatter"
        }
      ]
    },
    {
      "slug": "touchpad-test",
      "name": "Touchpad Test",
      "url": "https://mygearcheck.com/touchpad-test",
      "embedUrl": "https://mygearcheck.com/embed/touchpad-test",
      "category": "Input devices",
      "categoryUrl": "https://mygearcheck.com/category/input-devices",
      "summary": "Track pointer movement, clicks, two-finger scroll and pinch gestures live.",
      "description": "Check every touchpad function in seven steps, from click and two-finger scroll to pinch, drag and edges, and get a pass or fail report that also counts hitches.",
      "method": "This test reads Pointer Events, the unified model for mouse, pen and touch, together with wheel events for two-finger scrolling and pinch, Safari's gesture events for pinch and rotation, and navigator.maxTouchPoints for the reported touch capability. Each checklist step is detected from those events on the test area alone, and the page stops its own scrolling and zooming there so a gesture is measured instead of acted on. Movement is timed with the event timestamps, using the coalesced events where the browser offers them, which carry the time of each individual hardware report. MyGearCheck counts a touchpad hitch when the cursor is moving at 200 px per second or more and the next pointer update arrives more than 100 ms later, and reports it as a hint rather than a fail, because a finger lifted to reposition looks the same.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Laptop touchpad not working: eight checks before you call support",
          "url": "https://mygearcheck.com/guides/laptop-touchpad-not-working"
        }
      ]
    },
    {
      "slug": "mic-test",
      "name": "Microphone Test",
      "url": "https://mygearcheck.com/mic-test",
      "embedUrl": "https://mygearcheck.com/embed/mic-test",
      "category": "Audio & video",
      "categoryUrl": "https://mygearcheck.com/category/audio-video",
      "summary": "See a live input meter and waveform to confirm your mic is picking up sound.",
      "description": "Check your microphone in the browser: a live level meter in dBFS, peak, noise floor and clipping alerts, and a 5 second recording you can play back.",
      "method": "This test asks for a microphone stream with navigator.mediaDevices.getUserMedia, with noise suppression, echo cancellation and auto gain set by the switches, and runs it through a Web Audio AnalyserNode with an 8192-sample buffer so no audio is skipped between animation frames. Peak and clipping look at every sample; level and noise floor are measured in 100 ms windows. A recording is made with MediaRecorder, decoded with decodeAudioData and played through an AudioBufferSourceNode, all inside the page. Device names come from enumerateDevices, which the browser only fills in after you grant permission. MyGearCheck marks a microphone as clipping when samples reach 0.999 of full scale in three separate 100 ms windows.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Microphone not working in Windows 11: a step-by-step check",
          "url": "https://mygearcheck.com/guides/microphone-not-working-windows-11"
        }
      ]
    },
    {
      "slug": "webcam-test",
      "name": "Webcam Test",
      "url": "https://mygearcheck.com/webcam-test",
      "embedUrl": "https://mygearcheck.com/embed/webcam-test",
      "category": "Audio & video",
      "categoryUrl": "https://mygearcheck.com/category/audio-video",
      "summary": "See a live camera preview with resolution and device details.",
      "description": "Preview your webcam live and see the frame rate it really delivers, every resolution it accepts and whether the picture is too dark. Mirror it or save a snapshot.",
      "method": "This test asks for a camera stream with navigator.mediaDevices.getUserMedia, requesting 1920 x 1080 as an ideal so a smaller camera still opens at its own best, and attaches it to a video element. It reads the track settings for the resolution and the driver's frame rate, counts delivered frames with requestVideoFrameCallback where available, and samples brightness from a downscaled copy of the frame on a canvas that never leaves the page. Stopping the test stops every track, which releases the camera and turns its light off. MyGearCheck calls a webcam picture too dark when its average brightness is below 40 on a scale of 0 to 255.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Webcam shows a black screen: browser, driver and privacy-shutter checks",
          "url": "https://mygearcheck.com/guides/webcam-black-screen"
        }
      ]
    },
    {
      "slug": "speaker-test",
      "name": "Speaker Test",
      "url": "https://mygearcheck.com/speaker-test",
      "embedUrl": "https://mygearcheck.com/embed/speaker-test",
      "category": "Audio & video",
      "categoryUrl": "https://mygearcheck.com/category/audio-video",
      "summary": "Play a test tone through left, right or both speakers and check the output device.",
      "description": "Play a tone through the left, right or both speakers, check the centre and the polarity, and sweep 20 Hz to 20 kHz to hear where your speakers run out.",
      "method": "This test creates a Web Audio OscillatorNode for each tone and routes it through a StereoPannerNode to the left channel, the right channel or both, at equal power for the centre. The polarity check feeds a ChannelMergerNode instead, with the right side multiplied by -1 when inverted, and the sweep ramps the oscillator frequency exponentially from 20 Hz to 20 kHz. Nothing is downloaded or recorded, and an AudioContext starts suspended until your first click. Where a channel physically ends up is decided by your operating system, not by the page. MyGearCheck's sweep rises from 20 Hz to 20 kHz in 30 seconds on a logarithmic scale, so each octave gets about 3 seconds.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Only one speaker works: how to diagnose left, right and balance problems",
          "url": "https://mygearcheck.com/guides/only-one-speaker-works"
        }
      ]
    },
    {
      "slug": "dead-pixel-test",
      "name": "Dead Pixel Test",
      "url": "https://mygearcheck.com/dead-pixel-test",
      "embedUrl": "https://mygearcheck.com/embed/dead-pixel-test",
      "category": "Display",
      "categoryUrl": "https://mygearcheck.com/category/display",
      "summary": "Cycle full-screen solid colours to spot dead or stuck pixels.",
      "description": "Cycle nine full-screen solid colours to reveal dead or stuck pixels on any monitor, laptop or phone screen, at your own pace.",
      "method": "This test fills the screen with a solid colour using the Fullscreen API and a plain background colour, with no canvas, no image and no filter in between, so the colour the page requests is the colour sent to the panel. That matters: anything that processes the image could mask exactly what you are looking for. It detects nothing by itself and cannot: the judgement is yours, made with your own eyes. Note that an operating-system night light, a colour profile or HDR tone mapping still sits between the page and the panel, so switch those off before judging a display. On MyGearCheck, a dead pixel is one that stays dark on every colour in the cycle, and a stuck pixel is one that stays lit in a single colour, which is why the cycle includes both pure black and pure white.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Dead pixel warranty: what is actually covered",
          "url": "https://mygearcheck.com/guides/dead-pixel-warranty"
        }
      ]
    },
    {
      "slug": "monitor-test",
      "name": "Monitor Test",
      "url": "https://mygearcheck.com/monitor-test",
      "embedUrl": "https://mygearcheck.com/embed/monitor-test",
      "category": "Display",
      "categoryUrl": "https://mygearcheck.com/category/display",
      "summary": "Run gradient, grid and colour-bar patterns to check your display.",
      "description": "Measure the refresh rate your browser actually gets and count skipped frames, then run full-screen patterns for banding, sharpness, uniformity and backlight bleed.",
      "method": "The refresh measurement times frames with requestAnimationFrame, which the browser calls once per display refresh, and works out the rate from the gaps between those timestamps. The patterns are drawn with CSS gradients and repeating gradients rather than images or canvas, which keeps them exact at any resolution, and the Fullscreen API removes every piece of browser and page chrome, because a toolbar in view makes one corner of the screen untestable. Apart from the refresh rate nothing is measured: each pattern is a visual aid designed to make one class of defect visible. MyGearCheck counts a skipped frame when the gap between two animation frames is more than 1.5 times the median gap.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "How to check a used monitor before you buy it",
          "url": "https://mygearcheck.com/guides/check-used-monitor"
        }
      ]
    },
    {
      "slug": "gamepad-test",
      "name": "Gamepad Test",
      "url": "https://mygearcheck.com/gamepad-test",
      "embedUrl": "https://mygearcheck.com/embed/gamepad-test",
      "category": "Input devices",
      "categoryUrl": "https://mygearcheck.com/category/input-devices",
      "summary": "See live button presses and analog stick values for any controller.",
      "description": "Test any controller in the browser: live buttons, triggers and sticks, a 10 second hands-off stick drift measurement with deadzone advice, and a vibration test.",
      "method": "This test reads the standard Gamepad API through navigator.getGamepads() and polls it on every animation frame, because the API has no events for button and axis changes. Values come straight from the browser with no deadzone applied, which is why a drifting stick shows a non-zero resting value here even when games hide it. The drift test keeps the largest distance from centre seen during its 10 second window, and the vibration test calls the controller's vibrationActuator with a dual-rumble effect. Browsers withhold connected gamepads until you press a button, and the polling stops when the tab is hidden. MyGearCheck calls a stick drifting when it moves more than 10 percent of full travel from centre during a 10 second hands-off measurement.",
      "lastUpdated": "2026-10-13",
      "guides": [
        {
          "title": "Controller stick drift: how to test for it and what to do next",
          "url": "https://mygearcheck.com/guides/controller-stick-drift"
        }
      ]
    },
    {
      "slug": "screen-info",
      "name": "Screen Info",
      "url": "https://mygearcheck.com/screen-info",
      "embedUrl": "https://mygearcheck.com/embed/screen-info",
      "category": "System",
      "categoryUrl": "https://mygearcheck.com/category/system",
      "summary": "Read your resolution, viewport, pixel ratio, colour depth and refresh rate.",
      "description": "See your screen resolution, viewport size, device pixel ratio, colour depth and estimated refresh rate instantly.",
      "method": "This test reads window.screen for resolution, available area, colour depth and orientation, window.devicePixelRatio for the scaling factor, and the viewport dimensions for the space a page actually gets. The refresh rate is estimated by counting animation frames over a short interval and is labelled as an estimate throughout, because browsers cap frame delivery on battery, in background tabs and under load. Everything here is read once on load and on resize; nothing is stored or sent.",
      "lastUpdated": "2026-10-13",
      "guides": []
    }
  ]
}