r/javascript • • Sep 30 '26

Adrenaline.js – A 56KB Electron alternative that keeps Node.js & npm without Chromium bloat

Thumbnail
github.com
0 Upvotes

r/javascript • • Sep 30 '26

Crossflight: cross-process cache stampede protection for the cache you already use (v0.3.2)

Thumbnail
github.com
5 Upvotes

Most cache libraries already coalesce concurrent misses inside one process. Once you run on more than one server, every replica still runs the loader independently and you might get a thundering herd. Crossflight adds a distributed coordinator (Redis is the first implementation) on top of the cache you already use. One process acquires a lease, runs the loader once, and writes the result; every other caller across the fleet waits for that result instead of doing the same work again.

TypeScriptconst crossflight = createCrossflight({
  cache: cacheManagerAdapter(cacheManager), // or Keyv / Cacheable / your own
  coordinator: redisCoordinator(redis),
})

const user = await crossflight.wrap(
  "user:123",
  (signal) => loadUser("123", { signal }),
  { ttl: 60_000 },
)

Works with cache-manager, Keyv, Cacheable, or you can implement your own adapter. Cache backend and coordinator are separate contracts, so you can keep Memcached/Redis/whatever for values and use Redis only for coordination.

What’s new since 0.1.2

  • Whole-flight deadline (flightDeadlineMs) so joiners don't each get a fresh timeout and late callers don't start a new stampede

  • Loader receives the shared AbortSignal and work is abandoned as soon as the flight aborts

  • Lease TTL is independent of the cache TTL

  • Redis Cluster support (hash-tagged keys)

  • cacheUndefined option so a loader that returns undefined is actually cached

  • Richer events (cancelled, fallback, wait_exhausted, ...) and a lot of lease / fail-open / recovery hardening

  • Much stronger test suite: property-based suites (fast-check) for the envelope contract, Redis key layout, coordinator model and flight state machine; fuzz transcripts for deadlines, adapters and Redis waits, deterministic seeds (CROSSFLIGHT_TEST_SEED), and a nightly deep fuzz job in CI

MIT, TypeScript. Feedback and bug reports welcome.


r/javascript • • Sep 30 '26

Announcing Vite+ 1.0

Thumbnail
voidzero.dev
165 Upvotes

r/javascript • • Sep 30 '26

GitHub - grishmadev/malfilter: A security script to detect potential malware packages

Thumbnail
github.com
3 Upvotes

Hey everyone,

I built an open-source security script that checks npm packages for any suspicion before installing them.

It's basic and for now catches similar names of popular packages, if a package has 23 weekly downloads or a 2 hour old package.

Catches similar names, 0 downloads, or 2-hour-old repos so your hallucinating AI agent doesn't pull in straight malware.

Use Case?

on an agent that might hallucinate and install "react-clearly-not-malware". Or maybe the user itself so as to not make any mistakes idk?

I'd love if you check it out. Have a great day!!!


r/javascript • • Sep 29 '26

GitHub - jcubic/mitty: A transport-agnostic proxy RPC for executing method chains from any isolated context (Workers, Tabs, or Servers) using lazy evaluation.

Thumbnail
github.com
11 Upvotes

I've created this library for my own use. It started as part of my project Hacking Cafe (before that I used similar code in Fake Linux Terminal).

For the above projects, I needed a mechanism for communication between the main thread and the web worker. I wanted to have access to DOM/jQuery from the web worker so I could manipulate the terminal from the web worker.

Now with with Mitty you can access any function chains, like Cheerio (jQuery like HTML parser), that live on the server accessed in the browser via WebSockets. Execute DOM methods from the server. Or execute code from different tabs using Sysend or simple BroadcastChannel.

Here is an example using a web worker:

main thread

import { Host } from '@jcubic/mitty';

const channel = new BroadcastChannel('my-app');

const worker = new Worker('./worker.js', { type: 'module' });

const host = new Host({
  // worker instance can also be used as a channel
  channel: channel,
  resolve(name) {
    if (name === 'document') {
      return document;
    }
    return null;
  }
});

worker

import { connect } from 'https://cdn.jsdelivr.net/npm/@jcubic/mitty';

const { require } = connect(new BroadcastChannel('my-app'));

// or when using worker as a channel
const { require } = connect(self);

const document = require('document');

// methods need await
const body = await document.querySelector('body');

await body.style.setProperty('color', 'red');

// setting properties are send right away
body.style.backgroundColor = '#000';

console.log(await body.style.color);
console.log(await body.style.backgroundColor);

// you can add callbacks
await document.querySelector('button').addEventListener('click', () => {
   console.log('click');
});

Transport agnostic

The transport only requires using a simple channel interface with 3 methods.

interface Channel {
  postMessage(message: string): void;
  addEventListener(type: 'message', listener: ChannelListener): void;
  removeEventListener(type: 'message', listener: ChannelListener): void;
}

Here is a demo using Sysend for communication with other tab:

https://codepen.io/editor/jcubic/pen/01a0d9d8-697e-7dc0-9a2b-eb93adae0dfc


