<?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: 1990jk1990</title>
    <description>The latest articles on DEV Community by 1990jk1990 (@1990jk1990).</description>
    <link>https://dev.to/1990jk1990</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4128696%2F7a69a806-d803-49b0-8013-36d51aaddcd3.png</url>
      <title>DEV Community: 1990jk1990</title>
      <link>https://dev.to/1990jk1990</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/1990jk1990"/>
    <language>en</language>
    <item>
      <title>Building web-tui-kit: a framework-independent browser UI with a stable contract</title>
      <dc:creator>1990jk1990</dc:creator>
      <pubDate>Wed, 16 Sep 2026 21:23:47 +0000</pubDate>
      <link>https://dev.to/1990jk1990/building-web-tui-kit-a-framework-independent-browser-ui-with-a-stable-contract-3hee</link>
      <guid>https://dev.to/1990jk1990/building-web-tui-kit-a-framework-independent-browser-ui-with-a-stable-contract-3hee</guid>
      <description>&lt;h2&gt;
  
  
  Building web-tui-kit: a framework-independent browser UI with a stable contract
&lt;/h2&gt;

&lt;p&gt;I recently open-sourced &lt;strong&gt;web-tui-kit&lt;/strong&gt;, a browser UI design system inspired by Debian &lt;code&gt;debconf&lt;/code&gt;, &lt;code&gt;dialog&lt;/code&gt;, and &lt;code&gt;whiptail&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I've always liked the aesthetics of these interfaces. Their restrained colors, sharp boundaries, text-oriented layouts, and almost abstract appearance have a character of their own. They look like software from another era, yet I find that visual language especially interesting when brought into modern applications.&lt;/p&gt;

&lt;p&gt;There's something appealing about taking an interface that looks as though it belongs in a terminal-based system configuration tool and making it work naturally in a contemporary browser application. I don't want to reproduce the limitations of old software. I want to preserve its distinctive aesthetic while benefiting from modern browser capabilities, semantic HTML, and familiar interactions.&lt;/p&gt;

&lt;p&gt;That interest led me to build web-tui-kit: a reusable system that brings this visual language to browser-based tools without tying their UI to React, Vue, or another application framework.&lt;/p&gt;

&lt;p&gt;The result is a small browser-native design system built primarily from CSS, semantic HTML, and a small amount of optional JavaScript.&lt;/p&gt;

&lt;p&gt;Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/1990jk1990/web-tui-kit" rel="noopener noreferrer"&gt;https://github.com/1990jk1990/web-tui-kit&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why another UI kit?
&lt;/h2&gt;

&lt;p&gt;Most web UI libraries solve a much larger problem than I needed.&lt;/p&gt;

&lt;p&gt;I wasn't looking for a component framework, application runtime, state-management solution, or build system. I wanted applications to be able to generate ordinary HTML and apply the same visual and behavioral contract regardless of whether the application itself was written with React, Vue, server-side templates, or no framework at all.&lt;/p&gt;

&lt;p&gt;I also wanted the design to feel intentionally different from conventional modern dashboards. Rather than rounding every corner, adding gradients, or hiding the structure of an interface, I wanted to explore the directness of the classic Debian configuration aesthetic.&lt;/p&gt;

&lt;p&gt;The visual direction comes from &lt;code&gt;debconf&lt;/code&gt;, &lt;code&gt;dialog&lt;/code&gt;, and &lt;code&gt;whiptail&lt;/code&gt;: deliberately simple compositions built around dialogs, menus, radio lists, checklists, text inputs, gauges, actions, and keyboard-friendly navigation.&lt;/p&gt;

&lt;p&gt;For me, combining that retro, almost backend-like appearance with modern applications is part of the appeal. The goal is not nostalgia alone, but a distinctive and reusable interface that still behaves like modern web software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Framework-independent means more than "no dependencies"
&lt;/h2&gt;

&lt;p&gt;One lesson from building this was that removing framework dependencies is the easy part.&lt;/p&gt;

&lt;p&gt;The harder part is defining what downstream applications are actually allowed to depend on.&lt;/p&gt;

&lt;p&gt;Starting with version 1.0, web-tui-kit therefore has an explicit public contract covering things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS tokens&lt;/li&gt;
&lt;li&gt;public CSS classes&lt;/li&gt;
&lt;li&gt;semantic markup relationships&lt;/li&gt;
&lt;li&gt;data attributes&lt;/li&gt;
&lt;li&gt;browser events&lt;/li&gt;
&lt;li&gt;interaction behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That boundary follows Semantic Versioning.&lt;/p&gt;

