<?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: Yuki Nishikawa</title>
    <description>The latest articles on DEV Community by Yuki Nishikawa (@yukinisihikawa).</description>
    <link>https://dev.to/yukinisihikawa</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%2F2979686%2F23efff1b-b51f-43cb-b145-827f5450075c.jpg</url>
      <title>DEV Community: Yuki Nishikawa</title>
      <link>https://dev.to/yukinisihikawa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yukinisihikawa"/>
    <language>en</language>
    <item>
      <title>Next.js Forgot to Design APIs. Tirne Didn’t.</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 17 Jun 2025 14:44:44 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/nextjs-forgot-to-design-apis-tirne-didnt-5bll</link>
      <guid>https://dev.to/yukinisihikawa/nextjs-forgot-to-design-apis-tirne-didnt-5bll</guid>
      <description>&lt;p&gt;Struggling to trace side effects in Next.js API Routes?&lt;br&gt;
Tired of global middleware, nested folders, and 300ms cold starts?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tirne&lt;/strong&gt; is here to change that. It's not just a framework. It’s a declarative, fetch-native architectural DSL for building edge-first APIs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tirne doesn’t just run your code. It structures it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ✨ Core Philosophy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Declarative routes&lt;/strong&gt;: Define your API like a schema, not scattered handlers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit side effects&lt;/strong&gt;: Middleware is opt-in, visible, testable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge-native speed&lt;/strong&gt;: Designed for Bun, Workers, and zero-cold-start runtimes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type-aligned logic&lt;/strong&gt;: Middleware and handlers work seamlessly with types&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ 1. Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-tirne-app
✔ Choose your target environment: › Bun / Workers
✔ Project folder: … my-tirne-app

&lt;span class="nb"&gt;cd &lt;/span&gt;my-tirne-app
bun &lt;span class="nb"&gt;install &lt;/span&gt;or npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev or wrangler dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fhm2wmt9o8fy8znvo3plw.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%2Fhm2wmt9o8fy8znvo3plw.png" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✨ Your API will be available at &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Structure:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;index.ts&lt;/code&gt;: Entry point using fetch-compatible interface&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;package.json&lt;/code&gt;: Preconfigured for Bun or Workers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tsconfig.json&lt;/code&gt;: Minimal but typed setup&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚡️ 2. Performance Benchmarks
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bunx autocannon &lt;span class="nt"&gt;-c&lt;/span&gt; 100 &lt;span class="nt"&gt;-d&lt;/span&gt; 10 &amp;lt;http://localhost:3000/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;Tirne (Bun)&lt;/th&gt;
&lt;th&gt;Next.js API Routes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;❄️ Cold Start&lt;/td&gt;
&lt;td&gt;0.02 ms&lt;/td&gt;
&lt;td&gt;~300 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡️ First Request&lt;/td&gt;
&lt;td&gt;0.79 ms&lt;/td&gt;
&lt;td&gt;20-30 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;♻️ Requests/sec&lt;/td&gt;
&lt;td&gt;90,000+ rps&lt;/td&gt;
&lt;td&gt;8,000-10,000 rps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📉 Avg Latency&lt;/td&gt;
&lt;td&gt;&amp;lt;1ms&lt;/td&gt;
&lt;td&gt;~15ms+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;🚀 Tirne is 10x faster than Next.js API Routes — and that’s before tuning.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📀 3. Hello Tirne (Structured Example)
&lt;/h2&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;Server&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;tirne&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;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;method&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="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/health&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;handler&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="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;✅ OK&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&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;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&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="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;▶️ Compare that to a full folder in &lt;code&gt;/pages/api/health.ts&lt;/code&gt; and global middleware.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔒 4. Real Auth, Architected
&lt;/h2&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;Server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCookie&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;requireAuth&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;tirne&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="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Route&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;tirne&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;routes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&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;method&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="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;handler&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Headers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Set-Cookie&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;setCookie&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auth&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;valid-token&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;httpOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;path&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="na"&gt;maxAge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;}));&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;json&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;Logged in&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;middleware&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="na"&gt;method&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="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/private&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;handler&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;json&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;Secret&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="na"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;requireAuth&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&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;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&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="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;✅ Auth isn’t magical. It’s explicit, testable, and architectural.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ❗️ 5. Built-In Error Handling
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Route&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;tirne&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;Server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;TirneError&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;tirne&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;routes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&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;method&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="na"&gt;path&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="na"&gt;handler&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&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;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;searchParams&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;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TirneError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Missing name&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;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bad_request&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello, &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="s2"&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&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;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetch&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="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;TirneError&lt;/code&gt; gives you structured error responses&lt;/li&gt;
&lt;li&gt;Built-in error middleware maps exceptions to HTTP responses&lt;/li&gt;
&lt;li&gt;No try/catch needed — control flow stays clean and testable&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🧼 Clean APIs include clean error boundaries.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 🚀 Build APIs You Can Actually Reason About
&lt;/h2&gt;

&lt;p&gt;If you think API code should be structured, testable, and explicit — not scattered and magical — Tirne was made for you.&lt;/p&gt;

&lt;p&gt;👉 ⭐ &lt;a href="https://github.com/Tirne-ts/Tirne" rel="noopener noreferrer"&gt;Star on GitHub&lt;/a&gt; — 10× faster than Next. 100× clearer.&lt;/p&gt;

&lt;p&gt;No hidden context. No global traps.&lt;br&gt;
Just architecture you can trace, test, and trust.&lt;/p&gt;

&lt;p&gt;Star it if you’re done guessing how your middleware works.&lt;br&gt;
&lt;strong&gt;We built Tirne because we were, too.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We don’t need bigger frameworks.&lt;br&gt;
We need smaller, sharper ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less framework. More logic.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>nextjs</category>
      <category>typescript</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Bevel.ts — The First Real Backend Framework for Bun (Still in Progress)</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 27 May 2025 14:37:41 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/bevelts-the-first-real-backend-framework-for-bun-still-in-progress-3ndm</link>
      <guid>https://dev.to/yukinisihikawa/bevelts-the-first-real-backend-framework-for-bun-still-in-progress-3ndm</guid>
      <description>&lt;h1&gt;
  
  
  Bevel.ts: The Framework Bun Deserves — And It's Just Getting Started
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Why do we have Vite for frontend, but nothing for backend?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was the question that sparked Bevel.ts.&lt;/p&gt;

&lt;p&gt;As developers, we’ve seen the JavaScript ecosystem evolve at blistering speed — from CommonJS to ESM, from slow Webpack builds to lightning-fast Vite, from monolithic backends to microservices on the edge. But in the backend space, Bun has arrived like a freight train, and yet...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where’s the framework that feels like Bun?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Ultra-fast by default&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧠 Feels like &lt;strong&gt;Vite or Next.js&lt;/strong&gt; in setup and DX&lt;/li&gt;
&lt;li&gt;🔥 Natively supports &lt;strong&gt;TypeScript, ESM, and edge runtimes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;⚒️ Real CLI, not just another router&lt;/li&gt;
&lt;li&gt;🤖 Built for the &lt;strong&gt;AI-native era&lt;/strong&gt; — from day one&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✨ What Makes Bevel.ts Different?
&lt;/h2&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;Bevel.ts&lt;/th&gt;
&lt;th&gt;Express / Fastify&lt;/th&gt;
&lt;th&gt;Elysia / Hono&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Intent-driven&lt;/td&gt;
&lt;td&gt;REST&lt;/td&gt;
&lt;td&gt;REST&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CLI-first&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;⚠️ Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Native&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Built-in&lt;/td&gt;
&lt;td&gt;❌ Plugin-needed&lt;/td&gt;
&lt;td&gt;❌ None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Edge Ready&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Vercel / Cloudflare&lt;/td&gt;
&lt;td&gt;❌ Limited&lt;/td&gt;
&lt;td&gt;⚠️ Worker-optimized only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DX Philosophy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Precision &amp;amp; Speed&lt;/td&gt;
&lt;td&gt;Boilerplate-heavy&lt;/td&gt;
&lt;td&gt;Lightweight routing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🚀 Enter: Bevel.ts
&lt;/h2&gt;

&lt;p&gt;Bevel.ts is my ongoing effort to build the &lt;strong&gt;first fullstack backend framework for Bun&lt;/strong&gt; — designed from scratch for clarity, precision, and speed.&lt;/p&gt;

&lt;p&gt;It’s inspired by the architectural concept of a "bevel": a clean, intentional cut that reveals the true form underneath. That’s how I believe APIs should be structured: with &lt;strong&gt;intent first&lt;/strong&gt;, not REST boilerplate or GraphQL complexity.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What It Will Be
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bunx bevel new my-app       &lt;span class="c"&gt;# scaffold in seconds&lt;/span&gt;
bunx bevel generate intent  &lt;span class="c"&gt;# define APIs by intention&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;defineIntent("user.login", schema, fn)&lt;/code&gt; instead of defining routes&lt;/li&gt;
&lt;li&gt;Native OpenAI Function Calling support — automatically exportable&lt;/li&gt;
&lt;li&gt;Playground UI to test and introspect your API intents&lt;/li&gt;
&lt;li&gt;Deployable to Vercel Edge, Cloudflare Workers, or Bun-native servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧩 Think: &lt;code&gt;Rails meets Vite meets GPT&lt;/code&gt; — on Bun.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ What It Is Right Now
&lt;/h2&gt;

&lt;p&gt;Let’s be honest: &lt;strong&gt;it’s not ready yet.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The CLI is under construction&lt;/li&gt;
&lt;li&gt;Some generation commands are stubs&lt;/li&gt;
&lt;li&gt;Not all integrations are wired in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the &lt;strong&gt;architecture is real&lt;/strong&gt;. The &lt;strong&gt;vision is clear&lt;/strong&gt;. And the &lt;strong&gt;core is moving fast&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📌 OSS is a process, not a product.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🦫 Meet the Mascot: BevelBeaver
&lt;/h2&gt;

&lt;p&gt;Say hello to &lt;strong&gt;BevelBeaver&lt;/strong&gt;, the sharpest, most precise backend architect in the forest.&lt;br&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%2Fhqrsjwdsxxegxga55ksw.jpg" 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%2Fhqrsjwdsxxegxga55ksw.jpg" alt="Image description" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Why a beaver?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Beavers are nature’s engineers — structured, meticulous, and fast.&lt;/li&gt;
&lt;li&gt;Just like Bevel.ts, they carve with purpose and build with clarity.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Code should be cut, not cluttered.” — BevelBeaver&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;BevelBeaver reminds us that every line of backend logic should be &lt;strong&gt;intentional&lt;/strong&gt;, &lt;strong&gt;elegant&lt;/strong&gt;, and &lt;strong&gt;fast as Bun&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧱 All-Star Stack Behind Bevel.ts
&lt;/h2&gt;

&lt;p&gt;Here's what powers Bevel.ts under the hood — a carefully curated set of modern tools that work seamlessly with Bun:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Runtime:       Bun (Edge-native, zero cold start)
Framework:     Bevel.ts (Intent-Driven)
Routing:       Hono (Ultra-fast)
Schemas:       Zod + tRPC (Type-safe and LLM-compatible)
Database:      Drizzle (SQL builder, typed, schema-first)
Auth:          Lucia (Lightweight, composable)
AI Support:    OpenAI, Claude, LangChain (Function calling-native)
UI Playground: React + shadcn/ui + Framer Motion (DX focused)
CLI Tooling:   Bevel CLI (bunx-based, zero config)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🧠 Every layer was chosen to optimize for &lt;strong&gt;speed, clarity, and future-proof DX&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 Why Write This Now?
&lt;/h2&gt;

&lt;p&gt;Because OSS isn’t about perfection. It’s about momentum.&lt;br&gt;
Because I believe others might be asking the same thing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Where’s the framework that actually feels like Bun?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If that’s you — come along. Watch the repo. Star it. File an issue. Or just send a 👍.&lt;/p&gt;

&lt;p&gt;This is just the beginning.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>typescript</category>
      <category>showdev</category>
      <category>news</category>
    </item>
    <item>
      <title>The Modern Frontend Fantasy is Falling Apart – Astro, Qwik, and Solid Aren’t the Future</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 13 May 2025 13:28:38 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/the-modern-frontend-fantasy-is-falling-apart-astro-qwik-and-solid-arent-the-future-1o98</link>
      <guid>https://dev.to/yukinisihikawa/the-modern-frontend-fantasy-is-falling-apart-astro-qwik-and-solid-arent-the-future-1o98</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;They promised speed, simplicity, and a better DX. What we got was a set of beautiful lies, niche fantasies, and philosophical dead ends.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ⚠️ Introduction: The Age of Frontend Disillusionment
&lt;/h2&gt;

&lt;p&gt;Modern frontend frameworks love to sell a dream.&lt;br&gt;
They’ll tell you they’re faster than React, more minimal than Vue, more elegant than Svelte.&lt;br&gt;
But dig beneath the DX sugarcoating, and what you find isn’t revolution — it’s confusion, overengineering, or outright regression.&lt;/p&gt;

&lt;p&gt;Let’s talk about the three self-proclaimed rebels of modern frontend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Astro&lt;/strong&gt; — The Gatsby Ghost in Island Clothing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qwik&lt;/strong&gt; — The Resumable Kernel That Forgot the Humans&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solid&lt;/strong&gt; — The Signal Soloist in React's Orchestra&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, they form the &lt;strong&gt;Zukkoke Three&lt;/strong&gt; — each chasing a different ideal, but none equipped to win the war.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏝️ Astro – The Static Dream That Dies When JS Returns
&lt;/h2&gt;

&lt;p&gt;Astro sells the fantasy of zero-JS by default. Clean HTML. Minimal payloads. Islands of interactivity.&lt;br&gt;
It’s compelling — until reality hits.&lt;/p&gt;

&lt;p&gt;Astro is just &lt;strong&gt;Gatsby rebranded&lt;/strong&gt;. It inherits the same flaw:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It works great until your app grows. Then you’re back to hydrating islands, shipping frameworks, and juggling scripts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Astro’s true nature is JAMstack nostalgia with a better DX. It’s not wrong — just obsolete.&lt;br&gt;
In a world of RSC, SSR, and edge rendering, static-first is a limitation, not a feature.&lt;/p&gt;

&lt;p&gt;And when complexity grows, you're back in the hydration swamp, writing client scripts to patch static reality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;: A beautiful façade. But scale it, and the illusion breaks.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Qwik – C for the Web, Not for the People
&lt;/h2&gt;

&lt;p&gt;Qwik is genius — technically.&lt;br&gt;
It introduces resumability, serializing the execution context of the app. Like pausing a program mid-run and continuing it in the browser.&lt;/p&gt;

&lt;p&gt;That’s not frontend. That’s compiler-level thinking.&lt;br&gt;
It’s not designed for humans. It’s designed for machines.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Qwik doesn’t care about your joy, your structure, or your aesthetics. It cares about cold start time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Everything is driven by performance obsession. No visual language, no design philosophy, no ergonomics. Just speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwik is the C of frontend frameworks.&lt;/strong&gt;&lt;br&gt;
Fast, low-level, and terrifyingly efficient. But like C, it doesn’t care if you enjoy writing it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Qwik is like inventing inline assembly for UI — impressive, but no one wants to write it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Frontend developers didn’t ask for a compiler playground. They asked for clarity, structure, and joy. Qwik gave them ASTs and resumable closures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;: A backend brain wearing a frontend mask. Brilliant but inhuman.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 Solid – The Signal Soloist in React's Orchestra
&lt;/h2&gt;

&lt;p&gt;Solid claims to be a faster, more precise React. And it is — technically.&lt;br&gt;
Signal-based fine-grained reactivity is elegant and performant.&lt;/p&gt;

&lt;p&gt;But beyond that, Solid changes very little:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSX stays&lt;/li&gt;
&lt;li&gt;Component patterns stay&lt;/li&gt;
&lt;li&gt;Developer experience is React-adjacent&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Solid is trying to perfect React, not replace it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In fact, Solid is a &lt;strong&gt;signal engine with a UI wrapper&lt;/strong&gt;. Its only true innovation is reactivity granularity. Everything else is just React with better internals.&lt;/p&gt;

&lt;p&gt;What does that mean for the rest of us?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No new architecture.&lt;/li&gt;
&lt;li&gt;No new model for state or data.&lt;/li&gt;
&lt;li&gt;No bold vision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solid is &lt;strong&gt;a one-trick pony&lt;/strong&gt;. A brilliant trick, yes — but a pony nonetheless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;: Strong tech, weak narrative. Safe, not transformative.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Why None of These Will Win
&lt;/h2&gt;

&lt;p&gt;Each of these frameworks optimizes for something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Astro for simplicity&lt;/li&gt;
&lt;li&gt;Qwik for performance&lt;/li&gt;
&lt;li&gt;Solid for developer familiarity + reactivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But none of them solve the core problem of modern frontend:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Too much freedom, not enough clarity.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They tinker at the edges of performance or DX, but they don’t bring &lt;strong&gt;structural relief&lt;/strong&gt;. They don’t help you scale, collaborate, or reason clearly about your app’s shape.&lt;/p&gt;

&lt;p&gt;The next real winner in frontend won’t be the fastest, or the most minimal.&lt;br&gt;
It will be the one that brings &lt;strong&gt;structure back to chaos&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ What Comes After the Fantasy?
&lt;/h2&gt;

&lt;p&gt;To move forward, we need a framework that understands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Structure &amp;gt; flexibility&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intent &amp;gt; abstraction&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clarity &amp;gt; cleverness&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future isn’t in reinventing rendering engines or micro-optimizing hydration. It’s in giving developers &lt;strong&gt;a map&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A place for everything. And everything in its place.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if we had a framework where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Component trees were statically validated like type systems?&lt;/li&gt;
&lt;li&gt;Layout, dataflow, and permissions were declared, not inferred?&lt;/li&gt;
&lt;li&gt;Server &amp;amp; client boundaries were structural, not file-based?&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s the revolution we’re waiting for.&lt;/p&gt;




&lt;h2&gt;
  
  
  🖚 Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Astro is elegant but brittle.&lt;br&gt;
Qwik is brilliant but alien.&lt;br&gt;
Solid is fast but single-minded.&lt;/p&gt;

&lt;p&gt;We’ve wandered through the forest of frontend fantasies. What we need now is architecture.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The frontend revolution won’t be won by performance. It will be won by structure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stay tuned. Or better yet: start designing it.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>qwik</category>
      <category>astro</category>
      <category>solidjs</category>
    </item>
    <item>
      <title>🚀 “Next.js Made Me Slower” — Why I’m Building Refraim.ts</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 13 May 2025 13:00:33 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/refraimts-wip-structure-speed-for-the-nextjs-era-3d5a</link>
      <guid>https://dev.to/yukinisihikawa/refraimts-wip-structure-speed-for-the-nextjs-era-3d5a</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Currently in active development.&lt;/strong&gt; Follow along as we reshape how fullstack Next.js apps are built — with &lt;strong&gt;structure&lt;/strong&gt;, &lt;strong&gt;clarity&lt;/strong&gt;, and &lt;strong&gt;momentum&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 I Wanted Simplicity, Not Freedom — Why I’m Building Refraim.ts
&lt;/h2&gt;

&lt;p&gt;Next.js 14 gave us power. But that power came wrapped in abstraction, complexity, and the App Router.&lt;/p&gt;

&lt;p&gt;I didn’t want endless flexibility. I wanted to build fast — and enjoy it. But instead, I found myself battling routing trees, file conventions, and mental friction at every turn.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The App Router? Too abstract. Too clever. Too slow for real work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I missed the magic of Rails. The clarity of Laravel. The joy of &lt;strong&gt;just building&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I built Refraim.ts.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ The Problem: Next.js 14 Slows You Down
&lt;/h2&gt;

&lt;p&gt;React, Next.js, and their ever-expanding constellation of meta-frameworks offer flexibility — in the form of &lt;strong&gt;total architectural ambiguity&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose your own file structure&lt;/li&gt;
&lt;li&gt;Decide how to separate concerns&lt;/li&gt;
&lt;li&gt;Build your own rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But this freedom comes at a steep cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⏳ Slower velocity&lt;/li&gt;
&lt;li&gt;😵 Team confusion&lt;/li&gt;
&lt;li&gt;🔁 Endless decision fatigue&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;What used to be “just the V in MVC” is now an everything-machine that asks you to wire up everything yourself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;App Router tries to be powerful — but ends up being confusing.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ The Vision: Make Web Dev Joyful Again
&lt;/h2&gt;

&lt;p&gt;Building a fullstack app shouldn’t feel like defusing a bomb made of config files.&lt;br&gt;
It should feel like &lt;strong&gt;typing your intent&lt;/strong&gt; and watching your app come to life.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My philosophy:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Structure should be generated, not improvised&lt;/li&gt;
&lt;li&gt;✅ Intent should become code&lt;/li&gt;
&lt;li&gt;✅ Clarity &amp;gt; flexibility&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Laravel nailed this. Rails was built on it. Refraim brings that magic — to the &lt;strong&gt;Next.js + TypeScript&lt;/strong&gt; ecosystem.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🚀 Introducing Refraim.ts — A Framework That Chooses For You
&lt;/h2&gt;

&lt;p&gt;Refraim.ts is a &lt;strong&gt;batteries-included&lt;/strong&gt; fullstack framework on top of Next.js 14 that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📁 Generates a clear project structure automatically&lt;/li&gt;
&lt;li&gt;🔤 Uses a declarative routing DSL (&lt;code&gt;defineRoute()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;🔃 Separates &lt;code&gt;schema&lt;/code&gt;, &lt;code&gt;service&lt;/code&gt;, &lt;code&gt;controller&lt;/code&gt;, and &lt;code&gt;UI&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🛠️ Offers CLI tools to scaffold features with smart defaults&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No more wiring things by hand.&lt;br&gt;
No more "Where should this code live?"&lt;br&gt;
No more "It depends."&lt;/p&gt;


&lt;h2&gt;
  
  
  🧭 Refraim Philosophy: Schema. Service. Structure.
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A new MVC for modern fullstack apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Each file has a &lt;strong&gt;single, clear responsibility&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Features are &lt;strong&gt;self-contained and expressive&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;UI expresses &lt;strong&gt;intent, motion, and clarity&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You &lt;strong&gt;never touch&lt;/strong&gt; the App Router manually&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🔍 What Refraim Does Differently
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Compared to &lt;strong&gt;Next.js&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Opinionated routing structure&lt;/li&gt;
&lt;li&gt;✅ CLI-generated features&lt;/li&gt;
&lt;li&gt;✅ Fully typed page + controller generation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Compared to &lt;strong&gt;tRPC&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ No magic proxies or hidden behaviors&lt;/li&gt;
&lt;li&gt;✅ Explicit service layers and controller logic&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Compared to &lt;strong&gt;Remix&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ No nested route confusion&lt;/li&gt;
&lt;li&gt;✅ Clear separation of domain logic and UI&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  🎨 Rebirth UI — Visual Clarity, Instantly
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;, &lt;strong&gt;Radix UI&lt;/strong&gt;, and &lt;strong&gt;Framer Motion&lt;/strong&gt; are powerful — but integrating them consistently takes real expertise.&lt;/p&gt;

&lt;p&gt;Refraim wraps them into a single, tokenized design system you can trust:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx rebirth-ui:init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 Design tokens&lt;/li&gt;
&lt;li&gt;🧩 Accessible UI components&lt;/li&gt;
&lt;li&gt;💫 Built-in motion primitives&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Most kits give you pieces. Rebirth gives you &lt;strong&gt;a philosophy&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🧙 CLI Magic: Rails-Like Momentum for Next.js
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx refraim make:feature &lt;span class="nb"&gt;users&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;schema.ts&lt;/code&gt; (Zod)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;service.ts&lt;/code&gt; (Prisma logic)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;controller.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;route.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Optional typed pages
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx refraim routes:generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Automatically transforms &lt;code&gt;route.ts&lt;/code&gt; into actual Next.js App Router files. Zero boilerplate. No ambiguity.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You write intent. Refraim writes the app.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🎯 Who It’s For: The Builders Who Want to Ship
&lt;/h1&gt;

&lt;p&gt;Refraim.ts is built for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👩‍💻 Indie developers who want to launch SaaS apps fast&lt;/li&gt;
&lt;li&gt;🧑‍🤝‍🧑 Early-stage product teams moving without PMs&lt;/li&gt;
&lt;li&gt;🧪 Makers who are tired of battling config, routes, and folder hell&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move fast without sacrificing structure&lt;/li&gt;
&lt;li&gt;Build apps without stopping to Google folder naming debates&lt;/li&gt;
&lt;li&gt;Actually enjoy shipping again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re who we’re building for.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧭 In Closing: Next.js Made Us Free. Refraim Helps Us Move.
&lt;/h1&gt;

&lt;p&gt;React gave us freedom.&lt;br&gt;
Next.js gave us abstraction.&lt;br&gt;
&lt;strong&gt;Refraim gives us flow.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frameworks should protect us from unnecessary choice.&lt;br&gt;
Refraim.ts is my answer to the chaos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💡 A system that embraces clarity&lt;/li&gt;
&lt;li&gt;⚙️ A structure that gets out of your way&lt;/li&gt;
&lt;li&gt;🏃 A tool that turns motion into momentum&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Freedom is beautiful. But clarity builds things.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If this resonates with you, follow along. &lt;strong&gt;Refraim.ts is coming soon.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Refraim.ts Is Coming. Join the Movement.
&lt;/h2&gt;

&lt;p&gt;This project is still in early development — but if this vision resonates with you:&lt;/p&gt;

&lt;p&gt;🌟 &lt;strong&gt;Give it a star on GitHub to follow progress and show your support.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/Refraim-ts/Refraim.ts" rel="noopener noreferrer"&gt;→ Star Refraim.ts on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your early support helps shape the future of fullstack development.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>fullstack</category>
      <category>showdev</category>
      <category>nextjs</category>
      <category>tailwindcss</category>
    </item>
    <item>
      <title>Next.js is just PHP with a React hoodie. We rebranded MVC. We reinvented routing. We added complexity — and called it progress. Let's stop pretending.</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Thu, 01 May 2025 11:09:16 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/nextjs-is-just-php-with-a-react-hoodie-we-rebranded-mvc-we-reinvented-routing-we-added-fgb</link>
      <guid>https://dev.to/yukinisihikawa/nextjs-is-just-php-with-a-react-hoodie-we-rebranded-mvc-we-reinvented-routing-we-added-fgb</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/yukinisihikawa/nextjs-is-just-fancy-php-for-people-who-fear-simplicity-1b5k" class="crayons-story__hidden-navigation-link"&gt;Next.js Is Just Fancy PHP for People Who Fear Simplicity&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/yukinisihikawa" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F2979686%2F23efff1b-b51f-43cb-b145-827f5450075c.jpg" alt="yukinisihikawa profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/yukinisihikawa" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Yuki Nishikawa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Yuki Nishikawa
                
              
              &lt;div id="story-author-preview-content-2424341" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/yukinisihikawa" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F2979686%2F23efff1b-b51f-43cb-b145-827f5450075c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Yuki Nishikawa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/yukinisihikawa/nextjs-is-just-fancy-php-for-people-who-fear-simplicity-1b5k" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 22 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/yukinisihikawa/nextjs-is-just-fancy-php-for-people-who-fear-simplicity-1b5k" id="article-link-2424341"&gt;
          Next.js Is Just Fancy PHP for People Who Fear Simplicity
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/nextjs"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;nextjs&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/php"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;php&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/laravel"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;laravel&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/yukinisihikawa/nextjs-is-just-fancy-php-for-people-who-fear-simplicity-1b5k" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;15&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/yukinisihikawa/nextjs-is-just-fancy-php-for-people-who-fear-simplicity-1b5k#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              15&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>nextjs</category>
      <category>php</category>
      <category>laravel</category>
      <category>node</category>
    </item>
    <item>
      <title>Web Backend Development Is a Lie: The Lost 15 Years of Betrayal　Part Ⅱ Dia.ts: Forging the New Backend Era</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Wed, 30 Apr 2025 12:49:20 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/web-backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-ii-diats-forging-the-new-233k</link>
      <guid>https://dev.to/yukinisihikawa/web-backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-ii-diats-forging-the-new-233k</guid>
      <description>&lt;h1&gt;
  
  
  ⚔️ Part II — Dia.ts: Forging the New Era
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The clock isn't just ticking. It’s almost out of time."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
That’s where we left off. And now, we rebuild.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧱 The Philosophy: Intent Over Endpoints
&lt;/h2&gt;

&lt;p&gt;Every major backend framework gives you &lt;strong&gt;options&lt;/strong&gt; — too many of them.&lt;/p&gt;

&lt;p&gt;REST, RPC, GraphQL, decorators, middlewares, services, DAOs...&lt;/p&gt;

&lt;p&gt;Dia.ts rejects all of it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;There is only one way to define an API:&lt;/strong&gt; As an intent.&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;export&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="nf"&gt;defineAPI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;input&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="p"&gt;}),&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&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="s2"&gt;`hello &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;input&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="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because &lt;strong&gt;freedom without structure becomes chaos.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;APIs are not CRUD functions. They are &lt;strong&gt;contracts that fulfill intent&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Enforced by design:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Type-safe contracts from client to server&lt;/li&gt;
&lt;li&gt;Pure functional middleware with &lt;code&gt;AbortSignal&lt;/code&gt; support&lt;/li&gt;
&lt;li&gt;Zero dynamic routing — everything precompiled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t “minimalism.”&lt;br&gt;
This is &lt;strong&gt;intentional design&lt;/strong&gt; — APIs as behavioral declarations.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 Query as Intent
&lt;/h2&gt;

&lt;p&gt;What if instead of asking for data, clients could declare &lt;strong&gt;what they want to happen&lt;/strong&gt;?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I want to mark this task as done."&lt;br&gt;&lt;br&gt;
Not: "Give me todos where done = false"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dia.ts supports &lt;strong&gt;Intent-based APIs&lt;/strong&gt; — where the handler isn’t just a fetcher, but a fulfillment engine.&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="c1"&gt;// intent: "mark_done"&lt;/span&gt;
&lt;span class="k"&gt;export&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="nf"&gt;defineAPI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;input&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="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;markTodoDone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌟 Aligns better with product UX&lt;/li&gt;
&lt;li&gt;📚 Logs like event history&lt;/li&gt;
&lt;li&gt;🛡 Centralizes auth &amp;amp; validation&lt;/li&gt;
&lt;li&gt;🧠 Enables future AI/LLM integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;APIs stop being endpoints. They become &lt;strong&gt;declarative interfaces for action.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ The Architecture: Composable, Cancelable, Clear
&lt;/h2&gt;

&lt;p&gt;Dia.ts runs &lt;strong&gt;54,000+ RPS&lt;/strong&gt; — but performance is the result, not the purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core principles:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🧠 &lt;code&gt;CancelableTask&amp;lt;T&amp;gt;&lt;/code&gt; model: every request is interruptible&lt;/li&gt;
&lt;li&gt;🔁 Middleware is functional: &lt;code&gt;(ctx, next) =&amp;gt; task&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📦 Locals are immutable: extend context cleanly&lt;/li&gt;
&lt;li&gt;🛑 AbortSignal for timeout-aware computation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t about middleware stacking — this is about &lt;strong&gt;intent pipelines.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧨 No More Backend Theater
&lt;/h2&gt;

&lt;p&gt;We don’t need another Express clone.&lt;br&gt;
We don’t need dynamic scaffolding that decays over time.&lt;/p&gt;

&lt;p&gt;We need a backend that reflects &lt;strong&gt;how apps actually evolve&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Real-time logic from the start&lt;/li&gt;
&lt;li&gt;🧩 State = Event history, not mutable props&lt;/li&gt;
&lt;li&gt;📖 Logic = Structured intents&lt;/li&gt;
&lt;li&gt;🛠 DX = Typed. Pure. Predictable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dia.ts is &lt;strong&gt;not a toolchain&lt;/strong&gt;. It’s &lt;strong&gt;a philosophy&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Benchmarks Are Proof — Not the Point
&lt;/h2&gt;

&lt;p&gt;Yes, we beat Bun + Elysia.&lt;br&gt;&lt;br&gt;
Yes, we use native Node + no magic.&lt;/p&gt;

&lt;p&gt;But that’s not why Dia.ts exists.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We didn’t optimize the old model. We rejected it — and rebuilt something better.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s fast because it’s pure.&lt;br&gt;&lt;br&gt;
It’s safe because it’s structured.&lt;br&gt;&lt;br&gt;
It matters because it’s different.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌱 It’s Early — and That’s the Best Part
&lt;/h2&gt;

&lt;p&gt;Dia.ts is still pre-alpha:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI needs polish&lt;/li&gt;
&lt;li&gt;Docs are sparse&lt;/li&gt;
&lt;li&gt;Surface is evolving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ The intent engine works&lt;/li&gt;
&lt;li&gt;✅ The cancellation model is solid&lt;/li&gt;
&lt;li&gt;✅ The vision is sharp&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;If you’ve ever thought “Why is backend still like this?” — this is your exit.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🛠 Try It (Experimental)
&lt;/h2&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;dia-ts
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; tsx
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; gen &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npx dia-ts init &lt;span class="nt"&gt;--with&lt;/span&gt; client
📄 routes/hello.post.ts
import &lt;span class="o"&gt;{&lt;/span&gt; z &lt;span class="o"&gt;}&lt;/span&gt; from &lt;span class="s2"&gt;"zod"&lt;/span&gt;

&lt;span class="nb"&gt;export &lt;/span&gt;const api &lt;span class="o"&gt;=&lt;/span&gt; defineAPI&lt;span class="o"&gt;({&lt;/span&gt;
  input: z.object&lt;span class="o"&gt;({&lt;/span&gt; name: z.string&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;})&lt;/span&gt;,
  async handler&lt;span class="o"&gt;({&lt;/span&gt; input &lt;span class="o"&gt;})&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; message: &lt;span class="sb"&gt;`&lt;/span&gt;hello &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;})&lt;/span&gt;
