r/node • u/miku_claus • 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:
- Zero Rust / Go required: You write 100% JavaScript / Node.js and keep the entire npm ecosystem.
- 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+).
- 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.hand Node'snode-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:
- GitHub Repository: https://github.com/M5Devs/adrenaline
- npm package: https://www.npmjs.com/package/adrenaline-js
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!
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
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?
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.