Implementation Report for: HTML Ruby Markup Extensions

Latest published version:
https://www.w3.org/TR/html-ruby-extensions/
Editor's Draft:
https://w3c.github.io/html-ruby/
Feedback:
GitHub
Editor:
Florian Rivoal (Invited Expert)

1. Introduction

This is an implementation report for the HTML Ruby Markup Extensions specification.

This specification (re)introduces the <rb> and <rtc> ruby sub-elements, and defines the corresponding processing model and semantics for ruby, taking these new sub-elements into account. It extends the HTML specification.

Aspects of the HTML specification not modified nor extended by HTML Ruby Markup Extensions are presumed to be sufficiently tested, and are not reported about here. Only those aspects that are directly covered by HTML Ruby Markup Extensions are reported on here.

The proposed test suite contains 84 tests for mandatory requirements established by HTML Ruby Markup Extensions. Specifically:

All tests except the last four seek to confirm that various patterns of markup get processed as specified with the segmentation of ruby structure as well as the pairing of annotations with bases being performed as expected, including in the presence of <rp> or inter-element whitespace.

The last four check that when used in isolation, the <rb>, <rt>, <rtc>, and <rp> elements have the expected semantics (representing their children for the first 3, representing nothing for the last one).

The tests focus on making sure appropriate semantics are conveyed, and do not test any specific layout: that is the purview of CSS-RUBY, to be tested separately.

2. Results

This report was prepared on the basis of testing 4 HTML user agents:

All but two tests pertaining to ruby base markup and <rb> pass in two implementations: Firefox and Kindle. Of the remaining two, one passes only in a single implementation (Firefox), and one fails in Kindle but does pass in the three browser implementations: Chrome, Firefox and Safari.

All tests pertaining to the <rtc> element pass in one implementation: Firefox.

All tests pertaining to what the <rb>, <rt>, <rtc>, and <rp> represent when used outside of the <ruby> pass in three implementations: Chrome, Firefox, Safari; all but one also pass in Kindle.

3. Methodology

The tests are considered exhaustive with no known or suspected bugs at the time of publication. If you find any errors, would like to contribute additional tests, or have other feedback, please report it on the web-platform-tests project or to the public GitHub repository for the specification.

A continuously updated version of the test suite is available.

The tests are semi-automated: they are written with automated fail conditions in the form of mismatch reftests, to catch known and predicted failures. The pass condition, to be evaluated manually, is described in each test. See the test suite's README for more details.

As such, automated test failures are indicative of something being wrong with the implementation, but automated passing tests could be false positives, signaling either a correct implementation or failing in a novel way. For this report, every reported passing test was verified manually.

Note: For reasons unknown to the tester, if Kindle Previewer can resolve the reference files used by the reftests when loading the test file, it switches to a different parser which does not have the same characteristics as the one reported on in this report. Since we are evaluating the test results manually anyway, we are not relying on the user-agent doing anything with the reference files, so this provides a simple work around: deleting the reference files or moving them to a different location before opening the test files in Kindle Previewer. If this step is skipped, the results reported in this document will not be reproduced.

4. Raw Results

The following table gives the results as of 6 March 2026.

