W3C

– DRAFT –
Fixing IDREFs

12 November 2025

Attendees

Present
alice, alisonmaher, bkardell, frehner, front-endian-jane, hober, jyasskin, kizu, kzms, lea, LeoLee, masonf, matatk, noamr, plinss, sarah, tantek, zcorpan, ZoeBijl
Regrets
-
Chair
matatk
Scribe
ZoeBijl

Meeting minutes

MA: let’s get started

we have a presentation that we all worked on

we got input van alice, sarah, noam, and Jeffrey

<jyasskin> s/??/Lea, Noam/

some important information, borrowing from florian

you’ve all agreed to the CoC

some ground rules

no qq+

we want problems

not solutions

we are going to listen to the problems

we are going to collect them

not judge them

all insights are valid

goals:

1. find concensus regarding the painpoints of IDRefs

2. ??

3. ??

<bkardell> (see slides)

<masonf> is there a link to the slides?

non-goals: (see slides)

Slideset: https://raw.githack.com/w3c/apa/main/presentations/2025/TPAC/fixing-idrefs/index.html

<masonf> thank you!

take up next item

take up item 7

repeated content requires rewriting IDs

we have a lot of use cases around SVG

<lea> For anyone who wants to dig in, here are the actual author quotes: https://github.com/WICG/idrefs/blob/main/research.md

also combining content from multiple sources

more general themes from developers

no platform support for generating/managing uinique ids

not ergonomic to associate labels with inputs using ids because authors often just don't bother creating accessibility issues

it’s unergonomic usig IDs

in general what we’re concerned about

on the DX side

finding the pain points

to do that we need to find out what they are

MA: ??

there’s also a runtime permance hit potentially

those are some general things

take up next item

take up item 8

useID() is a hook function provided by component frameworks Vue and React, generates a unique id on demand

* shows example of how to use*

you can also do something similar with prefixing

basically have an id for a form, and then prefix all descendants with the form id

<Jamie> s/React, generates a unique id on demand/

we also have scoped ID rewriting

similar to useID

we also have selectors

you can use selectors to express relationships

it can be useful for things relatively nearer in the DOM

like labels and inputs

*shows htmx example with hx-target*

some questions…

these are just suggestions

- what are the pain points?

- is the problem generation or. communication across boundaries?

- what appreoaches have been used in frameworks or tooling

- What are the (UA, AT) development costs?

- could devtools or offline tooling be improved to help the problem?

- What are the performance costs?

- what are performance costs

- how would any particular change benefit users

- What other constraitns would you want on the potential solution space?

- some research notes

(these are in the slides too)

broad themes from developers were summarised before

but there’s more in the appendix of this slide deck

reminder: our goal is to come to concensus on the problem space

that might require research

we’re here to listen

there’s a WICG repo for this

<Zakim> zcorpan, you wanted to ask which ATs don't label association through nesting

zcorpan: you showed an input and label in the examples

i know there are other elements that use id and association

the main problem with nested input and label that it’s not supported in all AT

my question is in, which AT is this broken?

if this is fixed, will that take away the problem?

MA: input + label is a big problem for sure

but there are many others that need work

even if the wrapping worked

that’s not how ARIA stuff works

<alice> https://www.tpgi.com/should-form-labels-be-wrapped-or-separate/

AB: it’s a long standing problem with Voice Control

also for Dragon Naturally Speaking

James, do you know why Voice Control doesn’t work with label nesting?

JC: it’s a bug

AB: it’s a long standing issue

first heard this in 2011 or so

they should absolutely be fixed

whetehr we should hold our breath i don’t know

a lot of these tools are not frequently updated

zcorpan: To anne's previous point, if the problem is that there's a bug in implementations, introducing a new thing that needs to be implemented may not be the best way to solve it, instead push for the bug to be fixed.

doesn’t mean we shouldn’t do anything else

<Zakim> fantasai, you wanted to add prior art from CSS

fantasai: css has started to have features that need to link two elements together

like scroll animations, tying scrolling of one element to animation of another element

another is anchor positioning

so css has properties that name a box

for the purpose of anchor position or animations

it’s similar to the problems with IDs

we knew authors would repeat a pattern

like comments in a form

we have for each of the places where we have naming

we have a scoping property, which takes values none | all | list of IDs

it traps those ids

you can’t go higher than these

that’s an existing prior art that’s probabbly relavant here

lea: wanted to reply to simon

with problems relevant to ??

we have a lot of upcoming features that use id references

the problems would not go away

<Zakim> oliverdunk, you wanted to ask about if we are assuming the developer is cooperating

OD: it seems we’re mostly talking about making it easier for devs to make these associations?

if a dev has a heading

and wants to make a link to the heading

it would be useful if there was a browser way to do that

MA: can you clarify stable reference?

OD: you can’t have ??

noamr: i asked developers about this

and they said i would never use this because it uses idrefs

they’re afraid of importing things

there’s a group of people that use IDrefs without knowning

??

there’s a sound in the room that if it breaks AT we can’t touch it

i don’t understand how the relationships is between browser and AT

is that constraint here to make it easier to appraoch a solution?

MA: i think it depends what the problems are

but it migth be a reasonable questions

you’ve probably experienced pain for using IDREFs

it’s reasonable to assume that bugs in AT will be fixed

<Zakim> Jamie, you wanted to flag that any solution to this problem needs to take mutations into account and the performance impact of managing those

JT: in terms of contraints

any solution to the problem will not be can i get the element

but more also if someone mutates the tree after that

what’s the performance hit

wanted to raise that as a constraint

AF: it does feel weird to come with problems

one problem that you…

was also solving was the issue of people generating IDs with math.random

but than the server side generated ID wouldn’t be the same as the client side id

second problem is in my case right now

<Jamie> s/you.../useID/

parts of our webpage allows 3rd party developers to embed code

but we’re scared of them adding a button/popup outside of the sandbox we’ve given them

so we need to??

AK: You already have to sanitize the IDs to prevent various security issues, no?

AF: Yes, we run it in a safe environment, sanitize the output, etc, but there are still problems around IDREFs that could be improved

there’s a lot we tried to do there

there are concerns on how to make sure their IDs don’t conflict with ours

*further discussion*

one more problem…

to noamr’s point earlier

we have a lot of issues in our react codebase

devs think of their components as scoped

we frequently found, that because rendered code isn’t scoped, IDs conflict

MA: thank you!

what i’m hearing is a communication use case we hadn’t heard yet

and something else around scoping

but harder than we were thinking of

<jyasskin> I also hear that we're not going to notice these collisions with HTML Archive data, since they're generated client-side

SP: wanted to respond to the linking in a heading

and the way browsers do this is with text fragments

MA: that’s some prior art we didn’t mention

SP: we could use it for element association

MA: it’s good to know about the prior art

SH: another pain, or annoyance

we make component libraries

so reusable things

lots of places where an author will need to reference a specific component

say you have an input and a button, but you want to add an error state

<frehner> +1 to Sarah's problem

you need a consumer of the sandbox component to reference into it

when we generate a generated ID you need to pass it around

if we could have static strings

it seems very solveable

<Zakim> jcraig, you wanted to ask noam for clarification wrt resolving between the browser and AT (and bypassing the normal platform API as the in-betweener?)

and in that case ??

JC: clarifying question to noamr

negotiating a reference between teh browser and AT

i misunderstood what you meant

noamr: was asking the questions that ??

where are the isuses in the architecture?

is it between the AT and the OS?

between the AT and browser?

felt like i didn’t understand

JC: i think i can try and clarify

on apple platforms we try to have the AT talk to the platform API directly

and be as browser unaware as possible

then the browser engine can vend to the accessiblity API directly

i guess to your questions, where are the bugs

all of the above

MA: with respect to that one, i don’t know if this is current, but the scope of some of the AT vendors is to ??

sometimes it’s just a bug

AT = assistive technology

<Zakim> tantek, you wanted to note the use-case of table td element "headers" attribute IDREF *list* to IDs of th elements and to also note https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/td#headers

TC: to add to the IDREF problems

i’ve had some challenges with the IDs list

in the 'headers' attribute of the td element where it's a list of IDREFs that reference IDs of th elements

that’s a one to many IDREFs to ID relationship

i don’t know how ATs handle that if at all

MA: quite well!

JC: that’s been around for about 30 years…

<Jamie> s/int he??/in the headers attribute of the td element/

jyasskin: i think we ahev this impresion that a lot of bugs take a long time to fix

we have ?? where it’s all in the browser

if we try to add something to the aria references

is that something we can just do

or does it need AT vendors?

JT: it depends

<Zakim> Jamie, you wanted to flag that while most AT uses browser accessibility engine, some do not

*everyones favourite answer*

dare i say most AT use the browser accessibility engine

there are some AT that do not do this

i guess it doesn’t matter what we do in the browser

those AT will not support it

<Zakim> oliverdunk, you wanted to discuss possible link to extensions

OD: there’s an interestin case in extensions

if you right-click on an element

and there’s an extension context

you can pass the id of the clicked element

that API is supported in Gecko

not supported in Chrome

MA: clarification question: Do you mean that because the page is in a different process to the context menu UI, you need some way to uniquely identify the element?

OD: we can generate our own ID for that

but if there was some standard to that we would use it

<masonf> node_id

<oliverdunk> jyasskin: I don't think they help for the second case but happy to chat offline!

MA: for the large part we hear echos of the classic problems

we also heard some new things

one of the things we haven’t really talked about is user research

how do we do the research

sarah might be able to talk about that

SH: the research that i’ve done, there’s a lot of duplicate ID

AIUI, IDs that were duplicated weren't referred to from attributes which take IDs

i can definitely refine the research

MA: we’re seeking developers experience/feedback on stuff

frehner: some of the work we’ve done

one thing that i felt we could comfortably do was use simple IDs in shadow DOM

SP: wanted to ask about the research

you said you looked at websites

