<?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: Nathan C.</title>
    <description>The latest articles on DEV Community by Nathan C. (@natuworkguy).</description>
    <link>https://dev.to/natuworkguy</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%2F3939269%2F6de387f3-1d76-481c-beb0-5277cc3a59fe.png</url>
      <title>DEV Community: Nathan C.</title>
      <link>https://dev.to/natuworkguy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/natuworkguy"/>
    <language>en</language>
    <item>
      <title>Stop Rewriting UI Components for Every Project</title>
      <dc:creator>Nathan C.</dc:creator>
      <pubDate>Mon, 15 Jun 2026 03:15:50 +0000</pubDate>
      <link>https://dev.to/natuworkguy/stop-rewriting-ui-components-for-every-project-4nj2</link>
      <guid>https://dev.to/natuworkguy/stop-rewriting-ui-components-for-every-project-4nj2</guid>
      <description>&lt;p&gt;Ever started a new project and found yourself rebuilding the same modal, dropdown, toast notification, tabs, and switches for the 20th time?&lt;/p&gt;

&lt;p&gt;I got tired of that.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;UltraHTML&lt;/strong&gt;, a lightweight UI library that gives you modern components with simple HTML and JavaScript, no framework required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Include the CSS and JS files:&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;"dist/ultra.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;"dist/ultra.js"&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;Initialize UltraHTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Ultra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done.&lt;/p&gt;




&lt;h2&gt;
  
  
  Buttons
&lt;/h2&gt;

&lt;p&gt;UltraHTML includes two button styles out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ultra-button&lt;/code&gt; — a clean, modern button.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ultra-button-wave&lt;/code&gt; — adds a wave/ripple-style interaction effect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basic button:&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;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Simple Button
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wave button:&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;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-button ultra-button-wave"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Wave Button
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buttons use UltraHTML's default green theme, but because they're standard HTML elements, you can easily customize them with CSS.&lt;/p&gt;

&lt;p&gt;For example, here's a red button that displays a popup message:&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;button&lt;/span&gt;
  &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"Ultra.popupmsg('Hello from UltraHTML!')"&lt;/span&gt;
  &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-button ultra-button-wave"&lt;/span&gt;
  &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"background-color: red"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Show Popup
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can create buttons that match your site's branding without learning a separate theming system:&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;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-button"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"background-color: #3b82f6;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Blue Button
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-button ultra-button-wave"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"background-color: #f59e0b;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Orange Button
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-button ultra-button-wave"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"background-color: #ef4444;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Red Button
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;UltraHTML handles the styling and interactions while still giving you full control over how your buttons look.&lt;/p&gt;




&lt;h2&gt;
  
  
  Modal Example
&lt;/h2&gt;

&lt;p&gt;Need to display important information?&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;script&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;load&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Ultra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;Ultra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;head&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Important&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You need to reset your password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;buttonText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Reset&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;buttonAction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Going to reset page...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nx"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;buttonAction&lt;/code&gt; is omitted, the modal automatically closes when the button is clicked.&lt;/p&gt;

&lt;p&gt;For simple informational dialogs, you only need:&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;script&amp;gt;&lt;/span&gt;
&lt;span class="nx"&gt;Ultra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;modal&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;head&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Thanks for visiting!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;buttonText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OK&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a &lt;code&gt;buttonAction&lt;/code&gt; callback only when you need custom behavior, such as navigating to another page, submitting data, or running additional code before closing the modal.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom title&lt;/li&gt;
&lt;li&gt;Custom text&lt;/li&gt;
&lt;li&gt;Custom button labels&lt;/li&gt;
&lt;li&gt;Automatic close behavior&lt;/li&gt;
&lt;li&gt;Optional callback support&lt;/li&gt;
&lt;li&gt;Clean styling out of the box&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Popup Notifications
&lt;/h2&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;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"Ultra.popupmsg('Hello from UltraHTML!')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Show Popup
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instant toast-style messages with one line of code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dropdowns
&lt;/h2&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-dropdown"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-dropdown-btn"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Choose Option
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-dropdown-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Action One&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Action Two&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Action Three&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tabs
&lt;/h2&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-tab-container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-tab tab-active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Active Tab&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-tab"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Inactive Tab&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-tab tab-disabled"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Disabled Tab&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Chips
&lt;/h2&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-chip"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Clickable Chip
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-chip chip-permanent"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Permanent Chip
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image chips:&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-chip"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://picsum.photos/43/43"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Image Chip
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Switches
&lt;/h2&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;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-switch"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-switch-input"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-switch-slider"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Custom Right-Click Menus
&lt;/h2&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;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ultra-context-menu"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;📝 Edit&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;❌ Delete&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;🔗 Copy Link&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Ultra&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and UltraHTML handles the rest.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built UltraHTML
&lt;/h2&gt;

