Skip to content

Draft Technical Report#30

Draft
Ethan-Arrowood wants to merge 3 commits intomainfrom
technical-report
Draft

Draft Technical Report#30
Ethan-Arrowood wants to merge 3 commits intomainfrom
technical-report

Conversation

@Ethan-Arrowood
Copy link
Collaborator

@Ethan-Arrowood Ethan-Arrowood commented Jan 20, 2026

Authors an ECMA Technical Report for the future of runtime-keys work.

Closes: #23


Note: this is still heavily WIP; you're welcome to leave feedback but please know I'm still actively working on certain parts. This will be discussed at upcoming WinterTC meetings (first one will be January 23rd), so please attend those if you want to participate in the discussion.


This repo contains the WinterTC Runtime Keys ECMA Technical Report source and build tooling.

To get started, run `npm install` to install project dependencies
Copy link

@thescientist13 thescientist13 Jan 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: maybe we want to recommend using npm ci instead? (to avoid modifying the existing lock file)

spec.html Outdated
<ul>
<li>Avoid being too similar to existing keys</li>
<li>Avoid similarity to common English words or offensive terms</li>
<li>Avoid being too generic or similar to general terminology such as "Web Runtimes", "Edge Runtimes", or "JavaScript Runtimes"</li>
Copy link

@thescientist13 thescientist13 Jan 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid being too generic or similar to general terminology such as "Web Runtimes", "Edge Runtimes", or "JavaScript Runtimes"

Is this a distinction for the name or the key? For example, there is this existing one (which may be "grandfathered" in, as I am assuming this is not retro-active)

{
  "organization": "Azion",
  "name": "Edge Functions",
  "key": "azion",
  "description": "Azion Edge Functions for ultra-low latency, edge-native applications, built with open standards for secure, high-performance serverless computing.",
  "website": "https://www.azion.com/en/products/edge-functions/",
  "repository": null,
  "deprecated": false
},

Would we maybe want to recommend existing entries to update?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggesting Azion update their name to "Azion Edge Functions" seems like a not-unreasonable move

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I believe the justification was that we didn't care about the name field. In fact, Netlify uses the exact same name, "Edge Functions". What really matters is the key since that is what everyone actually uses. Vercel, React, Arvan, Fastly, and Alibaba are other examples of names that are fairly ambiguous.

Copy link

@gesa gesa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cloudflare's workerd is not ideal, it's too late to ask them to change that right?

Comment on lines +123 to +126
<emu-note>
<p>This section is generated from the machine-readable registry data (see <emu-xref href="#sec-machine-readable-registry"></emu-xref>). In the build process, this content should be dynamically generated from <code>runtime-keys.json</code>.</p>
</emu-note>

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<emu-note>
<p>This section is generated from the machine-readable registry data (see <emu-xref href="#sec-machine-readable-registry"></emu-xref>). In the build process, this content should be dynamically generated from <code>runtime-keys.json</code>.</p>
</emu-note>

To clarify, you would remove the generated table from the version control markup once we're happy with the overall document, right?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes - apologies for any confusion around that. The spec.html would be the like raw document that then the generated table would be injected into, when eventually a build script exists. I just had it in there to start with so we could get a sense for things.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<emu-note>
<p>This section is generated from the machine-readable registry data (see <emu-xref href="#sec-machine-readable-registry"></emu-xref>). In the build process, this content should be dynamically generated from <code>runtime-keys.json</code>.</p>
</emu-note>
<emu-note>
<p>This section is generated from the machine-readable source data (see <emu-xref href="#sec-machine-readable-source"></emu-xref>).</p>
</emu-note>

I can see adding a line here about how a reader can access the machine-readable code with a URL maybe? Or something that effect? But I don't think the sentence about the build process totally works.

<li><strong>Organization</strong> (required): The organization or individual responsible for the runtime</li>
<li><strong>Name</strong> (required): The human-readable name of the runtime</li>
<li><strong>Key</strong> (required): The unique string identifier</li>
<li><strong>Description</strong> (required): A brief description of the runtime</li>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤔 Should this use more precision than "brief" ? A maximum character length maybe? (similarly should all fields have a character length limit?)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also I think "required" is fine here, but if the secretariat raises any concerns, maybe we switch to "mandatory"?

@Ethan-Arrowood
Copy link
Collaborator Author

What is wrong with workerd? I think that is a unique enough key since it matches their actual runtime name: https://github.com/cloudflare/workerd

Contrary to worker or workers which I would absolutely agree is too ambiguous or general.

Copy link

@gesa gesa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For consistency, use TC55 when referring to the TC, and use WinterTC55 when referring to the GitHub org.

I am v excited about this TR. Now I need to write the ecmarkup to generate it as not-a-standard

