WCAG 2.2.1 · Level A · EN 301 549 9.2.2.1

Timing Adjustable

Requires that users can turn off, adjust or extend any time limit set by the content, with a warning before time runs out.

In brief

Many people need more time: to read, to type, to find a control, to understand a form. A session that expires after a few minutes, a quiz with a fixed countdown or a checkout that releases your basket too soon can lock them out and make them lose their work.

This criterion requires that for each time limit set by the content, users can turn it off, adjust it to at least ten times the default, or extend it. To extend it, they are warned before time runs out, given at least 20 seconds to respond with a simple action such as pressing Space, and can do this at least ten times.

What does it cover?

  • Turn off: The user can switch the time limit off before encountering it.
  • Adjust: The user can change the limit to at least ten times its default length before encountering it.
  • Extend: The user is warned before time expires, has at least 20 seconds to extend with a simple action, and can extend at least ten times.
  • Typical limits: Session timeouts, form expiry, timed quizzes, one-time passwords, reservation holds and automatic redirects or refreshes.
  • Exceptions: A real-time event, such as an auction, where the limit is an essential requirement; a limit that is essential for the activity; and a limit longer than 20 hours.
  • Out of scope: Moving or auto-updating content is 2.2.2. Re-authenticating after a timeout without losing data is 2.2.5 (Level AAA).

Who does it affect?

People who read or type slowly, including people with cognitive or learning differences. Screen reader users, who need more time to navigate. People with motor disabilities who use switches or voice control. People who are interrupted. Anyone who needs longer than the designer expected.

In the EAA and EN 301 549

The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Enough time to use content is part of "operable".

The technical counterpart is the standard EN 301 549, which incorporates WCAG 2.2.1 by reference and turns it into separate clauses for each kind of ICT.

Where WCAG 2.2.1 appears in EN 301 549
ClauseType of ICTWhat it requires
9.2.2.1Web pagesWeb content must satisfy WCAG success criterion 2.2.1.
10.2.2.1Non-web documents (PDF, Office files)Documents with time limits must meet the same rule where the standard applies the criterion to them.
11.2.2.1Non-web software (native mobile apps)Software with time limits must let users turn them off, adjust them or extend them.

Whether and how the criterion applies to non-web documents is stated in clause 10 of the standard. Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality. Check the exact numbers in the standard when you cite them.

Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 2.2.1 is the same in WCAG 2.1 and 2.2.

A note on EAA scope: Article 2(4) of the Directive excludes certain content from the requirements, for example office file formats published before 28 June 2025 and archives that are not updated after that date. Content you publish or change after that date is not covered by these exclusions.

Directive (EU) 2019/882, EUR-Lex, opens in a new tab

Code examples for the web

1. Warn and let users extend a session

Before the session expires, show a dialog that gives at least 20 seconds to respond and lets the user continue with one action.

Incorrect
setTimeout(() => { window.location = "/logout"; }, 5 * 60 * 1000);
Correct
<dialog id="timeout" role="alertdialog" aria-labelledby="tt" aria-describedby="td">
  <h2 id="tt">Your session is about to expire</h2>
  <p id="td">You will be signed out in <span id="left">60</span> seconds.</p>
  <button type="button" id="extend">Stay signed in</button>
</dialog>

<script>
// Warn 60 seconds before expiry; the user can extend repeatedly
extend.addEventListener("click", () => { refreshSession(); timeout.close(); });
</script>

2. Avoid automatic redirects after a timer

A meta refresh that moves the user on after a few seconds does not give them time to read.

Incorrect
<meta http-equiv="refresh" content="5; url=/next">
Correct
<p>Your order was received.</p>
<a href="/next">Continue to your account</a>

3. Let users adjust a quiz timer

Offer a setting that extends the time or removes the limit before the quiz begins.

Incorrect
<p>You have 10 minutes. The timer cannot be changed.</p>
Correct
<label for="extra">Extra time</label>
<select id="extra">
  <option value="1">Standard time (10 minutes)</option>
  <option value="1.5">1.5x time</option>
  <option value="2">2x time</option>
  <option value="0">No time limit</option>
