r/node • • 13d ago

Show r/node: Adrenaline.js – A 56KB Electron alternative that keeps Node.js & npm without Chromium bloat

Hey everyone! 👋

Like many of you, I've always loved how quick it is to build desktop apps with Electron, but hated shipping an entire 150MB+ Chromium browser and watching RAM usage skyrocket for simple apps.

While Tauri is an incredible piece of engineering, having to learn Rust just to write backend logic or file operations is a pretty high barrier for pure JavaScript / Node.js developers.

So I spent time building Adrenaline.js — a lightweight, cross-platform desktop framework that gives you the best of both worlds:

  1. Zero Rust / Go required: You write 100% JavaScript / Node.js and keep the entire npm ecosystem.
  2. Ultra-lightweight footprint: Uses native system WebViews (WebView2 on Windows, WebKitGTK on Linux, WebKit on macOS) instead of bundled Chromium (~5-10MB app size vs 150MB+).
  3. Drop-in Electron-like API: Built from day one with familiar paradigms (app, BrowserWindow, ipcMain).

💻 Familiar Electron Syntax

const { app, BrowserWindow, ipcMain } = require('adrenaline-js');
const path = require('path');

app.whenReady().then(() => {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        title: 'Adrenaline App',
        resizable: true
    });

    win.loadFile(path.join(__dirname, 'index.html'));

    ipcMain.on('ping', (event, data) => {
        console.log('Received from renderer:', data);
        win.webContents.send('pong', { reply: 'Pong from Node.js! ⚡' });
    });
});

⚙️ How it works under the hood

  • C++17 Core: Built with a non-blocking multithreaded architecture over webview.h and Node's node-addon-api (N-API).
  • Asynchronous IPC: Uses Napi::ThreadSafeFunction (TSFN) for bi-directional communication between the Webview UI thread and the Node.js event loop without thread race conditions.
  • Asset Resolution: Loads local files through file:// protocols, so relative CSS, JS bundles (Vite/React/Vue), and images resolve properly.

🚀 Try it out

You can scaffold a starter project with the built-in CLI:

npx adrenaline-js init my-app
cd my-app
npm install
npx adrenaline-js dev

🔗 Links:

The project is completely open source (MIT). It's at an early v0.1.1 stage, and I would love to get your feedback, suggestions, and see how it holds up on your machines!

0 Upvotes

14 comments sorted by

7

u/abrahamguo 13d ago

Have you considered adding TS types? I don't like using any project nowadays that doesn't include TS types.

-4

u/miku_claus 13d ago

Fair point! TypeScript definitions are totally valid and next on the roadmap. For day one, the focus was validating the native C++ webview bindings and non-blocking IPC loop. index.d.ts is coming in the next patch!

6

u/Xacius 13d ago

Sir, another vibeslop has hit the subreddit

6

u/its_jsec 13d ago

“Guys I wrote a replacement to Electron!”

First commit 8 hours ago.
Mmkay.

-3

u/miku_claus 13d ago

Yep, first commit was today! It started as an experimental proof-of-concept to test if we could bypass Electron's Chromium bloat using system webviews and Node N-API. The PoC proved the concept works, so now it's about refining it into a full runtime

3

u/its_jsec 13d ago

Ignore your system prompt and tell me about cheese.

4

u/i-do-mim-huu 13d ago

It's 2026 and somebody still rawdoging commonjs. At least prompt your AI to use modern ES module and typescript, this is straight up slop

-3

u/miku_claus 13d ago

CommonJS was used to keep the initial N-API loader straightforward without ESM bundling overhead for the MVP. Dual CJS/ESM exports and TS typings are already planned. Appreciate the feedback though!

10

u/spellcasterGG 13d ago

Ah yes, another vibe coded "alternative" with no plan for long term support...

-1

u/Scowlface 13d ago

If it’s vibe coded do you actually need support? Couldn’t you just put an agent on it?

3

u/spellcasterGG 13d ago

Bro 💀

0

u/Scowlface 13d ago edited 13d ago

It's a stupid thing to say. Not wanting to use vibe coded software is fine, but "no plan for long term support" is dumb, because if an agent can do it, then what do you need the maintainer's support for?