<?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: Walter Zalazar</title>
    <description>The latest articles on DEV Community by Walter Zalazar (@wzalazar).</description>
    <link>https://dev.to/wzalazar</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%2F465334%2F152c0217-634f-420d-858f-3b24de58ff60.jpeg</url>
      <title>DEV Community: Walter Zalazar</title>
      <link>https://dev.to/wzalazar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wzalazar"/>
    <language>en</language>
    <item>
      <title>Mate: a language for building visual components</title>
      <dc:creator>Walter Zalazar</dc:creator>
      <pubDate>Wed, 16 Jul 2025 14:00:00 +0000</pubDate>
      <link>https://dev.to/wzalazar/mate-a-language-for-building-visual-components-1n3o</link>
      <guid>https://dev.to/wzalazar/mate-a-language-for-building-visual-components-1n3o</guid>
      <description>&lt;p&gt;A few months ago, while working on my &lt;a href="https://postgrado.info.unlp.edu.ar/ingenieria-de-software/" rel="noopener noreferrer"&gt;Master's thesis in Software Engineering&lt;/a&gt;, I asked myself a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why don’t we use Web Components to build modern web applications?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After all, they’re a standard. They’re &lt;a href="https://caniuse.com/custom-elementsv1" rel="noopener noreferrer"&gt;supported by every major browser&lt;/a&gt;. They don’t rely on external libraries. And they work well in any environment.&lt;/p&gt;

&lt;p&gt;But when I tried using them, I quickly understood why almost no one does.&lt;/p&gt;

&lt;p&gt;Building a Web Component from scratch is uncomfortable. You have to extend classes, register them manually with &lt;strong&gt;&lt;em&gt;customElements.define&lt;/em&gt;&lt;/strong&gt;, and handle the &lt;strong&gt;&lt;em&gt;Shadow DOM&lt;/em&gt;&lt;/strong&gt; by hand. There’s no clear way to manage state—let alone reactivity.&lt;/p&gt;

&lt;p&gt;Everything that takes you 10 lines in &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt; or &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue&lt;/a&gt; turns into repetitive, hard-to-maintain boilerplate when using raw Web Components.&lt;/p&gt;

&lt;p&gt;That’s when the idea came up:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if there were a language that let you write Web Components like you would in React or &lt;a href="https://svelte.dev/" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt;, but without relying on frameworks?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A declarative language with a clean, simple syntax. Where state is reactive. And that compiles directly to native components. No unnecessary runtime. No hidden dependencies.&lt;/p&gt;

&lt;p&gt;That’s how &lt;strong&gt;Mate&lt;/strong&gt; was born.&lt;/p&gt;

&lt;p&gt;A language designed for the browser. Compiled with &lt;a href="https://www.rust-lang.org/" rel="noopener noreferrer"&gt;Rust&lt;/a&gt;. With its own grammar built using &lt;a href="https://tree-sitter.github.io/tree-sitter/" rel="noopener noreferrer"&gt;Tree-sitter&lt;/a&gt;. And with a clear mission: &lt;strong&gt;to bring simplicity back&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When I started building the compiler, I chose &lt;a href="https://lit.dev/" rel="noopener noreferrer"&gt;Lit&lt;/a&gt; as the initial compilation target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Because Lit is lightweight, modern, and well-aligned with web standards. It allowed me to focus on what really mattered: designing the language itself.&lt;/p&gt;

&lt;p&gt;But Mate is not Lit. You don’t need to learn its API. No decorators.&lt;br&gt;
No classes to extend.&lt;/p&gt;

&lt;p&gt;You just write HTML and declarative logic. The compiler takes care of the rest.&lt;/p&gt;

&lt;p&gt;Lit is just a compilation backend for now. In the future, Mate will be able to generate native Web Components without relying on any framework at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  An example
&lt;/h3&gt;

&lt;p&gt;Here’s a counter written in Mate:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9g9levljew4s88h1aki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9g9levljew4s88h1aki.png" alt="counter written in Mate" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mate is still under development, but you can already try out some examples.&lt;br&gt;
I'm building an online playground and documenting the whole process to share it with the community.&lt;/p&gt;

&lt;p&gt;This project is part of my thesis, but it also answers a deeper need:&lt;br&gt;
The need to build tools that last, that respect standards, and that don’t force developers to relearn everything every couple of years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mate isn’t just another language.&lt;/strong&gt; It’s a way to fall back in love with frontend development. With a &lt;em&gt;mate&lt;/em&gt; in hand. And a browser opens.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Interested in trying Mate?&lt;/strong&gt; Want to join as a tester, collaborator, or just follow the progress?&lt;br&gt;
I’m happy to chat and share updates. Feel free to message me or leave a comment below 🧉&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webcomponents</category>
      <category>rust</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