</emu-note>

<emu-note>
<p>Inclusion in this Report does not imply that the specified runtime is conformant with any ECMA TC55 specification, including the WinterTC Minimum Common API. Inclusion does not imply endorsement of any kind.</p>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>Inclusion in this Report does not imply that the specified runtime is conformant with any ECMA TC55 specification, including the WinterTC Minimum Common API. Inclusion does not imply endorsement of any kind.</p>
<p>Inclusion in this Report does not imply that the specified runtime is conformant with any Ecma specification, including the WinterTC Minimum Common API. Inclusion does not imply endorsement of any kind.</p>

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This suggestion seems odd, since the definition for "ECMAScript runtime" requires conformance with ECMA-262.


<emu-clause id="sec-runtime-source">
<h1>Canonical source for runtime keys</h1>
<p>The following table lists all previously recorded runtime keys, sorted alphabetically by organisation.</p>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>The following table lists all previously recorded runtime keys, sorted alphabetically by organisation.</p>
<p>The following table lists runtime keys submitted to TC55 and reviewed by the Committee, sorted alphabetically by organisation.</p>

I feel like this line is a tightrope

Comment on lines +123 to +126
<emu-note>
<p>This section is generated from the machine-readable registry data (see <emu-xref href="#sec-machine-readable-registry"></emu-xref>). In the build process, this content should be dynamically generated from <code>runtime-keys.json</code>.</p>
</emu-note>

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<emu-note>
<p>This section is generated from the machine-readable registry data (see <emu-xref href="#sec-machine-readable-registry"></emu-xref>). In the build process, this content should be dynamically generated from <code>runtime-keys.json</code>.</p>
</emu-note>
<emu-note>
<p>This section is generated from the machine-readable source data (see <emu-xref href="#sec-machine-readable-source"></emu-xref>).</p>
</emu-note>

I can see adding a line here about how a reader can access the machine-readable code with a URL maybe? Or something that effect? But I don't think the sentence about the build process totally works.


<emu-clause id="sec-adding-entries">
<h1>Proposing new runtime key entries</h1>
<p>All ECMAScript runtimes are welcome to propose a key for inclusion in this Report, subject to the attributes specified in <emu-xref href="#sec-runtime-key-structure"></emu-xref>. Runtimes which contribute to this Report are encouraged, but not required, to participate in Ecma TC55.</p>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>All ECMAScript runtimes are welcome to propose a key for inclusion in this Report, subject to the attributes specified in <emu-xref href="#sec-runtime-key-structure"></emu-xref>. Runtimes which contribute to this Report are encouraged, but not required, to participate in Ecma TC55.</p>
<p>All ECMAScript runtimes are welcome to propose a key for inclusion in this Report, subject to the structure as described in <emu-xref href="#sec-runtime-key-structure"></emu-xref>. Runtimes which contribute to this Report are encouraged, but not required, to participate in Ecma TC55.</p>

<emu-clause id="sec-proposal-process">
<h1>Proposal process</h1>
<emu-alg>
1. The proposer creates a pull request in the <a href="https://github.com/WinterTC55/runtime-keys">runtime-keys repository</a>.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
1. The proposer creates a pull request in the <a href="https://github.com/WinterTC55/runtime-keys">runtime-keys repository</a>.
1. The proposer creates a pull request in the <a href="https://github.com/WinterTC55/runtime-keys">WinterTC55/runtime-keys GitHub repository</a>.

not sure how important the WinterTC55 part is, but being explicit about GItHub is.

</emu-clause>
</emu-clause>

<emu-annex id="sec-machine-readable-source">
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<emu-annex id="sec-machine-readable-source">
<emu-annex id="sec-machine-readable-source" normative>


<emu-annex id="sec-example-usage">
<h1>Example usage</h1>
<p>This annex provides non-normative examples of how runtime keys may be used in practice.</p>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>This annex provides non-normative examples of how runtime keys may be used in practice.</p>
<p>This Annex provides informative examples of how runtime keys may be used in practice.</p>

<body>
<pre class="metadata">
title: Runtime Keys
status: draft
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
status: draft
status: draft-TR

<emu-clause id="sec-scope">
<h1>Scope</h1>