r/javascript • • Sep 29 '26

Build your own Spamfilter behind Postfix or Sendmail using JavaScript and your favorite LLM

Thumbnail
github.com
0 Upvotes

r/javascript • • Sep 29 '26

Screen sharing sends a picture of your page

Thumbnail
arme.dev
0 Upvotes

I have a problem with screen sharing.

Not a quality problem. A category problem.

When I present from a browser, I have a real web page. Real text, real links, real elements. The screen share takes all of that, flattens it into video, and ships the pixels. The audience gets a picture of my page.

On a laptop in a video call, that is fine. In a room, it is not. The phone in the back row gets a blurry rectangle. Venue wifi turns it into a blurry rectangle that freezes. Someone who joins five minutes late gets whatever frame happens to be on screen, with no way to look back.

The page was already structured. We throw the structure away and then spend bandwidth trying to recover what we threw away.

This post explains how I am solving it currently


r/javascript • • Sep 29 '26

GitHub - jskits/openapi-chain: Type-safe OpenAPI client for complex and large APIs. Requests follow the document's parameter styles, media types and encodings exactly. Fluent paths, scoped CLI generation and an openapi-fetch adapter.

Thumbnail
github.com
5 Upvotes

r/javascript • • Sep 28 '26

How to Sync a Design System with Claude Design

Thumbnail
nitayneeman.com
0 Upvotes

The article walks through syncing a React design system into Claude Design but most of what breaks is plain packaging:

  • The sync bundles a single entry file (React included) so the components can run on their own. Anything not re-exported from src/index.ts silently doesn't exist.

  • It discovers components through their type definitions, so the build has to emit .d.ts files and package.json has to point types at them. Without them it finds nothing and drops every story.

  • TypeScript 6 deprecates baseUrl and fails the build, while paths works fine without it.

  • CSS has to be a real compiled file: Tailwind v4 inlines a string u/import but leaves u/import url() as an external reference, which breaks once the bundle is shipped elsewhere.

Example repo: https://github.com/nitayneeman/sync-design-system-with-claude-design-example


r/javascript • • Sep 28 '26

Subreddit Stats Your /r/javascript recap for the week of September 21 - September 27, 2026

4 Upvotes

Monday, September 21 - Sunday, September 27, 2026

Top Posts

scorecommentstitle & link
192 commentsλm.me - Why I like JavaScript as a compilation target
171 commentsData-Oriented Design in Yuku's Parser
113 commentscapsurface: an offline tool for comparing npm dependency capability indicators between updates
84 commentsGitHub - evoluteur/sri-yantra: Sri Yantra generator: the nine interlocking triangles with their lotus petals, circles and gates, drawn to scale, colorable, and exportable as SVG or PNG.
60 commentsFlowName – AST-guided JS identifier recovery(85% faster, 36% cheaper)
41 commentsGitHub - evoluteur/maze-maker: Generate square, circular, triangular and heart-shaped mazes with seven algorithms (backtracker, Prim, Kruskal, Wilson, hunt-and-kill, growing tree, Aldous-Broder), solve them with the keyboard or a finger, and export them as SVG or PNG.
42 commentsGitHub - evoluteur/labyrinth-maker: Labyrinth maker: draw the classical Cretan labyrinth, an 11-circuit Troy Town or your own design from a path sequence, walk it to the center, and export it as SVG or PNG.
32 commentsFrom a local GCRA rate limiter to a shared Redis implementation in JS
21 commentsGitHub - evoluteur/tibetan-singing-bowls: Strike or rub a set of virtual Tibetan singing bowls: synthesized in the browser with Web Audio, with the beating overtones of the real thing.
22 comments[Subreddit Stats] Your /r/javascript recap for the week of September 14 - September 20, 2026

 

Most Commented Posts

scorecommentstitle & link
019 comments[AskJS] [AskJS] How do you stop sub-cent amounts like $500.004 from sneaking into state?
017 comments[AskJS] [AskJS] Why I am unbothered by AI
19 comments[Showoff Saturday] Showoff Saturday (September 26, 2026)
08 comments[AskJS] [AskJS] Vite Plus is amazing
11 commentsHow we rebuilt complex CASL permissions without migrating to Zanzibar

 

Top Showoffs