&lt;p&gt;A patch release should not silently rename a class or change an event contract simply because the implementation still "looks right."&lt;/p&gt;

&lt;p&gt;This is especially useful when the same design system is consumed by several applications — and also when coding assistants generate or modify UI. A stable reference is much more useful than telling an automated consumer to copy whatever happens to be on &lt;code&gt;main&lt;/code&gt; that day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The runtime stays small
&lt;/h2&gt;

&lt;p&gt;A consuming application can vendor the released &lt;code&gt;src/&lt;/code&gt; files and include them directly:&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;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/ui/tokens.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/ui/tui.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/ui/tui.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The JavaScript is optional for applications that don't need the progressive keyboard enhancements.&lt;/p&gt;

&lt;p&gt;There is no required application build step.&lt;/p&gt;

&lt;p&gt;React, Vue, and server-rendered applications use the same semantic markup and classes rather than separate framework-specific component implementations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the contract
&lt;/h2&gt;

&lt;p&gt;Once a UI becomes a dependency of other applications, screenshots alone are not enough.&lt;/p&gt;

&lt;p&gt;The repository currently checks several different layers.&lt;/p&gt;

&lt;p&gt;There are reviewed Chromium visual-regression baselines for the canonical UI compositions.&lt;/p&gt;

&lt;p&gt;Interaction behavior is exercised in Chromium and Firefox.&lt;/p&gt;

&lt;p&gt;Accessibility-semantic regression checks inspect browser-computed roles, accessible names, label relationships, native states, and progress semantics.&lt;/p&gt;

&lt;p&gt;There is also representative narrow-touch browser testing and a recorded physical Chrome-for-Android baseline for the stable 1.0 line.&lt;/p&gt;

&lt;p&gt;The React, Vue, and server-rendered integration recipes are executable regression fixtures rather than documentation snippets that are never tested.&lt;/p&gt;

&lt;p&gt;I'm careful not to describe those automated checks as WCAG certification or comprehensive assistive-technology testing. They are evidence for specific browser semantics, not a substitute for real accessibility evaluation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Releases are treated as artifacts
&lt;/h2&gt;

&lt;p&gt;The current stable release is &lt;strong&gt;v1.0.1&lt;/strong&gt; and the project is MIT licensed.&lt;/p&gt;

&lt;p&gt;Tagged releases produce a focused ZIP plus a SHA-256 checksum. Release creation runs the project tests, documentation validation, browser regressions, framework-recipe verification, and artifact checks before publishing.&lt;/p&gt;

&lt;p&gt;For reproducible consumption, downstream applications can therefore pin an immutable release:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--branch&lt;/span&gt; v1.0.1 &lt;span class="nt"&gt;--depth&lt;/span&gt; 1 &lt;span class="se"&gt;\&lt;/span&gt;
  https://github.com/1990jk1990/web-tui-kit.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For simply trying it locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/1990jk1990/web-tui-kit.git
&lt;span class="nb"&gt;cd &lt;/span&gt;web-tui-kit
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open &lt;code&gt;/demo/&lt;/code&gt; in a browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm interested in learning next
&lt;/h2&gt;

&lt;p&gt;The project has reached a point where external technical feedback would be more useful than adding features in isolation.&lt;/p&gt;

&lt;p&gt;I'm particularly interested in feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether the declared public-contract boundary is too broad or too narrow&lt;/li&gt;
&lt;li&gt;whether direct tagged vendoring is practical for this kind of library&lt;/li&gt;
&lt;li&gt;browser or touch interaction cases that the current tests miss&lt;/li&gt;
&lt;li&gt;semantic/accessibility issues in the canonical components&lt;/li&gt;
&lt;li&gt;integration problems in real React, Vue, or server-rendered applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Issues and pull requests are welcome:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/1990jk1990/web-tui-kit" rel="noopener noreferrer"&gt;https://github.com/1990jk1990/web-tui-kit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've maintained a small framework-independent UI library before, I'd also be interested in how you decided which implementation details eventually became stable public API.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>css</category>
      <category>a11y</category>
    </item>
  </channel>
</rss>
