<?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: Nathaniel Ramirez</title>
    <description>The latest articles on DEV Community by Nathaniel Ramirez (@nathanielramirez).</description>
    <link>https://dev.to/nathanielramirez</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%2F3264202%2Fa8799fd8-e6f1-4509-98f6-3bd1a47192db.jpg</url>
      <title>DEV Community: Nathaniel Ramirez</title>
      <link>https://dev.to/nathanielramirez</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nathanielramirez"/>
    <language>en</language>
    <item>
      <title>Express.js is slow so I made a lighter and faster framework.</title>
      <dc:creator>Nathaniel Ramirez</dc:creator>
      <pubDate>Wed, 27 May 2026 06:13:25 +0000</pubDate>
      <link>https://dev.to/nathanielramirez/expressjs-is-slow-so-i-made-a-lighter-and-faster-framework-2mf1</link>
      <guid>https://dev.to/nathanielramirez/expressjs-is-slow-so-i-made-a-lighter-and-faster-framework-2mf1</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cover image contains modified NASA imagery. Credits to NASA and the original photographers. Vivae logo licensed under CC BY-NC-ND.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;I built an extremely light, dependency-free Node.js framework for HTTP servers because I wanted a lighter framework with fewer dependencies and more built-in functionality than Express.js&lt;/p&gt;

&lt;p&gt;The framework includes a plugin creation tool, supports both CommonJS and ESM all the way back to Node.js 16, and includes built-in TypeScript types. It also has a wildcard routing system and static serving, &lt;/p&gt;

&lt;h2&gt;
  
  
  How it started
&lt;/h2&gt;

&lt;p&gt;I love coding open-source projects that are better than existing tools, and I try to make it as light as possible. In May of 2025 I decided I wanted to create a better backend framework than Express.js. I spent almost two months of pure dedication. However, it was not getting traction at all, and I eventually took a break from coding.&lt;/p&gt;

&lt;p&gt;About a year later, in late April 2026, I looked back at my GitHub profile and remembered how much dedication I had for the project. I had literally rediscovered my own work, so I decided to try out the framework. It had surprisingly fast performance but had several bugs. I fixed as much as I could but decided to step back again because I couldn't figure out how to fix the others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/vivaejs/vivae" rel="noopener noreferrer"&gt;https://github.com/vivaejs/vivae&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install vivae
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is a minimal example of a Vivae app in action.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;serve&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vivae/plugins&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;vivae&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vivae&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&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="nf"&gt;vivae&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;serve&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Defaults to public directory&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&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;*&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="nx"&gt;vobj&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;vobj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respond&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&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;Content-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;text/html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;vobj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This is my custom 404 page!&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="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;One afternoon, I was checking my email during class and noticed the GitHub Finish-Up-A-Thon, and it immediately motivated me to finish my project and write an article about it to gain traction. &lt;/p&gt;

&lt;p&gt;After school, I read through the email more carefully and saw that it mentioned GitHub Copilot. I decided to look into it because I remembered when Copilot first came out it required a paid subscription. When I realized it was now free, I decided to give it a try and asked it to help fix some code I had been struggling with. &lt;/p&gt;

&lt;p&gt;It already solved the issue in under 10 minutes for something I tried to fix last month. The problem was so simple, I had forgotten to include the &lt;code&gt;options&lt;/code&gt; object, which caused &lt;code&gt;directory&lt;/code&gt; to be undefined and I somehow managed to keep overlooking it.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&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%2Fd3uk5xepel5ksj2q3vf6.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%2Fd3uk5xepel5ksj2q3vf6.png" alt="Screenshot of code and Github Copilot session" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had barely used AI models to help me code but now I am reconsidering because of how fast they can identify and debug my code. GitHub Copilot supported my process because I was able to fix my built-in static serving plugin part in the framework.&lt;/p&gt;

&lt;p&gt;I built this project by myself, and with Copilot's help fixing a major bug I will continue using it in the future. It is still not perfect, but that is exactly why I am looking for contributors to help improve it and take it further. As of now, I have released a more stable version of Vivae (&lt;a href="https://github.com/vivaejs/vivae/releases/tag/v1.1.1" rel="noopener noreferrer"&gt;v1.1.1&lt;/a&gt;) with plugin creation, static serving, and wildcard routing working as expected, and I can relax a bit while hoping to find more contributors. Thank you so much for reading my article!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>javascript</category>
      <category>node</category>
    </item>
  </channel>
</rss>
