#5073·cheerio

Attribute value `"until-found"` for hidden attribute is incorrectly normalized

Author: rururuxCreated Feb 15, 2026Updated Feb 15, 2026

Description

The hidden="until-found" attribute value (introduced in HTML Living Standard) is not correctly preserved when loading HTML via cheerio.load(). Instead, it is being normalized to hidden or an undefined, treating it as a legacy boolean attribute.

https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#description

typescript
const html = `
  <!DOCTYPE html>
  <!-- Sample: popover -->
  <dialog id="popover-auto" popover="auto"></dialog>
  <dialog id="popover-true" popover></dialog>
  <dialog id="popover-false"></dialog>
  <dialog id="popover-string-empty" popover></dialog>

  <!-- hidden -->
  <div id="hidden-until-found" hidden="until-found"></div>
  <div id="hidden-true" hidden></div>
  <div id="hidden-false"></div>
  <div id="hidden-string-empty" hidden></div>
`;
bash
~/projects/stackblitz-starters-bnzemr2z
❯ node index.js
{ id: 'popover-auto', expected: 'auto', actual: 'auto' }
{ id: 'popover-true', expected: '', actual: '' }
{ id: 'popover-false', expected: undefined, actual: undefined }
{ id: 'popover-string-empty', expected: '', actual: '' }
{ id: 'hidden-until-found', expected: 'until-found', actual: 'hidden' }
{ id: 'hidden-true', expected: '', actual: 'hidden' }
{ id: 'hidden-false', expected: undefined, actual: undefined }
{ id: 'hidden-string-empty', expected: '', actual: 'hidden' }

https://stackblitz.com/edit/stackblitz-starters-bnzemr2z

Environment

cheerio version: 1.2.0 node version: v24.1.0