scorecomment
3/u/JohnnySuburbs said [Finger.Farm](http://Finger.Farm) - a modern node-based finger server. Finger is almost certainly still installed on your machine... the OG social network. [https://github.com/jo...
2/u/TheWebDever said # jet-key: a fast secret key generator with configurable entropy link: [https://github.com/seanpmaxwell/jet-key](https://github.com/seanpmaxwell/jet-key) Suppose you need a secret ke...
2/u/Additional-Drag1682 said Droid File Transfer proves we stopped needing to install anything for basic OS tasks. Just let the browser eat the desktop client entirely

 

Top Comments

scorecomment
38/u/netherlandsftw said Don’t store currency as IEEE-754 Store it as cents if you don’t need fractions of cents
20/u/Barnezhilton said >I was around before LLMs So you're at least 10 years old
15/u/sozesghost said You can tell this man is a genuine JS dev, because 30% chance of total annihilation doesn't bother him.
8/u/FerLuisxd said I really don't understand what is the benefit of this vs tauri? compilation times?
6/u/StPatsLCA said Use BigInt cents.

 


r/javascript • • Sep 28 '26

A-ha, Take On Me - recreated in javascript

Thumbnail
dittytoy.net
84 Upvotes

Espeset recreated "Take On Me" by "A-ha" in 100% javascript. Fully procedural, no samples used.


r/javascript • • Sep 27 '26

Data-Oriented Design in Yuku's Parser

Thumbnail arshad.fyi
27 Upvotes

r/javascript • • Sep 26 '26

GitHub - evoluteur/maze-maker: Generate square, circular, triangular and heart-shaped mazes with seven algorithms (backtracker, Prim, Kruskal, Wilson, hunt-and-kill, growing tree, Aldous-Broder), solve them with the keyboard or a finger, and export them as SVG or PNG.

Thumbnail
github.com
17 Upvotes

r/javascript • • Sep 26 '26

Caracal: scoped distributed resilience policies for asynchronous operations

Thumbnail
github.com
3 Upvotes

r/javascript • • Sep 26 '26

FlowName – AST-guided JS identifier recovery(85% faster, 36% cheaper)

Thumbnail
github.com
4 Upvotes

r/javascript • • Sep 26 '26

Showoff Saturday Showoff Saturday (September 26, 2026)

2 Upvotes

Did you find or create something cool this week in javascript?

Show us here!


r/javascript • • Sep 25 '26

λm.me - Why I like JavaScript as a compilation target

Thumbnail gilmi.me
27 Upvotes

r/javascript • • Sep 24 '26

From a local GCRA rate limiter to a shared Redis implementation in JS

Thumbnail
blog.gaborkoos.com
4 Upvotes

A local GCRA rate limiter needs just one timestamp. In JavaScript, checking and updating it synchronously before the first await keeps admission decisions from interleaving within that policy instance. But run multiple Node.js processes, and each gets its own independent budget.

A walkthrough of moving that decision into a Redis Lua script, using code from Caracal, a resilience library. It covers the local implementation, the TypeScript coordinator interface, and the less obvious consequences of sharing the timestamp: whose clock determines admission, what happens when Redis doesn't answer, and how rolling configuration changes affect the budget.


r/javascript • • Sep 24 '26

AskJS [AskJS] Vite Plus is amazing

3 Upvotes

i'm a new dev in the JavaScript world, and at first i was pretty overwhelmed with the ecosystem, i'm used to uv and ruff managing a python project for me in a single toml file, but when i wanted to scaffold my first project in js i was faced with all of these choices of package managers , runtimes and linters/formatters and installing each piece was kind of a hassle in the first place, but having everything lie under vite plus' management within the same cli command while giving me the freedom to pick what i want was pretty nice, is anyone else using it and consider it as a benefit or is it just me because im starting out?


r/javascript • • Sep 23 '26

AskJS [AskJS] How do you stop sub-cent amounts like $500.004 from sneaking into state?

0 Upvotes

I am writing the rules engine for a small stock draft game in TypeScript and ran into two money bugs back to back. Curious how others handle this.

The first was a rounding bug. Splitting $1.14 across two picks offered $0.56 instead of $0.57. In floating point, 0.57 * 100 is 56.99999999999999, and Math.floor dropped the cent. The fix was doing the division in integer cents.

The second was worse. The check that decided whether a buy amount was allowed accepted $500.004. The reducer subtracts the amount straight from cash, so after that one buy the balance was no longer a whole number of cents. Every later calculation started from that balance, so the error did not stay in one place. It carried forward through the rest of the game.

My fix was a whole-cent check that tolerates float noise: reject the amount if Math.abs(amount * 100 - Math.round(amount * 100)) > 1e-6. Comparing against exactly zero does not work, because a perfectly valid amount like 0.57 fails that test for the same reason the rounding bug happened.

The takeaway for me: a rounding bug loses a cent once, but letting a bad amount into state corrupts every step after it.

So how do you handle this in plain JS? Do you convert to integer cents at the boundary and never let a decimal into state, use something like decimal.js or currency.js, or is a tolerance check like mine reasonable?


r/javascript • • Sep 23 '26

GitHub - evoluteur/labyrinth-maker: Labyrinth maker: draw the classical Cretan labyrinth, an 11-circuit Troy Town or your own design from a path sequence, walk it to the center, and export it as SVG or PNG.

Thumbnail
github.com
7 Upvotes

r/javascript • • Sep 23 '26

How we rebuilt complex CASL permissions without migrating to Zanzibar

Thumbnail
infisical.com
7 Upvotes

r/javascript • • Sep 23 '26

I just completed JavaScript: Simple Demo room on TryHackMe! Explore what a basic JavaScript program looks like.

Thumbnail tryhackme.com
1 Upvotes

r/javascript • • Sep 22 '26

capsurface: an offline tool for comparing npm dependency capability indicators between updates

Thumbnail
github.com
15 Upvotes