<bkardell> https://docs.google.com/spreadsheets/d/19Or5bTZlf68VH-Mwb97uBl2Xsan1YSpR3wUxLTuZVDE/edit?gid=434696809#gid=434696809

<bkardell> zcorpan: ^

i use httparchive(??) and there are millions of sites

depending on how many you want to look at

SH: i was trying to look at what are the user difficulties

one of the original critiques was that ??

i was trying to see what the user impact and what is, at the level, ??

SH: one of the questions i wanted to get a broader dev view on

if we did a broader survey

i would love to take stuff from this meeting

all of the questions we discussed at the start

and wonder if other people think that’s a good approach

i would love to get to the why

what is hard about the context

kizu: wanted to mention the case of the existing ??

IDs that don’t exist

when devs update code

but because it’s inviisble to them

they forget to update IDs

<sarah> smhigley/py-soup-scraping

should devtools error on missing IDs or duplicate IDs?

there are many possibilities i think

this could link into any solution we find

<bkardell> zcorpan: yeah, but it's not problematic on any we can find so far really

<zcorpan> or ~35%

jyasskin: There was a comment earlier that React components assume they are contained, but end up using ids outside. But most of this is generated dynamically. Would the HTTP archive capture the live site or only the initial static page?

i wanted to ask if the queries are going to catch that

it has to be live

in the browser checking for stuff

rather than offlinme

SH: for what it’s worth, i waited for 5 seconds or so

so i did some scraping while stuff was rendered

MA: thanks all

AB: i think this was interesting

if people want to file bugs on the WICG repo

i’m interested to hear more scenarios

more information about those is helpful

it’s interesting to hear general problems

but specific case are _more_ interesting

so please file those

MA: thanks again

Minutes manually created (not a transcript), formatted by scribe.perl version 248 (Mon Oct 27 20:04:16 2025 UTC).

Diagnostics

Succeeded: s/=//

Succeeded: s/??/noam/

Failed: s/??/Lea, Noam/

Succeeded: s/jefery/Jeffrey/

Succeeded: s/here is/here are/

Succeeded: s/??2/not ergonomic to associate labels with inputs using ids because authors often just don't bother creating accessibility issues/

Failed: s/React, generates a unique id on demand/

Succeeded: s/React/React, generates a unique id on demand/

Succeeded: s/communication/communication across boundaries/

Succeeded: s/??1/What are the (UA, AT) development costs?

Succeeded: s/??2/could devtools or offline tooling be improved to help the problem?

Succeeded: s/??3/What are the performance costs?

Succeeded: s/??4/What other constraitns would you want on the potential solution space?

Succeeded: s/zcorpan: ??/zcorpan: To anne's previous point, if the problem is that there's a bug in implementations, introducing a new thing that needs to be implemented may not be the best way to solve it, instead push for the bug to be fixed./

Succeeded: s/id ??/id references/

Succeeded: s/like ??/like scroll animations, tying scrolling of one element to animation of another element/

Succeeded: s/a scoping property/a scoping property, which takes values none | all | list of IDs

Failed: s/you.../useID/

Succeeded: s/AK: ??/AK: You already have to sanitize the IDs to prevent various security issues, no?/

Succeeded: s/AF: ??/AF: Yes, we run it in a safe environment, sanitize the output, etc, but there are still problems around IDREFs that could be improved/

Succeeded: s/??/text fragments/

Succeeded: s/?? as strings/have static strings/

Succeeded 1 times: s/paltforms/platforms/g

Succeeded: s/wend/vend/

Succeeded: s/the ?? problems/the IDREF problems

Failed: s/int he??/in the headers attribute of the td element/

Succeeded: s/fi/fix/

Succeeded: s/int he ??/in the 'headers' attribute of the td element where it's a list of IDREFs that reference IDs of th elements/

Succeeded: s/sue/use/

Succeeded: s/sue/use/

Succeeded: s/question??/question: Do you mean that because the page is in a different process to the context menu UI, you need some way to uniquely identify the element?/

Succeeded: s/ons tuff/on stuff/

Succeeded: s/and almost none of them are used/AIUI, IDs that were duplicated weren't referred to from attributes which take IDs/

Succeeded: s/it/the context/

Succeeded: s/*something about IDs that aren’t contained*/There was a comment earlier that React components assume they are contained, but end up using ids outside. But most of this is generated dynamically. Would the HTTP archive capture the live site or only the initial static page?/

Maybe present: AB, AF, AK, fantasai, goals, JC, JT, MA, non-goals, OD, reminder, SH, SP, TC

All speakers: AB, AF, AK, fantasai, frehner, goals, JC, JT, jyasskin, kizu, lea, MA, noamr, non-goals, OD, reminder, SH, SP, TC, zcorpan

Active on IRC: alice, alisonmaher, astearns, bkardell, breakout-bot, frehner, front-endian-jane, hober, Jamie, jcraig, jyasskin, kizu, kzms2, lea, LeoLee, masonf, matatk, noamr, oliverdunk, plinss, sarah, tantek, zcorpan, ZoeBijl