&lt;p&gt;Many UI libraries are powerful, but they're also huge, framework-dependent, or overkill for smaller projects.&lt;/p&gt;

&lt;p&gt;UltraHTML focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplicity&lt;/li&gt;
&lt;li&gt;Speed&lt;/li&gt;
&lt;li&gt;Lightweight code&lt;/li&gt;
&lt;li&gt;Modern styling&lt;/li&gt;
&lt;li&gt;Framework independence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes you just want a modal without installing 50 packages.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;I'm actively developing UltraHTML and adding new components.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Natuworkguy/UltraHTML" rel="noopener noreferrer"&gt;https://github.com/Natuworkguy/UltraHTML&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love feedback, feature requests, and contributions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What component would you want to see added next?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Pux: Bringing Pygame to Rux</title>
      <dc:creator>Nathan C.</dc:creator>
      <pubDate>Thu, 11 Jun 2026 16:33:36 +0000</pubDate>
      <link>https://dev.to/natuworkguy/pux-bringing-pygame-to-rux-10l0</link>
      <guid>https://dev.to/natuworkguy/pux-bringing-pygame-to-rux-10l0</guid>
      <description>&lt;p&gt;I've been working on a project called &lt;strong&gt;Pux&lt;/strong&gt;, a set of &lt;strong&gt;Pygame bindings for &lt;a href="https://dev.to/natuworkguy/rux-a-modern-systems-programming-language-worth-watching-178o"&gt;Rux&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is simple: make it easy to create graphical applications and games in Rux while leveraging the power and maturity of Pygame behind the scenes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;Rux already provides a clean and modern programming experience, but graphics and game development are areas where a lot of developers expect batteries included.&lt;/p&gt;

&lt;p&gt;Instead of building an entire graphics stack from scratch, Pux acts as a bridge between Rux and Pygame, allowing Rux programs to access graphics, input, timing, and other game-development features through a familiar API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Features
&lt;/h2&gt;

&lt;p&gt;So far, Pux includes functionality such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Window creation&lt;/li&gt;
&lt;li&gt;Simple event polling&lt;/li&gt;
&lt;li&gt;Drawing rectangles&lt;/li&gt;
&lt;li&gt;Screen clearing&lt;/li&gt;
&lt;li&gt;Frame presentation&lt;/li&gt;
&lt;li&gt;Basic timing and frame control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Pux::{
    pg_init,
    pg_running,
    pg_clear,
    pg_draw_rect,
    pg_present,
    pg_quit,
};