</select>

4. Save work so that a timeout does not lose it

Preserve entered data so that users can continue after being signed out.

Incorrect
// On timeout: session destroyed, form data lost
Correct
// Save a draft locally (or on the server) and restore it after sign-in
form.addEventListener("input", () => {
  sessionStorage.setItem("draft", JSON.stringify(Object.fromEntries(new FormData(form))));
});

5. Hold a basket long enough

A short reservation time is a time limit. Give users a way to extend it.

Incorrect
<p>Your tickets are held for 3 minutes.</p>
Correct
<p>Your tickets are held for 15 minutes.
  <button type="button" id="more">Add 15 more minutes</button></p>

6. Announce the warning to assistive technology

A warning is only useful if screen reader users hear it.

Incorrect
<div class="warn">Session ends soon</div>
Correct
<div role="alert">Your session ends in 60 seconds.
  <button type="button">Stay signed in</button></div>

Code examples for mobile

Native apps have time limits too, for example sessions, one-time codes and countdowns. Warn users, let them extend, and keep their data.

iOS (SwiftUI)

import SwiftUI

struct SessionWarning: View {
    @Binding var secondsLeft: Int
    var extend: () -> Void

    var body: some View {
        VStack(spacing: 12) {
            Text("Your session ends in \(secondsLeft) seconds.")
                .accessibilityAddTraits(.isHeader)
            // One simple action to extend; allow it repeatedly
            Button("Stay signed in") { extend() }
        }
        .padding()
        .onAppear {
            // Announce so VoiceOver users hear the warning
            UIAccessibility.post(notification: .announcement,
                                 argument: "Your session ends soon")
        }
    }
}

Android (Jetpack Compose)

import androidx.compose.material3.*
import androidx.compose.runtime.Composable

@Composable
fun SessionWarning(secondsLeft: Int, onExtend: () -> Unit, onDismiss: () -> Unit) {
    // Warn before expiry and offer one simple action to extend; allow it repeatedly
    AlertDialog(
        onDismissRequest = onDismiss,
        title = { Text("Your session is about to expire") },
        text = { Text("You will be signed out in $secondsLeft seconds.") },
        confirmButton = {
            TextButton(onClick = onExtend) { Text("Stay signed in") }
        }
    )
}

How to test

  • List the time limits: Look for sessions, timers, expiring forms, one-time codes, reservations and automatic redirects or refreshes.
  • Check each one: Can the user turn it off, adjust it to ten times its length, or extend it?
  • Test the warning: Is there a warning before time runs out, with at least 20 seconds to respond using a simple action?
  • Test extending repeatedly: Can the user extend at least ten times?
  • Check assistive technology: Does a screen reader announce the warning, and can the extend control be reached by keyboard?
  • Check what is lost: After a timeout, is the user's data kept?
  • Check mobile: Do sessions, one-time codes and countdowns in the app give users enough time?
  • Use a checker as a starting point: Automated tools can find a meta refresh but not script-based timers. A person must test.

Common mistakes

  • Session expiry with no warning: Users are signed out without a chance to react.
  • A warning that disappears in a few seconds: At least 20 seconds are required.
  • Warnings that need a complex action: Extending must be a simple action.
  • Only one extension: The user must be able to extend at least ten times.
  • Losing data on timeout: Always preserve what the user has entered.
  • Meta refresh redirects: They move users on before they can read.
  • Treating every limit as an exception: The exceptions are narrow: real-time events and essential limits.
  • Warnings that screen readers do not announce: Use role="alert" or role="alertdialog".

Sources

Standard version: EN 301 549 V4.1.1 (2026-09), WCAG 2.2. This page is for informational purposes only and is not legal advice. For binding requirements, refer to the official texts of the European Accessibility Act (Directive (EU) 2019/882) and EN 301 549.

Corpowid is recognized by Gartner

Corpowid has been recognized by Gartner, a leading global research and advisory firm, for our innovation and performance in digital accessibility. These badges reflect our commitment to creating inclusive, AI-powered web experiences.

Have questions about Corpowid?

Let’s connect.

We will get back to you as soon as possible.