Skip to content

[Guidelines Proposal] Change consensus requirements #2290

Description

Problem

Current contributor guidelines requires 2 major browser engines to implement a new Web API for its definition to be added to TS DOM types. https://github.com/microsoft/TypeScript-DOM-lib-generator#why-is-my-fancy-api-still-not-available-here

Seeing as Blink possesses >75% of browser engine market share and is by FAR the quickest engine to implement new web standards and standard proposals, this requirement causes unnecessary hassle and possible runtime errors if manually defined types are incorrect.

For example: https://x.com/CodeWShreyans/status/2000710168980377885?s=20
The Web Navigation API was added to the HTML Spec in 2022, shortly followed by Blink's implementation later the same year. Webkit released their implementation 3 days ago, over 3 years after Blink. Gecko still does not support it.

Solution

Add types to TS when a standard is supported by one major browser engine AND published to the official HTML spec. However to encourage safe use, the type can be possibly undefined until implemented by two major browser engines.

For example:

interface Window {
  navigation: Navigation | undefined
}

Activity

  1. Bashamega commented on Dec 16, 2025

    @Bashamega
    Contributor

    Duplicate of #998

  2. CodeWithShreyans commented on Dec 17, 2025

    @CodeWithShreyans
    Author

    Adam Naji (@Bashamega) not a duplicate, #998 talks about just one part of the solution, not the proposal itself

  3. saschanaz commented on Dec 19, 2025

    @saschanaz
    Contributor

    Doing this would improperly guide people to write a bunch of web-incompatible code. The two-implementation requirement serves as a way to achieve a balance between web compatibility and usability.

    And also Navigation API is getting a bunch of specification feedback after having multiple implementations as it's very complex and still missed details, so it's kinda a bad example.

    Welcome to the dragon's maw. Navigation, session history, and the traversal through that session history are some of the most complex parts of this standard.

    (ICYMI, #2276 added Navigation API which you should be able to use via @types/web.)

  4. connorshea commented on Dec 20, 2025

    @connorshea

    I fully agree with saschanaz, it would result in websites being broken for users not on Chrome, and that'd be problematic for the web long-term. It's best to allow standards to be implemented across browsers before the types are available in TypeScript.

  5. CodeWithShreyans commented on Jan 4, 2026

    @CodeWithShreyans
    Author

    Totally reasonable arguments but my question is should we be measuring compatibility by market share or by number of engines. The fact that every single major browser except Firefox and Safari uses Blink is also important.

    So considering either the number of browsers (not engines) or the market share would make more sense IMO.

  6. guillaumebrunerie commented on Aug 5, 2026

    @guillaumebrunerie

    Maybe it would actually make more sense to only add APIs to TypeScript when they reach Baseline Newly available?
    I agree that the current "2 engines" is pretty ad-hoc. On the other hand, Baseline is a separate metric that seems to measure exactly what is needed here, namely when does a feature become generally available to use on the web. It is however even more restrictive than the current requirement.

  7. saschanaz commented on Aug 5, 2026

    @saschanaz
    Contributor

    Yeah, that basically just means 3 engines instead of 2.

    2 was somewhere in between so that we can balance between early adopters and web compatibility. 2 also means the other one feels pressure to implement it too, otherwise it will suffer from compatibility issue, meaning there's higher chance that it eventually will become 3 implementers anyway.

  8. saschanaz commented on Aug 5, 2026

    @saschanaz
    Contributor

    re: many other browsers also use blink

    The main reason MDN and others do not list them is because they do not participate in standards discussion nor have implementation independence - they just ship whatever the upstream ships, the only practical choice they have is to turn individual features on or off. (Servo and Ladybird do both but then they have no stable release.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions