<?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: Little Prince</title>
    <description>The latest articles on DEV Community by Little Prince (@thelittleprince1218).</description>
    <link>https://dev.to/thelittleprince1218</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%2F3215870%2F08a6fbd7-de07-4d07-b4a9-e46e74c0c622.jpg</url>
      <title>DEV Community: Little Prince</title>
      <link>https://dev.to/thelittleprince1218</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thelittleprince1218"/>
    <language>en</language>
    <item>
      <title>PrinceJS vs Hono vs Express vs Elysia: Benchmarking the Fastest Bun Frameworks in 2025</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Fri, 20 Mar 2026 18:00:00 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/princejs-vs-hono-vs-express-vs-elysia-benchmarking-the-fastest-bun-frameworks-in-2025-c73</link>
      <guid>https://dev.to/thelittleprince1218/princejs-vs-hono-vs-express-vs-elysia-benchmarking-the-fastest-bun-frameworks-in-2025-c73</guid>
      <description>&lt;p&gt;If you're building a backend with Bun in 2025 and you care about raw performance, you've probably looked at Hono and Elysia. They're fast. But there's a new framework sitting comfortably in the top three — and it was built by a 13-year-old from Nigeria.&lt;/p&gt;

&lt;p&gt;That framework is &lt;strong&gt;PrinceJS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This post breaks down the real benchmark numbers, what they mean for your application, and why PrinceJS might be the right choice even though it isn't the fastest framework in the list.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Benchmark Numbers
&lt;/h2&gt;

&lt;p&gt;All benchmarks were run with &lt;code&gt;oha -c 100 -z 30s&lt;/code&gt; on Windows 10. Same machine, same conditions, no tricks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Req/s&lt;/th&gt;
&lt;th&gt;Total Requests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Elysia&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;25,312&lt;/td&gt;
&lt;td&gt;759k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hono&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;22,124&lt;/td&gt;
&lt;td&gt;664k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PrinceJS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;21,748&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;653k&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;9,325&lt;/td&gt;
&lt;td&gt;280k&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;PrinceJS hits &lt;strong&gt;21,748 requests per second&lt;/strong&gt; — third globally among Bun frameworks and &lt;strong&gt;2.3x faster than Express&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Elysia leads the pack, Hono is second, and PrinceJS is right behind at third. The gap between Hono and PrinceJS is about 1.7%. The gap between PrinceJS and Express is enormous.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why PrinceJS is Competitive Despite Being Third
&lt;/h2&gt;

&lt;p&gt;Raw req/s isn't the only metric that matters. Here's the full picture:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Req/s&lt;/th&gt;
&lt;th&gt;Bundle Size&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Elysia&lt;/td&gt;
&lt;td&gt;25,312&lt;/td&gt;
&lt;td&gt;~22kb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hono&lt;/td&gt;
&lt;td&gt;22,124&lt;/td&gt;
&lt;td&gt;~14kb&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PrinceJS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;21,748&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.8kb gzipped&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;9,325&lt;/td&gt;
&lt;td&gt;200kb+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;PrinceJS is the &lt;strong&gt;smallest Bun framework in this comparison at 4.8kb gzipped&lt;/strong&gt;. That bundle size is why PrinceJS loads in 97 milliseconds on Slow 3G — a real-world metric that req/s benchmarks don't capture.&lt;/p&gt;

&lt;p&gt;For developers building APIs that start up quickly, edge functions, or any backend where cold start time matters — the bundle size difference between PrinceJS and Elysia is meaningful.&lt;/p&gt;




&lt;h2&gt;
  
  
  What PrinceJS Actually Ships
&lt;/h2&gt;

&lt;p&gt;Despite being 4.8kb gzipped, PrinceJS ships a remarkably complete feature set. This isn't a minimal micro-framework — it's a full-featured framework that's been engineered to stay small.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Import&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Middleware (CORS, Logger, Rate Limit, Auth, JWT)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/middleware&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zod Validation&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/middleware&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cookies &amp;amp; IP Detection&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File Uploads&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/helpers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSockets&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server-Sent Events&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/helpers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sessions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/middleware&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response Compression&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/middleware&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In-memory Cache&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/helpers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cron Scheduler&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/scheduler&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAPI + Scalar Docs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JSX / SSR&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/jsx&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQLite Database&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/db&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugin System&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End-to-End Type Safety&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs/client&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy Adapters (Vercel, Cloudflare, Deno, Node)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;princejs/vercel&lt;/code&gt; etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lifecycle Hooks&lt;/td&gt;
&lt;td&gt;&lt;code&gt;princejs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is the full feature list of a production-ready framework, shipping in 4.8kb gzipped.&lt;/p&gt;




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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun add princejs
&lt;span class="c"&gt;# or&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;princejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A complete server with middleware in under 10 lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&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;prince&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;princejs&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;logger&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;princejs/middleware&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;prince&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;cors&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;logger&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;get&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&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 PrinceJS!&lt;/span&gt;&lt;span class="dl"&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/:id&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;req&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="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&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;
  
  
  PrinceJS vs Hono vs Elysia — Which Should You Use?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use PrinceJS if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bundle size and cold start time matter (edge functions, serverless, mobile backends)&lt;/li&gt;
&lt;li&gt;You want the most complete feature set in the smallest package&lt;/li&gt;
&lt;li&gt;You need deploy adapters for Vercel, Cloudflare Workers, Deno, or Node&lt;/li&gt;
&lt;li&gt;You want built-in OpenAPI docs, SQLite, WebSockets, and SSE without adding dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Elysia if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need the absolute maximum raw req/s&lt;/li&gt;
&lt;li&gt;You're heavily TypeScript-first and want Elysia's type system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Hono if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need Hono's specific middleware ecosystem&lt;/li&gt;
&lt;li&gt;You're deploying to Cloudflare Workers natively&lt;/li&gt;
&lt;li&gt;You want the second-fastest option with a larger community&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The One-Line Summary
&lt;/h2&gt;

&lt;p&gt;PrinceJS is the third fastest Bun framework in the world, 2.3x faster than Express, ships in 4.8kb gzipped with a full production feature set, and was built in three days by a 13-year-old from Abuja, Nigeria.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun add princejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://princejs.vercel.app" rel="noopener noreferrer"&gt;princejs.vercel.app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://npmjs.com/package/princejs" rel="noopener noreferrer"&gt;npmjs.com/package/princejs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/MatthewTheCoder1218/princejs" rel="noopener noreferrer"&gt;github.com/MatthewTheCoder1218/princejs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;X:&lt;/strong&gt; &lt;a href="https://x.com/Lil_Prince_1218" rel="noopener noreferrer"&gt;@Lil_Prince_1218&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bunjs</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>performance</category>
    </item>
    <item>
      <title>I Got Bored of Tutorials at 13 and Built a Top-3 Bun Framework Instead</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Thu, 19 Mar 2026 18:00:00 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/i-got-bored-of-tutorials-at-13-and-built-a-top-3-bun-framework-instead-4j3a</link>
      <guid>https://dev.to/thelittleprince1218/i-got-bored-of-tutorials-at-13-and-built-a-top-3-bun-framework-instead-4j3a</guid>
      <description>&lt;p&gt;There's a trap that kills most developers before they ever get good.&lt;/p&gt;

&lt;p&gt;You finish a tutorial. You understand it. You feel ready. Then you open a blank file and freeze — because the tutorial told you what to type, but it didn't teach you how to think.&lt;/p&gt;

&lt;p&gt;So you watch another tutorial. Then another. Then another.&lt;/p&gt;

&lt;p&gt;That's tutorial hell. I almost got stuck in it at 13. Instead I built PrinceJS — one of the top three fastest Bun web frameworks in the world.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Tutorial Hell Trap
&lt;/h2&gt;

&lt;p&gt;I'm from Abuja, Nigeria. I've been coding for a couple of years, mostly through YouTube videos and online courses.&lt;/p&gt;

&lt;p&gt;The problem with tutorials is that they're engineered to make you feel productive. You follow along, the code works, and you get the dopamine hit of seeing something run. But when the tutorial ends and you try to build something yourself, you realise you can't.&lt;/p&gt;

&lt;p&gt;I watched videos about building to-do apps, weather apps, CRUD apps. People kept saying that building apps like these wouldn't get you anywhere as a developer — that you needed to build something real. I agreed. But I didn't know what "something real" meant. So I watched more tutorials.&lt;/p&gt;

&lt;p&gt;Then one day I just got bored.&lt;/p&gt;

&lt;p&gt;Not motivated. Not inspired. Just completely bored of watching other people write code. So I closed YouTube and asked myself one question: &lt;strong&gt;what do I actually use every day as a developer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A web framework.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three Days on a 2015 Windows Laptop
&lt;/h2&gt;

&lt;p&gt;I had no tutorial. No roadmap. Just Bun's source code, some CS reading about trie data structures, and a blank file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day one:&lt;/strong&gt; I built the routing layer. Most frameworks use hash maps for URL routing — O(1) average, but hash collisions degrade performance under heavy concurrent load. I used a compressed trie instead. O(k) where k equals the number of URL path segments. Zero collisions. Fully predictable under any load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day two:&lt;/strong&gt; I had a working server. I ran my first benchmark.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;19,036 requests per second on Bun.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I screamed. Genuinely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day three:&lt;/strong&gt; Optimisation. Removed one unnecessary function call from the hot path. Added response header caching. Set a rule I've kept ever since: &lt;strong&gt;the bundle stays under 5kb. No runtime dependencies.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Final benchmark: &lt;strong&gt;21,748 requests per second&lt;/strong&gt; — third fastest Bun framework in the world, benchmarked with &lt;code&gt;oha -c 100 -z 30s&lt;/code&gt; on Windows 10.&lt;/p&gt;

&lt;p&gt;And because of the 4.8kb gzipped bundle: &lt;strong&gt;97 milliseconds on Slow 3G&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm from Nigeria. Slow 3G is real here. I built for it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What PrinceJS Is Today
&lt;/h2&gt;

&lt;p&gt;Three days turned into a v2 release. PrinceJS now ships a full production feature set — still in 4.8kb gzipped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&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;prince&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;princejs&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rateLimit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;compress&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;princejs/middleware&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;upload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sse&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;princejs/helpers&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;cron&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;princejs/scheduler&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;db&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;princejs/db&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;prince&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;cors&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;logger&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;rateLimit&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;window&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&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;compress&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Routes with params&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/:id&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;req&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="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="c1"&gt;// WebSockets&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;ws&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/chat&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="na"&gt;open&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ws&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;ws&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;Connected!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&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;ws&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="s2"&gt;`Echo: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Server-Sent Events&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/events&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sse&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&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="nf"&gt;setInterval&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;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sseSend&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Cached route&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&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="na"&gt;time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;})));&lt;/span&gt;

&lt;span class="c1"&gt;// SQLite&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqlite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./db.sqlite&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;CREATE TABLE IF NOT EXISTS users (id TEXT)&lt;/span&gt;&lt;span class="dl"&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users&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="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SELECT * FROM users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// Cron job&lt;/span&gt;
&lt;span class="nf"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*/1 * * * *&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="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;heartbeat&lt;/span&gt;&lt;span class="dl"&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;p&gt;Every feature in that example ships inside the 4.8kb bundle. No separate installs. No bloating.&lt;/p&gt;




&lt;h2&gt;
  
  
  Auto-Generated OpenAPI Docs
&lt;/h2&gt;

&lt;p&gt;One of the features I'm most proud of in v2: define a route once and get runtime validation, type safety, and Scalar UI documentation automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&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;prince&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;princejs&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;z&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;zod&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;prince&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;api&lt;/span&gt; &lt;span class="o"&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;openapi&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My API&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.0.0&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;/docs&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="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;moon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&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;/users&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="na"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Create user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tags&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;users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;email&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="na"&gt;response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&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;span class="nx"&gt;req&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="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randomUUID&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parsedBody&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;span class="c1"&gt;// GET /docs → beautiful Scalar UI, auto-updated&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  End-to-End Type Safety
&lt;/h2&gt;

&lt;p&gt;Define your API contract once, get full TypeScript autocompletion on the client automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ApiContract&lt;/span&gt; &lt;span class="o"&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;GET /users/:id&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="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="nl"&gt;response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createClient&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;princejs/client&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;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createClient&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ApiContract&lt;/span&gt;&lt;span class="o"&gt;&amp;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;http://localhost:3000&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;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/:id&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="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;42&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;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="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// typed as string ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Real Numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Requests/sec&lt;/td&gt;
&lt;td&gt;21,748 (oha -c 100 -z 30s, Windows 10)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global rank&lt;/td&gt;
&lt;td&gt;#3 fastest Bun framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vs Express&lt;/td&gt;
&lt;td&gt;2.3x faster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vs Hono&lt;/td&gt;
&lt;td&gt;1.7% slower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle size&lt;/td&gt;
&lt;td&gt;4.8kb gzipped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow 3G load&lt;/td&gt;
&lt;td&gt;97ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime dependencies&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm total downloads&lt;/td&gt;
&lt;td&gt;5.2k and growing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built in&lt;/td&gt;
&lt;td&gt;3 days, age 13, Abuja Nigeria&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Boredom is a better teacher than motivation.&lt;/strong&gt; I built PrinceJS because I had nothing to watch — not because I felt inspired. The blank file was the tutorial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read source code, not tutorials.&lt;/strong&gt; In three days of reading Bun's source code and trie papers I learned more than I had in months of following along with videos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honesty about tradeoffs builds trust.&lt;/strong&gt; PrinceJS is 1.7% slower than Hono on req/s. I publish that number openly in the README. Developers respect honesty more than marketing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build for the users you know.&lt;/strong&gt; I'm from Nigeria. I optimised for Slow 3G because I know what it feels like. The 97ms result is a product of building for my reality, not for a benchmark chart.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun add princejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://princejs.vercel.app" rel="noopener noreferrer"&gt;princejs.vercel.app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://npmjs.com/package/princejs" rel="noopener noreferrer"&gt;npmjs.com/package/princejs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/MatthewTheCoder1218/princejs" rel="noopener noreferrer"&gt;github.com/MatthewTheCoder1218/princejs&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;X:&lt;/strong&gt; &lt;a href="https://x.com/Lil_Prince_1218" rel="noopener noreferrer"&gt;@Lil_Prince_1218&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you're stuck in tutorial hell right now — close the video. Open a blank file. Build something you actually use. You don't need permission. You're already ready.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bunjs</category>
      <category>webdev</category>
      <category>career</category>
      <category>javascript</category>
    </item>
    <item>
      <title>PrinceJS 2.1: The 4.8kB Bun Framework Just Got Even Faster (21.7k req/s) and Fully Loaded</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Fri, 13 Mar 2026 01:09:00 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/princejs-21-the-48kb-bun-framework-just-got-even-faster-217k-reqs-and-fully-loaded-4fo2</link>
      <guid>https://dev.to/thelittleprince1218/princejs-21-the-48kb-bun-framework-just-got-even-faster-217k-reqs-and-fully-loaded-4fo2</guid>
      <description>&lt;p&gt;Hey DEV! 👋&lt;/p&gt;

&lt;p&gt;A few months ago, I shared that I—a 13-year-old developer from Nigeria—built a Bun framework that outperformed Express. The response was incredible, and the feedback even better.&lt;/p&gt;

&lt;p&gt;Today I'm back with &lt;strong&gt;PrinceJS v2.1&lt;/strong&gt;, and I've got some updates to share. The old numbers floating around (19k req/s, 2.4kB gzipped) are outdated. &lt;strong&gt;Here's the real story.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Updated Benchmarks (oha -c 100 -z 30s on Windows 10)
&lt;/h2&gt;

&lt;p&gt;After the community pointed out I should use &lt;code&gt;oha&lt;/code&gt; instead of &lt;code&gt;bombardier&lt;/code&gt;, I re-ran all tests. The results put PrinceJS firmly in the top three Bun frameworks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Req/s&lt;/th&gt;
&lt;th&gt;Total Requests (30s)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Elysia&lt;/td&gt;
&lt;td&gt;25,312&lt;/td&gt;
&lt;td&gt;759k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hono&lt;/td&gt;
&lt;td&gt;22,124&lt;/td&gt;
&lt;td&gt;664k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PrinceJS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;21,748&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;653k&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;9,325&lt;/td&gt;
&lt;td&gt;280k&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;✅ &lt;strong&gt;PrinceJS is 2.3× faster than Express.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Still comfortably in the top 3.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  📦 True Bundle Size (Not 97kB!)
&lt;/h2&gt;

&lt;p&gt;I also corrected the size reporting. PrinceJS is &lt;strong&gt;tree‑shakeable&lt;/strong&gt; and has &lt;strong&gt;zero dependencies&lt;/strong&gt;. The real numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minified:&lt;/strong&gt; 14.7kB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minified + Gzipped:&lt;/strong&gt; 4.8kB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Download on Slow 3G:&lt;/strong&gt; 97ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Download on Emerging 4G:&lt;/strong&gt; 6ms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That tiny footprint makes it perfect for edge functions, serverless, and any environment where every kilobyte counts.&lt;/p&gt;
&lt;h2&gt;
  
  
  ✨ What's New in v2.1?
&lt;/h2&gt;

&lt;p&gt;Version 2.1 isn't just a performance fix—it's a massive feature drop. PrinceJS is now a &lt;strong&gt;batteries-included super-framework&lt;/strong&gt; that stays tiny.&lt;/p&gt;
&lt;h3&gt;
  
  
  📖 OpenAPI + Scalar Docs (Auto‑magical)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&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;openapi&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My API&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.0.0&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;/docs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&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;/users/:id&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="na"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&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;span class="nx"&gt;req&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="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="c1"&gt;// → GET /docs serves a beautiful Scalar UI playground&lt;/span&gt;
&lt;span class="c1"&gt;// → GET /docs.json serves raw OpenAPI spec&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎣 Lifecycle Hooks (Observability built-in)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onRequest&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&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="cm"&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;onBeforeHandle&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;method&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="cm"&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;onAfterHandle&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="cm"&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;onError&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;req&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="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🔌 Plugin System
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myPlugin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PrincePlugin&lt;/span&gt; &lt;span class="o"&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="nx"&gt;opts&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="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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myPlugin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🌍 Deploy Adapters
&lt;/h3&gt;

&lt;p&gt;Deploy anywhere with a single import:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vercel Edge (&lt;code&gt;princejs/vercel&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Cloudflare Workers (&lt;code&gt;princejs/cloudflare&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Deno Deploy (&lt;code&gt;princejs/deno&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Node.js (native or Express) (&lt;code&gt;princejs/node&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🍪 Cookies &amp;amp; IP Detection
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/profile&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;req&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="na"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cookies&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;clientIp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ip&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;h3&gt;
  
  
  🧰 Helpers Galore (No Dependencies!)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cron()&lt;/code&gt; – schedule jobs natively&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cache()&lt;/code&gt; – in‑memory TTL cache&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;upload()&lt;/code&gt; – handle file uploads&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sse()&lt;/code&gt; – server‑sent events&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;db.sqlite()&lt;/code&gt; – SQLite ORM powered by Bun&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;jwt()&lt;/code&gt;, &lt;code&gt;session()&lt;/code&gt;, &lt;code&gt;compress()&lt;/code&gt; – all in middleware&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚛️ JSX/SSR (Without React)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&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;Html&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;H1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;render&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;princejs/jsx&lt;/span&gt;&lt;span class="dl"&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;get&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;H1&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 PrinceJS!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)))));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🔒 End‑to‑End Type Safety
&lt;/h3&gt;

&lt;p&gt;Define a contract once and get full autocomplete on the client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&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;createClient&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;princejs/client&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;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createClient&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ApiContract&lt;/span&gt;&lt;span class="o"&gt;&amp;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;http://localhost:3000&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;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/:id&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="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;42&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="c1"&gt;// user.name is typed as string ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🚀 Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun add princejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&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;prince&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;princejs&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;prince&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;get&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;world&lt;/span&gt;&lt;span class="dl"&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;
  
  
  📚 Why PrinceJS?
&lt;/h2&gt;

&lt;p&gt;Most "fast" frameworks are bare‑bones routers. PrinceJS gives you &lt;strong&gt;everything&lt;/strong&gt; you need for production—OpenAPI, cron, SQLite, WebSockets, JSX, adapters—all in &lt;strong&gt;4.8kB gzipped&lt;/strong&gt; and &lt;strong&gt;zero dependencies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I built this because I wanted a framework that was both tiny and powerful. A framework that a 13‑year‑old in Nigeria could use to build world‑class apps without pulling in hundreds of dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/MatthewTheCoder1218/princejs" rel="noopener noreferrer"&gt;github.com/MatthewTheCoder1218/princejs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/princejs" rel="noopener noreferrer"&gt;npmjs.com/package/princejs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://princejs.vercel.app" rel="noopener noreferrer"&gt;princejs.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Twitter:&lt;/strong&gt; &lt;a href="https://twitter.com/princejs_bun" rel="noopener noreferrer"&gt;@princejs_bun&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Built with ❤️ in Nigeria.&lt;br&gt;&lt;br&gt;
Try it out and let me know what you build! 🚀&lt;/p&gt;

</description>
      <category>bunjs</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>I’m 13 and I built a Bun framework that’s 2x faster than Express 🚀</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Sat, 28 Feb 2026 04:05:48 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/im-13-and-i-built-a-bun-framework-thats-2x-faster-than-express-onp</link>
      <guid>https://dev.to/thelittleprince1218/im-13-and-i-built-a-bun-framework-thats-2x-faster-than-express-onp</guid>
      <description>&lt;p&gt;It’s a 97kB (2.4kB gzipped) Bun-native framework that hits &lt;strong&gt;21,748 req/s&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  👑 Why PrinceJS?
&lt;/h3&gt;

&lt;p&gt;Most "fast" frameworks are just bare-bones routers. PrinceJS is a &lt;strong&gt;Super-Framework&lt;/strong&gt;. It’s tiny but has "batteries included":&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Built-in SQLite ORM&lt;/strong&gt; (Powered by Bun.sqlite)&lt;br&gt;
✅ &lt;strong&gt;Native Cron Scheduler&lt;/strong&gt; (No extra npm packages needed)&lt;br&gt;
✅ &lt;strong&gt;Functional JSX Rendering&lt;/strong&gt; (Clean UI without the React bloat)&lt;br&gt;
✅ &lt;strong&gt;OpenAPI/Swagger Generation&lt;/strong&gt; (Auto-sync your docs)&lt;br&gt;
✅ &lt;strong&gt;Validation with Zod&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ The Benchmarks (oha -c 100 -z 30s)
&lt;/h3&gt;

&lt;p&gt;On an Intel i7-6600U, PrinceJS matches the giants:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Req/s&lt;/th&gt;
&lt;th&gt;Size (Gzipped)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PrinceJS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;21,748&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.4 kB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hono&lt;/td&gt;
&lt;td&gt;22,124&lt;/td&gt;
&lt;td&gt;7.5 kB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Elysia&lt;/td&gt;
&lt;td&gt;25,312&lt;/td&gt;
&lt;td&gt;64.8 kB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;9,325&lt;/td&gt;
&lt;td&gt;~2 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🛠️ Minimalist DX
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
typescript
import { prince } from "princejs";
import { Html, Body, H1, render } from "princejs/jsx";

const app = prince();

app.get("/", () =&amp;gt; render(
  Html(Body(H1("Hello from PrinceJS!")))
));

app.listen(3000);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>bunjs</category>
      <category>typescript</category>
    </item>
    <item>
      <title>PrinceJS – The Bun Framework Built by a 13-Year-Old Dev. Ranked #3 in Performance.</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Thu, 04 Dec 2025 05:53:32 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/princejs-the-bun-framework-built-by-a-13-year-old-dev-ranked-3-in-performance-8o</link>
      <guid>https://dev.to/thelittleprince1218/princejs-the-bun-framework-built-by-a-13-year-old-dev-ranked-3-in-performance-8o</guid>
      <description>&lt;p&gt;I’ve been building &lt;strong&gt;PrinceJS&lt;/strong&gt; over the last few months, and today it’s officially among the &lt;strong&gt;fastest Bun frameworks&lt;/strong&gt; available.&lt;/p&gt;

&lt;p&gt;Benchmarked with &lt;code&gt;oha -c 100 -z 30s&lt;/code&gt;, it hits &lt;strong&gt;21,748 req/s&lt;/strong&gt;, placing it just behind Elysia (~25k) and Hono (~22k), and well ahead of Express (~9k).&lt;/p&gt;

&lt;h3&gt;
  
  
  🧰 What’s Inside:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in middleware&lt;/strong&gt; – CORS, logger, rate limiting, static file serving&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation&lt;/strong&gt; – powered by Zod, integrated at the framework level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAPI auto-docs&lt;/strong&gt; – &lt;code&gt;/docs&lt;/code&gt; endpoint out of the box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Helpers&lt;/strong&gt; – &lt;code&gt;cache()&lt;/code&gt;, &lt;code&gt;upload()&lt;/code&gt;, &lt;code&gt;email()&lt;/code&gt;, &lt;code&gt;cron()&lt;/code&gt;, all tree-shakable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSX support&lt;/strong&gt; – render HTML directly if needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is &lt;strong&gt;modular, lightweight, and designed for real-world use&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
I built this on my school laptop (i7-6600U, 8GB RAM) and optimized it for speed without bloat.&lt;/p&gt;

&lt;p&gt;If you're working with &lt;strong&gt;Bun&lt;/strong&gt; and want a &lt;strong&gt;clean, fast, full-featured&lt;/strong&gt; framework — give &lt;strong&gt;PrinceJS&lt;/strong&gt; a try.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Get Started in Seconds:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun create princejs my-api
&lt;span class="nb"&gt;cd &lt;/span&gt;my-api
bun dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📂 GitHub: &lt;a href="https://github.com/MatthewTheCoder1218/princejs" rel="noopener noreferrer"&gt;https://github.com/MatthewTheCoder1218/princejs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐ Star it if you’re into fast, clean, open-source tools!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>performance</category>
    </item>
    <item>
      <title>I Built the #1 Fastest Bun Framework At 13 Years Old</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Sat, 15 Nov 2025 19:21:58 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/i-built-the-1-fastest-bun-framework-at-13-years-old-4ma5</link>
      <guid>https://dev.to/thelittleprince1218/i-built-the-1-fastest-bun-framework-at-13-years-old-4ma5</guid>
      <description>&lt;p&gt;&lt;strong&gt;PrinceJS just hit 19,200 req/s&lt;/strong&gt;, &lt;strong&gt;beating Hono, Elysia, and&lt;br&gt;
Express&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2.8 kB gzipped&lt;/strong&gt;\&lt;br&gt;
&lt;strong&gt;576k requests in 30s&lt;/strong&gt;\&lt;br&gt;
&lt;strong&gt;21% faster than Elysia&lt;/strong&gt;\&lt;br&gt;
&lt;strong&gt;106% faster than Express&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&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;prince&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;princejs&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;prince&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;get&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PrinceJS&lt;/span&gt;&lt;span class="dl"&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;
  
  
  Benchmark Results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;PrinceJS:&lt;/strong&gt; 19,200 req/s → 576k\&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hono:&lt;/strong&gt; 16,212 req/s → 486k\&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Elysia:&lt;/strong&gt; 15,862 req/s → 476k\&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Express:&lt;/strong&gt; 9,325 req/s → 280k&lt;/li&gt;
&lt;/ul&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%2Fattzilbgpkntuxpxnh0e.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%2Fattzilbgpkntuxpxnh0e.PNG" alt="bench marks" width="704" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Built in Nigeria. Zero deps. Pure speed.
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I didn't beat them. I destroyed the competition."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔗 &lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://princejs.vercel.app%5C" rel="noopener noreferrer"&gt;https://princejs.vercel.app\&lt;/a&gt;&lt;br&gt;
🔗 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/MatthewTheCoder1218/princejs" rel="noopener noreferrer"&gt;https://github.com/MatthewTheCoder1218/princejs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>opensource</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>I’m 13 and Just Made a Web Framework 3x Faster Than Express</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Mon, 10 Nov 2025 06:36:13 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/im-13-and-just-made-a-web-framework-3x-faster-than-express-3bdk</link>
      <guid>https://dev.to/thelittleprince1218/im-13-and-just-made-a-web-framework-3x-faster-than-express-3bdk</guid>
      <description>&lt;p&gt;Yesterday I published &lt;strong&gt;princejs&lt;/strong&gt; on npm.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;2 kB
