31615
A resourceful newsletter featuring the latest and most important news, articles, books and updates in the world of #javascript 🚀 Don't miss our Quizzes! Let's chat: @nairihar
🥶 TSDiagram: Diagrams as Code with TypeScript
Draft diagrams quickly with TypeScript. Define your data models through top-level type aliases and interfaces and it automatically lays out the nodes in an efficient way. GitHub repo.
Andrei Neculaesei
🗓 FullCalendar: A Full Sized JavaScript Calendar Control
Get a Google Calendar-style experience in your own apps. Has connectors for React, Vue and Angular, but can be used with plain JavaScript too. The base version is MIT licensed, but there’s a commercial version too with extra features.
Adam Shaw
👀 The Performance Inequality Gap in 2026
Esteemed browser and Web standards expert Alex Russell looks at the state of client-side Web performance, what sort of bandwidth you should be taking into account, what devices people are using, and warns against ever-growing JavaScript bundle sizes. A lot of data here.
Alex Russell
✌️ Over 150 Algorithms and Data Structures Demonstrated in JS
Examples of many common algorithms (e.g. bit manipulation, Pascal’s triangle, Hamming distance) and data structures (e.g. linked lists, tries, graphs) with explanations. Available in eighteen other written languages too.
Oleksii Trekhleb et al.
🔒 OWASP (Open Worldwide Application Security Project) has released its list of the top ten web application security threats in 2025.
Читать полностью…
👀 imgui-react-runtime: React + Dear ImGui + Static Hermes
When the author teased a demo of this on X a few weeks ago, I wasn’t sure if it would get released, but here it is. A new way to put together native apps using React and the popular lightweight GUI library Dear ImGui.
Tzvetan Mikov
😉 The State of Node.js in 2025, Explained
A thirty-minute talk from JSNation earlier this year where TSC member Matteo Collina presented an update on Node’s still-growing popularity, release schedule, security, recent performance enhancements, the permissions system, and more.
GitNation
✌️ JavaScript Engines Zoo: Learn About Over 100 JS Engines
I’m a sucker for a big table of data and this is about as big as it gets when it comes to JavaScript engines. See how various engines compare, sort them by performance, or click on an engine’s name to learn more about its development, history, and end users. The project’s repo also has Dockerfiles for trying each of them out.
Ivan Krasilnikov
👀 Vibe Coding ≠ AI-Assisted Coding
Most people don't know the difference...
Laszlo Horvath
👀 In Your URL is Your State, Ahmad Alfy looks at the 'overlooked power' and elegance of using the URL's various components for representing state.
Читать полностью…
🎹 Perspective 4.0: High Performance Analytics and Data Visualization Component
Originally built by JP Morgan, this data visualization component, built in C++ and compiled to WebAssembly, is well-suited for large and real-time streaming datasets. The demo on the homepage lets you try visualization types at up to 1000 changes per second. v4.0 sees the project move to the OpenJS Foundation.
OpenJS Foundation
😉 The Talk Videos from CascadiaJS 2025
CascadiaJS took place a month ago and the talk videos have been gradually rolling out onto YouTube. You can learn more about TanStack with Jack Herrington, the origin story of JavaScript with Annie Sexton, the Web Monetization API with Ioana Chiorean, and more.
CascadiaJS
🤩 The Inner Workings of JavaScript Source Maps
Ever wondered how devtools can magically turn mangled, minified JavaScript back into readable source while debugging? Zero magic; that’s a source map doing its job. But how do source maps actually work under the hood?
Manoj Vivek
🇯🇵 Fancy writing JavaScript in Japanese (above)? Say こんにちは to KokoScript.
Читать полностью…
CHALLENGE
const arr = [1, 2, 3];Читать полностью…
const obj = { valueOf: () => 4, toString: () => '5' };
const result1 = arr + obj;
const result2 = +obj;
const result3 = String(obj);
const result4 = obj == 4;
const result5 = obj === 4;
console.log(`${result1}|${result2}|${result3}|${result4}|${result5}`);
const weird = [] + [] + 'hello';
const weirder = [] + {} + [];
const weirdest = {} + [] + {};
console.log(`${weird}|${weirder}|${weirdest}`);
const final = !!'0' + !!'' + !!null + !!undefined;
console.log(final);
CHALLENGE
class SimpleObservable {
constructor(subscribeFn) {
this.subscribeFn = subscribeFn;
}
subscribe(observer) {
return this.subscribeFn(observer);
}
}
const obs = new SimpleObservable(observer => {
observer.next('first');
observer.next('second');
observer.complete();
});
const results = [];
obs.subscribe({
next: val => results.push(val),
complete: () => results.push('done')
});
console.log(results.join('-'));
Читать полностью…
CHALLENGE
const original = {
name: 'Sarah',
hobbies: ['reading', 'coding'],
address: { city: 'Portland', zip: 97201 }
};
const shallow = { ...original };
const deep = JSON.parse(JSON.stringify(original));
shallow.name = 'Emma';
shallow.hobbies.push('hiking');
shallow.address.city = 'Seattle';
deep.hobbies.push('swimming');
deep.address.zip = 98101;
console.log(original.hobbies.length, original.address.city);
Читать полностью…
CHALLENGE
const user = {
profile: {
settings: {
theme: 'dark',
notifications: null
}
}
};
const result1 = user?.profile?.settings?.theme;
const result2 = user?.profile?.settings?.notifications?.email;
const result3 = user?.profile?.preferences?.language ?? 'en';
const result4 = user?.profile?.settings?.notifications?.push?.('test');
console.log(result1, result2, result3, result4);
Читать полностью…
📸 Google Announces Angular v21
The Google team has gone all out with this significant release of its popular JavaScript framework. They’ve put together a retro game-themed adventure-based tour of what’s new, along with top notch videos showing off features like its new signal-based approach to forms, MCP server for AI-powered workflows, library of headless components focused on accessibility, and even a new ‘Angular AI Tutor’ to get up to speed.
Google
😮 vis-timeline 8.4 – Interactive control to visualize data across time, as shown above. Numerous examples here.
Читать полностью…
CHALLENGE
console.log(typeof myFunction);Читать полностью…
console.log(typeof myVar);
console.log(typeof myLet);
console.log(typeof myConst);
var myVar = 'hello';
let myLet = 'world';
const myConst = 'test';
function myFunction() {
return 'hoisted';
}
console.log(myFunction());
console.log(myVar);
✌️ This week's TC39 meeting: The Ecma TC39 committee (the group behind the design of ECMAScript / JavaScript) met up for the 111th time this week (seen above) to discuss language proposals. The meeting notes won't be published for a few weeks, but several proposals did see some progress:
- Iterator Sequencing progressed to stage 4.
- Joint Iteration, Iterator Join, and Await dictionary of Promises go stage 2.7.
- The Intl Unit Protocol also reached stage 1 to provide a way to annotate quantities with the units being measured.
- Typed Array Find Within progressed to stage 1. Think a native indexOf-type method for TypedArrays.
Note: Learn more about what the TC39 stages mean here.
CHALLENGE
const Flyable = {
fly() { return 'flying'; }
};
const Swimmable = {
swim() { return 'swimming'; }
};
function applyMixins(target, ...mixins) {
mixins.forEach(mixin => {
Object.assign(target.prototype, mixin);
});
}
class Bird {}
class Fish {}
applyMixins(Bird, Flyable, Swimmable);
applyMixins(Fish, Swimmable);
const eagle = new Bird();
const shark = new Fish();
console.log(eagle.swim());
console.log(shark.fly?.() || 'undefined method');
Читать полностью…
CHALLENGE
const target = { name: 'Sarah', age: 25 };
const handler = {
get(obj, prop) {
if (prop in obj) {
return obj[prop];
}
return `Property '${prop}' not found`;
},
set(obj, prop, value) {
obj[prop] = value.toString().toUpperCase();
return true;
}
};
const proxy = new Proxy(target, handler);
proxy.city = 'boston';
console.log(proxy.name);
console.log(proxy.city);
console.log(proxy.country);
Читать полностью…
CHALLENGE
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
queueMicrotask(() => console.log('4'));
setTimeout(() => {
console.log('5');
Promise.resolve().then(() => console.log('6'));
}, 0);
console.log('7');
Читать полностью…
CHALLENGE
const target = { name: 'Sarah', age: 25 };
const handler = {
get(obj, prop) {
if (prop === 'info') {
return `${obj.name} is ${obj.age}`;
}
return Reflect.get(obj, prop);
},
has(obj, prop) {
return prop !== 'age' && Reflect.has(obj, prop);
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.info);
console.log('age' in proxy);
console.log('name' in proxy);
Читать полностью…
CHALLENGE
const wm = new WeakMap();Читать полностью…
const obj1 = { name: 'first' };
const obj2 = { name: 'second' };
wm.set(obj1, 'value1');
wm.set(obj2, 'value2');
const keys = [];
for (let key of wm) {
keys.push(key);
}
console.log(keys.length);
console.log(wm.has(obj1));
console.log(wm.get(obj2));
CHALLENGE
const user = { name: 'Sarah', age: 28 };
const greeting = 'Hello';
const template = `${greeting}, ${user.name}! You are ${user.age} years old.`;
function createMessage(strings, ...values) {
return strings.reduce((result, string, i) => {
return result + string + (values[i] ? `[${values[i]}]` : '');
}, '');
}
const tagged = createMessage`Welcome ${user.name}, age: ${user.age}!`;
console.log(template);
console.log(tagged);
Читать полностью…
CHALLENGE
const data = '{"name":"Sarah","age":25,"skills":["JavaScript","Python"]}'
const parsed = JSON.parse(data)
const stringified = JSON.stringify(parsed, null, 0)
const reparsed = JSON.parse(stringified)
try {
const invalid = '{name:"John","incomplete":}'
JSON.parse(invalid)
} catch (e) {
console.log(e.name)
}
console.log(typeof parsed.age)
console.log(reparsed.skills.length)
console.log(JSON.stringify({a: undefined, b: null, c: 0}))
Читать полностью…