func Main() -&amp;gt; int {
    var x = 0;
    pg_init(
        800,
        700
    );

    while pg_running() == 1 {
        pg_clear(255, 255, 255);

        pg_draw_rect(
            x,
            x,
            200,
            150,
            175,
            175,
            175
        );

        x += 1;

        pg_present();
    }

    pg_quit();

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Some features I'm considering:&lt;/p&gt;

&lt;p&gt;Drawing circles, lines, and polygons&lt;br&gt;
Text rendering&lt;br&gt;
Image loading and rendering&lt;br&gt;
Keyboard and mouse input helpers&lt;br&gt;
Audio support&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Pux is still in active development, and contributions are always welcome!&lt;/p&gt;

&lt;p&gt;If you'd like to help improve Pux, feel free to open an issue or submit a pull request. Repo: &lt;a href="https://github.com/Natuworkguy/Pux" rel="noopener noreferrer"&gt;https://github.com/Natuworkguy/Pux&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whether it's bug fixes, new features, documentation improvements, examples, or code cleanup, every contribution helps make Pux better for the entire Rux community.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>programming</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Rux: A Modern Systems Programming Language Worth Watching</title>
      <dc:creator>Nathan C.</dc:creator>
      <pubDate>Wed, 27 May 2026 01:27:16 +0000</pubDate>
      <link>https://dev.to/natuworkguy/rux-a-modern-systems-programming-language-worth-watching-178o</link>
      <guid>https://dev.to/natuworkguy/rux-a-modern-systems-programming-language-worth-watching-178o</guid>
      <description>&lt;p&gt;The programming language ecosystem evolves quickly, but occasionally a new project appears with a genuinely interesting direction. One language that recently caught my attention is Rux.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rux-lang.dev" rel="noopener noreferrer"&gt;https://rux-lang.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rux is a compiled, strongly typed systems programming language focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;native performance&lt;/li&gt;
&lt;li&gt;explicit memory control&lt;/li&gt;
&lt;li&gt;modern syntax&lt;/li&gt;
&lt;li&gt;lightweight tooling&lt;/li&gt;
&lt;li&gt;low-level interoperability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While still in active development, the project already demonstrates a clear vision and a surprisingly polished developer experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Clean and Readable Syntax
&lt;/h2&gt;

&lt;p&gt;One of the first things that stands out about Rux is its syntax. It feels modern without becoming overly abstract.&lt;/p&gt;

&lt;p&gt;A minimal program looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func Main() -&amp;gt; int {
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The structure is straightforward and approachable, especially for developers familiar with languages such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The language emphasizes clarity and explicit behavior, which is particularly valuable in systems-level development.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real Example
&lt;/h2&gt;

&lt;p&gt;Here is a practical example using functions and formatted output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Std::Io::PrintLine;

func Add(a: int, b: int) -&amp;gt; int {
    return a + b;
}

func Main() -&amp;gt; int {
    let result = Add(10, 32);

    PrintLine("Result: {}", result);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The syntax remains concise while preserving strong typing and predictable behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  Systems Programming Features
&lt;/h2&gt;

&lt;p&gt;Rux is designed for low-level development and includes features commonly expected in systems languages, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pointers&lt;/li&gt;
&lt;li&gt;references&lt;/li&gt;
&lt;li&gt;foreign function interfaces (FFI)&lt;/li&gt;
&lt;li&gt;inline assembly&lt;/li&gt;
&lt;li&gt;direct memory management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;extern func malloc(size: uint) -&amp;gt; *opaque;
extern func free(ptr: *opaque);

func Main() -&amp;gt; int {
    let memory = malloc(64);

    free(memory);

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes Rux suitable for developers interested in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;operating systems&lt;/li&gt;
&lt;li&gt;game engines&lt;/li&gt;
&lt;li&gt;embedded tooling&lt;/li&gt;
&lt;li&gt;compilers&lt;/li&gt;
&lt;li&gt;performance-critical software&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Strong Type System
&lt;/h2&gt;

&lt;p&gt;Rux includes a broad set of explicit integer and floating-point types.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let small: int8 = 127;
let large: uint64 = 1000000;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The language avoids implicit conversions, encouraging safer and more predictable code.&lt;/p&gt;

&lt;p&gt;That design choice may feel stricter at first, but it helps eliminate a large category of subtle bugs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lightweight Tooling
&lt;/h2&gt;

&lt;p&gt;Another notable aspect of Rux is its tooling philosophy.&lt;/p&gt;

&lt;p&gt;The toolchain includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compiler&lt;/li&gt;
&lt;li&gt;package manager&lt;/li&gt;
&lt;li&gt;formatter&lt;/li&gt;
&lt;li&gt;project utilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creating and running a project is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rux new MyProject
&lt;span class="nb"&gt;cd &lt;/span&gt;MyProject
rux build
rux run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The workflow is refreshingly minimal compared to many modern ecosystems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Development Ecosystem
&lt;/h2&gt;

&lt;p&gt;Rux already includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;documentation&lt;/li&gt;
&lt;li&gt;package management support&lt;/li&gt;
&lt;li&gt;a standard library&lt;/li&gt;
&lt;li&gt;a Visual Studio Code extension&lt;/li&gt;
&lt;li&gt;active GitHub discussions and issue tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The VS Code extension provides syntax highlighting and language support, helping improve the overall developer experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Rux Is Interesting
&lt;/h2&gt;

&lt;p&gt;Many modern languages attempt to simplify development by adding layers of abstraction. Rux appears to take a different approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remain close to the hardware&lt;/li&gt;
&lt;li&gt;preserve explicit control&lt;/li&gt;
&lt;li&gt;maintain modern ergonomics&lt;/li&gt;
&lt;li&gt;avoid unnecessary complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That balance is difficult to achieve, especially for a newer language project.&lt;/p&gt;

&lt;p&gt;Although Rux is still early in development, it already shows strong technical direction and thoughtful language design decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Rux is still evolving, but it is already shaping up to be an impressive systems programming language project.&lt;/p&gt;

&lt;p&gt;If you are interested in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compilers&lt;/li&gt;
&lt;li&gt;systems programming&lt;/li&gt;
&lt;li&gt;language design&lt;/li&gt;
&lt;li&gt;native performance&lt;/li&gt;
&lt;li&gt;low-level software development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then Rux is absolutely worth exploring.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;br&gt;
&lt;a href="https://rux-lang.dev" rel="noopener noreferrer"&gt;https://rux-lang.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>performance</category>
      <category>programming</category>
      <category>systems</category>
    </item>
    <item>
      <title>I’ve Been Building a Python Game Engine</title>
      <dc:creator>Nathan C.</dc:creator>
      <pubDate>Thu, 21 May 2026 21:10:55 +0000</pubDate>
      <link>https://dev.to/natuworkguy/ive-been-building-a-python-game-engine-54jn</link>
      <guid>https://dev.to/natuworkguy/ive-been-building-a-python-game-engine-54jn</guid>
      <description>&lt;p&gt;I’ve been working on a project called ABS Engine, a Python game engine focused on keeping projects simple and organized.&lt;/p&gt;

&lt;p&gt;Instead of making developers write massive setup code, games are mostly controlled through a project file called &lt;code&gt;game.absp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It can define things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entities&lt;/li&gt;
&lt;li&gt;connected scripts&lt;/li&gt;
&lt;li&gt;image assets&lt;/li&gt;
&lt;li&gt;fullscreen settings&lt;/li&gt;
&lt;li&gt;resolution&lt;/li&gt;
&lt;li&gt;cursor visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example idea:&lt;/p&gt;

&lt;p&gt;Player entity&lt;br&gt;
→ script: scripts/player.py&lt;br&gt;
→ texture: data/images/player.png&lt;/p&gt;

&lt;p&gt;Game settings:&lt;br&gt;
→ fullscreen enabled&lt;br&gt;
→ cursor hidden&lt;br&gt;
→ resolution: 540x320&lt;/p&gt;

&lt;p&gt;Scripts can still access the engine API directly using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;engine.core&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The goal is making game projects easier to structure while still giving advanced users full access to the engine itself.&lt;/p&gt;

&lt;p&gt;I’m also working on build tools so projects can be packaged and shared easily without manually hunting for dependencies and assets.&lt;/p&gt;

&lt;p&gt;Still early in development, but it’s been one of the most fun programming projects I’ve worked on.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/Natuworkguy/ABS-Engine" rel="noopener noreferrer"&gt;https://github.com/Natuworkguy/ABS-Engine&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>gamedev</category>
      <category>gameengine</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
