<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Flavien Guillon</title>
    <description>The latest articles on DEV Community by Flavien Guillon (@flavien_guillon_333689cbb).</description>
    <link>https://dev.to/flavien_guillon_333689cbb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2561669%2F6da56c93-d8e9-4de1-99a5-0a9aa4f21049.png</url>
      <title>DEV Community: Flavien Guillon</title>
      <link>https://dev.to/flavien_guillon_333689cbb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flavien_guillon_333689cbb"/>
    <language>en</language>
    <item>
      <title>AriaML : An HTML fork</title>
      <dc:creator>Flavien Guillon</dc:creator>
      <pubDate>Fri, 05 Jun 2026 16:42:29 +0000</pubDate>
      <link>https://dev.to/flavien_guillon_333689cbb/ariaml-an-html-fork-n3j</link>
      <guid>https://dev.to/flavien_guillon_333689cbb/ariaml-an-html-fork-n3j</guid>
      <description>&lt;h2&gt;
  
  
  What is AriaML?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Aria Markup Language&lt;/strong&gt; is a language derived from HTML, designed to bridge the structural gaps of the modern web by restoring the document's autonomy over JavaScript. It specifically addresses the following issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hyper-dependency on JavaScript:&lt;/strong&gt; Interactivity and rendering optimizations now rely almost exclusively on third-party scripts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incomplete coverage of ARIA patterns:&lt;/strong&gt; There should be, as much as possible, a native HTML component for every Aria APG pattern. &lt;a href="https://www.w3.org/WAI/ARIA/apg/patterns/" rel="noopener noreferrer"&gt;see Aria APG Patterns&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tight coupling between CSS and the DOM:&lt;/strong&gt; Style sheets are too closely bound to the structure, preventing CSS from being truly interchangeable across different websites.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Massive data redundancy:&lt;/strong&gt; Duplication of information across Meta tags, JSON-LD, and the DOM, without any native link between these three layers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Costly URI context switches:&lt;/strong&gt; Complete and abrupt page reloads in the absence of complex Single Page Application (SPA) software optimizations written in JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of semantic adaptability:&lt;/strong&gt; Inability for a component to fluidly change its role based on the display context without script intervention (e.g., a heading morphing into a dropdown button to optimize space on a smartphone).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The DOM, Enslaved by JavaScript
&lt;/h3&gt;