npx dia-ts generate-client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Structax/Dia.ts-cli" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/dia-ts" rel="noopener noreferrer"&gt;npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Status: &lt;strong&gt;pre-alpha&lt;/strong&gt; — but the fire is lit 🔥&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔭 A Glimpse at What’s Next
&lt;/h2&gt;

&lt;p&gt;Dia.ts is just the beginning.&lt;br&gt;
One day, it won’t just be a framework — but a language.&lt;br&gt;
A language built not for “general purpose,”&lt;br&gt;
but for Web backend, and nothing else. &lt;/p&gt;

&lt;p&gt;Fully typed. Fully cancelable.&lt;br&gt;
No Node. No legacy. Just intent.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧨 Why “Web-only” Matters
&lt;/h2&gt;

&lt;p&gt;Web backend isn’t a toy problem.&lt;br&gt;
It’s real-time, stateful, cancelable, multi-tenant, and deeply coupled to product UX.&lt;/p&gt;

&lt;p&gt;General-purpose languages like Go or Java weren’t designed for that.&lt;br&gt;
They’re great for infra, not &lt;strong&gt;interaction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The truth is: &lt;strong&gt;Web deserves its own language&lt;/strong&gt;.&lt;br&gt;
One built not for threads or goroutines — but for &lt;strong&gt;structured intent, timeout-aware flows, and type-safe UX alignment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dia.ts isn’t trying to do everything.&lt;br&gt;
It’s doing the only thing that matters now — Web backend, the right way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Fast. Safe. Intentful.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Welcome to the Dia.ts era.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>backend</category>
      <category>node</category>
      <category>typescript</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Backend systems haven’t evolved with the rest of the tech world. This is a call to rethink it all — not just patch the past.</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 29 Apr 2025 23:24:14 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/backend-systems-havent-evolved-with-the-rest-of-the-tech-world-this-is-a-call-to-rethink-it-all--2bo7</link>
      <guid>https://dev.to/yukinisihikawa/backend-systems-havent-evolved-with-the-rest-of-the-tech-world-this-is-a-call-to-rethink-it-all--2bo7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" class="crayons-story__hidden-navigation-link"&gt;Web Backend Development Is a Lie: The Lost 15 Years of Betrayal　Part I: The Silent Collapse&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/yukinisihikawa" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F2979686%2F23efff1b-b51f-43cb-b145-827f5450075c.jpg" alt="yukinisihikawa profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/yukinisihikawa" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Yuki Nishikawa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Yuki Nishikawa
                
              
              &lt;div id="story-author-preview-content-2443383" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/yukinisihikawa" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F2979686%2F23efff1b-b51f-43cb-b145-827f5450075c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Yuki Nishikawa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 29 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" id="article-link-2443383"&gt;
          Web Backend Development Is a Lie: The Lost 15 Years of Betrayal　Part I: The Silent Collapse
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/backend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;backend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              4&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>backend</category>
      <category>node</category>
      <category>api</category>
      <category>go</category>
    </item>
    <item>
      <title>We wasted 15 years duct-taping old backend tech. It’s time to burn it down and rebuild from scratch.</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 29 Apr 2025 13:54:32 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/we-wasted-15-years-duct-taping-old-backend-tech-its-time-to-burn-it-down-and-rebuild-from-13jc</link>
      <guid>https://dev.to/yukinisihikawa/we-wasted-15-years-duct-taping-old-backend-tech-its-time-to-burn-it-down-and-rebuild-from-13jc</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" class="crayons-story__hidden-navigation-link"&gt;Web Backend Development Is a Lie: The Lost 15 Years of Betrayal　Part I: The Silent Collapse&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/yukinisihikawa" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F2979686%2F23efff1b-b51f-43cb-b145-827f5450075c.jpg" alt="yukinisihikawa profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/yukinisihikawa" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Yuki Nishikawa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Yuki Nishikawa
                
              
              &lt;div id="story-author-preview-content-2443383" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/yukinisihikawa" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F2979686%2F23efff1b-b51f-43cb-b145-827f5450075c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Yuki Nishikawa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 29 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" id="article-link-2443383"&gt;
          Web Backend Development Is a Lie: The Lost 15 Years of Betrayal　Part I: The Silent Collapse
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/backend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;backend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/api"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;api&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              4&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>backend</category>
      <category>node</category>
      <category>architecture</category>
      <category>api</category>
    </item>
    <item>
      <title>Web Backend Development Is a Lie: The Lost 15 Years of Betrayal　Part I: The Silent Collapse</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 29 Apr 2025 13:01:10 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj</link>
      <guid>https://dev.to/yukinisihikawa/backend-development-is-a-lie-the-lost-15-years-of-betrayal-part-i-the-silent-collapse-3ipj</guid>
      <description>&lt;h2&gt;
  
  
  🔹 &lt;strong&gt;Part I: The Silent Collapse&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you zoom out and look at the evolution of backend development from 2009 to today, a chilling realization strikes with merciless clarity:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;"The world transformed. Backend development did not."&lt;/strong&gt;
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the same era where &lt;strong&gt;AI transcended human imagination&lt;/strong&gt;, where &lt;strong&gt;mobile technology rewired societal behavior&lt;/strong&gt;, and where &lt;strong&gt;cloud computing reached omnipresence&lt;/strong&gt; — backend architecture remained &lt;strong&gt;tragically stagnant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Node.js and Go, both children of the late 2000s, still dominate the conversation. Frameworks like &lt;strong&gt;Express.js&lt;/strong&gt;, relics engineered for problems of yesterday, are still being &lt;strong&gt;duct-taped&lt;/strong&gt; into "modern" systems with a mix of &lt;strong&gt;nostalgia and desperation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It isn't just stagnation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  ⚡️ &lt;strong&gt;It’s betrayal.&lt;/strong&gt;
&lt;/h3&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔍 &lt;strong&gt;What Is Backend Development? (For Beginners)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Backend development refers to the server-side logic, database interactions, authentication, real-time updates, and API (Application Programming Interface) management that power modern applications.&lt;/p&gt;

&lt;p&gt;If the frontend is what users see, the backend is the invisible machinery that makes it all work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical backend responsibilities include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📲 &lt;strong&gt;Receiving and processing user input&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📂 &lt;strong&gt;Storing and retrieving data securely&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Enforcing business logic and permissions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔗 &lt;strong&gt;Communicating with third-party services&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Serving the right data, in the right shape, at the right time&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A backend must be fast, reliable, scalable, secure, and maintainable.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📊 &lt;strong&gt;How We Got Trapped&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔫 Node.js and Go: A Revolution That Stopped
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; allowed developers to write server-side code in JavaScript with an event-driven, non-blocking I/O model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go&lt;/strong&gt; introduced simplicity, speed, and powerful concurrency primitives.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both were &lt;strong&gt;revolutionary&lt;/strong&gt;, but neither fundamentally rethought backend architecture for the &lt;strong&gt;real-time, distributed, mobile-first world&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🐟 The Microservices Mania
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Break the monolith into tiny services!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The idea was intoxicating. The reality?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💔 &lt;strong&gt;Deployment nightmares&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🙈 &lt;strong&gt;Versioning chaos&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔈 &lt;strong&gt;Communication overhead&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🤦 &lt;strong&gt;Debugging hell&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Microservices&lt;/strong&gt; promised paradise but delivered &lt;strong&gt;bureaucratic complexity&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔮 The API-First Delusion
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Design beautiful APIs first!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes, tools like &lt;strong&gt;Swagger/OpenAPI&lt;/strong&gt; helped document endpoints. But designing pretty endpoints &lt;strong&gt;does not solve&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;State management over time&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Modeling transitions safely&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Handling failures and retries robustly&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;APIs became glossy veneers masking fragile logic underneath.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔥 Serverless and BaaS: The Mirage
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"No backend needed!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Serverless (AWS Lambda) and BaaS (Firebase, Supabase) made grand promises… but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;Customization limitations&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Vendor lock-in nightmares&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Hidden cold start issues&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;Opaque performance bottlenecks&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Easy at first. &lt;strong&gt;Painful forever after.&lt;/strong&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;h2&gt;
  
  
  🔥 &lt;strong&gt;Backend-as-a-Service sold us shortcuts and stole our future.&lt;/strong&gt;
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;p&gt;Meanwhile, the computing world evolved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💪 &lt;strong&gt;CPUs&lt;/strong&gt; became 10x faster.&lt;/li&gt;
&lt;li&gt;📡 &lt;strong&gt;Networks&lt;/strong&gt; became miracles.&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Distributed theory&lt;/strong&gt; matured.&lt;/li&gt;
&lt;li&gt;📲 &lt;strong&gt;Users&lt;/strong&gt; demanded real-time dynamism.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backend? Still stuck in 2010.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧙‍♂️ &lt;strong&gt;The False Prophets: Bun and Deno&lt;/strong&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"At last, the saviors!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bun&lt;/strong&gt;: lightning fast ✨, but tied to &lt;strong&gt;npm's ancient ghosts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deno&lt;/strong&gt;: pure philosophy 💜, but retreated toward &lt;strong&gt;Node.js compatibility&lt;/strong&gt; to survive.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💥 &lt;strong&gt;Speed without revolution is nothing.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Bun and Deno fixed minor pains.&lt;/p&gt;

&lt;p&gt;They &lt;strong&gt;left the core rot untouched&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⏱️ &lt;strong&gt;Is This Merely a Lost Decade?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s worse.&lt;/p&gt;

&lt;p&gt;Without a radical reset, backend development faces a &lt;strong&gt;Lost Twenty Years&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nothing will save us if we don't rebuild the foundation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💔 Shiny frameworks won't.&lt;/li&gt;
&lt;li&gt;🚫 Faster Node.js forks won't.&lt;/li&gt;
&lt;li&gt;❌ Newer BaaS platforms won't.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;"The clock isn't just ticking. It is almost out of time."&lt;/strong&gt;
&lt;/h2&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ✨ &lt;strong&gt;[To be continued: Part II — Dia.ts: Forging the New Era]&lt;/strong&gt;
&lt;/h1&gt;

</description>
      <category>backend</category>
      <category>node</category>
      <category>api</category>
      <category>go</category>
    </item>
    <item>
      <title>Next.js Is Just Fancy PHP for People Who Fear Simplicity</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 22 Apr 2025 12:52:22 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/nextjs-is-just-fancy-php-for-people-who-fear-simplicity-1b5k</link>
      <guid>https://dev.to/yukinisihikawa/nextjs-is-just-fancy-php-for-people-who-fear-simplicity-1b5k</guid>
      <description>&lt;h2&gt;
  
  
  How We Rebranded MVC, Reinvented Routing, and Declared It a Revolution
&lt;/h2&gt;

&lt;p&gt;Every few years, we reinvent the web. Or at least, we like to think we do.&lt;/p&gt;

&lt;p&gt;Next.js is often praised as the "future of web development." It promises performance, scalability, and developer experience. But beneath the surface, it’s not revolutionary. It’s &lt;strong&gt;PHP&lt;/strong&gt; — in a React costume — running on Node.js.&lt;/p&gt;

&lt;p&gt;And somehow, we all pretend it’s something new.&lt;/p&gt;




&lt;h2&gt;
  
  
  The MVC We’ve Seen Before (and Denied)
&lt;/h2&gt;

&lt;p&gt;Model. View. Controller.&lt;/p&gt;

&lt;p&gt;We’ve seen this pattern before. Praised it. Then discarded it as “legacy.” But here we are again, rebuilding the same house with newer bricks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt;: Prisma, Drizzle, or your ORM of choice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;View&lt;/strong&gt;: React components. Fancy templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controller&lt;/strong&gt;: getServerSideProps, middleware, server actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In essence, it’s the same pattern PHP developers used in the early 2000s. Laravel did it better. Ruby on Rails made it elegant. Now we’re back to it — but with &lt;code&gt;useEffect&lt;/code&gt; and cache invalidation hell.&lt;/p&gt;

&lt;p&gt;The structure never changed. Only the &lt;strong&gt;syntax, tooling, and branding&lt;/strong&gt; did.&lt;/p&gt;




&lt;h2&gt;
  
  
  Routing Isn’t Innovation — It’s Nostalgia
&lt;/h2&gt;

&lt;p&gt;Next.js’s file-based routing is praised for its “DX.” But PHP had this in the early 2000s. Laravel, CodeIgniter, and even plain &lt;code&gt;index.php&lt;/code&gt; could handle this elegantly.&lt;/p&gt;

&lt;p&gt;What’s new? React-style folder naming. That’s it.&lt;/p&gt;

&lt;p&gt;It’s not innovation. It’s &lt;strong&gt;the past, wearing a hoodie.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Good UX ≠ New Architecture
&lt;/h2&gt;

&lt;p&gt;People confuse user experience with actual technical evolution.&lt;/p&gt;

&lt;p&gt;Sure, Next.js provides great UX — but so did server-rendered apps in PHP, Rails, and Django. They rendered fast. They were easy to debug. They didn’t need a flight manifest, suspense boundaries, or streaming strategies.&lt;/p&gt;

&lt;p&gt;We’ve taken what was simple and &lt;strong&gt;abstracted it into complexity&lt;/strong&gt; — and then called that complexity “modern.”&lt;/p&gt;

&lt;p&gt;Streaming, RSC, server/client boundary management, React compiler pipelines. All to serve HTML. Like PHP did.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Cult of Modern and the Fear of Legacy
&lt;/h2&gt;

&lt;p&gt;We fear being outdated. So we run from anything labeled “legacy.”&lt;/p&gt;

&lt;p&gt;PHP didn’t die because it was bad. It died because it wasn’t fashionable.&lt;/p&gt;

&lt;p&gt;Next.js is &lt;strong&gt;fashionable PHP&lt;/strong&gt;. With TypeScript and an aggressive marketing team.&lt;/p&gt;

&lt;p&gt;When Vercel demos a fullstack app in 30 minutes, it’s not because of technical revolution — it’s because they’ve rebranded the past and made it slick.&lt;/p&gt;

&lt;p&gt;What you’re seeing is the same MVC structure with a modern DX wrapper.&lt;/p&gt;

&lt;p&gt;And that wrapper? It’s built on years of overcomplicated abstraction, often requiring senior-level devs just to achieve what junior devs did in 2005.&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest Web, Not Reinvented Web
&lt;/h2&gt;

&lt;p&gt;Let’s stop pretending every abstraction is progress. Let’s stop worshipping complexity for its own sake.&lt;/p&gt;

&lt;p&gt;Next.js is powerful, yes. But it’s not new. It’s not futuristic. It’s not revolutionary.&lt;/p&gt;

&lt;p&gt;It’s just PHP, with better branding and more GitHub stars.&lt;/p&gt;

&lt;p&gt;And maybe that’s okay — if we can just be honest about it.&lt;br&gt;
&lt;a href="https://x.com/structax" rel="noopener noreferrer"&gt;I also shared this on X (Twitter)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>php</category>
      <category>laravel</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What if React never needed JavaScript? Introducing NO JS 🧠</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Tue, 01 Apr 2025 01:37:56 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/what-if-react-never-needed-javascript-introducing-no-js-29gp</link>
      <guid>https://dev.to/yukinisihikawa/what-if-react-never-needed-javascript-introducing-no-js-29gp</guid>
      <description>&lt;h1&gt;
  
  
  NO JS – A Syntax Operating System for the Web
&lt;/h1&gt;

&lt;p&gt;What if you could build full web apps — with no JavaScript at all?&lt;/p&gt;

&lt;p&gt;🧪 &lt;a href="https://no-js-playground.onrender.com" rel="noopener noreferrer"&gt;Try the Playground&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🌐 &lt;a href="https://github.com/Structax/No-JS" rel="noopener noreferrer"&gt;GitHub Source&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ✨ The Idea
&lt;/h2&gt;

&lt;p&gt;NO JS is a meaning-driven syntax OS.  &lt;/p&gt;

&lt;p&gt;You write &lt;code&gt;.nojs&lt;/code&gt; files that describe structure, state, &lt;/p&gt;

&lt;p&gt;and flow — then compile them to pure HTML using Zig.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;page "home" {
  state.username = "Yuki"
  div {
    h1 { text "Welcome, {username}" }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compile it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nojs build examples/hello.nojs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And get this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div&amp;gt;&amp;lt;h1&amp;gt;Welcome, Yuki&amp;lt;/h1&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No JavaScript. No runtime. No framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why I Built It
&lt;/h2&gt;

&lt;p&gt;Modern web tools are amazing — but what if we could write&lt;/p&gt;

&lt;p&gt;the web with just meaning?&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Live Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://no-js-playground.onrender.com" rel="noopener noreferrer"&gt;🧪 Try NO JS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try editing .nojs code and see instant HTML output.&lt;/p&gt;

&lt;p&gt;No build tools, no client-side JS.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Philosophy
&lt;/h2&gt;

&lt;p&gt;Code tells machines what to do.&lt;/p&gt;

&lt;p&gt;Syntax tells the world what you mean.&lt;/p&gt;

&lt;p&gt;Would love thoughts, ideas, or reactions 🙌&lt;/p&gt;

&lt;p&gt;This is still v0.1 — just the beginning!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>dsl</category>
    </item>
    <item>
      <title>🚀I build JetScript — the focused, modern successor to JavaScript for MVPs, educators, and indie devs.</title>
      <dc:creator>Yuki Nishikawa</dc:creator>
      <pubDate>Wed, 26 Mar 2025 23:56:08 +0000</pubDate>
      <link>https://dev.to/yukinisihikawa/i-built-jetscript-a-new-javascript-like-language-for-solo-founders-indie-hackers-and-educators-1pe2</link>
      <guid>https://dev.to/yukinisihikawa/i-built-jetscript-a-new-javascript-like-language-for-solo-founders-indie-hackers-and-educators-1pe2</guid>
      <description>&lt;p&gt;Tired of configs, boilerplate, and frameworks that make your MVP &lt;/p&gt;

&lt;p&gt;feel like a PhD thesis?&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%2Fteaybj19286wok7fkcn8.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%2Fteaybj19286wok7fkcn8.png" alt="JetScript syntax screenshot – routing and state" width="764" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 GitHub: &lt;a href="https://github.com/jetscript-lang/JetScript" rel="noopener noreferrer"&gt;https://github.com/jetscript-lang/JetScript&lt;/a&gt;&lt;br&gt;
I built JetScript — a lightweight scripting language designed for:&lt;/p&gt;

&lt;p&gt;🧑‍🚀 Startup founders launching MVPs&lt;/p&gt;

&lt;p&gt;🧑‍🎨 Indie hackers building fast and solo&lt;/p&gt;

&lt;p&gt;🧑‍🏫 Educators teaching core web concepts&lt;/p&gt;

&lt;p&gt;🤖 LLM developers who want clean, generative syntax&lt;/p&gt;

&lt;p&gt;No npm. No toolchains. No JSX.&lt;/p&gt;

&lt;p&gt;Just one file, readable code, and instant feedback.&lt;/p&gt;

&lt;p&gt;🤔 Why JetScript?&lt;br&gt;
JavaScript (and TypeScript) has evolved beautifully — but for solo &lt;br&gt;
builders, it often feels like overkill:&lt;/p&gt;

&lt;p&gt;Endless tooling: vite, tsc, babel, eslint, jest, ...&lt;/p&gt;

&lt;p&gt;Boilerplate and complexity everywhere&lt;/p&gt;

&lt;p&gt;JSX fatigue and component hell&lt;/p&gt;

&lt;p&gt;Hooks, routing layers, global state chaos&lt;/p&gt;

&lt;p&gt;What if there was a language made just for founders and rebels?&lt;/p&gt;

&lt;p&gt;✨ What is JetScript?&lt;/p&gt;

&lt;p&gt;JetScript is a new scripting language that reimagines &lt;/p&gt;

&lt;p&gt;frontend+backend+state logic in a single file.&lt;/p&gt;

&lt;p&gt;⚡ Built-in state, routing, and rendering&lt;/p&gt;

&lt;p&gt;💡 Syntax that flows like natural thought&lt;/p&gt;

&lt;p&gt;🌀 Powered by Bun — instant runtime, zero build&lt;/p&gt;

&lt;p&gt;🔥 No imports, no toolchains, no ceremony&lt;/p&gt;

&lt;p&gt;📦 Hello Counter Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;route "/" do
  state count = 0

  view:
    h1 "Count: #{count}"
    button { onclick: inc(count) } "＋"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔️ No JSX&lt;br&gt;
✔️ No useState, useEffect&lt;br&gt;
✔️ Just flow&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%2F8vy4pdgj2ryol1rh8bfp.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%2F8vy4pdgj2ryol1rh8bfp.png" alt="Image description" width="743" height="396"&gt;&lt;/a&gt;&lt;br&gt;
🗺 Roadmap&lt;br&gt;
Version Features&lt;br&gt;
v0.1    Core runtime + DSL (✅ released)&lt;/p&gt;

&lt;p&gt;v0.2    fn, if, improved AST&lt;/p&gt;

&lt;p&gt;v0.3    CLI (jets) + Playground&lt;/p&gt;

&lt;p&gt;v0.4    Module system (JetModules)&lt;/p&gt;

&lt;p&gt;Yes, CLI is coming soon! 🛠️&lt;/p&gt;

&lt;p&gt;🌱 The Philosophy&lt;/p&gt;

&lt;p&gt;“JetScript is built not just to run fast,&lt;/p&gt;

&lt;p&gt;but to let your ideas flow as code.”&lt;/p&gt;

&lt;p&gt;We believe programming should be simple, expressive, and joyful.&lt;/p&gt;

&lt;p&gt;JetScript is built on the poetic principles of Mizulang — reimagined for &lt;/p&gt;

&lt;p&gt;the startup era.&lt;/p&gt;

&lt;p&gt;📡 Try it out / Follow the journey&lt;/p&gt;

&lt;p&gt;🔗 GitHub: &lt;a href="https://github.com/jetscript-lang/JetScript" rel="noopener noreferrer"&gt;https://github.com/jetscript-lang/JetScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧵 X / Twitter: @structax&lt;/p&gt;

&lt;p&gt;If you like it, drop a ⭐ — it helps me a ton.&lt;/p&gt;

&lt;p&gt;And feel free to ask questions, suggest features, or just say hi!&lt;/p&gt;

&lt;p&gt;Happy building, rebels.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>opensource</category>
      <category>frontend</category>
      <category>dsl</category>
    </item>
  </channel>
</rss>
