HTML / Element / Initial coverage

<progress> Element

Status: Initial coverage Scope: HTML Living Standard Specification checked: 2026-09-20

Technical Summary

The progress element represents the completion progress of a task. It can be determinate, with a known current and maximum amount, or indeterminate, when work is progressing but the remaining amount is unknown.

The presence of the value attribute selects the determinate state; omitting it selects the indeterminate state. Use meter for a scalar measurement such as disk usage, and output for a calculation or user-action result.

Definition / Categories

ItemDefinition
MeaningCompletion progress of a task
CategoriesFlow content, phrasing content, labelable content, and palpable content
ContextWhere phrasing content is expected
Content modelPhrasing content, but no descendant progress element
Tag omissionNeither the start tag nor the end tag is omissible
Content attributesGlobal attributes, value, and max
DOM interfaceHTMLProgressElement

Determinate and indeterminate states

A determinate progress bar has a current value and a maximum, so its relative completion can be calculated. An indeterminate progress bar communicates that work is ongoing without saying how much remains.

<label for="determinate-progress">Upload</label>
<progress id="determinate-progress" max="100" value="65">65%</progress>

<label for="indeterminate-progress">Waiting for the server</label>
<progress id="indeterminate-progress">Processing</progress>

value="0" is a determinate progress bar whose current value is zero. It is different from omitting the value attribute.

value and max resolution

The max attribute represents the total amount of work. If it is omitted, the maximum is 1. The units are not fixed by the specification, so an application should choose and use one unit consistently.

  • max must be a valid floating-point number greater than zero. An invalid or non-positive value resolves to a maximum of 1.
  • When present, value is parsed as a floating-point number. An invalid or non-positive value resolves to a current value of 0.
  • If the current value is greater than the maximum, the progress value is limited to the maximum.
  • When value is absent, the element is indeterminate and position returns -1.

progress has no min attribute. Its lower bound is always zero. This processing model differs from meter, where a bounded measurement has lower, upper, and threshold-related meaning.

Fallback text and labeling

Descendant text can provide a fallback current and maximum value for legacy user agents. That text should not be treated as the only name for the element; use a label or appropriate ARIA labeling to identify which task is progressing.

<label for="file-progress">Report upload progress</label>
<progress id="file-progress" max="100" value="70">70%</progress>

When a progress indicator describes a region that is loading, an author may also relate it to that region with aria-describedby and mark the region as busy with aria-busy. Normative meaning, browser accessibility-tree exposure, and assistive-technology announcements remain separate questions.

Exposing a progress value through an accessibility API is different from announcing each change to a screen reader. Changing the bar alone does not necessarily announce the update. W3C's ARIA25 gives a separate status message with aria-live="polite" as one way to convey progress updates. It is an example technique, not the only required implementation.

DOM Interface

APIMeaningBoundary
valueThe current progress valueThe getter returns 0 for an indeterminate bar; setting it can make an omitted-value element determinate
maxThe maximum value; default 1Invalid or non-positive values resolve to the default maximum
positionCurrent value divided by maximum, or -1 when indeterminateA readonly surface for the relative position
labelsThe NodeList of associated label elementsAn entry point for checking labelable-element naming

Fact / Evidence

The normative progress model, attribute processing, content model, DOM API, and accessibility mapping are recorded with claims, conditions, and source locations. Browser observations are kept separate in Implementation Evidence below.

Key facts and source locations
TypeFact / claimConditions / scopeStatusSource
SPECThe progress element represents the completion progress of a task.Determinate progress gives a completed amount relative to a maximum; indeterminate progress does not expose the remaining amount.ReviewedHTML Standard: the progress element
SPECThe presence of value distinguishes determinate from indeterminate progress.Absent value means indeterminate; present value is resolved with max.ReviewedHTML Standard: determinate and indeterminate progress
SPECmax defaults to 1, and the current value is resolved between zero and the maximum.Invalid floating-point values, non-positive max, and values above the maximum.ReviewedHTML Standard: value and max processing
SPECprogress belongs to flow, phrasing, labelable, and palpable content categories.It is used where phrasing content is expected and may not contain a descendant progress element.ReviewedHTML Standard: categories and content model
SPECHTMLProgressElement exposes value, max, readonly position, and labels.Includes the indeterminate position result and IDL/content-attribute behavior.ReviewedHTML Standard: HTMLProgressElement
AAMprogress maps to the progressbar role; determinate progress exposes maximum, minimum zero, and current value properties.HTML-AAM element-role mapping. Browser, platform-API, and assistive-technology results require separate observation.ReviewedHTML-AAM: progress

