<?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: José Ramírez</title>
    <description>The latest articles on DEV Community by José Ramírez (@jose_ramirez).</description>
    <link>https://dev.to/jose_ramirez</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%2F2710320%2F4ef29ce4-07c6-4f39-905e-f489afed2a94.jpg</url>
      <title>DEV Community: José Ramírez</title>
      <link>https://dev.to/jose_ramirez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jose_ramirez"/>
    <language>en</language>
    <item>
      <title>Building SibuJS: What I'm Learning About Frontend Architecture 🚀</title>
      <dc:creator>José Ramírez</dc:creator>
      <pubDate>Fri, 23 May 2025 16:14:19 +0000</pubDate>
      <link>https://dev.to/jose_ramirez/building-sibujs-what-im-learning-about-frontend-architecture-2daj</link>
      <guid>https://dev.to/jose_ramirez/building-sibujs-what-im-learning-about-frontend-architecture-2daj</guid>
      <description>&lt;p&gt;I'm creating &lt;strong&gt;SibuJS&lt;/strong&gt; - a frontend framework built on a simple&lt;br&gt;
philosophy: &lt;strong&gt;everything is a function&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Core Idea Behind Sibu:
&lt;/h2&gt;

&lt;p&gt;Instead of JSX, templates, or complex abstractions, what if we treated&lt;br&gt;
UI as pure function composition?&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&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="nf"&gt;div&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;box&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;children&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="nf"&gt;button&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; 
      &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Click me&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;click&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="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;Hello!&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="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No JSX compilation. No virtual diffing. Just functions calling&lt;br&gt;
functions, directly manipulating the DOM with fine-grained reactivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Discovering:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;React's Genius:&lt;/strong&gt; While studying React's design, I realize how&lt;br&gt;
brilliantly it abstracts complexity. &lt;code&gt;disabled={isRunning}&lt;/code&gt; looks&lt;br&gt;
simple, but there's sophisticated handling underneath.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solid's Precision:&lt;/strong&gt; Learning from SolidJS showed me how fine-grained&lt;br&gt;
reactivity can eliminate unnecessary re-renders entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vue's Developer Experience:&lt;/strong&gt; Exploring Vue's approach revealed how&lt;br&gt;
much developer ergonomics matter for adoption.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Svelte's Compilation:&lt;/strong&gt; Understanding Svelte taught me that build-time&lt;br&gt;
optimizations can eliminate runtime overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Learning:
&lt;/h2&gt;

&lt;p&gt;Building a framework is like reverse-engineering the web itself. Every&lt;br&gt;
decision other frameworks made suddenly makes sense when you face the&lt;br&gt;
same problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Why does React have keys for lists? (DOM reconciliation is hard)&lt;/li&gt;
&lt;li&gt;  Why does Vue have computed properties? (Dependency tracking is
tricky)\&lt;/li&gt;
&lt;li&gt;  Why does Svelte compile everything? (Runtime performance vs bundle
size)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Already Working
&lt;/h2&gt;

&lt;p&gt;Here's what SibuJS already delivers:&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Architecture
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Function-based UI composition&lt;/strong&gt; - Everything is a pure JavaScript
function&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Direct DOM manipulation&lt;/strong&gt; - No virtual DOM overhead, straight to
the real DOM&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero build configuration&lt;/strong&gt; - Works out-of-the-box without
compilation steps&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;TypeScript support&lt;/strong&gt; - Fully typed APIs for better developer
experience&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reactivity System
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Fine-grained reactivity&lt;/strong&gt; - Only updates what actually changed&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Automatic dependency tracking&lt;/strong&gt; - Smart detection of reactive
dependencies&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;useState hook&lt;/strong&gt; - Simple state management with getter/setter
pattern&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;useEffect hook&lt;/strong&gt; - Side effects with automatic cleanup&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;useStore hook&lt;/strong&gt; - Global state management across components&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;useWatch hook&lt;/strong&gt; - Watch reactive values for changes&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;useComputed&lt;/strong&gt; - Computed values, derived state that updates
reactively&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DOM Utilities
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Complete tag factory&lt;/strong&gt; - All HTML elements as functions (div,
span, button, etc.)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Event handling&lt;/strong&gt; - Clean event listener attachment and management&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Attribute binding&lt;/strong&gt; - Static and reactive attribute assignment&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Children composition&lt;/strong&gt; - Nested element hierarchies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advanced Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Error boundaries&lt;/strong&gt; - Catch and handle component errors gracefully&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Nested error handling&lt;/strong&gt; - Error boundaries that work with child
components&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Automatic cleanup&lt;/strong&gt; - Memory leak prevention with proper resource
management&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Effect dependency resolution&lt;/strong&gt; - Smart re-running of effects when
dependencies change&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Routing system&lt;/strong&gt; - You do not require an external dependency for
building SPA.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Developer Experience
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Minimal learning curve&lt;/strong&gt; - Just functions and JavaScript objects
(still need improvements to hide some complexity)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;No special syntax&lt;/strong&gt; - Pure JavaScript, no JSX or template
languages&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Immediate feedback&lt;/strong&gt; - Direct DOM updates for fast development
iteration&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Built-in debugging&lt;/strong&gt; - Clear error messages and component
inspection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Minimal runtime footprint&lt;/strong&gt; - Lightweight core with no unnecessary
abstractions&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Efficient updates&lt;/strong&gt; - Only re-renders components that actually
need updates&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Memory management&lt;/strong&gt; - Automatic cleanup of event listeners and
effects&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Fast startup&lt;/strong&gt; - No heavy initial parsing or compilation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current Status
&lt;/h2&gt;

&lt;p&gt;SibuJS is already functional for building real applications. The core&lt;br&gt;
reactive system works, DOM manipulation is solid, and the developer&lt;br&gt;
experience is getting refined with each iteration.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next for Sibu:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Simplifying the attribute API and adding more developer convenience
features.&lt;/li&gt;
&lt;li&gt;  More reactive primitives&lt;/li&gt;
&lt;li&gt;  Performance benchmarks against established frameworks&lt;/li&gt;
&lt;li&gt;  Developer experience improvements learned from Vue&lt;/li&gt;
&lt;li&gt;  Tons of already listed features&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;The honest truth:&lt;/strong&gt; I'm not a frontend framework developer veteran.&lt;br&gt;
I'm learning more about React, Vue, Angular, Svelte and Solid &lt;em&gt;while&lt;/em&gt;&lt;br&gt;
building Sibu. Each feature I implement teaches me why existing&lt;br&gt;
solutions work the way they do.&lt;/p&gt;

&lt;p&gt;But that fresh perspective might be exactly what leads to something&lt;br&gt;
different.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where is it?
&lt;/h2&gt;

&lt;p&gt;If SibuJS reaches a significant level of maturity enabling its use in&lt;br&gt;
large-scale projects, I'll publish the project as open source under the&lt;br&gt;
MIT license.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;SibuJS is my exploration into function-based frontend architecture -&lt;br&gt;
prioritizing direct DOM manipulation, fine-grained reactivity, and zero&lt;br&gt;
build steps. Early stage, but every line teaches me something new about&lt;br&gt;
web development.&lt;/em&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  WebDevelopment #JavaScript #Frontend #Learning #FrameworkDesign #SibuJS
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Performance
&lt;/h1&gt;




</description>
    </item>
  </channel>
</rss>