Testcase Chrome Firefox Safari Kindle
Tests for ruby base markup patterns variations (with or without <rb>, interleaved and tabular)
html-ruby-001.htmlPASSPASSPASSPASS
html-ruby-002.htmlPASSPASSPASSPASS
html-ruby-003.htmlPASSPASSPASSPASS
html-ruby-004.htmlPASSPASSPASSPASS
html-ruby-005.htmlFAILPASSFAILPASS
html-ruby-006.htmlFAILPASSFAILPASS
html-ruby-007.htmlFAILPASSFAILPASS
html-ruby-008.htmlPASSPASSPASSPASS
html-ruby-009.htmlFAILPASSFAILPASS
html-ruby-010.htmlFAILPASSFAILPASS
html-ruby-011.htmlPASSPASSPASSPASS
html-ruby-012.htmlPASSPASSPASSPASS
html-ruby-013.htmlFAILPASSFAILPASS
html-ruby-014.htmlFAILPASSFAILPASS
html-ruby-015.htmlPASSPASSPASSFAIL
html-ruby-016.htmlFAILPASSFAILFAIL
html-ruby-101.htmlPASSPASSPASSPASS
html-ruby-102.htmlPASSPASSPASSPASS
html-ruby-103.htmlPASSPASSPASSPASS
html-ruby-104.htmlPASSPASSPASSPASS
html-ruby-105.htmlFAILPASSFAILPASS
html-ruby-106.htmlFAILPASSFAILPASS
html-ruby-107.htmlFAILPASSFAILPASS
html-ruby-108.htmlPASSPASSPASSPASS
html-ruby-109.htmlFAILPASSFAILPASS
html-ruby-110.htmlFAILPASSFAILPASS
html-ruby-111.htmlPASSPASSPASSPASS
html-ruby-112.htmlPASSPASSPASSPASS
html-ruby-201.htmlPASSPASSPASSPASS
html-ruby-202.htmlPASSPASSPASSPASS
html-ruby-203.htmlPASSPASSPASSPASS
html-ruby-204.htmlPASSPASSPASSPASS
html-ruby-205.htmlFAILPASSFAILPASS
html-ruby-206.htmlFAILPASSFAILPASS
html-ruby-207.htmlFAILPASSFAILPASS
html-ruby-208.htmlPASSPASSPASSPASS
html-ruby-209.htmlFAILPASSFAILPASS
html-ruby-210.htmlFAILPASSFAILPASS
html-ruby-211.htmlPASSPASSPASSPASS
html-ruby-212.htmlPASSPASSPASSPASS
Tests for <rtc>
html-ruby-301.htmlFAILPASSFAILFAIL
html-ruby-302.htmlFAILPASSFAILFAIL
html-ruby-303.htmlFAILPASSFAILFAIL
html-ruby-304.htmlFAILPASSFAILFAIL
html-ruby-305.htmlFAILPASSFAILFAIL
html-ruby-306.htmlFAILPASSFAILFAIL
html-ruby-307.htmlFAILPASSFAILFAIL
html-ruby-308.htmlFAILPASSFAILFAIL
html-ruby-309.htmlFAILPASSFAILFAIL
html-ruby-310.htmlFAILPASSFAILFAIL
html-ruby-311.htmlFAILPASSFAILFAIL
html-ruby-312.htmlFAILPASSFAILFAIL
html-ruby-313.htmlFAILPASSFAILFAIL
html-ruby-314.htmlFAILPASSFAILFAIL
html-ruby-315.htmlFAILPASSFAILFAIL
html-ruby-316.htmlFAILPASSFAILFAIL
html-ruby-401.htmlFAILPASSFAILFAIL
html-ruby-402.htmlFAILPASSFAILFAIL
html-ruby-403.htmlFAILPASSFAILFAIL
html-ruby-404.htmlFAILPASSFAILFAIL
html-ruby-405.htmlFAILPASSFAILFAIL
html-ruby-406.htmlFAILPASSFAILFAIL
html-ruby-407.htmlFAILPASSFAILFAIL
html-ruby-408.htmlFAILPASSFAILFAIL
html-ruby-409.htmlFAILPASSFAILFAIL
html-ruby-410.htmlFAILPASSFAILFAIL
html-ruby-411.htmlFAILPASSFAILFAIL
html-ruby-412.htmlFAILPASSFAILFAIL
html-ruby-413.htmlFAILPASSFAILFAIL
html-ruby-414.htmlFAILPASSFAILFAIL
html-ruby-415.htmlFAILPASSFAILFAIL
html-ruby-416.htmlFAILPASSFAILFAIL
html-ruby-501.htmlFAILPASSFAILFAIL
html-ruby-502.htmlFAILPASSFAILFAIL
html-ruby-503.htmlFAILPASSFAILFAIL
html-ruby-504.htmlFAILPASSFAILFAIL
html-ruby-601.htmlFAILPASSFAILFAIL
html-ruby-602.htmlFAILPASSFAILFAIL
html-ruby-603.htmlFAILPASSFAILFAIL
html-ruby-604.htmlFAILPASSFAILFAIL
Tests for what <rb>, <rt>, <rtc>, and <rp> represent when used outside of the <ruby>
html-ruby-701.htmlPASSPASSPASSPASS
html-ruby-702.htmlPASSPASSPASSPASS
html-ruby-703.htmlPASSPASSPASSPASS
html-ruby-704.htmlPASSPASSPASSFAIL