&lt;/li&gt;
&lt;li&gt;Zero dependencies
&lt;/li&gt;
&lt;li&gt;Native Bun binary
&lt;/li&gt;
&lt;li&gt;Built in 3 days on my school laptop
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;500+ downloads in &amp;lt;24 hours&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same laptop. Same test. Same autocannon command:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Express&lt;/strong&gt; → 8,000 requests in 10s&lt;br&gt;&lt;br&gt;
&lt;strong&gt;princejs&lt;/strong&gt; → &lt;strong&gt;25,000 requests in 10s&lt;/strong&gt;&lt;/p&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%2Ftsvvy6cvm4o900lnredh.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%2Ftsvvy6cvm4o900lnredh.PNG" alt="benchmark" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To Start&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i princejs

or 

pnpm add princejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;import &lt;span class="o"&gt;{&lt;/span&gt; Prince &lt;span class="o"&gt;}&lt;/span&gt; from &lt;span class="s2"&gt;"princejs"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
const app &lt;span class="o"&gt;=&lt;/span&gt; new Prince&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

app.get&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"/"&lt;/span&gt;, &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; app.json&lt;span class="o"&gt;({&lt;/span&gt; message: &lt;span class="s2"&gt;"Wassup"&lt;/span&gt; &lt;span class="o"&gt;}))&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
app.listen&lt;span class="o"&gt;(&lt;/span&gt;3000&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. No bloat. No legacy. Just speed.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/MatthewTheCoder1218/princejs" rel="noopener noreferrer"&gt;https://github.com/MatthewTheCoder1218/princejs&lt;/a&gt;&lt;br&gt;
npm: &lt;a href="https://npmjs.com/package/princejs" rel="noopener noreferrer"&gt;https://npmjs.com/package/princejs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bunjs</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>nigeria</category>
    </item>
    <item>
      <title>Plugged: Instant Backend Integration for Developers</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Mon, 22 Sep 2025 05:21:42 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/plugged-instant-backend-integration-for-developers-4lmm</link>
      <guid>https://dev.to/thelittleprince1218/plugged-instant-backend-integration-for-developers-4lmm</guid>
      <description>&lt;p&gt;I’m excited to share Plugged — a desktop application that eliminates backend setup friction by automatically connecting your frontend projects to backend services with zero configuration.&lt;/p&gt;

&lt;p&gt;Plugged is designed for developers who want to focus on building features, not configuring infrastructure. It handles the repetitive work of setting up backend frameworks, BaaS integrations, and database connections — so you can go from project creation to coding in seconds.&lt;/p&gt;

&lt;p&gt;Here’s how it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the Windows app (MVP)&lt;/li&gt;
&lt;li&gt;Select your project folder&lt;/li&gt;
&lt;li&gt;Choose your tech stack:&lt;/li&gt;
&lt;li&gt;Backend Frameworks: Express, FastAPI, Django&lt;/li&gt;
&lt;li&gt;BaaS/Headless: Supabase, Firebase&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Databases: PostgreSQL, MongoDB, MySQL, SQLite&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Process: Plugged generates the necessary configuration files, sets up secure connections, and integrates services directly into your project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Done: Click “Open Folder” and start developing — no manual setup required&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app uses Tauri for performance and security, with a clean UI that guides you through the process. All operations run locally — no project files are sent anywhere.&lt;/p&gt;

&lt;p&gt;Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more copy-pasting boilerplate&lt;/li&gt;
&lt;li&gt;No environment variables to manage&lt;/li&gt;
&lt;li&gt;No CLI commands to remember&lt;/li&gt;
&lt;li&gt;No configuration files to maintain&lt;/li&gt;
&lt;li&gt;This is not a code generator that dumps files and leaves you to fix it. It’s a smart integration tool that understands your stack and sets it up correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔗 GitHub: github.com/MatthewTheCoder1218/plugged&lt;br&gt;
📥 Download: Available via GitHub Releases (Plugged_0.1.0_x64_en-US.msi)&lt;/p&gt;

&lt;p&gt;Built for developers who are tired of setup. Feedback and contributions welcome.&lt;/p&gt;

&lt;p&gt;— Made with ❤️ by Little Prince&lt;br&gt;
ISC Licensed&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tauri</category>
      <category>backend</category>
    </item>
    <item>
      <title>BugBlaze: Catch Bugs in JavaScript, Python, and More with One CLI.</title>
      <dc:creator>Little Prince</dc:creator>
      <pubDate>Wed, 28 May 2025 00:11:04 +0000</pubDate>
      <link>https://dev.to/thelittleprince1218/bugblaze-catch-bugs-in-javascript-python-and-more-with-one-cli-3fo1</link>
      <guid>https://dev.to/thelittleprince1218/bugblaze-catch-bugs-in-javascript-python-and-more-with-one-cli-3fo1</guid>
      <description>&lt;p&gt;Debugging code is a universal pain, whether it's a JavaScript error, a Python error, or maybe even TypeScript. I built &lt;strong&gt;BugBlaze&lt;/strong&gt;, a CLI tool with 900+ npm downloads last week, to catch errors in multiple languages fast. Here's why I chose to do it and how it has actually saved me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;So one day I hit an error so hard I couldn't fix it. I read articles even used ChatGPT and other AI models. But none of them seemed to be working. And one main thing that I noticed is that they didn't really understand the code. And that's normal because they aren't actually in your codebase. And I don't know if anybody else experiences this, but they were slow (maybe because of my budget laptop 🙂).&lt;/p&gt;

&lt;p&gt;So I thought, why don't I build an app or website that integrates that AI into your code? And I know some of you will be thinking, "Why don't you just use GitHub Copilot?". Well, listen to this, I'm.... broke 🙂.&lt;/p&gt;

&lt;p&gt;So I went on to build it. And because of my lazy nature, I didn't want to build a website or a desktop app, but I found the idea of a CLI tool nice and easy.&lt;/p&gt;

&lt;p&gt;And ta-da, we have &lt;strong&gt;BugBlaze&lt;/strong&gt; 🎉&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use BugBlaze In Your Codebase
&lt;/h2&gt;

&lt;p&gt;So let's imagine you have a codebase with a syntax error. You try to fix it (in basic developer knowledge), then you get another error.... ok. So, how do we fix this? With &lt;strong&gt;BugBlaze&lt;/strong&gt;, you have two options:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to fix the error but you don't want to touch the code&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bugblaze fun index.js &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This scans your code, gets the error, and gives it to Groq (who is, by the way, the AI behind the whole CLI and everything), which processes the error and the code file and generates a response on what the issue is and how to fix it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Or if you have already touched it and it isn't working anymore&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bugblaze analyze index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This scans the code for logical runtime issues and recommends the best approach on how to make the code work again. So if you don't have any syntax errors, we've got you covered 😉&lt;/p&gt;

&lt;h2&gt;
  
  
  How it has helped me personally
&lt;/h2&gt;

&lt;p&gt;And now, coming to think of it, I haven't actually used my tool 😁. I mostly just spend so much time building and improving its features (and to make YouTube videos 🙂). But don't worry, I am gonna relax and use it to the full extent 😁.&lt;/p&gt;

&lt;h2&gt;
  
  
  So why should you use BugBlaze
&lt;/h2&gt;

&lt;p&gt;So personally, I think there are a lot of reasons you should try it out.&lt;br&gt;
It has multiple language support like JavaScript, TypeScript, Python, Java, TSX/JSX (more languages coming soon 😉), it's super fast, it's nice for developers who love the terminal (I mean who doesn't). And you get to put your own API key for privacy, and you can manage what you do with your own API key (definitely not trying to avoid AI request expenses 🙂). But I still think it is actually pretty nice. And also, you get all features for free (for now, though 🙂).&lt;/p&gt;
&lt;h2&gt;
  
  
  Do you wanna get started 🤩?
&lt;/h2&gt;

&lt;p&gt;I know there are other tools you could use out there instead of mine. I just built this out of pure curiosity and to solve my own needs before I thought to put it out there. But I will be excited and love it if you download it now.&lt;/p&gt;

&lt;p&gt;BugBlaze is free (for now, as I said 🙂) and there will be new features coming soon, including premium tier.&lt;/p&gt;

&lt;p&gt;You can get started now by running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; bugblaze
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tell me what you think about this project in the comments, and what I should improve 😁, and kindly give me a star on GitHub if you love this project.&lt;/p&gt;

&lt;p&gt;Link to the package: &lt;a href="https://www.npmjs.com/package/bugblaze" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/bugblaze&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://buglaze.vercel.app" rel="noopener noreferrer"&gt;https://buglaze.vercel.app&lt;/a&gt;&lt;br&gt;
I made it open-source (because I'm nice 🙂): &lt;a href="https://github.com/MatthewTheCoder1218/bugblaze" rel="noopener noreferrer"&gt;https://github.com/MatthewTheCoder1218/bugblaze&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
      <category>npm</category>
    </item>
  </channel>
</rss>