<p>Runtime keys provide a consistent and predictable mechanism for identifying ECMAScript runtimes in a variety of contexts, including but not limited to project configuration files, package manifests, conditional exports, and runtime detection mechanisms. This document focusses on providing informative identifiers primarily for web servers, though other ECMAScript server environments may find it useful. These keys are not intended to be used in web browsers, which should be referenced by other mechanisms such as the browserslist project.</p>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>Runtime keys provide a consistent and predictable mechanism for identifying ECMAScript runtimes in a variety of contexts, including but not limited to project configuration files, package manifests, conditional exports, and runtime detection mechanisms. This document focusses on providing informative identifiers primarily for web servers, though other ECMAScript server environments may find it useful. These keys are not intended to be used in web browsers, which should be referenced by other mechanisms such as the browserslist project.</p>
<p>Runtime keys provide a consistent and predictable mechanism for identifying ECMAScript runtimes in a variety of contexts, including but not limited to project configuration files, package manifests, conditional exports, and runtime detection mechanisms. This document focuses on providing informative identifiers primarily for web servers, though other ECMAScript server environments may find it useful. These keys are not intended to be used in web browsers, which should be referenced by other mechanisms such as the browserslist project.</p>

my b


<emu-clause id="term-runtime">
<h1><dfn variants="ECMAScript runtimes">ECMAScript runtime</dfn></h1>
<p>implementation of the ECMA-262 ECMAScript langauge specification</p>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>implementation of the ECMA-262 ECMAScript langauge specification</p>
<p>implementation of the ECMA-262 ECMAScript language specification</p>

also my b

@gesa
Copy link

gesa commented Mar 3, 2026

@Ethan-Arrowood Bringing your notes from my PR into this primary PR

  • Drop the word "conditions" from ~line 70
  • Spelling of "organization" to "organisation" in the JSON too
  • "Proposing entries for future editions" -> "Proposing new runtime key entries" ?
  • Add link to repo in proposal process steps
  • Fix some grammar in proposal process ~line 308 "The pull request is be formally approved..."
  • Add link to runtime-keys.json file (repo main branch or maybe commit at time of publish?) in the "Machine-readable canonical source" section

I'm deeply conflicted about the spelling of organisation within the JSON. Ecma does formally use Oxford GB English, but when it comes to code, designers have historically opted for en-US spellings.

<emu-clause id="sec-scope">
<h1>Scope</h1>

<p>Runtime keys provide a consistent and predictable mechanism for identifying ECMAScript runtimes in a variety of contexts, including but not limited to project configuration files, package manifests, conditional exports, and runtime detection mechanisms. This document focusses on providing informative identifiers primarily for web servers, though other ECMAScript server environments may find it useful. These keys are not intended to be used in web browsers, which should be referenced by other mechanisms such as the browserslist project.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>Runtime keys provide a consistent and predictable mechanism for identifying ECMAScript runtimes in a variety of contexts, including but not limited to project configuration files, package manifests, conditional exports, and runtime detection mechanisms. This document focusses on providing informative identifiers primarily for web servers, though other ECMAScript server environments may find it useful. These keys are not intended to be used in web browsers, which should be referenced by other mechanisms such as the browserslist project.</p>
<p>Runtime keys provide a consistent and predictable mechanism for identifying ECMAScript runtimes in a variety of contexts, including but not limited to project configuration files, package manifests, conditional exports, and runtime detection mechanisms. This document focusses on providing informative identifiers primarily for web servers, though other ECMAScript server environments may find it useful. These keys are not intended to represent web browsers, which should be referenced by other mechanisms such as the browserslist project.</p>


<emu-clause id="term-runtime">
<h1><dfn variants="ECMAScript runtimes">ECMAScript runtime</dfn></h1>
<p>implementation of the ECMA-262 ECMAScript langauge specification</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By this definition, JS engines such as V8 would qualify as a runtime.

<li>any other existing runtime key in this Report, or</li>
<li>
any existing Browserslist <em>browser</em> entries.
<emu-note>This explicitly excludes references to <em>server</em> runtimes within Browserslist.</emu-note>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this link to https://github.com/browserslist/browserslist?tab=readme-ov-file#browsers? Or can we even link to a github readme that we don't control from a technical report?


<emu-clause id="sec-runtime-existence">
<h1>Runtime existence validation</h1>
<p>The runtime environment represented by a key must actually exist, whether as open source, source-available, or proprietary software. Entries in this Report exist to identify real runtimes, not to reserve names for future projects.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about organization-internal runtimes, such as Bloomberg's Rapid and R+? Those "actually exist" and are proprietary software, but I don't think people outside of Bloomberg (or their contractors) could verify that they exist.

I think we should probably exclude those. But the wording for that should probably not exclude e.g. proprietary runtimes that are available as SaaS but which you can't download.

</emu-note>

<emu-note>
<p>Inclusion in this Report does not imply that the specified runtime is conformant with any ECMA TC55 specification, including the WinterTC Minimum Common API. Inclusion does not imply endorsement of any kind.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This suggestion seems odd, since the definition for "ECMAScript runtime" requires conformance with ECMA-262.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Future of Runtime Keys

4 participants