DEV Community

Cover image for Express.js is slow so I made a lighter and faster framework.
Nathaniel Ramirez
Nathaniel Ramirez

Posted on

Express.js is slow so I made a lighter and faster framework.

GitHub โ€œFinish-Up-A-Thonโ€ Challenge Submission

This is a submission for the GitHub Finish-Up-A-Thon Challenge

Cover image contains modified NASA imagery. Credits to NASA and the original photographers. Vivae logo licensed under CC BY-NC-ND.

Overview

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

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,

How it started

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.

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.

Demo

https://github.com/vivaejs/vivae

npm install vivae
Enter fullscreen mode Exit fullscreen mode

Here is a minimal example of a Vivae app in action.

import { serve } from "vivae/plugins";
import vivae from "vivae";

const app = vivae();

app.use(serve()); // Defaults to public directory

app.use("GET", "*", (vobj) => {
  vobj.respond(404, { "Content-Type": "text/html" });
  vobj.send("This is my custom 404 page!");
});

app.listen(3000);
Enter fullscreen mode Exit fullscreen mode

The Comeback Story

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.

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.

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 options object, which caused directory to be undefined and I somehow managed to keep overlooking it.

My Experience with GitHub Copilot

Screenshot of code and Github Copilot session

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.

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 (v1.1.1) 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!

Top comments (0)