Evidence

  1. HTML Standard: The progress element — meaning, categories, attributes, determinate and indeterminate states, value/max processing, and DOM interface
  2. HTML Accessibility API Mappings: progress — progressbar role, determinate value properties, and labeling
  3. W3C WCAG Technique ARIA25 — the difference between exposing progress values and announcing status text; one sufficient technique, not a required implementation
  4. Web Platform Tests: HTML forms — entry point for locating progress element tests

Implementation Evidence

Browser implementation, WPT, and accessibility-tree observations are recorded separately from normative claims. The progress-v1 fixture and selected WPTs have been run in one Chrome-on-Windows environment. Windows UI Automation, actual screen-reader speech, other browsers, and unselected WPTs remain untested.

Measured fixture: progress-v1 reports determinate and indeterminate states, value/max boundary and invalid values, position, labels, fallback text, and the browser accessibility tree. Its separate controls compare a progress-value change with a change to an aria-live status message; screen-reader announcements still need direct measurement.

Implementation evidence registration
TypeVerification scopeConditions to recordStatus
IMPL Determinate and indeterminate states, value/max boundaries, attribute and IDL reflection, dynamic value updates, position, labels, and fallback text 2026-10-03 / Chrome 154.0.0.0 / Windows 11 Pro build 26300 / DPR 1.25 / viewport 1280 × 720. In the loopback build-config/yugien/research-fixtures/progress-v1.html, confirmed value 40, max 100, position 0.4; indeterminate value 0, max 1, position -1; value 150 clamped to 100; invalid value became 0; omitted max defaulted to 1. Labels and fallback text were also read. On the Yugien EN page, moving the slider changed progress from 40 to 41 in visible text and the browser AX tree. Post-update speech from the fixture's two comparison buttons was not measured Partial observation (Chrome 154 / one environment)
WPT Progress element, value/max parsing, indeterminate state, and DOM API tests 2026-10-03 / Chrome 154.0.0.0 / Windows 11 Pro build 26300 / wpt.live. progress.html 11/11, progress-2.html 4/4, progress-max-setting.html 1/1, and serialization-regression-test.html 1/1 passed (17/17 total). The served WPT revision was not pinned. Unselected tests and other browsers were not run

The test version used was not recorded. The linked test may change, so this result cannot be repeated with certainty against the same version.

Partial run (4 selected files, 17/17 passed)
AAM Progressbar role, accessible name from labels, determinate min/max/now, indeterminate exposure, and announcements for value-only updates versus a separate aria-live status message 2026-10-03 / Chrome 154.0.0.0 / Windows 11 Pro build 26300. The browser AX tree exposed named progress indicators and determinate values, and showed no value for the indeterminate case. The fixture's aria-live status text was present, but the speech difference between value-only and status-text updates was not measured. Windows UI Automation and actual Narrator / NVDA speech were not tested because the Windows automation tool would not run with the available browser. NVDA is installed but was not started. Other browsers were not run Partial observation (browser AX tree only)

A browser observation from one environment must not be registered as a universal result across browsers, platform APIs, and assistive technologies.

Coverage / Open Issues

  • ReviewedMeaning, categories, context, content model, tag omission, and content attributes
  • ReviewedDeterminate and indeterminate states, value/max processing, and the semantic boundary with meter and output
  • ReviewedMain HTMLProgressElement APIs and the HTML-AAM progressbar mapping entry point
  • OpenChrome, Firefox, and Safari comparisons for attributes, IDL, rendering, and determinate/indeterminate transitions
  • OpenIndividual WPT results and browser differences for boundary values, invalid values, and dynamic changes
  • OpenComplete HTML-AAM mapping, platform APIs, announcements when only the progress value changes versus when a separate aria-live status message changes, and interactions between dynamic updates, aria-busy, and aria-describedby

This is initial coverage. It records the normative entry point and evidence sources; it does not claim identical results in every browser, platform API, or assistive technology, or complete verification of the progress element.

Related surface

For a beginner-friendly explanation of progress display, determinate and indeterminate states, and the difference from meter and output, see the progress element page in Yugien. For bounded measurements, see the meter element; for labeling, see the label element; for calculation results, see the output element.