&lt;p&gt;By nature, HTML sits on the boundary between a document and an application. Initially, it is fully accessible and natively interactive (often referred to as &lt;em&gt;Plain Old Semantic HTML&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;However, while the HTML/JavaScript duo offers undeniable power, the intrinsic enrichment of the HTML language itself has been sidelined in favor of developing new JavaScript APIs. The DOM has ultimately become a puppet for scripts. Lacking native alternatives, developers frequently alter the behavior of strict semantic elements (for instance, hijacking an &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; heading into a button), unintentionally breaking both the user experience and accessibility.&lt;/p&gt;

&lt;p&gt;The ARIA (&lt;em&gt;Accessible Rich Internet Applications&lt;/em&gt;) specification theoretically allows DOM elements altered by JavaScript to be properly exposed to assistive technologies. AriaML proposes a paradigm shift: &lt;strong&gt;moving the description of behaviors and accessibility directly to the language level.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Quick presentation
&lt;/h3&gt;

&lt;p&gt;This emancipation from JavaScript is made possible by an architecture built upon three major pillars:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Behavior Sheets (&lt;code&gt;.bhv&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;These sheets responsively define the semantic and behavioral mutations that components must adopt based on the display context (&lt;em&gt;Media Queries&lt;/em&gt;) and their interrelationships (e.g., an element natively controlling the &lt;code&gt;expanded&lt;/code&gt; / &lt;code&gt;collapsed&lt;/code&gt; state of another).&lt;/p&gt;

&lt;p&gt;Their syntax is close to CSS. However, unlike style sheets, &lt;em&gt;Behavior Sheets&lt;/em&gt; act on the dynamics of the DOM without ever interfering with pure content (HTML) or visual appearance (CSS).&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Declarative Integration of Common Patterns
&lt;/h4&gt;

&lt;p&gt;Mechanics typically delegated to JavaScript are directly integrated into the lifecycle of the AriaML document.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Navigation &amp;amp; Forms:&lt;/strong&gt; During a URI context switch (clicking a link, submitting a form), AriaML can perform a targeted and surgical mutation of specific zones in a purely declarative manner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native and Automatic Accessibility:&lt;/strong&gt; The lifecycle of this navigation strictly adheres to WAI-ARIA criteria. During the transition, the document automatically applies an &lt;code&gt;aria-busy="true"&lt;/code&gt; state and handles focus and inertia transparently.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; A drastic reduction in request payloads and a substantial saving of CPU resources, all without writing a single line of JavaScript code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  3. Decoupling data from the DOM
&lt;/h4&gt;

&lt;p&gt;Very often, there is a redundancy of information between Meta tags, JSON-LD, and the DOM. AriaML brings elements to life and lifts old historical constraints of HTML.&lt;br&gt;
In AriaML, there is no longer a doctype, &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;, or &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;. Metadata is defined in JSON-LD.&lt;br&gt;
Here is, for example, a valid and complete AriaML document:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aria-ml&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Title&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/aria-ml&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that in an AriaML document, the encoding is always UTF-8 and the value of &lt;code&gt;&amp;lt;meta name="viewport"&amp;gt;&lt;/code&gt; is defined by a CSS property, defaulting to "width=device-width, initial-scale=1".&lt;br&gt;
Here is its HTML "equivalent":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Title&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Here is a second, richer example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aria-ml&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WebPage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inLanguage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fr-FR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;direction&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ltr&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/aria-ml&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;name&lt;/code&gt; property will be interpreted by the browser as the document title. Furthermore, the ref attribute allows for synchronizing elements with the data.&lt;br&gt;
The idea is not new. It comes from the XForm module of XHTML. The &lt;code&gt;ref&lt;/code&gt; attribute allows for precisely synchronizing the content of an element (or its value, if it is a form field) with a value contained in the model layer (made up of all the json and json-ld available on the page). The value of this attribute is expressed in XPath, a technology available in all browsers since the 2000s. The page becomes "alive" without the intervention of a programming language, and writing it is simpler and more concise.&lt;br&gt;
Its HTML equivalent, inert (as there is no synchronization without javascript) and redundant:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"fr-FR"&lt;/span&gt; &lt;span class="na"&gt;dir=&lt;/span&gt;&lt;span class="s"&gt;"ltr"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Title&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WebPage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inLanguage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fr-FR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;direction&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ltr&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Title&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello World&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  A Necessary Fork of HTML
&lt;/h3&gt;

&lt;p&gt;A prisoner of its own immense success, HTML is currently hindered in its ability to evolve. Every modification to its specification is highly critical: existing systems must be preserved, total backward compatibility must be ensured, and interpretation discrepancies between different rendering engines must be avoided.&lt;/p&gt;

&lt;p&gt;To bypass this inertia and offer a standard designed from the ground up to respect privacy (making JavaScript non-obtrusive inherently limits &lt;em&gt;fingerprinting&lt;/em&gt; vectors) and universal accessibility, you can consider &lt;strong&gt;AriaML as a modern fork of HTML for a resilient Web.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AriaML delivers the modern web user experience while eliminating the regular zero-day vulnerabilities caused by the inherent complexity of JavaScript engines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;AriaML is a fork, a language derived from HTML, designed to bridge the structural gaps of the modern web by restoring the document's autonomy over JavaScript.&lt;br&gt;
Furthermore, an AriaML document can be embedded within an HTML document, making it backward-compatible with HTML.&lt;br&gt;
AriaML can be served server-side and, through content negotiation, it can be determined whether it should be sent as-is or in its version embedded within an HTML document.&lt;br&gt;
(Does the "Accept" header contain "text/aria-ml"?)&lt;/p&gt;

&lt;p&gt;There are currently two implementations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A JavaScript polyfill allows embedding AriaML within an HTML document while still leveraging the lifecycle and features offered by AriaML. This polyfill is available as a standalone version (a script distributed by the HTML page acting as the AriaML container), but also as a Web Extension. The latter &lt;strong&gt;allows the end-user to disable JavaScript while still benefiting from the AriaML features&lt;/strong&gt; defined in the documentation.&lt;/li&gt;
&lt;li&gt;A PHP SSR implementation that identifies the capabilities of the User Agent (browser or search engine) to interpret AriaML, in order to determine which version of the page will be sent (Native AriaML, or embedded within an HTML document).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://ariaml.com/en" rel="noopener noreferrer"&gt;More informations here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>html</category>
      <category>a11y</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
