<?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: JSDev Space</title>
    <description>The latest articles on DEV Community by JSDev Space (@jsdevspace).</description>
    <link>https://dev.to/jsdevspace</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%2F1381737%2F39fc43a5-0614-4890-9b5f-f0933dae93c2.jpg</url>
      <title>DEV Community: JSDev Space</title>
      <link>https://dev.to/jsdevspace</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jsdevspace"/>
    <language>en</language>
    <item>
      <title>Friday Links #38 — Frontend Signals, AI Coding &amp; JavaScript Releases</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Thu, 21 May 2026 09:41:57 +0000</pubDate>
      <link>https://dev.to/jsdevspace/friday-links-38-frontend-signals-ai-coding-javascript-releases-kk0</link>
      <guid>https://dev.to/jsdevspace/friday-links-38-frontend-signals-ai-coding-javascript-releases-kk0</guid>
      <description>&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%2F03ubh8k4fymoacfyl10w.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%2F03ubh8k4fymoacfyl10w.png" alt="JavaScript Friday Links #38" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome to Friday Links #38 — another curated collection of updates from the fast-moving JavaScript and frontend ecosystem.&lt;/p&gt;

&lt;p&gt;This week brings a mix of framework news, AI-assisted developer tooling, fresh open-source releases, experimental projects, performance discussions, and modern engineering ideas shaping how we build for the web. From React and TypeScript to Node.js, tooling, and AI workflows, here are the stories, launches, and links worth checking out.&lt;/p&gt;

&lt;h2&gt;
  
  
  📢 Special partner message
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🗓️ &lt;a href="https://reactnorway.com" rel="noopener noreferrer"&gt;React Norway&lt;/a&gt; — Oslo, June 5 🇳🇴
&lt;/h3&gt;

&lt;p&gt;Join 350+ React and full-stack developers for a unique single-track conference with a strong “Rock &amp;amp; React” vibe, great talks, community energy, and modern web engineering discussions.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎟️ Use code &lt;code&gt;TWIR&lt;/code&gt; for 10% off your ticket.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  🧠 Language &amp;amp; Runtime Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  TypeScript 6.0 Is Official — And It’s Preparing the Road to TypeScript 7
&lt;/h3&gt;

&lt;p&gt;One of the biggest ecosystem updates remains &lt;a href="https://www.typescriptlang.org/docs/handbook/release-notes/typescript-6-0.html" rel="noopener noreferrer"&gt;TypeScript 6.0&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This release is not just another incremental version bump. It acts as a transition layer between the current JavaScript-based compiler and the upcoming native TypeScript 7 compiler. According to the TypeScript team, 6.0 is effectively the bridge release that prepares projects for the future architecture.&lt;/p&gt;

&lt;p&gt;Some notable changes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;alignment with future TS 7 behavior&lt;/li&gt;
&lt;li&gt;deprecations aimed at modern ESM workflows&lt;/li&gt;
&lt;li&gt;simplified DOM library behavior&lt;/li&gt;
&lt;li&gt;stricter compiler rules&lt;/li&gt;
&lt;li&gt;migration tooling for upcoming changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The broader direction is clear: TypeScript is increasingly optimizing for modern evergreen runtimes, ESM tooling, and native performance improvements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bun’s Rust Rewrite Has Been Merged
&lt;/h3&gt;

&lt;p&gt;The Bun story continues.&lt;/p&gt;

&lt;p&gt;One of the more talked-about updates recently: &lt;a href="https://github.com/oven-sh/bun/pull/30412" rel="noopener noreferrer"&gt;Bun’s experimental Rust rewrite effort has now been merged&lt;/a&gt;, generating substantial discussion across developer communities. Questions quickly emerged around maintainability, AI-assisted code generation quality, and long-term runtime strategy.&lt;/p&gt;

&lt;p&gt;At the same time, Bun keeps strengthening its position inside the TypeScript ecosystem.&lt;/p&gt;

&lt;p&gt;Developers increasingly evaluate Bun not just as a runtime, but as a broader replacement for parts of the traditional Node toolchain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;package manager&lt;/li&gt;
&lt;li&gt;bundler&lt;/li&gt;
&lt;li&gt;test runner&lt;/li&gt;
&lt;li&gt;TypeScript execution environment&lt;/li&gt;
&lt;li&gt;server runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The “Should new TypeScript projects start with Bun?” conversation is becoming more common.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bsky.app/profile/deno.land/post/3mm6clkq5uc22" rel="noopener noreferrer"&gt;Deno 2.8 ships this week&lt;/a&gt; with a focus on improving the developer experience around TypeScript, ESM, and modern JavaScript features.&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Articles &amp;amp; Tutorials
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.chrome.com/blog/install-element-ot" rel="noopener noreferrer"&gt;Install web apps with the new HTML install element&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/pulse/prompts-advisory-structure-binding-daniel-meyer-cpxce/" rel="noopener noreferrer"&gt;Prompts are advisory. Structure is binding.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/meet-fate-react-astro/" rel="noopener noreferrer"&gt;Building an Astro Blog While Exploring Fate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://grahamhelton.com/blog/ssh-cheatsheet" rel="noopener noreferrer"&gt;An Excruciatingly Detailed Guide To SSH&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://typesetinthefuture.com/2016/02/18/futuristic/" rel="noopener noreferrer"&gt;How To Make Your Text Look Futuristic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.thenodebook.com/" rel="noopener noreferrer"&gt;MASTER THE NODE.JS INTERNALS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://css-tricks.com/using-nonexistent-nth-letter-selector-now/" rel="noopener noreferrer"&gt;Let’s Use the Nonexistent ::nth-letter Selector Now&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tanstack.com/blog/incident-followup" rel="noopener noreferrer"&gt;Hardening TanStack After the npm Compromise&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/react-stack-2026/" rel="noopener noreferrer"&gt;The Modern React Stack Explained for 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://polypane.app/blog/using-safe-area-inset-to-build-mobile-safe-layouts/" rel="noopener noreferrer"&gt;Using safe-area-inset to build mobile-safe layouts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejsdesignpatterns.com/blog/whats-new-in-nodejs-26/" rel="noopener noreferrer"&gt;What's new in Node.js 26&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/gpt-shortcuts-that-work/" rel="noopener noreferrer"&gt;The Truth About GPT Shortcuts and “Secret” AI Commands&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.sentry.io/fixing-javascript-observability/" rel="noopener noreferrer"&gt;Fixing JavaScript observability, one library at a time&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.gaborkoos.com/posts/2026-05-09-Your-Recursion-Is-Lying-to-You/" rel="noopener noreferrer"&gt;Your Recursion Is Lying to You&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.jasnell.me/posts/quic-part-4" rel="noopener noreferrer"&gt;HTTP/3 Over QUIC in Node.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.rubrik.com/blog/architecture/26/2/async-react-building-non-blocking-uis-with-usetransition-and-useactionstate" rel="noopener noreferrer"&gt;Async React: Building Non-Blocking UIs with useTransition and useActionState&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ishadeed.com/article/css-round/" rel="noopener noreferrer"&gt;Better fluid sizing with round()&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jvns.ca/blog/2026/05/15/moving-away-from-tailwind--and-learning-to-structure-my-css-/" rel="noopener noreferrer"&gt;Moving away from Tailwind, and learning to structure my CSS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://evilmartians.com/chronicles/600-million-people-write-right-to-left-2-fixes-your-app-needs" rel="noopener noreferrer"&gt;600+ million people write right-to-left: 2 fixes your app needs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.chrome.com/blog/gap-decorations-stable?hl=en" rel="noopener noreferrer"&gt;Gap decorations: Now available in Chromium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/docker-compose-production-settings/" rel="noopener noreferrer"&gt;5 Docker Compose Settings Missing From Most Production Setups&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://chrismorgan.info/css-themed-colours" rel="noopener noreferrer"&gt;A few ways of specifying per-theme colours in only CSS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://thoughtbot.com/blog/when-to-use-and-not-use-css-shorthand-properties" rel="noopener noreferrer"&gt;When to use (and not use) CSS shorthand properties&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tympanus.net/codrops/2025/02/04/how-to-make-the-fluffiest-grass-with-three-js/" rel="noopener noreferrer"&gt;How to Make The Fluffiest Grass With Three.js&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚒️ Tools
&lt;/h2&gt;

&lt;p&gt;Open-source Discord alternative &lt;a href="https://github.com/Milkshiift/GoofCord" rel="noopener noreferrer"&gt;GoofCord&lt;/a&gt; has been released, promising a faster, cleaner, and far more customizable experience than the official client.&lt;/p&gt;

&lt;p&gt;According to the project, GoofCord:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;runs noticeably faster than the standard Discord client, with fewer slowdowns and UI hiccups;&lt;/li&gt;
&lt;li&gt;blocks built-in telemetry and user data collection;&lt;/li&gt;
&lt;li&gt;supports password-encrypted conversations;&lt;/li&gt;
&lt;li&gt;allows screen sharing at any resolution and frame rate;&lt;/li&gt;
&lt;li&gt;lets users choose which application audio gets streamed;&lt;/li&gt;
&lt;li&gt;automatically updates your status based on games, music, or videos;&lt;/li&gt;
&lt;li&gt;supports Vencord, Equicord, and Shelter customization plugins out of the box;&lt;/li&gt;
&lt;li&gt;includes global hotkeys that keep working even when the app is minimized;&lt;/li&gt;
&lt;li&gt;supports audio streaming on Linux, while also running on Windows and macOS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/alternbits/awesome-cuda-books" rel="noopener noreferrer"&gt;Awesome CUDA Books&lt;/a&gt; is a new curated list of resources for learning CUDA programming, covering everything from beginner-friendly introductions to advanced optimization techniques.&lt;/p&gt;

&lt;p&gt;An open-source project called &lt;a href="https://github.com/MikeVeerman/tokenspeed" rel="noopener noreferrer"&gt;tokenspeed&lt;/a&gt; (including an &lt;a href="https://mikeveerman.github.io/tokenspeed/?rate=30&amp;amp;mode=code" rel="noopener noreferrer"&gt;online version&lt;/a&gt;) has been released to make LLM token throughput easier to understand visually.&lt;/p&gt;

&lt;p&gt;Most local LLM benchmarks report raw generation speed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;47 tokens/sec on an M3&lt;/li&gt;
&lt;li&gt;180 tokens/sec on an RTX 4090&lt;/li&gt;
&lt;li&gt;500 tokens/sec on Groq&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But unless you've actually watched tokens stream at those speeds, those numbers can feel pretty abstract.&lt;/p&gt;

&lt;p&gt;tokenspeed solves that problem.&lt;/p&gt;

&lt;p&gt;It’s a terminal utility that simulates token streaming at any speed you choose, allowing you to see what different throughput numbers actually look like in practice.&lt;/p&gt;

&lt;p&gt;Instead of reading benchmark figures in isolation, you can visually compare generation speeds and better understand the real-world difference between various hardware setups, runtimes, and inference environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/nodeca/pica" rel="noopener noreferrer"&gt;Pica 10.0 Brings Modern Browser Image Resizing to TypeScript and ESM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/counterfact/api-simulator" rel="noopener noreferrer"&gt;Counterfact&lt;/a&gt; Turns OpenAPI Specs Into Live API Simulators&lt;/p&gt;

&lt;p&gt;Introducing &lt;a href="https://vercel.com/blog/introducing-deepsec-find-and-fix-vulnerabilities-in-your-code-base" rel="noopener noreferrer"&gt;deepsec&lt;/a&gt;: The security harness for finding vulnerabilities in your codebase&lt;/p&gt;

&lt;p&gt;&lt;a href="https://validator.w3.org/feed/" rel="noopener noreferrer"&gt;Feed validation service&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.svgstudio.org/" rel="noopener noreferrer"&gt;SVG Studio&lt;/a&gt; Brings Layer-Based SVG Animation to the Browser&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Aejkatappaja/phantom-ui" rel="noopener noreferrer"&gt;phantom-ui&lt;/a&gt; Creates Structure-Aware Skeleton Loaders from the DOM&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cssdb.org/" rel="noopener noreferrer"&gt;cssdb&lt;/a&gt; Tracks the Implementation Status of Modern CSS Features&lt;/p&gt;

&lt;p&gt;&lt;a href="https://react.review/" rel="noopener noreferrer"&gt;React Review&lt;/a&gt; Audits Pull Requests for React Anti-Patterns&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%2Fq7ubbupb5ro3qf70mko6.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%2Fq7ubbupb5ro3qf70mko6.png" alt="Cascade Icons" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://designsurface.dev/cascade" rel="noopener noreferrer"&gt;Cascade&lt;/a&gt; - An Icon Set Built Around CSS Concepts&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flexboxle.com/" rel="noopener noreferrer"&gt;flexboxle&lt;/a&gt; Turns CSS Flexbox Practice Into a Daily Puzzle&lt;/p&gt;

&lt;p&gt;&lt;a href="https://typescale.ai/" rel="noopener noreferrer"&gt;Typescale AI&lt;/a&gt; Helps Generate Typography Systems and Design Tokens&lt;/p&gt;

&lt;p&gt;&lt;a href="https://files.littlebird.com.au/ascii-sketch.html" rel="noopener noreferrer"&gt;ASCII Sketch&lt;/a&gt; Brings Diagram Drawing to the World of ASCII Art&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rohitg00/agentmemory" rel="noopener noreferrer"&gt;agentmemory&lt;/a&gt; is a persistent memory layer designed for AI coding agents, helping them retain context across sessions instead of starting from scratch every time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/deepfence/SecretScanner" rel="noopener noreferrer"&gt;SecretScanner&lt;/a&gt; is an open-source tool for discovering passwords, API keys, tokens, and other sensitive data hidden inside applications.&lt;/p&gt;

&lt;p&gt;It scans Docker images and file systems to uncover secrets that may be buried in configs, binaries, or application files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://whatmodelscanirun.com/" rel="noopener noreferrer"&gt;What Models&lt;/a&gt;? is an open-source online tool that helps you find local AI models that can realistically run on your hardware without exhausting system resources.&lt;/p&gt;

&lt;p&gt;Enter your PC specs — GPU, VRAM, and RAM — and the service generates a compatibility list showing suitable models, including the AI project name, quantization format, inference speed, and context window.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Libs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/cporter202/API-mega-list" rel="noopener noreferrer"&gt;A repository featuring 10,000+ ready-to-use APIs&lt;/a&gt; has been released, covering everything from automation and web scraping to AI integrations and market intelligence.&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%2Fjss4qq8wx35bbb0amqbs.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%2Fjss4qq8wx35bbb0amqbs.png" alt="API Mega List" width="719" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The collection includes APIs for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;automation&lt;/strong&gt; — handling repetitive workflows, recurring tasks, and everyday operational processes;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;data extraction&lt;/strong&gt; — scraping websites, parsing pages, and pulling structured information from across the web;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;analytics&lt;/strong&gt; — gathering market, competitor, and business intelligence data;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;e-commerce&lt;/strong&gt; — tracking products, monitoring prices, and analyzing market trends;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;social media&lt;/strong&gt; — collecting posts, measuring audience engagement, and identifying emerging trends;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI integrations&lt;/strong&gt; — connecting to language models, processing content, and generating structured outputs;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;job market analysis&lt;/strong&gt; — tracking vacancies, salary trends, and new career opportunities;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;real estate&lt;/strong&gt; — searching, monitoring, and analyzing property listings for personal use or investment research.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/datawhalechina/easy-vibe" rel="noopener noreferrer"&gt;easy-vibe&lt;/a&gt;, an open educational project for learning vibe coding, has been released.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The course includes four levels, from beginner basics to building AI product prototypes, deployment, databases, and cross-platform development.&lt;/li&gt;
&lt;li&gt;It covers nine domains and 80+ interactive topics with animations and visuals, ranging from computer fundamentals to advanced AI workflows.&lt;/li&gt;
&lt;li&gt;The knowledge base evolves continuously alongside new AI models, prompting techniques, and development practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/stackblitz/alien-signals" rel="noopener noreferrer"&gt;Alien Signals&lt;/a&gt; describes itself as “the lightest signal library”, combining ideas from Vue, Preact, and Svelte into an extremely small reactive system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://mdxeditor.dev/" rel="noopener noreferrer"&gt;MDXEditor 4.0&lt;/a&gt; - A Rich Markdown Editor Component&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/anthropics/claude-cookbooks" rel="noopener noreferrer"&gt;Claude Cookbooks&lt;/a&gt; is a collection of notebooks and recipe-style examples demonstrating useful, creative, and sometimes unexpected ways to work with Claude.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openclaw/clawsweeper" rel="noopener noreferrer"&gt;GitClassic&lt;/a&gt; Offers a Lightweight Alternative to Browsing GitHub&lt;/p&gt;

&lt;h2&gt;
  
  
  ⌚ Releases
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/blog/release/v22.22.3" rel="noopener noreferrer"&gt;Node.js 22.22.3 (LTS)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jestjs/jest/releases/tag/v30.4.0" rel="noopener noreferrer"&gt;Jest 30.4.0 Improves ESM, Temporal, and React 19 Support&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bun.com/blog/bun-v1.3.14" rel="noopener noreferrer"&gt;Bun 1.3.14 Expands Image APIs, HTTP Support, and Node Compatibility&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/JamieMason/syncpack" rel="noopener noreferrer"&gt;Syncpack 15.0&lt;/a&gt; has been released, bringing new features to the dependency management tool widely used in large JavaScript monorepos, including projects at Electron, Cloudflare, and Vercel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pnpm.io/blog/releases/11.1" rel="noopener noreferrer"&gt;pnpm 11.1&lt;/a&gt; Introduces New Commands for Debugging, Security, and GitHub Packages&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.thunderbird.net/en-US/thunderbird/151.0/releasenotes/" rel="noopener noreferrer"&gt;Mozilla Thunderbird 151.0 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/angular/angular/releases/tag/v22.0.0-rc.0" rel="noopener noreferrer"&gt;Angular 22 Release Candidate Lands Ahead of June Launch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/eslint/config-inspector" rel="noopener noreferrer"&gt;ESLint Config Inspector 3.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://typeorm.io/docs/releases/1.0/release-notes/" rel="noopener noreferrer"&gt;TypeORM 1.0 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eslint.org/blog/2026/05/eslint-v10.4.0-released/" rel="noopener noreferrer"&gt;ESLint v10.4.0 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/facebook/relay/releases/tag/v21.0.0" rel="noopener noreferrer"&gt;Relay 21.0&lt;/a&gt;, &lt;a href="https://github.com/rolldown/rolldown/releases/tag/v1.0.1" rel="noopener noreferrer"&gt;Rolldown 1.0.1&lt;/a&gt;, &lt;a href="https://github.com/addyosmani/critical" rel="noopener noreferrer"&gt;Critical 8.0&lt;/a&gt;, &lt;a href="https://github.com/sql-formatter-org/sql-formatter" rel="noopener noreferrer"&gt;SQL Formatter 15.8&lt;/a&gt;, &lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/shikijs/shiki" rel="noopener noreferrer"&gt;Shiki 4.1&lt;/a&gt;, &lt;a href="https://github.com/reduxjs/redux-toolkit/releases/tag/v2.12.0" rel="noopener noreferrer"&gt;Redux Toolkit 2.12.0&lt;/a&gt;, &lt;a href="https://github.com/reduxjs/react-redux/releases/tag/v9.3.0" rel="noopener noreferrer"&gt;React Redux 9.3&lt;/a&gt;, &lt;a href="https://x.com/nextjs/status/2052489312944759202" rel="noopener noreferrer"&gt;Next.js 16.2.6 &amp;amp; 15.5.18 Security Releases&lt;/a&gt;, &lt;br&gt;&lt;br&gt;
 &lt;a href="https://pixijs.com/blog/8.17.0" rel="noopener noreferrer"&gt;PixiJS 8.17&lt;/a&gt;, &lt;a href="https://github.com/ant-design/ant-design/releases/tag/6.4.0" rel="noopener noreferrer"&gt;Ant Design 6.4.0&lt;/a&gt;, &lt;a href="https://github.com/yudielcurbelo/react-qr-scanner" rel="noopener noreferrer"&gt;react-qr-scanner 2.6&lt;/a&gt;, &lt;a href="https://styled-components.com/docs/v7" rel="noopener noreferrer"&gt;styled-components v7&lt;/a&gt;, &lt;a href="https://storybook.js.org/blog/storybook-10-4/" rel="noopener noreferrer"&gt;Storybook 10.4&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  📺 Videos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=6moPS3AAbe4" rel="noopener noreferrer"&gt;Why React Developers Are Leaving Next.js for TanStack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=jcBzuuZvLCE" rel="noopener noreferrer"&gt;Learn Tanstack Start in 30 Minutes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=VWlEt4WKpYI" rel="noopener noreferrer"&gt;Why React Native is Still King in 2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=SaHHgzoXceU" rel="noopener noreferrer"&gt;It was more fun before AI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=5ziHGrlbdOA" rel="noopener noreferrer"&gt;The Most Popular Claude Code Skills (And What They’re Missing)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=NzpcuP2RAdQ" rel="noopener noreferrer"&gt;Is Software Engineering Dead?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=uJEEGBDJjQo" rel="noopener noreferrer"&gt;The Future of SEO: Building AI-Ready Sites with Astro &amp;amp; AEO&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🗞️ News &amp;amp; Updates
&lt;/h2&gt;
&lt;h3&gt;
  
  
  The End of an Era: Iconic Ask.com Domain Hits the Auction Block
&lt;/h3&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%2Fczqqmdhklhvdxuhcnie8.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%2Fczqqmdhklhvdxuhcnie8.png" alt="Ask.com Domain Hits the Auction Block" width="720" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The digital landscape is losing another piece of its foundation. Ask.com, one of the web's original search heavyweights, has officially put its domain name up for sale.&lt;/p&gt;

&lt;p&gt;According to reports from &lt;a href="https://domainincite.com/31709-ask-com-hits-the-market-as-jeeves-breathes-his-last" rel="noopener noreferrer"&gt;Domain Incite&lt;/a&gt;, the high-stakes sale is being spearheaded by domain brokers Andrew Miller (ATM Holdings) and Larry Fisher (LPL Financial). Miller didn't mince words about the magnitude of the listing, calling it "one of the most valuable domain assets to ever hit the market."&lt;/p&gt;
&lt;h3&gt;
  
  
  Creator of C++ Criticizes Vibe Coding
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/WQABdV2p2fA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;jarne Stroustrup, the creator of C++, delivered a sharp critique of vibe coding in a recent interview. His argument: AI-generated code may look convincing in demos, but in real systems it often creates bugs, bloated codebases, security issues, and maintenance problems. The burden usually lands on senior engineers, who end up reviewing, debugging, and rewriting prompt-generated code instead of moving faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Large GitHub Security Incident: Malicious VS Code Extension Linked to 3,800 Repository Breach
&lt;/h3&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%2Fzmup7sp5qwz2m8b7phgu.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%2Fzmup7sp5qwz2m8b7phgu.png" alt="GitHub Security Incident" width="767" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A major security incident has hit GitHub, and the company has &lt;a href="https://x.com/github/status/2056949168208552080?s=46" rel="noopener noreferrer"&gt;already confirmed that&lt;/a&gt; an unauthorized compromise took place.&lt;/p&gt;

&lt;p&gt;According to preliminary findings, attackers gained access to at least 3,800 repositories. GitHub is still investigating the full scope of the breach and determining what systems, credentials, or internal data may have been affected.&lt;/p&gt;

&lt;p&gt;The incident reportedly originated from a compromised VS Code extension. The malicious extension infected a GitHub employee’s machine, giving attackers a foothold that eventually led to access inside GitHub’s internal environment.&lt;/p&gt;

&lt;p&gt;The investigation is ongoing, and the company continues to assess the scale of the impact. The case is another reminder that development tooling and third-party extensions can become critical attack vectors, especially inside large engineering organizations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openai.com/index/model-disproves-discrete-geometry-conjecture/" rel="noopener noreferrer"&gt;An OpenAI model has disproved a central conjecture in discrete geometry&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;That’s it for Friday Links #38.&lt;/p&gt;

&lt;p&gt;Every week the developer ecosystem delivers new frameworks, smarter tooling, unexpected experiments, and enough releases to overflow your bookmarks folder. Our goal stays simple: surface the useful updates, interesting ideas, and projects that deserve a spot on your radar.&lt;/p&gt;

&lt;p&gt;Thanks for reading — and if something here sparked an idea, taught you something new, or saved you a few hours, share it with another developer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Friday Links #36: New JavaScript Tools, Frameworks, and Research</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Fri, 13 Mar 2026 11:47:27 +0000</pubDate>
      <link>https://dev.to/jsdevspace/friday-links-36-new-javascript-tools-frameworks-and-research-5222</link>
      <guid>https://dev.to/jsdevspace/friday-links-36-new-javascript-tools-frameworks-and-research-5222</guid>
      <description>&lt;p&gt;The JavaScript ecosystem never slows down. Every week brings new tools, framework updates, performance benchmarks, and occasionally discoveries that reshape how we think about existing platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subscribe to &lt;a href="https://jsdevspace.substack.com/" rel="noopener noreferrer"&gt;JavaScript Friday Links&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This week’s highlights cover a broad spectrum of topics. The release of Solid 2.0 Beta introduces a redesigned async model that simplifies reactive workflows. New benchmarking data compares modern JavaScript minifiers and shows how tools like SWC, Oxc, and Minify are redefining build performance. At the same time, researchers used AI-assisted analysis to uncover multiple previously undiscovered vulnerabilities in Firefox — demonstrating how machine learning is increasingly being used to audit complex codebases.&lt;/p&gt;

&lt;p&gt;In this week’s Friday Links, we’ve collected the most interesting stories, tools, and discussions worth your attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Ecosystem Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  TypeScript 6 Prepares the Path to TS7
&lt;/h3&gt;

&lt;p&gt;The TypeScript team &lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0-rc/" rel="noopener noreferrer"&gt;released&lt;/a&gt; an early preview of &lt;strong&gt;TypeScript 6&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This release is mainly about &lt;strong&gt;internal changes preparing for the future Go-based compiler planned for TypeScript 7&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Key goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;faster compilation&lt;/li&gt;
&lt;li&gt;reduced memory usage&lt;/li&gt;
&lt;li&gt;better incremental builds&lt;/li&gt;
&lt;li&gt;improved large project performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Large monorepos could see &lt;strong&gt;dramatic speed improvements&lt;/strong&gt; once the Go compiler lands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deno 2.7 Improves Node Compatibility
&lt;/h3&gt;

&lt;p&gt;The latest &lt;a href="https://deno.com/blog/v2.7" rel="noopener noreferrer"&gt;&lt;strong&gt;Deno runtime release&lt;/strong&gt;&lt;/a&gt; continues improving Node compatibility.&lt;/p&gt;

&lt;p&gt;Highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improved npm integration&lt;/li&gt;
&lt;li&gt;Node API compatibility&lt;/li&gt;
&lt;li&gt;Temporal API stabilization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Temporal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;instant&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📜 Articles &amp;amp; Tutorials
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/generative-ai/under-the-hood-security-architecture-of-github-agentic-workflows/" rel="noopener noreferrer"&gt;Under the hood: Security architecture of GitHub Agentic Workflows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hackernoon.com/beating-javascript-performance-limits-with-rust-and-n-api-building-a-faster-image-diff-tool" rel="noopener noreferrer"&gt;Beating JavaScript Performance Limits With Rust and N-API: Building a Faster Image Diff Tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://css-tricks.com/the-different-ways-to-select-html-in-css/" rel="noopener noreferrer"&gt;The Different Ways to Select &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; in CSS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://frontendmasters.com/blog/the-big-gotcha-of-anchor-positioning/" rel="noopener noreferrer"&gt;The Big Gotcha of Anchor Positioning&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/valibot-vs-zod/" rel="noopener noreferrer"&gt;Valibot vs Zod: A Lightweight Validation Alternative&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://neciudan.dev/cline-ci-got-compromised-here-is-how" rel="noopener noreferrer"&gt;How to steal npm publish tokens by opening GitHub issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cardog.app/blog/vin-decoder-javascript" rel="noopener noreferrer"&gt;How to Decode a VIN in JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/safe-json-parse-javascript/" rel="noopener noreferrer"&gt;Why Blindly Using JSON.parse() Can Be Dangerous&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.scottlogic.com/2026/03/09/noJS-3-flappy-bird.html" rel="noopener noreferrer"&gt;Making a Flappy Bird clone using pure HTML and CSS, no JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.ishchhabra.com/writing/pnpm-monorepo" rel="noopener noreferrer"&gt;How to build a pnpm monorepo, the right way&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mux.com/blog/react-is-changing-the-game-for-streaming-apps-with-the-activity-component" rel="noopener noreferrer"&gt;React is changing the game for streaming apps with the Activity component&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://patrickbrosset.com/articles/2026-03-09-using-css-animations-as-state-machines-to-remember-focus-and-hover-states-with-css-only/" rel="noopener noreferrer"&gt;Using CSS animations as state machines to remember focus and hover states with CSS only&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.frankmtaylor.com/2026/03/05/you-dont-know-html-tables/" rel="noopener noreferrer"&gt;You Don’t Know HTML Tables&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactdevelopment.substack.com/p/5-react-hooks-techniques-to-improve" rel="noopener noreferrer"&gt;5 React Hooks Techniques to Improve Component Performance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/tailwind-v4-vs-mui-antd-styled-components/" rel="noopener noreferrer"&gt;Tailwind CSS v4 vs MUI, Ant Design &amp;amp; Styled Components&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/lru-cache-javascript/" rel="noopener noreferrer"&gt;Designing an Efficient LRU Cache Step by Step&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/deploy-openclaw-second-brain/" rel="noopener noreferrer"&gt;Howto Deploy OpenClaw and Build Your Personal AI Second Brain&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚒️ Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Repomix — Turn Any Repo Into a Single AI-Readable File
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fimages%2Frepomix.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/.%2Fimages%2Frepomix.png" alt="Repomix"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yamadashy/repomix" rel="noopener noreferrer"&gt;Repomix&lt;/a&gt; packs an entire repository into a single AI-friendly document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tb5z035i/cursor-tg" rel="noopener noreferrer"&gt;Cursor Cloud Telegram Connector&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://npmx.dev/" rel="noopener noreferrer"&gt;npmx&lt;/a&gt; is an experimental tool designed to improve npm package exploration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://litepacks.github.io/welyjs/" rel="noopener noreferrer"&gt;Wely&lt;/a&gt; — Lightweight Web Component Framework&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vadimdemedes/ink" rel="noopener noreferrer"&gt;Ink&lt;/a&gt; allows developers to build CLI tools using React components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sojinantony01.github.io/react-cron-generator/" rel="noopener noreferrer"&gt;Cron Expression Generator&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Libs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/vercel/nft" rel="noopener noreferrer"&gt;Node File Trace&lt;/a&gt; - determines exactly which files a Node application needs to run.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/privatenumber/minification-benchmarks" rel="noopener noreferrer"&gt;JavaScript Minification Benchmarks&lt;/a&gt;: SWC Still Leads&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rv-grid.com/" rel="noopener noreferrer"&gt;RevoGrid&lt;/a&gt; - High-Performance Data Grid Component&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cosmiciron/vmprint" rel="noopener noreferrer"&gt;VMPrint&lt;/a&gt; - A pure-JS, tiny typesetting engine with bit-perfect PDF output on everything—from Cloudflare Workers to the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/quantizor/markdown-to-jsx" rel="noopener noreferrer"&gt;markdown-to-jsx&lt;/a&gt; -  A very fast and versatile markdown toolchain. Output to AST, React, React Native, SolidJS, Vue, HTML, and more! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sindresorhus/clipboardy" rel="noopener noreferrer"&gt;clipboardy&lt;/a&gt; -  Access the system clipboard (copy/paste) &lt;/p&gt;

&lt;h2&gt;
  
  
  ⌚ Releases
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/solidjs/solid/releases/tag/v2.0.0-beta.0" rel="noopener noreferrer"&gt;Solid v2.0.0 Beta: The &lt;code&gt;&amp;lt;Suspense&amp;gt;&lt;/code&gt; Era Comes to an End&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a long experimental phase, Solid 2.0 has released its first beta, introducing native asynchronous reactivity as a core feature of the framework.&lt;/p&gt;

&lt;p&gt;In this new model, reactive computations can directly return Promises or async iterables, and Solid’s reactive graph will automatically suspend and resume around those async operations. This removes much of the complexity developers previously had to manage when dealing with asynchronous state.&lt;/p&gt;

&lt;p&gt;One notable change is that &lt;code&gt;&amp;lt;Suspense&amp;gt;&lt;/code&gt; has been retired. For initial renders, it is now replaced by a simpler component called &lt;code&gt;&amp;lt;Loading&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://astro.build/blog/astro-6/" rel="noopener noreferrer"&gt;Astro 6 is here!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/blog/release/v25.8.0" rel="noopener noreferrer"&gt;Node.js 25.8.0 (Current)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eslint.org/blog/2026/03/eslint-v10.0.3-released/" rel="noopener noreferrer"&gt;ESLint v10.0.3 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.emberjs.com/ember-released-6-11/" rel="noopener noreferrer"&gt;Ember 6.11 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ionic.io/blog/announcing-ionic-framework-8-8" rel="noopener noreferrer"&gt;Ionic Framework 8.8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/facebook/react-native/releases/tag/v0.85.0-rc.0" rel="noopener noreferrer"&gt;React Native 0.85 RC.0&lt;/a&gt;, &lt;a href="https://github.com/pnpm/pnpm/releases/tag/v10.32.0" rel="noopener noreferrer"&gt;pnpm 10.32&lt;/a&gt;, &lt;a href="https://github.com/jestjs/jest/releases/tag/v30.3.0" rel="noopener noreferrer"&gt;Jest 30.3&lt;/a&gt;, &lt;a href="https://github.com/recharts/recharts/releases/tag/v3.8.0" rel="noopener noreferrer"&gt;Recharts 3.8&lt;/a&gt;, &lt;br&gt;
&lt;a href="https://github.com/openplayerjs/openplayerjs/releases/tag/v3.0.2" rel="noopener noreferrer"&gt;OpenPlayer.js 3.0.2&lt;/a&gt;, &lt;a href="https://github.com/prisma/prisma/releases/tag/7.5.0" rel="noopener noreferrer"&gt;Prisma 7.5&lt;/a&gt;, &lt;a href="https://github.com/sqliteai/sqlite-js" rel="noopener noreferrer"&gt;SQLite JS 1.3&lt;/a&gt;, &lt;a href="https://github.com/staylor/react-helmet-async/pull/260" rel="noopener noreferrer"&gt;React Helmet Async 3.0&lt;/a&gt;, &lt;a href="https://github.com/preactjs/preact/releases/tag/10.29.0" rel="noopener noreferrer"&gt;Preact 10.29.0&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  📺 Videos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=IBTx5aGj-6U" rel="noopener noreferrer"&gt;Build Your Own Video Sharing App – Loom Clone with Next.js and Mux JavaScript Tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=_TRV6fPUMJw" rel="noopener noreferrer"&gt;You Can Just Ship Agents: Architecting for the Agentic Era | Dom Sipowicz, Vercel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=wvt5JNUXXLM" rel="noopener noreferrer"&gt;The Future of TypeScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=IBTx5aGj-6U" rel="noopener noreferrer"&gt;Build Your Own Video Sharing App – Loom Clone with Next.js and Mux JavaScript Tutorial&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=abbeIUOCzmw" rel="noopener noreferrer"&gt;Cloudflare just slop forked Next.js…&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Xn-gtHDsaPY" rel="noopener noreferrer"&gt;7 new open source AI tools you need right now…&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=S26VdcWQzRQ" rel="noopener noreferrer"&gt;NEW Tanstack Hotkeys Library is Amazing&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🎤 Talks &amp;amp; Podcasts
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=S_wCMc_iNk4" rel="noopener noreferrer"&gt;Why are we building CodePen v2? — CodePen Radio 419&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=M5IkdUunf8g" rel="noopener noreferrer"&gt;Stop putting secrets in .env&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🗞️ News &amp;amp; Updates
&lt;/h2&gt;
&lt;h3&gt;
  
  
  The web industry is gradually shortening the maximum lifespan of TLS certificates.
&lt;/h3&gt;

&lt;p&gt;Starting March 15, 2026, the limit will drop from 398 days to 200 days. The timeline continues with further reductions: 100 days in 2027, and by 2029 the maximum validity period will shrink to just 47 days.&lt;/p&gt;

&lt;p&gt;Because of these changes, &lt;a href="https://www.heroku.com/blog/preparing-for-shorter-ssl-tls-certificate-lifetimes/" rel="noopener noreferrer"&gt;Heroku recommends enabling automatic certificate renewal&lt;/a&gt; to avoid unexpected expirations and potential service disruptions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.11ty.dev/blog/build-awesome/" rel="noopener noreferrer"&gt;Eleventy is now Build Awesome&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🔐 Security
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Supply-Chain Attacks Target Developers
&lt;/h3&gt;

&lt;p&gt;Researchers recently discovered malicious GitHub repositories disguised as job assignments.&lt;/p&gt;

&lt;p&gt;When opened in VS Code they may execute scripts automatically.&lt;/p&gt;

&lt;p&gt;Developers should always review:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;.vscode/tasks.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;.vscode/settings.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;package.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔗 &lt;a href="https://thehackernews.com/2026/02/fake-nextjs-repos-target-developers.html" rel="noopener noreferrer"&gt;thehackernews&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  vm2 Sandbox Escape Vulnerability
&lt;/h3&gt;

&lt;p&gt;A critical vulnerability was discovered in vm2, a sandbox library used for executing untrusted JavaScript.&lt;/p&gt;

&lt;p&gt;This vulnerability allows escaping the sandbox and executing arbitrary code.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/patriksimek/vm2" rel="noopener noreferrer"&gt;github.com/patriksimek/vm2&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Researchers at Brave discovered that web agents often leak user information — even when explicitly instructed not to.
&lt;/h3&gt;

&lt;p&gt;In a &lt;a href="https://brave.com/blog/agentic-oversharing/" rel="noopener noreferrer"&gt;study involving 1,080 runs&lt;/a&gt; on Amazon and eBay, agents powered by GPT-4o, O3, and O4-mini repeatedly exposed data to third-party services that had nothing to do with the task they were performing.&lt;/p&gt;

&lt;p&gt;Examples included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inserting conversation history into search fields&lt;/li&gt;
&lt;li&gt;revealing personal details through interaction patterns&lt;/li&gt;
&lt;li&gt;unintentionally sending contextual data to external services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The findings highlight a growing concern: AI web agents may unintentionally expose sensitive user information through their behavior, even when privacy safeguards are in place.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Anthropic team&lt;/strong&gt; recently analyzed the Firefox codebase using Claude and uncovered &lt;a href="https://blog.mozilla.org/en/firefox/hardening-firefox-anthropic-red-team/" rel="noopener noreferrer"&gt;14 critical vulnerabilities&lt;/a&gt; that had gone unnoticed for years.&lt;/p&gt;

&lt;p&gt;In total, the investigation led to the discovery of 22 security issues, all of which were assigned CVE identifiers and addressed in Firefox 148.&lt;/p&gt;

&lt;p&gt;Some of these vulnerabilities had reportedly been present in the codebase for over a decade, highlighting how AI-assisted analysis can help uncover deeply hidden security flaws in large, mature software projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://trigger.dev/blog/shai-hulud-postmortem" rel="noopener noreferrer"&gt;How we got hit by Shai-Hulud: A complete post-mortem&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;That’s all for this week’s JavaScript roundup.&lt;/p&gt;

&lt;p&gt;The ecosystem continues to evolve rapidly, and keeping track of new tools, releases, and discoveries can be challenging. Weekly collections like Friday Links aim to surface the most meaningful updates so developers can stay informed without being overwhelmed.&lt;/p&gt;

&lt;p&gt;If you came across an interesting library, experiment, or article this week, consider sharing it — the next edition might include it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Mastering JavaScript map(): Hidden Pitfalls and Smarter Patterns</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Mon, 17 Nov 2025 00:00:50 +0000</pubDate>
      <link>https://dev.to/jsdevspace/mastering-javascript-map-hidden-pitfalls-and-smarter-patterns-18p4</link>
      <guid>https://dev.to/jsdevspace/mastering-javascript-map-hidden-pitfalls-and-smarter-patterns-18p4</guid>
      <description>&lt;p&gt;JavaScript’s &lt;code&gt;Array.prototype.map()&lt;/code&gt; is simple on the surface yet surprisingly deep once you inspect how callbacks, types, coercion, and encoding work under the hood. One of the most infamous examples — &lt;code&gt;[1,2,3].map(parseInt)&lt;/code&gt; — looks harmless but produces confusing output that often appears in interviews.&lt;/p&gt;

&lt;p&gt;This guide breaks everything down clearly: how &lt;code&gt;map()&lt;/code&gt; really works, why &lt;code&gt;parseInt&lt;/code&gt; misbehaves, how &lt;code&gt;NaN&lt;/code&gt; is detected, how wrapper objects make &lt;code&gt;"text".length&lt;/code&gt; possible, and why emoji “length” is unintuitive. Each section includes modern examples and best-practice patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. How &lt;code&gt;map()&lt;/code&gt; Actually Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Syntax and Basic Behavior
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;map()&lt;/code&gt; creates a brand-new array using your callback’s return values. The original array is never modified.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;transformed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sourceList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;itemValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;itemPosition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;originalList&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="k"&gt;return&lt;/span&gt; &lt;span class="cm"&gt;/* computed value */&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;optionalThisArgument&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2 Practical Examples
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Example 1: Transforming numbers
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;baseNumbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&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;doubledValues&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;baseNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;doubledValues&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [4, 10, 20]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Example 2: Mapping object properties
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;studentRecords&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;nickname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Lara&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;nickname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Tomas&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;extractedNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;studentRecords&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nickname&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Example 3: Using map() on array-like structures
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pseudoArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&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;uppercased&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pseudoArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.3 Sparse Arrays and Missing Elements
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weird&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;21&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;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;weird&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;unit&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;unit&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Understanding &lt;code&gt;parseInt()&lt;/code&gt; — and Why It Breaks with &lt;code&gt;map()&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Parsing Rules
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0xA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// 10&lt;/span&gt;
&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;10&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// 8&lt;/span&gt;
&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7.8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// 7&lt;/span&gt;
&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// NaN&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Why &lt;code&gt;[1, 2, 3].map(parseInt)&lt;/code&gt; Gives &lt;code&gt;[1, NaN, NaN]&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 The Output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// [1, NaN, NaN]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 The Real Reason
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;map()&lt;/code&gt; passes &lt;code&gt;(value, index, array)&lt;/code&gt; while &lt;code&gt;parseInt&lt;/code&gt; expects &lt;code&gt;(string, radix)&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Correct Solutions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&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="s1"&gt;2&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="s1"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&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="s1"&gt;2&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="s1"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Special Numeric Values: &lt;code&gt;NaN&lt;/code&gt; and &lt;code&gt;Infinity&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Properties of &lt;code&gt;NaN&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isNaN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  
&lt;span class="nf"&gt;isNaN&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Wrapper Objects
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. UTF-16, Unicode, and Emoji Length Issues
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&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="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Interviewer Expectations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Higher-order function comprehension
&lt;/li&gt;
&lt;li&gt;Callback mechanics
&lt;/li&gt;
&lt;li&gt;Debugging ability
&lt;/li&gt;
&lt;li&gt;Understanding coercion and Unicode
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;map()&lt;/code&gt; touches many deeper JS concepts, from number parsing to Unicode. Mastering these details helps you write safer, clearer, more predictable code — and ace interview challenges.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>TypeScript Generics: The Magic Behind Flexible, Type-Safe Code</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Fri, 07 Nov 2025 07:26:45 +0000</pubDate>
      <link>https://dev.to/jsdevspace/typescript-generics-the-magic-behind-flexible-type-safe-code-4mob</link>
      <guid>https://dev.to/jsdevspace/typescript-generics-the-magic-behind-flexible-type-safe-code-4mob</guid>
      <description>&lt;p&gt;For many developers, the first encounter with &lt;strong&gt;TypeScript generics&lt;/strong&gt; can feel perplexing. Symbols like &lt;code&gt;&amp;lt;T&amp;gt;&lt;/code&gt; appear abstract and mathematical — yet they unlock one of the language’s most powerful features. Generics make it possible to write code that is both &lt;em&gt;type-safe&lt;/em&gt; and &lt;em&gt;highly reusable&lt;/em&gt;, allowing developers to define patterns that adapt to different data structures without losing type precision.&lt;/p&gt;

&lt;p&gt;This article examines the concept of generics in depth: what they are, why they matter, and how they elevate the architecture of TypeScript projects — from simple utility functions to enterprise-level abstractions.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Understanding Generics — From Function Parameters to Type Parameters
&lt;/h2&gt;

&lt;p&gt;In plain JavaScript, functions often lose type context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&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="nx"&gt;value&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;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// returns 42, but type info is lost&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// returns "hello", but type info is lost&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TypeScript addresses this with type parameters:&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;value&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;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// number&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// string&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;mirror&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="c1"&gt;// boolean&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;&amp;lt;T&amp;gt;&lt;/code&gt; acts as a placeholder for a concrete type — a &lt;em&gt;type variable&lt;/em&gt; that TypeScript infers automatically. This allows the function to maintain flexibility while preserving safety.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ The Fundamentals of Generics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Generic Classes
&lt;/h3&gt;

&lt;p&gt;A simple example is a type-safe stack implementation:&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SafeStack&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="na"&gt;store&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&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="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;peek&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kr"&gt;number&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;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;SafeStack&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&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;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;SafeStack&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;words&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;words&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;world&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Multiple Type Parameters
&lt;/h3&gt;

&lt;p&gt;Functions can also define relationships between multiple types:&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pairOf&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;V&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;V&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="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&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;one&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pairOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&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;two&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pairOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;three&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pairOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;config&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;debug&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3. Constrained Generics
&lt;/h3&gt;

&lt;p&gt;Developers can restrict what a generic type can accept:&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="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;WithLength&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;measure&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;WithLength&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;measure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        
&lt;span class="nf"&gt;measure&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;      
&lt;span class="nf"&gt;measure&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;  
&lt;span class="c1"&gt;// measure(42);          // Error: number has no length&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💼 Practical Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Generic API Responses
&lt;/h3&gt;

&lt;p&gt;Generics are extremely useful in API and data-handling layers:&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="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;message&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;apiFetch&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&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="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;opts&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;RequestInit&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/api/&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="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;opts&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;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Product&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&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;userRes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;apiFetch&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;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;users/1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userRes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prodRes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;apiFetch&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Product&lt;/span&gt;&lt;span class="o"&gt;&amp;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;products/12&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prodRes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Utility Function Libraries
&lt;/h3&gt;

&lt;p&gt;Generic utilities enhance flexibility and type inference:&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;filterList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&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;boolean&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&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="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mapList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;mapper&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&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;U&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;U&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="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mapper&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pick&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&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="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;U&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;b&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;These functions scale seamlessly across data structures, avoiding repetitive type definitions.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Type-Safe React Hooks
&lt;/h3&gt;

&lt;p&gt;In React applications, generics help ensure predictable form and state handling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&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;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useCallback&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;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useForm&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initial&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initial&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;update&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;K&lt;/span&gt; &lt;span class="na"&gt;extends&lt;/span&gt; &lt;span class="na"&gt;keyof&lt;/span&gt; &lt;span class="na"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;(key: K, val: T[K]) =&amp;gt; &lt;span class="si"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setForm&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
  &lt;span class="si"&gt;}&lt;/span&gt;, []);

  const reset = useCallback(() =&amp;gt; setForm(initial), [initial]);

  return &lt;span class="si"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setForm&lt;/span&gt; &lt;span class="si"&gt;}&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This design makes custom hooks fully type-aware — every field and update operation is validated at compile time.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Advanced Generic Techniques
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Conditional Types
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;IsString&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yes&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;no&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;IsString&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&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;type&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;IsString&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&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;type&lt;/span&gt; &lt;span class="nx"&gt;UnwrapArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="nf"&gt;extends &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;infer&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="p"&gt;)[]&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;UnwrapArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&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;type&lt;/span&gt; &lt;span class="nx"&gt;Words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;UnwrapArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Mapped Types
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Optional&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;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="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]?:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Immutable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;PartialUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Optional&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&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;type&lt;/span&gt; &lt;span class="nx"&gt;ReadonlyUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Immutable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚠️ Common Pitfalls and Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Avoid overengineering.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Excessively complex generic signatures reduce readability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use default type parameters.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;PageOptions&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="nl"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
     &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&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;boolean&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;ol&gt;
&lt;li&gt;
&lt;strong&gt;Leverage type inference.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;buildArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;T&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="nx"&gt;items&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;nums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;buildArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&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;texts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;buildArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&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;b&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;mix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;buildArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;two&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🏁 Conclusion
&lt;/h2&gt;

&lt;p&gt;Generics are one of TypeScript’s defining strengths. They allow developers to build systems that are expressive, safe, and reusable — without compromising flexibility. By thinking in terms of generic patterns rather than fixed types, teams can write libraries, hooks, and utilities that adapt naturally to any use case.&lt;/p&gt;

&lt;p&gt;Understanding generics is more than mastering syntax; it’s about adopting a mindset where &lt;strong&gt;code scales with types&lt;/strong&gt;. Once internalized, generics turn abstract type definitions into practical tools that make TypeScript both elegant and powerful.&lt;/p&gt;

&lt;p&gt;Read more about &lt;a href="https://jsdev.space/" rel="noopener noreferrer"&gt;JavaScript Development&lt;/a&gt; and subscribe to our &lt;a href="https://jsdevspace.substack.com/" rel="noopener noreferrer"&gt;weekly newsletter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Friday Links #30 — JavaScript Updates, Tools, and Inspiration</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Fri, 17 Oct 2025 13:12:03 +0000</pubDate>
      <link>https://dev.to/jsdevspace/friday-links-30-javascript-updates-tools-and-inspiration-1akf</link>
      <guid>https://dev.to/jsdevspace/friday-links-30-javascript-updates-tools-and-inspiration-1akf</guid>
      <description>&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%2Fsb2az6w4eqdtafbiwy0h.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%2Fsb2az6w4eqdtafbiwy0h.png" alt="Friday Links #30 — JavaScript Updates, Tools, and Inspiration" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome to &lt;a href="https://jsdevspace.substack.com/p/friday-links-30-the-week-in-javascript" rel="noopener noreferrer"&gt;Friday Links #30&lt;/a&gt;, your curated roundup of the week’s most notable happenings in the JavaScript world. From emerging frameworks and performance breakthroughs to creative experiments and open-source gems, this week’s collection is packed with fresh insights and practical discoveries for web developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Articles &amp;amp; Tutorials
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://overreacted.io/open-social/" rel="noopener noreferrer"&gt;Open Social&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tylercipriani.com/blog/2025/08/15/git-lfs/" rel="noopener noreferrer"&gt;The future of large files in Git is Git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://userjot.com/blog/best-practices-building-agentic-ai-systems" rel="noopener noreferrer"&gt;Best Practices for Building Agentic AI Systems: What Actually Works in Production&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/javascript-reduce/" rel="noopener noreferrer"&gt;Howto Use JavaScript reduce() Like a Pro&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ryanskinner.com/posts/how-i-built-a-full-stack-react-framework-4x-faster-than-nextjs-with-4x-more-throughput" rel="noopener noreferrer"&gt;How I Built a Full-Stack React Framework 4x Faster Than Next.js With 4x More Throughput&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/copilotkit/heres-how-to-build-fullstack-agent-apps-gemini-copilotkit-langgraph-15jb"&gt;Here's How To Build Fullstack Agent Apps (Gemini, CopilotKit &amp;amp; LangGraph)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jross.me/run-express-js-on-cloudflare-workers/" rel="noopener noreferrer"&gt;Run Express.js on Cloudflare Workers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/nextjs-routing-mastery/" rel="noopener noreferrer"&gt;Next.js App Router: Dynamic, Grouped, Parallel &amp;amp; Intercepted&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/github-copilot-cli-how-to-get-started/" rel="noopener noreferrer"&gt;GitHub Copilot CLI: How to get started&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://matthiasott.com/notes/css-is-where-the-magic-happens" rel="noopener noreferrer"&gt;CSS :is() :where() the Mag­ic Happens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stuffandnonsense.co.uk/blog/the-thing-about-contrast-color" rel="noopener noreferrer"&gt;The thing about contrast-color&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://frontendmasters.com/blog/modern-css-round-out-tabs/" rel="noopener noreferrer"&gt;Modern CSS Round-Out Tabs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/ethersjs-basics/" rel="noopener noreferrer"&gt;Mastering Ethers.js — From MetaMask to Smart Contracts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/wagmi-react/" rel="noopener noreferrer"&gt;Building Web3 Frontends with React and wagmi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodesource.com/blog/nodejs-features-replacing-npm-packages" rel="noopener noreferrer"&gt;15 Recent Node.js Features that Replace Popular npm Packages&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aurorascharff.no/posts/building-an-async-combobox-with-usesuspensequery-and-usedeferredvalue/" rel="noopener noreferrer"&gt;Building an Async Combobox with useSuspenseQuery() and useDeferredValue()&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://denodell.com/blog/html-best-kept-secret-output-tag" rel="noopener noreferrer"&gt;HTML’s Best Kept Secret: The &lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt; Tag&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚒️ Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mirrow.app/" rel="noopener noreferrer"&gt;Mirrow&lt;/a&gt;: A DSL for Dynamic SVG Creation and Animation — Instead of treating SVGs as static graphics, Mirrow reimagines them as interactive, code-defined visuals. It introduces a domain-specific language (DSL) that lets you generate and animate SVGs programmatically, making them flexible, reusable, and expressive. Visit the playground to experiment with Mirrow syntax and bring your own SVG animations to life in real time.&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%2Fegt8ta19z8xy51rcswv1.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%2Fegt8ta19z8xy51rcswv1.png" alt="Free OG Image Creator" width="799" height="287"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://ogimage.click/" rel="noopener noreferrer"&gt;ogImage.click&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://makegraph.app/" rel="noopener noreferrer"&gt;Make Graph&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/khromov/ai-digest" rel="noopener noreferrer"&gt;ai-digest&lt;/a&gt;: A CLI for Summarizing Your Entire Codebase — This command-line tool automatically compiles your entire project into a single, structured Markdown file. Perfect for feeding into Claude projects, custom ChatGPTs, or AI code assistants, it gives large models full context of your codebase for analysis, documentation, or refactoring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/humanwhocodes/crosspost" rel="noopener noreferrer"&gt;Crosspost&lt;/a&gt; - A JavaScript utility for posting across multiple social networks at once&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.ai/" rel="noopener noreferrer"&gt;stackoverflow.ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/czlonkowski/n8n-mcp" rel="noopener noreferrer"&gt;n8n-MCP&lt;/a&gt; - A MCP for Claude Desktop / Claude Code / Windsurf / Cursor to build n8n workflows for you&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Libs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Olow304/memvid" rel="noopener noreferrer"&gt;memvid&lt;/a&gt; - Video-based AI memory library. Store millions of text chunks in MP4 files with lightning-fast semantic search. No database needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/CaviraOSS/pagelm" rel="noopener noreferrer"&gt;PageLM&lt;/a&gt; - PageLM is a community driven version of NotebookLM &amp;amp; a education platform that transforms study materials into interactive resources like quizzes, flashcards, notes, and podcasts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/linagora/twake-drive" rel="noopener noreferrer"&gt;Twake Drive&lt;/a&gt; - The open-source alternative to Google Drive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/MatthewHerbst/react-to-print" rel="noopener noreferrer"&gt;ReactToPrint&lt;/a&gt; - Print React components in the browser&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rictic/jsonriver" rel="noopener noreferrer"&gt;jsonriver&lt;/a&gt; - A simple, fast streaming JSON parser built on standards.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/oozcitak/xmlbuilder2" rel="noopener noreferrer"&gt;xmlbuilder2&lt;/a&gt; - An XML builder for node.js&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vercel-labs/coding-agent-template" rel="noopener noreferrer"&gt;Coding Agent Template&lt;/a&gt; - Multi-agent AI coding platform powered by Vercel Sandbox and AI Gateway&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.isagent.dev/" rel="noopener noreferrer"&gt;IsAgent SDK&lt;/a&gt; - A lightweight SDK for building agent-specific experiences in your app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/visgl/react-map-gl" rel="noopener noreferrer"&gt;react-map-gl&lt;/a&gt; - React friendly API wrapper around MapboxGL JS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/simonedevit/reactylon" rel="noopener noreferrer"&gt;reactylon&lt;/a&gt; - A powerful multiplatform framework built on top of Babylon.js and React, designed to create interactive and immersive XR experiences.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/playcanvas/model-viewer" rel="noopener noreferrer"&gt;PlayCanvas Model Viewer&lt;/a&gt; - 3D Model Viewer supporting glTF and 3D Gaussian Splats&lt;/p&gt;

&lt;h2&gt;
  
  
  ⌚ Releases
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://react.dev/blog/2025/10/07/react-compiler-1" rel="noopener noreferrer"&gt;React Compiler v1.0&lt;/a&gt; — The React team has officially declared the compiler stable and ready for production use. It automatically applies memoization optimizations based on static code analysis, reducing unnecessary re-renders and improving performance without manual tweaks. You can still rely on &lt;code&gt;useMemo&lt;/code&gt; and &lt;code&gt;useCallback&lt;/code&gt; for fine-grained control when needed, but many optimizations are now handled seamlessly by the compiler itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnative.dev/blog/2025/10/08/react-native-0.82" rel="noopener noreferrer"&gt;React Native 0.82 - A New Era&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bun.com/blog/bun-v1.3" rel="noopener noreferrer"&gt;Bun 1.3 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/blog/release/v24.10.0" rel="noopener noreferrer"&gt;Node.js v24.10.0 (Current)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nextjs.org/blog/next-16-beta" rel="noopener noreferrer"&gt;Next.js 16 (beta) released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cratedb.com/blog/new-release-cratedb-6.0" rel="noopener noreferrer"&gt;New Release: CrateDB 6.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/olegshulyakov/llama.ui/releases/tag/v2.38.2" rel="noopener noreferrer"&gt;llama.ui v2.38.2 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/microsoft/playwright/releases/tag/v1.56.0" rel="noopener noreferrer"&gt;playwright v1.56.0 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/capricorn86/happy-dom/releases/tag/v20.0.0" rel="noopener noreferrer"&gt;Happy DOM v20.0 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openai/openai-node" rel="noopener noreferrer"&gt;openai-node v6.4.0 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/marmelab/react-admin/releases/tag/v5.12.0" rel="noopener noreferrer"&gt;React Admin v5.12.0&lt;/a&gt;, &lt;a href="https://github.com/TanStack/router/releases/tag/v1.133.0" rel="noopener noreferrer"&gt;TanStack Router 1.133&lt;/a&gt;, &lt;a href="https://github.com/react-hook-form/react-hook-form/releases/tag/v7.65.0" rel="noopener noreferrer"&gt;React Hook Form v7.65.0&lt;/a&gt;, &lt;a href="https://github.com/pixijs/pixijs/releases/tag/v8.14.0" rel="noopener noreferrer"&gt;Pixijs v8.14.0&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📺 Videos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=gdRCIOn5zVA" rel="noopener noreferrer"&gt;RabbitMQ Crash Course #1 – Setup, Queues &amp;amp; Why Message Brokers Matter Node js + Docker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=5KkaaYl5rwA" rel="noopener noreferrer"&gt;React Coding Interview: Kent C. Dodds, Jack Herrington &amp;amp; Roadside Coder Solve React HARD Question&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=GOejI6c0CMQ" rel="noopener noreferrer"&gt;Meta's most dystopian product yet...&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=P8rrhZTPEAQ" rel="noopener noreferrer"&gt;99% of Developers Don't Get PostgreSQL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=0ZUkQF6boNg" rel="noopener noreferrer"&gt;AI Coding Sucks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=CBCujAQtdfQ" rel="noopener noreferrer"&gt;Big Tech Is Faking Revenue&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=5cAjuIxIvHg" rel="noopener noreferrer"&gt;Extremely Underrated Programming Skills&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎤 Talks &amp;amp; Podcasts
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://thecsspodcast.libsyn.com/93-state-queries-in-2025" rel="noopener noreferrer"&gt;CSS Podcast 93: State queries in 2025&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🗞️ News &amp;amp; Updates
&lt;/h2&gt;

&lt;p&gt;🕹️ The JS13KGames 2025 competition has wrapped up, and &lt;a href="https://js13kgames.com/2025/blog/winners-announced" rel="noopener noreferrer"&gt;the winners have been announced&lt;/a&gt;! Explore this year’s top entries — all built in under 13KB of JavaScript — to play inventive mini-games or dive into their clever, size-optimized source code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://socket.dev/blog/npm-trusted-publishing" rel="noopener noreferrer"&gt;npm Adopts OIDC for Trusted Publishing in CI/CD Workflows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://triplex.dev/blog/triplex-moves-to-pmndrs" rel="noopener noreferrer"&gt;Triplex Goes Open Source and Moves to Poimandres&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🤖 &lt;a href="https://mastra.ai/" rel="noopener noreferrer"&gt;Mastra&lt;/a&gt;, a rapidly growing TypeScript-based AI framework founded by former members of the Gatsby team, &lt;a href="https://mastra.ai/blog/seed-round" rel="noopener noreferrer"&gt;has secured a $13 million seed&lt;/a&gt; round to accelerate development and expand its ecosystem of AI tools for developers.&lt;/p&gt;




&lt;p&gt;That’s a wrap for this edition of &lt;a href="https://jsdev.space/friday/" rel="noopener noreferrer"&gt;Friday Links&lt;/a&gt;! Keep exploring, building, and sharing your favorite finds with the community. Check back next Friday for another round of JavaScript updates, tools, and ideas that push the web forward.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>node</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Understanding CSS Priority — The Cascade Explained</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Thu, 16 Oct 2025 15:11:30 +0000</pubDate>
      <link>https://dev.to/jsdevspace/understanding-css-priority-the-cascade-explained-5gai</link>
      <guid>https://dev.to/jsdevspace/understanding-css-priority-the-cascade-explained-5gai</guid>
      <description>&lt;h2&gt;
  
  
  Mastering the Priority of CSS Styles
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity" rel="noopener noreferrer"&gt;CSS Cascading and Specificity&lt;/a&gt; are the foundation of how browsers decide which styles to apply. In this article, we’ll explore how multiple CSS rules interact and which one takes precedence — from classic specificity formulas to modern &lt;code&gt;@layer&lt;/code&gt; rules.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 Let’s Start with a Simple Example
&lt;/h2&gt;

&lt;p&gt;When multiple CSS classes are applied to one element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"blue red green"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;What color is this text?&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.blue&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.red&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.green&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&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;The final color is &lt;strong&gt;green&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
This happens because CSS follows a &lt;strong&gt;cascading order&lt;/strong&gt;, where later declarations take precedence when all else is equal.&lt;/p&gt;


&lt;h2&gt;
  
  
  🕰️ The Birth of Cascading
&lt;/h2&gt;

&lt;p&gt;When CSS was first introduced in 1996, &lt;em&gt;cascading&lt;/em&gt; was its key concept.&lt;br&gt;&lt;br&gt;
The design goals were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎯 &lt;strong&gt;Predictability:&lt;/strong&gt; Developers can reason about the final result.
&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Flexibility:&lt;/strong&gt; Allow style overrides and inheritance.
&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Balance:&lt;/strong&gt; Respect both author and user styles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This concept, created by &lt;strong&gt;Håkon Wium Lie&lt;/strong&gt;, was meant to handle conflicts between multiple sources — author styles, user styles, and browser defaults.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚖️ The System of Cascading Priorities
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🎯 Specificity Formula
&lt;/h3&gt;

&lt;p&gt;Specificity is represented as a four-part tuple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Inline, ID selectors, Class/Attribute/Pseudo-class, Element selectors)
&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;Style Type&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Inline style&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;style="color: red"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ID selector&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;#header&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Class/attribute/pseudo-class&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;.active, [type=text]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Element selector&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;div, p&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Universal selector&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🔍 Real Examples
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Specificity: (0, 0, 1, 1) = 11 */&lt;/span&gt;
&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="nc"&gt;.blue&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Specificity: (0, 1, 0, 0) = 100 */&lt;/span&gt;
&lt;span class="nf"&gt;#content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Specificity: (0, 0, 2, 1) = 21 */&lt;/span&gt;
&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="nc"&gt;.blue.active&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Inline style: (1, 0, 0, 0) = 1000 */&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"color: yellow;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Note:&lt;/strong&gt; Ten class selectors will never outweigh a single ID selector.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📝 Overriding Rules at Equal Priority
&lt;/h2&gt;

&lt;p&gt;When selectors share the same specificity, &lt;strong&gt;source order&lt;/strong&gt; decides which one wins.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.blue&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.red&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.green&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&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;HTML order doesn’t matter — only the CSS definition order does:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"green blue red"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Green&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"red green blue"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Green&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"blue red green"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Green&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎨 Priority in Complex Scenarios
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="nc"&gt;.red&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;           &lt;span class="c"&gt;/* 11 */&lt;/span&gt;
  &lt;span class="nc"&gt;.blue.text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;       &lt;span class="c"&gt;/* 20 */&lt;/span&gt;
  &lt;span class="nf"&gt;#content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;        &lt;span class="c"&gt;/* 100 */&lt;/span&gt;
  &lt;span class="nc"&gt;.yellow&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;        &lt;span class="c"&gt;/* 10 (later defined) */&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"content"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"red blue text yellow"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    What color is this?
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Result: &lt;strong&gt;Green&lt;/strong&gt; — because the ID selector has the highest priority.&lt;br&gt;&lt;br&gt;
If the ID is removed, &lt;strong&gt;blue.text&lt;/strong&gt; (20) wins over &lt;strong&gt;red&lt;/strong&gt; (11).&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚡ The Power of &lt;code&gt;!important&lt;/code&gt;
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.blue&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt; &lt;span class="cp"&gt;!important&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.red&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.green&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&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;&lt;code&gt;!important&lt;/code&gt; overrides all other declarations, even with lower specificity.&lt;/p&gt;
&lt;h3&gt;
  
  
  💡 Usage Tips
&lt;/h3&gt;

&lt;p&gt;✅ Use for overriding library defaults or utility classes.&lt;br&gt;&lt;br&gt;
❌ Avoid in component-level styles — it leads to “priority wars.”&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ Best Practices in CSS Architecture
&lt;/h2&gt;

&lt;p&gt;A recommended CSS priority structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* 1. Reset styles — lowest priority */&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* 2. Base elements */&lt;/span&gt;
&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* 3. Layout classes */&lt;/span&gt;
&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* 4. Components */&lt;/span&gt;
&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* 5. States */&lt;/span&gt;
&lt;span class="nc"&gt;.button.active&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* 6. Utilities — highest */&lt;/span&gt;
&lt;span class="nc"&gt;.text-center&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt; &lt;span class="cp"&gt;!important&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;h3&gt;
  
  
  🎯 Avoiding Conflicts
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use BEM naming:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;   &lt;span class="nc"&gt;.card__title--highlighted&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&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;Instead of deeply nested selectors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;   &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="nc"&gt;.content&lt;/span&gt; &lt;span class="nc"&gt;.title.highlighted&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&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;ol&gt;
&lt;li&gt;
&lt;strong&gt;Modular CSS-in-JS:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="na"&gt;subtitle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Custom properties for flexibility:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;   &lt;span class="nc"&gt;.theme-blue&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--primary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--primary-color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;gray&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;h2&gt;
  
  
  🆕 Modern CSS: Cascade Layers
&lt;/h2&gt;

&lt;p&gt;CSS now includes the powerful &lt;code&gt;@layer&lt;/code&gt; feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@layer&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;@layer&lt;/span&gt; &lt;span class="n"&gt;base&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&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;@layer&lt;/span&gt; &lt;span class="n"&gt;components&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.title&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&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;@layer&lt;/span&gt; &lt;span class="n"&gt;utilities&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.text-red&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&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;&lt;strong&gt;Cascade order:&lt;/strong&gt; &lt;code&gt;base &amp;lt; components &amp;lt; utilities&lt;/code&gt;&lt;br&gt;&lt;br&gt;
This gives fine-grained control and clarity for large projects.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔮 Logical Properties and Modern Trends
&lt;/h2&gt;

&lt;p&gt;As CSS evolves with globalization and layout flexibility, &lt;strong&gt;logical properties&lt;/strong&gt; change how cascading behaves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;margin-inline-start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&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;In browsers supporting logical properties, &lt;code&gt;margin-inline-start&lt;/code&gt; takes precedence over &lt;code&gt;margin-left&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/css-cascade-5/" rel="noopener noreferrer"&gt;CSS Cascading Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity" rel="noopener noreferrer"&gt;MDN: CSS Specificity Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" rel="noopener noreferrer"&gt;MDN: Cascade Layers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Friday Links 26: This Week in JavaScript</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Fri, 22 Aug 2025 06:08:05 +0000</pubDate>
      <link>https://dev.to/jsdevspace/friday-links-26-this-week-in-javascript-3ahc</link>
      <guid>https://dev.to/jsdevspace/friday-links-26-this-week-in-javascript-3ahc</guid>
      <description>&lt;p&gt;It’s Friday, which means another edition of Friday Links! In issue #26 we’ve gathered the most interesting JavaScript updates from around the community. From new libraries to thoughtful guides and project showcases, here’s what caught our eye this week.&lt;/p&gt;

&lt;p&gt;Subscribe to Friday Links &lt;a href="https://jsdevspace.substack.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;!&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%2F2b3pcfjngffdamr09ux0.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%2F2b3pcfjngffdamr09ux0.png" alt="Friday Links 26: This Week in JavaScript" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Allie: Human-Like AI Chess Bot on Lichess
&lt;/h3&gt;

&lt;p&gt;Since launch on Lichess, the &lt;a href="https://lichess.org/@/Allie" rel="noopener noreferrer"&gt;AI bot Allie&lt;/a&gt; has played over 11,600 games, winning more than 6,800. The bot is free and &lt;a href="https://github.com/ippolito-cmu/allie" rel="noopener noreferrer"&gt;open source&lt;/a&gt;, available only in blitz mode, where you can also &lt;a href="https://lichess.org/@/Allie" rel="noopener noreferrer"&gt;watch its games live&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Created by Carnegie Mellon PhD student Yimin Zhang, Allie was trained not on engine calculations but on 91 million human games, making its style strikingly human-like. Researchers note it performs at grandmaster level, while remaining an excellent and natural sparring partner for learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  DBQuacks: A Quest Game to Learn SQL
&lt;/h3&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%2Fvhz2n1amfz5qcmmrbjse.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%2Fvhz2n1amfz5qcmmrbjse.png" alt="DBQuacks" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dbquacks.com/" rel="noopener noreferrer"&gt;DBQuacks&lt;/a&gt; is a new SQL learning quest game. The first chapter (38 levels) introduces SQL basics with DuckDB through puzzles and story-driven tasks. Players solve mysteries by writing correct SQL queries, with hints and references available. A second chapter with advanced SQL features is coming soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Articles &amp;amp; Tutorials
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://awsfundamentals.com/blog/aws-getting-started" rel="noopener noreferrer"&gt;How to Get Started with AWS in 2025&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sumonta056/how-to-run-frontend-backend-together-with-one-command-no-docker-needed-29nd"&gt;How to Run Frontend &amp;amp; Backend Together with One Command (No Docker Needed)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.logrocket.com/how-to-optimize-next-js-app-after" rel="noopener noreferrer"&gt;How to optimize your Next.js app with after()&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/future-of-javascript/" rel="noopener noreferrer"&gt;The Future of JavaScript: What Awaits Us&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freecodecamp.org/news/the-nextjs-15-streaming-handbook/" rel="noopener noreferrer"&gt;The Next.js 15 Streaming Handbook — SSR, React Suspense, and Loading Skeleton&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.joshwcomeau.com/svg/interactive-guide-to-paths/" rel="noopener noreferrer"&gt;An Interactive Guide to SVG Paths&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/local-ai-ollama-react/" rel="noopener noreferrer"&gt;Build a Local AI Chatbot with Ollama, React &amp;amp; Express&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://research.kudelskisecurity.com/2025/08/19/how-we-exploited-coderabbit-from-a-simple-pr-to-rce-and-write-access-on-1m-repositories/" rel="noopener noreferrer"&gt;How We Exploited CodeRabbit: From a Simple PR to RCE and Write Access on 1M Repositories&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/gemini-cli-custom-commands/" rel="noopener noreferrer"&gt;Mastering Gemini CLI: Create, Optimize &amp;amp; Automate Commands&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ntietz.com/blog/visualizing-distributions-with-pepperoni-pizza/" rel="noopener noreferrer"&gt;Visualizing distributions with pepperoni pizza (and javascript)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zed.dev/blog/why-llms-cant-build-software" rel="noopener noreferrer"&gt;Why LLMs Can't Really Build Software&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/rtk-query-redux-alternative/" rel="noopener noreferrer"&gt;Howto Simplify Redux with RTK Query in React Projects&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://prava.co/archon/" rel="noopener noreferrer"&gt;Teaching GPT-5 to Use a Computer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/tanstack-query-api-factory/" rel="noopener noreferrer"&gt;Accelerating API Development with TanStack Query&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.docuseal.com/blog/make-any-website-load-faster-with-6-lines-html" rel="noopener noreferrer"&gt;Make any website load faster with 6 lines of HTML&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://christianheilmann.com/2025/08/11/using-github-pages-as-a-url-shortener-redirection-service/" rel="noopener noreferrer"&gt;Using GitHub Pages as a URL shortener / redirection service&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://natalie.sh/posts/bluesky-comments/" rel="noopener noreferrer"&gt;Building Bluesky Comments for My Blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/vite-module-federation-404/" rel="noopener noreferrer"&gt;Fixing Vite Module Federation Errors When Starting Apps Separately&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://atlaspuplabs.com/blog/liquid-glass-but-in-css" rel="noopener noreferrer"&gt;Liquid Glass, but in CSS&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚒️ Tools
&lt;/h2&gt;

&lt;p&gt;🍃 Ethersync&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%2Fmb7by3e13bulxp8z6r4q.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%2Fmb7by3e13bulxp8z6r4q.png" alt="Ethersync" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ethersync enables real-time collaborative editing of local text files. You can use it for pair programming or note-taking, for example. It's the missing real-time complement to Git!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/law-chain-hot/websocket-devtools" rel="noopener noreferrer"&gt;WebSocket DevTools&lt;/a&gt; - Complete WebSocket Traffic Control with advanced proxy, simulation, and blocking capabilities&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ethersync/ethersync" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/WCY-dt/ponghub" rel="noopener noreferrer"&gt;PongHub&lt;/a&gt; - Free endpoint monitoring. One-click deployment. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://jwtauditor.com/" rel="noopener noreferrer"&gt;JWTAuditor&lt;/a&gt; - A tool to audit JWTs (JSON Web Tokens) for security vulnerabilities and best practices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/f/mcptools" rel="noopener noreferrer"&gt;MCP Tools&lt;/a&gt; - A comprehensive command-line interface for interacting with MCP (Model Context Protocol) servers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jobpare/cvgen" rel="noopener noreferrer"&gt;Jobpare CV Generator&lt;/a&gt; - A tool to generate professional CVs in various formats.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/gradio-app/trackio" rel="noopener noreferrer"&gt;Trackio&lt;/a&gt; - A lightweight, local-first, and free experiment tracking Python library built on top of 🤗 Datasets and Spaces.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/luminal-ai/luminal" rel="noopener noreferrer"&gt;Luminal&lt;/a&gt; - Deep learninglibrary that uses search-based compilation to achieve high performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://agents.md/" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt; - A simple, open format for guiding coding agents, used by over 20k open-source projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/karpathy/rendergit" rel="noopener noreferrer"&gt;rendergit&lt;/a&gt; - Render any git repo into a single static HTML page for humans or LLMs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ngafar/llama-scan" rel="noopener noreferrer"&gt;llama-scan&lt;/a&gt; - A tool for converting PDFs to text files using Ollama.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/anthropics/anthropic-cookbook" rel="noopener noreferrer"&gt;Anthropic Cookbook&lt;/a&gt; - A collection of examples and best practices for using Anthropic's AI models.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://panda-css.com/" rel="noopener noreferrer"&gt;Panda CSS&lt;/a&gt; - A CSS-in-JS library that allows you to write CSS in JavaScript with a focus on performance and developer experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/nolanlawson/fuite" rel="noopener noreferrer"&gt;fuite&lt;/a&gt; - A tool to detect memory leaks in JavaScript applications by tracking memory usage over time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://animateicons.vercel.app/" rel="noopener noreferrer"&gt;AnimateIcons&lt;/a&gt; - A sleek React library that transforms SVGs into smooth, purposeful animations — lightweight, customizable, and built with motion/react.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Libs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/MotiaDev/motia" rel="noopener noreferrer"&gt;Motia&lt;/a&gt; - local-first tool for creating professional resumes from JSON data and HTML templates. Features web editor, CLI tool, role-specific guidance, and PDF output. Perfect for developers and professionals who want full control over their CV presentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/firecrawl/open-lovable" rel="noopener noreferrer"&gt;Open Lovable&lt;/a&gt; - About&lt;br&gt;
🔥 Clone and recreate any website as a modern React app in seconds&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/opactorai/Claudable" rel="noopener noreferrer"&gt;Claudable&lt;/a&gt; - Connect Claude Code. Build what you want. Deploy instantly. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/KittenML/KittenTTS" rel="noopener noreferrer"&gt;KittenTTS&lt;/a&gt; - is an open-source realistic text-to-speech model with just 15 million parameters, designed for lightweight deployment and high-quality voice synthesis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/wcandillon/react-native-webgpu" rel="noopener noreferrer"&gt;React Native WebGPU&lt;/a&gt; - A React Native library that provides WebGPU support for high-performance graphics and compute on mobile devices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/entronad/crypto-es" rel="noopener noreferrer"&gt;CryptoES&lt;/a&gt; - A JavaScript library for cryptographic operations, including hashing, encryption, and decryption.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vpulim/node-soap" rel="noopener noreferrer"&gt;node-soap&lt;/a&gt; - A SOAP client and server for Node.js, allowing you to create and consume SOAP web services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://andreruffert.github.io/syntax-highlight-element/" rel="noopener noreferrer"&gt;syntax-highlight-element&lt;/a&gt; - A web component for syntax highlighting code snippets in HTML documents, supporting multiple languages and themes.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⌚ Releases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Git 2.51 Released: Preparing for Git 3.0
&lt;/h3&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%2Fqa0an0cdo6scipr7i6y5.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%2Fqa0an0cdo6scipr7i6y5.png" alt="Git 2.51" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On August 18, 2025, &lt;a href="https://github.blog/open-source/git/highlights-from-git-2-51/" rel="noopener noreferrer"&gt;Git 2.51 was released with 506 changes&lt;/a&gt; from 91 contributors. This update prepares for Git 3.0, which will switch the default hash from SHA-1 to SHA-256 and adopt the reftable backend. Key improvements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git cat-file&lt;/code&gt;: better handling of missing objects and submodules.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git log&lt;/code&gt;: faster history search with Bloom filters.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git switch &amp;amp; git restore&lt;/code&gt;: now stable replacements for git checkout.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git whatchanged&lt;/code&gt;: deprecated, set for removal in Git 3.0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New options&lt;/strong&gt;: &lt;code&gt;--start-after&lt;/code&gt; for git &lt;code&gt;for-each-ref&lt;/code&gt;, &lt;code&gt;--compact-summary&lt;/code&gt; for &lt;code&gt;git merge&lt;/code&gt; and &lt;code&gt;git pull&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance boosts&lt;/strong&gt;: &lt;code&gt;git push&lt;/code&gt; and &lt;code&gt;git fetch&lt;/code&gt; are faster, especially with reftable (22× faster fetch, 18× faster push in large repos).&lt;/li&gt;
&lt;li&gt;C99 support: broader use of modern C features.&lt;/li&gt;
&lt;li&gt;Patch policy: pseudonyms now allowed for contributions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://nextjs.org/blog/next-15-4" rel="noopener noreferrer"&gt;Next.js 15.4 Released&lt;/a&gt; - This release includes new features like &lt;code&gt;next/image&lt;/code&gt; improvements, enhanced performance, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.postgresql.org/about/news/autobase-230-released-3104/" rel="noopener noreferrer"&gt;Autobase 2.3.0 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://api-docs.deepseek.com/news/news250821" rel="noopener noreferrer"&gt;DeepSeek-v3.1 Release&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nuxt.com/blog/v4" rel="noopener noreferrer"&gt;Announcing Nuxt 4.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://astro.build/blog/astro-5120/" rel="noopener noreferrer"&gt;Astro 5.12 Released&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en/blog/release/v24.6.0" rel="noopener noreferrer"&gt;Node.js v24.6.0 (Current) Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnative.dev/blog/2025/08/12/react-native-0.81" rel="noopener noreferrer"&gt;React Native 0.81 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/1111mp/nvm-desktop/releases/tag/v4.1.0" rel="noopener noreferrer"&gt;NVM Desktop v4.1.0&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📺 Videos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=d3cMODi1CtU" rel="noopener noreferrer"&gt;How to Create a Minimap in Three.js with React Three Fiber (Drei View)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=BTfcnxXevm0" rel="noopener noreferrer"&gt;Build &amp;amp; Deploy 3 Full-stack Mobile Apps That’ll Get You Hired | Full 10-Hour React Native Course&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=bFLGwVyIotA" rel="noopener noreferrer"&gt;Multi-Tenant SaaS Architecture in 3 Simple Steps&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=oDgkM7G8ezU&amp;amp;ab_channel=edureka%21" rel="noopener noreferrer"&gt;Linux Full Course - 10 Hours [2025]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=6fXNWBFPfRM&amp;amp;t=9246s&amp;amp;ab_channel=CodeWithAntonio" rel="noopener noreferrer"&gt;Build and Deploy a Multi-Vendor E-Commerce Marketplace with Nextjs, React, Stripe Connect, MongoDB&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=xqoYkX4hfwg&amp;amp;t=515s&amp;amp;ab_channel=JanMarshal" rel="noopener noreferrer"&gt;Create an LMS Course Platform with Next.js, Arcjet, Better-Auth, and Stripe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=X1zCAPLvMtw&amp;amp;t=1s&amp;amp;ab_channel=EdRoh" rel="noopener noreferrer"&gt;Build an Enterprise Nextjs Rental App | AWS, EC2, Cognito, Shadcn, RDS, S3, Node, React&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=xIfSwINNM40&amp;amp;ab_channel=WebDevSimplified" rel="noopener noreferrer"&gt;Build an AI-Powered Job Board From Scratch with Next.js 15, Drizzle, Tailwind&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=oxEmHmx4jm4&amp;amp;ab_channel=SangamMukherjee" rel="noopener noreferrer"&gt;Next.js 15 Full Course 2025 | Drizzle, Better Auth, Postgres, TypeScript | 14 Hours&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=OqlI2766LCk&amp;amp;list=PLv8XNy31mAPq__ZitIrgMrb4vI2I2hZKs&amp;amp;ab_channel=ElliottChong" rel="noopener noreferrer"&gt;Build and Deploy Full Stack AI GitHub SaaS | Next JS 15, Google Gemini AI, Assembly AI, Stripe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=CAr02YlEJUc&amp;amp;ab_channel=CodeWithAntonio" rel="noopener noreferrer"&gt;Build and Deploy a B2B SaaS AI Support Platform | Next.js 15, React, Convex, Turborepo, Vapi, AWS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=XiD_TsGRQtE&amp;amp;ab_channel=Becodemy" rel="noopener noreferrer"&gt;Let's build a multi-vendor E-Commerce SaaS by using Microservice Architecture, ImageKit&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎤 Talks &amp;amp; Podcasts
&lt;/h2&gt;

&lt;p&gt;No content this week 😢&lt;/p&gt;

&lt;h2&gt;
  
  
  🗞️ News &amp;amp; Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OpenAI CFO: $1B Monthly Revenue, But Compute Shortage Looms
&lt;/h3&gt;

&lt;p&gt;In an &lt;a href="https://www.cnbc.com/2025/08/20/openai-compute-ai.html" rel="noopener noreferrer"&gt;interview with CNBC&lt;/a&gt;, OpenAI CFO Sarah Friar revealed the company generated over $1 billion in revenue in July 2025, projecting $12.7B for the year. Yet the main challenge remains severe compute shortages.&lt;/p&gt;

&lt;p&gt;Key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stargate project launched to expand compute, with partners including Oracle and CoreWeave.&lt;/li&gt;
&lt;li&gt;Microsoft partnership remains central — as both investor and primary compute provider.&lt;/li&gt;
&lt;li&gt;Despite a rocky GPT-5 launch, OpenAI has seen rising Plus and Pro subscriptions.&lt;/li&gt;
&lt;li&gt;Analysts expect an $8B negative cash flow in 2025; Stargate’s long-term investment is valued at $500B, with Altman hinting at “trillions” for future data centers and chips.&lt;/li&gt;
&lt;li&gt;Friar notes OpenAI may one day sell compute to third parties, becoming an “AWS for AI”, but for now lacks the capacity even for its own work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  IBM &amp;amp; NASA Launch Surya AI to Predict Solar Storms
&lt;/h3&gt;

&lt;p&gt;IBM and NASA have unveiled Surya, an &lt;a href="https://huggingface.co/ibm-nasa/Surya" rel="noopener noreferrer"&gt;open-source AI model&lt;/a&gt; designed to forecast solar flares and coronal mass ejections before they strike Earth. Built on the world’s largest heliophysics dataset, Surya analyzes high-resolution solar images to predict dangerous events that can disrupt satellites, power grids, telecoms, and navigation systems.&lt;/p&gt;

&lt;p&gt;Highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trained on 9 years of NASA’s Solar Dynamics Observatory images.&lt;/li&gt;
&lt;li&gt;Improves solar flare classification accuracy by 16%.&lt;/li&gt;
&lt;li&gt;First steps toward visual forecasting of flares, with warnings up to 2 hours ahead.&lt;/li&gt;
&lt;li&gt;Openly available for research on &lt;a href="https://huggingface.co/ibm-nasa/Surya" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Builds on IBM &amp;amp; NASA’s earlier &lt;a href="https://huggingface.co/ibm-nasa/Prithvi" rel="noopener noreferrer"&gt;Prithvi&lt;/a&gt; Earth observation AI models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researchers call Surya a “weather forecaster for the Sun”, a critical step in protecting modern infrastructure from Carrington-level solar storms.&lt;/p&gt;

&lt;p&gt;That’s a wrap for &lt;a href="https://jsdev.space/friday/friday-26/" rel="noopener noreferrer"&gt;Friday Links 26&lt;/a&gt;. We hope these resources give you fresh ideas to explore over the weekend. Share this roundup with your fellow developers, and check back next Friday for more highlights from the JavaScript ecosystem.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>backend</category>
    </item>
    <item>
      <title>JavaScript Weekly #25 – What Devs Loved This Week (Aug 01, 2025)</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Fri, 01 Aug 2025 12:19:30 +0000</pubDate>
      <link>https://dev.to/jsdevspace/javascript-weekly-25-what-devs-loved-this-week-aug-01-2025-1i9b</link>
      <guid>https://dev.to/jsdevspace/javascript-weekly-25-what-devs-loved-this-week-aug-01-2025-1i9b</guid>
      <description>&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%2F47ttjhk8xvv6pgb595ur.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%2F47ttjhk8xvv6pgb595ur.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome to &lt;a href="https://jsdevspace.substack.com/p/friday-js-roundup-25-august-1-2025" rel="noopener noreferrer"&gt;Issue #25&lt;/a&gt; of the JavaScript Weekly Roundup — your go-to source for what’s new, useful, and exciting in the JavaScript world.&lt;br&gt;
Each Friday, we gather the most talked-about updates, from powerful new libraries to smart tips and ideas worth exploring. Whether you’re polishing components or digging into server-side logic, this list will keep your dev stack fresh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistral Launches Codestral Ecosystem as Enterprise AI Coding Suite
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mistral.ai/solutions/coding" rel="noopener noreferrer"&gt;Mistral has introduced&lt;/a&gt; its response to GitHub Copilot: a comprehensive enterprise development ecosystem powered by its &lt;strong&gt;Codestral&lt;/strong&gt; model family. At the core is &lt;strong&gt;Codestral 25.08&lt;/strong&gt;, an updated model fine-tuned for real-world software environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Model Improvements
&lt;/h3&gt;

&lt;p&gt;Codestral 25.08 delivers measurable gains based on real codebase benchmarks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;30% more accepted completions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📈 &lt;strong&gt;10% more preserved code&lt;/strong&gt; after applying suggestions
&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;50% fewer overly long or incorrect generations&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These enhancements aim to streamline development and reduce common friction points in AI-assisted coding—especially in enterprise-scale projects.&lt;/p&gt;




&lt;p&gt;Codestral isn’t just a model update—it’s Mistral’s strategic move toward building a full-featured coding assistant ecosystem for large teams and production systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  # Qwen 3 Coder: Alibaba’s Open 480B MoE Model for Programming
&lt;/h2&gt;

&lt;p&gt;Alibaba has released &lt;strong&gt;Qwen 3 Coder&lt;/strong&gt;, an open-source Mixture-of-Experts (MoE) model built for programming tasks. The model boasts &lt;strong&gt;480 billion parameters&lt;/strong&gt; (with 35B active at any time) and was trained on &lt;strong&gt;7.5 trillion tokens&lt;/strong&gt;, of which &lt;strong&gt;70% are code&lt;/strong&gt;. It’s designed to solve real-world tasks and demonstrates performance comparable to &lt;strong&gt;Claude 4 Sonnet&lt;/strong&gt; on code and tool usage benchmarks.&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%2F3dl1uiti3ycbx0k8xt8c.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%2F3dl1uiti3ycbx0k8xt8c.png" alt="Qwen 3 Coder" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;480B total / 35B active parameters&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7.5T tokens training corpus&lt;/strong&gt;, heavily code-focused
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;256K context length&lt;/strong&gt;, scalable up to &lt;strong&gt;1M tokens&lt;/strong&gt; using &lt;strong&gt;YaRN&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Trained using &lt;strong&gt;RL at scale&lt;/strong&gt;, with 20K parallel environments&lt;/li&gt;
&lt;li&gt;Emphasizes real-world scenarios and tool usage&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The training approach lets the model learn from its own mistakes, thanks to a large-scale reinforcement learning setup.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  💰 Pricing &amp;amp; Availability
&lt;/h3&gt;

&lt;p&gt;The major downside of Qwen 3 Coder is its &lt;strong&gt;expensive API&lt;/strong&gt; access:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At &lt;strong&gt;1M context tokens&lt;/strong&gt;, pricing can reach &lt;strong&gt;$6–$60 per million tokens&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Developers are encouraged to use &lt;strong&gt;alternative API providers&lt;/strong&gt; that support up to &lt;strong&gt;262K context&lt;/strong&gt; and are &lt;strong&gt;3–4x cheaper&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔗 GitHub Repository
&lt;/h3&gt;

&lt;p&gt;The model and further resources are available here:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/QwenLM/Qwen3-Coder" rel="noopener noreferrer"&gt;https://github.com/QwenLM/Qwen3-Coder&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Qwen 3 Coder is a major step forward in open LLMs optimized for software development and tool interactions. While pricing may be high for some use cases, the availability of alternatives makes it flexible for research and production alike.&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Articles &amp;amp; Tutorials
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://css-tip.com/nth-child/" rel="noopener noreferrer"&gt;Dynamic nth-child() using sibling-index() and if()&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.builder.io/blog/figma-mcp-server" rel="noopener noreferrer"&gt;Design to Code with the Figma MCP Server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devtron.ai/blog/microservices-ci-cd-best-practices/" rel="noopener noreferrer"&gt;CI/CD Best Practices for Microservices Architecture&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://coralogix.com/blog/using-the-opentelemetry-operator-to-boost-your-observability/" rel="noopener noreferrer"&gt;Using the OpenTelemetry Operator to boost your observability&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.lorenstew.art/blog/always-architect-with-contraints" rel="noopener noreferrer"&gt;Architecting with Constraints: A Pragmatic Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.epicreact.dev/react-server-components-how-we-got-here-zcuxn" rel="noopener noreferrer"&gt;React Server Components: How We Got Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freecodecamp.org/news/how-to-upload-large-objects-to-s3-with-aws-cli-multipart-upload/" rel="noopener noreferrer"&gt;How to Upload Large Objects to S3 with AWS CLI Multipart Upload&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.totaltypescript.com/how-to-create-an-npm-package" rel="noopener noreferrer"&gt;How To Create An NPM Package&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.docker.com/blog/leveraging-docker-with-tensorflow/" rel="noopener noreferrer"&gt;Leveraging Docker with TensorFlow Models &amp;amp; TensorFlow.js for a Snake AI Game&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://css-tricks.com/the-gap-strikes-back-now-stylable/" rel="noopener noreferrer"&gt;The Gap Strikes Back: Now Stylable&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.taekim.dev/writing/parsing-1b-rows-in-bun" rel="noopener noreferrer"&gt;Parsing 1 Billion Rows in Bun/Typescript Under 10 Seconds&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://frontendmasters.com/blog/liquid-glass-on-the-web/" rel="noopener noreferrer"&gt;Liquid Glass on the Web&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://una.im/scroll-target-group/" rel="noopener noreferrer"&gt;Creating a scroll-spy with 2 lines of CSS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cthiriet.com/blog/nano-claude-code" rel="noopener noreferrer"&gt;A Full Code Agent in 200 Lines—Here’s How&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://prismic.io/blog/tailwind-css-grid" rel="noopener noreferrer"&gt;Tailwind CSS Grid: Complete Guide &amp;amp; Examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/calendar-table-sql/" rel="noopener noreferrer"&gt;Howto Generate a Calendar Table in SQL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/react-19-hydration-guide/" rel="noopener noreferrer"&gt;Hydration in React 19: Smarter, Faster, and Fully Optimized&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/git-time-saving-commands/" rel="noopener noreferrer"&gt;Git Smarter: 7 Essential Commands Every Dev Should Know&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚒️ Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/OpenCut-app/OpenCut" rel="noopener noreferrer"&gt;OpenCut&lt;/a&gt; - Cap-Cut's open-source alternative&lt;/p&gt;

&lt;p&gt;&lt;a href="https://filepursuit.com/" rel="noopener noreferrer"&gt;FilePursuit&lt;/a&gt; -  is a free search tool for finding files online—documents, APKs, ZIPs, images, videos, books, and PDFs—scanned directly from public sources.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://patterncraft.fun/" rel="noopener noreferrer"&gt;Craft Beautiful Patterns Backgrounds&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://canine.sh" rel="noopener noreferrer"&gt;Canine&lt;/a&gt; - A modern, open source alternative to Heroku&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.jsv9000.app/" rel="noopener noreferrer"&gt;JavaScript Visualizer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/a-h-abid/docker-commons" rel="noopener noreferrer"&gt;docker-commons&lt;/a&gt; - All common docker scripts in one place&lt;/p&gt;

&lt;p&gt;&lt;a href="https://picossg.dev/" rel="noopener noreferrer"&gt;PicoSSG&lt;/a&gt; - The anti-framework static site generator. No config. No nonsense Just files in, files out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/stan-smith/FossFLOW" rel="noopener noreferrer"&gt;FossFLOW&lt;/a&gt; - Make beautiful isometric infrastructure diagrams&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/chatwoot/chatwoot" rel="noopener noreferrer"&gt;Chatwoot&lt;/a&gt; - An Open Source Zendesk Alternative&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sheshbabu/zen" rel="noopener noreferrer"&gt;zen&lt;/a&gt; - Selfhosted notes app. Single golang binary, notes stored as markdown within SQLite, full-text search, very low resource usage&lt;/p&gt;

&lt;p&gt;&lt;a href="https://layout.bradwoods.io/" rel="noopener noreferrer"&gt;CSS Layout Generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.browseros.com/" rel="noopener noreferrer"&gt;The Open-Source Agentic Browser&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://svgdoodles.com/" rel="noopener noreferrer"&gt;SVG Doodles Collection&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Libs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/f/awesome-chatgpt-prompts" rel="noopener noreferrer"&gt;awesome-chatgpt-prompts&lt;/a&gt; - This repo includes ChatGPT prompt curation to use ChatGPT and other LLM tools better.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/apexcharts/apexcharts.js" rel="noopener noreferrer"&gt;apexcharts.js&lt;/a&gt; - 📊 Interactive JavaScript Charts built on SVG&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/xiangechen/chili3d" rel="noopener noreferrer"&gt;chili3d&lt;/a&gt; - A web-based 3D CAD application for online model design and editing&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dahlia/upyo" rel="noopener noreferrer"&gt;upyo&lt;/a&gt; - Upyo is a simple and cross-runtime library for sending email messages using SMTP and various email providers. It works on Node.js, Deno, Bun, and edge functions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mapbox/concaveman" rel="noopener noreferrer"&gt;concaveman&lt;/a&gt; - A very fast 2D concave hull algorithm in JavaScript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/VIDA-NYU/reprozip" rel="noopener noreferrer"&gt;ReproZip&lt;/a&gt; - is a tool that simplifies the process of creating reproducible experiments from command-line executions, a frequently-used common denominator in computational science. &lt;/p&gt;

&lt;h2&gt;
  
  
  ⌚ Releases
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nextjs.org/blog/next-15-4" rel="noopener noreferrer"&gt;Next.js 15.4 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://astro.build/blog/astro-5120/" rel="noopener noreferrer"&gt;Astro 5.12&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rustdesk/rustdesk/releases/tag/1.4.1" rel="noopener noreferrer"&gt;RustDesk 1.4.1&lt;/a&gt; - a self-hosted open-source remote desktop app and TeamViewer alternative, was released in July 2025. Built with Rust and Dart, it's AGPL-licensed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sourcebot-dev/sourcebot/releases/tag/v4.6.0" rel="noopener noreferrer"&gt;Sourcebot v4.6.0 Released&lt;/a&gt; -  a self-hosted tool that helps you understand your codebase. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://pixieditor.net/blog/2025/07/30/20-release/" rel="noopener noreferrer"&gt;PixiEditor 2.0 - a FOSS Universal 2D Graphics Editor is here!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nuxt.com/blog/v4" rel="noopener noreferrer"&gt;Announcing Nuxt 4.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bun.com/blog/bun-v1.2.19" rel="noopener noreferrer"&gt;Bun v1.2.19 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tiptap.dev/docs/resources/whats-new" rel="noopener noreferrer"&gt;Tiptap V3 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/openpgpjs/openpgpjs/releases/tag/v6.2.0" rel="noopener noreferrer"&gt;openpgpjs v6.2.0 Released&lt;/a&gt; - OpenPGP implementation for JavaScript&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eslint.org/blog/2025/07/eslint-v9.31.0-released/" rel="noopener noreferrer"&gt;ESLint v9.31.0 released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/oxc-project/oxc/releases/tag/oxlint_v1.8.0" rel="noopener noreferrer"&gt;oxlint v1.8.0&lt;/a&gt; - ⚓ A collection of JavaScript tools written in Rust.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/wasp-lang/wasp/releases/tag/v0.17.0" rel="noopener noreferrer"&gt;wasp v0.17.0&lt;/a&gt; - The fastest way to develop full-stack web apps with React &amp;amp; Node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  📺 Videos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=G5djZjdxVvo" rel="noopener noreferrer"&gt;How I Built a Web Scraping AI Agent - Use AI To Scrape ANYTHING&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=yTFC_MvwJvQ" rel="noopener noreferrer"&gt;99% of Developers Don't Get Git Rebase&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=PNhq_4d-5ek" rel="noopener noreferrer"&gt;Bash Scripting Tutorial for Beginners&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ZSxo77jJBz4" rel="noopener noreferrer"&gt;How n8n Node Can Cut Your Costs by 90%&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=q3HE1dFiJBI" rel="noopener noreferrer"&gt;React Native Bootcamp in 30 HOURS for FREE 🎉&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=2NV1w1m9cTY" rel="noopener noreferrer"&gt;How I Built My Own Shadcn Library&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Yqi9wINTcf4" rel="noopener noreferrer"&gt;10x Your Neovim Experience&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=9bhNdw3fmQM" rel="noopener noreferrer"&gt;Build A Sick AI-Voice Memo App W/ Next.js + OpenAI Whisper (Background Jobs / Cron Job / Inngest)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=tBObk72EYYw" rel="noopener noreferrer"&gt;Build and Deploy a Full Stack Car Rental Booking App using React js &amp;amp; ImageKit | MERN Stack Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=iYOz165wGkQ" rel="noopener noreferrer"&gt;Build an Enterprise Ready AI Powered Applicant Tracking System&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=PtcQwb1uBhc" rel="noopener noreferrer"&gt;DON'T Use JSON.parse &amp;amp; JSON.stringify&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Wr2fOM_xD2I" rel="noopener noreferrer"&gt;Introducing React Native Reanimated 4&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎤 Talks &amp;amp; Podcasts
&lt;/h2&gt;

&lt;p&gt;No content this week 😢&lt;/p&gt;

&lt;h2&gt;
  
  
  🗞️ News &amp;amp; Updates
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot has surpassed 20 million users, Microsoft CEO Satya Nadella &lt;a href="https://www.microsoft.com/en-us/Investor/earnings/FY-2025-Q4/press-release-webcast" rel="noopener noreferrer"&gt;announced&lt;/a&gt;. GitHub confirmed the number reflects total usage to date.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bloomberg.com/news/articles/2025-07-29/figma-s-1-2-billion-ipo-approaching-40-times-oversubscribed?embedded-checkout=true" rel="noopener noreferrer"&gt;Figma raised $1.2B&lt;/a&gt; in its IPO, selling 36.9M shares at $33 each—above range. The company is now valued at $16.1B ($18.5B with options), nearing its scrapped Adobe deal.&lt;/p&gt;

&lt;p&gt;Thanks for reading this week’s roundup!&lt;br&gt;
We’ll be back next Friday with more handpicked JS content. Until then, keep experimenting, stay curious, and build cool things. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>Say Goodbye to Try/Catch Blocks with the ECMAScript ?= Operator</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Tue, 10 Jun 2025 02:57:28 +0000</pubDate>
      <link>https://dev.to/jsdevspace/say-goodbye-to-trycatch-blocks-with-the-ecmascript-operator-mog</link>
      <guid>https://dev.to/jsdevspace/say-goodbye-to-trycatch-blocks-with-the-ecmascript-operator-mog</guid>
      <description>&lt;p&gt;The ECMAScript proposal for the safe assignment operator &lt;code&gt;(?=)&lt;/code&gt; introduces a revolutionary way to handle errors in JavaScript. It borrows ideas from Rust, Go, and Swift—languages known for their clean error-handling patterns—and brings those benefits to JS developers.&lt;/p&gt;

&lt;p&gt;Instead of wrapping every async call in &lt;code&gt;try/catch&lt;/code&gt; blocks or nesting error-prone logic, &lt;code&gt;?=&lt;/code&gt; offers a clean, tuple-based alternative that promotes readability, consistency, and safety.&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%2Fq0tlypi7bfrt073qvd1k.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%2Fq0tlypi7bfrt073qvd1k.png" alt="the ECMAScript ?= Operator" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Traditional &lt;code&gt;try/catch&lt;/code&gt; Gets Messy
&lt;/h2&gt;

&lt;p&gt;JavaScript's try/catch can clutter your logic, especially when multiple async operations are involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❌ Without &lt;code&gt;?=&lt;/code&gt;: Deep Nesting
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function fetchData() {
  try {
    const res = await fetch("https://api.example.com/data");
    try {
      const json = await res.json();
      return json;
    } catch (parseError) {
      console.error("Failed to parse JSON:", parseError);
    }
  } catch (networkError) {
    console.error("Network error:", networkError);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✅ With ?=: Simpler Error Handling
&lt;/h2&gt;

&lt;p&gt;The safe assignment operator turns any async result into a destructurable tuple: &lt;code&gt;[error, value]&lt;/code&gt;. This makes code linear and easy to follow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function fetchData() {
  const [networkError, response] ?= await fetch("https://api.example.com/data");
  if (networkError) return console.error("Network error:", networkError);

  const [parseError, data] ?= await response.json();
  if (parseError) return console.error("Failed to parse JSON:", parseError);

  return data;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔍 How It Works: The Power of &lt;code&gt;Symbol.result&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The magic behind &lt;code&gt;?=&lt;/code&gt; lies in a special method: &lt;code&gt;Symbol.result&lt;/code&gt;. If an object implements it, that object can define how to unpack into [&lt;code&gt;error, result&lt;/code&gt;].&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function simulateFailure() {
  return {
    [Symbol.result]() {
      return [new Error("Oops! Something went wrong."), null];
    },
  };
}

const [err, value] ?= simulateFailure();
if (err) console.error(err.message); // "Oops! Something went wrong."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This provides the flexibility to adapt your own APIs or error-handling mechanisms.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 Real-World Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Example 1: Async File Read with Error Handling
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { readFile } from "fs/promises";

async function readJson(path) {
  const [readErr, data] ?= await readFile(path, "utf-8");
  if (readErr) return console.error("Failed to read file:", readErr);

  const [parseErr, json] ?= JSON.parse(data);
  if (parseErr) return console.error("Invalid JSON:", parseErr);

  return json;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 2: Custom Result Wrapper for APIs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function safeFetch(url) {
  return {
    async [Symbol.result]() {
      try {
        const res = await fetch(url);
        const json = await res.json();
        return [null, json];
      } catch (e) {
        return [e, null];
      }
    },
  };
}

const [error, result] ?= await safeFetch("/api/data");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example 3: Using with Resource Cleanup (&lt;code&gt;using&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await using [err, connection] ?= await openDatabaseConnection();
if (err) throw err;

const [qErr, results] ?= await connection.query("SELECT * FROM users");
if (qErr) throw qErr;

return results;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;using&lt;/code&gt; statement ensures &lt;code&gt;connection&lt;/code&gt; is disposed of properly, regardless of errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Benefits of the ?= Operator
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Improves readability&lt;/strong&gt;: Keeps logic flat and linear.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Encourages consistency&lt;/strong&gt;: Same error pattern across your codebase.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Safer execution&lt;/strong&gt;: Catches every error without missed edge cases.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Adaptable to any API&lt;/strong&gt;: Works with &lt;code&gt;Symbol.result&lt;/code&gt; for full control.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Better DX&lt;/strong&gt;: Cleaner logs, simpler testing, easier debugging.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚫 Current Limitations
&lt;/h2&gt;

&lt;p&gt;The proposal is still experimental and not available in all JavaScript runtimes. Other considerations:&lt;/p&gt;

&lt;p&gt;-🔸 &lt;strong&gt;Polyfills not possible&lt;/strong&gt;: Since it's syntax, it can't be polyfilled directly.&lt;br&gt;
-🔸 &lt;strong&gt;Tooling required&lt;/strong&gt;: You’ll need a custom Babel/TypeScript transform or postprocessor.&lt;br&gt;
-🔸 &lt;strong&gt;No finally support&lt;/strong&gt;: You’ll still need &lt;code&gt;try/finally&lt;/code&gt; for cleanup logic.&lt;/p&gt;
&lt;h2&gt;
  
  
  🚀 Bonus: Emulating &lt;code&gt;?=&lt;/code&gt; in Today's JavaScript
&lt;/h2&gt;

&lt;p&gt;If you want to try it today, you can emulate the behavior like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;safe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fn&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="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;safe&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;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔮 Future Directions
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;?=&lt;/code&gt; operator has the potential to reshape our understanding of control flow in JavaScript. Inspired by Go's &lt;code&gt;err, val := fn()&lt;/code&gt; and Rust’s &lt;code&gt;Result&lt;/code&gt;, it bridges the gap between expressive syntax and safe semantics.&lt;/p&gt;

&lt;p&gt;As the proposal matures, expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better integration with async resource handling (&lt;code&gt;using&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Enhanced developer tooling&lt;/li&gt;
&lt;li&gt;Wider runtime support in Node.js and browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔗 Relevant Links
&lt;/h2&gt;

&lt;p&gt;Here are some helpful resources to deepen your understanding of the &lt;code&gt;?=&lt;/code&gt; operator and related error-handling improvements in JavaScript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔍 &lt;a href="https://jsdev.space/safe-assignment-operator/" rel="noopener noreferrer"&gt;The Safe Assignment Operator (?=) Explained&lt;/a&gt; – A deep dive into the proposal, use cases, and current status&lt;/li&gt;
&lt;li&gt;🧪 &lt;a href="https://github.com/tc39/proposal-explicit-resource-management" rel="noopener noreferrer"&gt;The Official TC39 Proposal for ?=&lt;/a&gt; – Follow the formal evolution of the feature&lt;/li&gt;
&lt;li&gt;🛠️ &lt;a href="https://tc39.es/process-document/" rel="noopener noreferrer"&gt;ECMAScript Proposal Stages&lt;/a&gt; – Learn about the process every feature goes through&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📘 Summary
&lt;/h2&gt;

&lt;p&gt;The safe assignment operator &lt;code&gt;?=&lt;/code&gt; helps you write cleaner, more reliable JavaScript. With it, you can eliminate deeply nested try/catch blocks, unify your error-handling approach, and write code that’s both safer and more readable.&lt;/p&gt;

&lt;p&gt;It's still early days, but this is a feature worth watching—and experimenting with—today.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How TypeScript Infers Generic Types Automatically — and Why It Matters</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Fri, 02 May 2025 14:17:04 +0000</pubDate>
      <link>https://dev.to/jsdevspace/how-typescript-infers-generic-types-automatically-and-why-it-matters-4079</link>
      <guid>https://dev.to/jsdevspace/how-typescript-infers-generic-types-automatically-and-why-it-matters-4079</guid>
      <description>&lt;p&gt;This article explains how type inference works in practice, using a real-world utility function designed for API calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What Is Type Inference?
&lt;/h2&gt;

&lt;p&gt;Type inference allows TypeScript to deduce types from context, eliminating the need for explicit annotations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic Examples&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let score = 100;           // Inferred as number
const nickname = "Nova";  // Inferred as string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ypeScript looks at the assigned values and infers the correct types — even without annotations.&lt;/p&gt;

&lt;p&gt;But the true power of inference emerges when generics and higher-order functions come into play.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Automatic Inference in Generic Functions
&lt;/h2&gt;

&lt;p&gt;Consider a function that wraps any API call returning a Blob, such as a file download:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type ApiMethod&amp;lt;TArgs&amp;gt; = (args: TArgs) =&amp;gt; Promise&amp;lt;Blob&amp;gt;;

export function createDownloader&amp;lt;TArgs&amp;gt;(apiMethod: ApiMethod&amp;lt;TArgs&amp;gt;) {
  return (args: TArgs) =&amp;gt; {
    apiMethod(args).then(saveFileLocally);
  };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Here's how inference works in practice:
&lt;/h3&gt;

&lt;p&gt;✅ &lt;strong&gt;TypeScript infers the generic type &lt;code&gt;TArgs&lt;/code&gt; from the passed function&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;createDownloader(api.downloadPdf)({
  filters: { startDate: "2025-01-01", endDate: "2025-01-31" },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When &lt;code&gt;createDownloader&lt;/code&gt; is called, TypeScript:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inspects the parameter type of &lt;code&gt;api.downloadPdf&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Infers that it accepts an object with a &lt;code&gt;filters&lt;/code&gt; property&lt;/li&gt;
&lt;li&gt;Substitutes that structure as &lt;code&gt;TArgs&lt;/code&gt; — without requiring manual typing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ &lt;strong&gt;Argument validation is enforced at compile time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Passing incorrect arguments immediately triggers a type error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;createDownloader(api.downloadPdf)({
  wrongField: "2025-01-01", // ❌ Error: Object literal may only specify known properties
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🧠 &lt;strong&gt;Inferred types persist in the returned function&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even the inner anonymous function maintains strong typing. Wherever it's used, the developer gets autocomplete, validation, and type safety — for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Why This Pattern Is So Useful
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;Less Boilerplate&lt;/strong&gt;&lt;br&gt;
There's no need to write extra type declarations — TypeScript handles everything automatically.&lt;/p&gt;

&lt;p&gt;🔒 &lt;strong&gt;Strong Type Safety&lt;/strong&gt;&lt;br&gt;
If the shape of the API changes (e.g., renaming a field), all usages break immediately, catching bugs at compile time.&lt;/p&gt;

&lt;p&gt;🔁 &lt;strong&gt;Reusability&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;createDownloader&lt;/code&gt; function can be reused across many API endpoints, as long as they return a &lt;code&gt;Blob&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Other Use Cases for Generic Inference
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;a) Generic API Utility Functions&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function makeRequest&amp;lt;TResult, TInput&amp;gt;(fetcher: (input: TInput) =&amp;gt; Promise&amp;lt;TResult&amp;gt;) {
  return (input: TInput) =&amp;gt; fetcher(input);
}

const fetchUser = makeRequest(api.getUser); // TInput is inferred
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;b) Typed React Hooks&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function useFetch&amp;lt;T&amp;gt;(url: string) {
  const [data, setData] = useState&amp;lt;T | null&amp;gt;(null);
  // ...
}

const { data } = useFetch&amp;lt;User[]&amp;gt;("/api/users");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TypeScript infers &lt;code&gt;T&lt;/code&gt; from the expected response format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;c) Form Submission Handlers&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function createSubmitHandler&amp;lt;TForm&amp;gt;(onSubmit: (values: TForm) =&amp;gt; void) {
  return (values: TForm) =&amp;gt; onSubmit(values);
}

const handleProfileForm = createSubmitHandler(api.submitProfileForm);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Where Inference Might Not Work
&lt;/h2&gt;

&lt;p&gt;TypeScript isn’t always able to infer complex or overloaded types. Here are two examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❗ Complex Nested Generics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In deeply nested or conditional types, inference may fail, and you'll need to provide the generic explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;createDownloader&amp;lt;CustomDownloadParams&amp;gt;(api.customDownload);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;❗ Function Overloads&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Overloaded functions can confuse the type system. In those cases, manual annotations are often necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Automatic type inference is one of TypeScript’s most powerful and underappreciated features — especially in generics. The createDownloader example demonstrates how TypeScript can seamlessly infer argument types, enforce correctness, and maintain type safety throughout the function chain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Trust inference as your default.&lt;/li&gt;
&lt;li&gt;Add explicit types only when TypeScript needs help.&lt;/li&gt;
&lt;li&gt;Use this pattern to write reusable, clean utilities with zero boilerplate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building API layers, React hooks, or utility wrappers — leverage TypeScript's inference. You’ll write less code, avoid bugs, and move faster. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>typescript</category>
      <category>frontend</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Mastering Timers in React: A Comprehensive Developer's Guide</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Tue, 18 Mar 2025 00:00:58 +0000</pubDate>
      <link>https://dev.to/jsdevspace/mastering-timers-in-react-a-comprehensive-developers-guide-462p</link>
      <guid>https://dev.to/jsdevspace/mastering-timers-in-react-a-comprehensive-developers-guide-462p</guid>
      <description>&lt;p&gt;Timers in React can be tricky if you don’t consider key nuances. Let's explore how to properly use timers, avoid memory leaks and closure issues, and examine best practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Principles of Working with Timers
&lt;/h2&gt;

&lt;p&gt;When working with timers in React, it's essential to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cleaning up resources when a component unmounts.&lt;/li&gt;
&lt;li&gt;Handling closures correctly.&lt;/li&gt;
&lt;li&gt;Managing component state changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why &lt;code&gt;useEffect&lt;/code&gt; and &lt;code&gt;useRef&lt;/code&gt; Are Important for Timers
&lt;/h2&gt;

&lt;p&gt;The combination of &lt;code&gt;useEffect&lt;/code&gt; and &lt;code&gt;useRef&lt;/code&gt; solves critical issues that arise in naive timer implementations.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Role of &lt;code&gt;useEffect&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;useEffect&lt;/code&gt; manages the timer’s lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates a new interval when the component mounts or dependencies change.&lt;/li&gt;
&lt;li&gt;Ensures the interval is cleared when dependencies change or the component unmounts, preventing duplicate timers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Power of &lt;code&gt;useRef&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;useRef&lt;/code&gt; serves two key functions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stores the interval ID for later cleanup.&lt;/li&gt;
&lt;li&gt;Ensures access to the latest version of the callback function, preventing closure-related issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementing a Custom &lt;code&gt;useInterval&lt;/code&gt; Hook
&lt;/h2&gt;

&lt;p&gt;Here's an implementation of a universal interval with pause and resume functionality:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useEffect, useRef, useState } from 'react';

export const useInterval = (callback: () =&amp;gt; void, interval = 1000) =&amp;gt; {
  const [active, setActive] = useState(true);
  const intervalIdRef = useRef&amp;lt;ReturnType&amp;lt;typeof setInterval&amp;gt;&amp;gt;();
  const callbackRef = useRef(callback);

  // Update the reference to the latest callback
  useEffect(() =&amp;gt; {
    callbackRef.current = callback;
  }, [callback]);

  useEffect(() =&amp;gt; {
    if (!active) return;

    intervalIdRef.current = setInterval(() =&amp;gt; callbackRef.current(), interval);

    return () =&amp;gt; clearInterval(intervalIdRef.current);
  }, [active, interval]);

  return {
    active,
    pause: () =&amp;gt; setActive(false),
    resume: () =&amp;gt; setActive(true),
    toggle: () =&amp;gt; setActive(prev =&amp;gt; !prev)
  };
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Code Breakdown
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keeping the callback updated&lt;/strong&gt;: &lt;code&gt;useRef&lt;/code&gt; stores the function reference, avoiding closure issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controlling the timer state&lt;/strong&gt;: &lt;code&gt;active&lt;/code&gt; manages whether the interval is running or paused.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleaning up the interval&lt;/strong&gt;: &lt;code&gt;useEffect&lt;/code&gt; ensures &lt;code&gt;clearInterval(intervalIdRef.current);&lt;/code&gt; prevents memory leaks.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Alternative Timer Implementations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  One-Time Timer with &lt;code&gt;useTimeout&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;For a timer that executes only once, use &lt;code&gt;useTimeout&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useEffect, useRef } from 'react';

export const useTimeout = (callback: () =&amp;gt; void, delay: number) =&amp;gt; {
  const callbackRef = useRef(callback);

  useEffect(() =&amp;gt; {
    callbackRef.current = callback;
  }, [callback]);

  useEffect(() =&amp;gt; {
    const timer = setTimeout(() =&amp;gt; callbackRef.current(), delay);
    return () =&amp;gt; clearTimeout(timer);
  }, [delay]);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Timers in React require a thoughtful approach: managing their lifecycle, handling closures, and preventing memory leaks. Use &lt;code&gt;useRef&lt;/code&gt; and &lt;code&gt;useEffect&lt;/code&gt; for robust timer functionality, and for complex scenarios, consider well-tested libraries that provide optimized timer management.&lt;/p&gt;

&lt;p&gt;For further insights on JavaScript timer management, check out &lt;a href="https://jsdev.space/js-timer-management/" rel="noopener noreferrer"&gt;this guide&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>JavaScript Weekly: Top Links for March 7, 2025</title>
      <dc:creator>JSDev Space</dc:creator>
      <pubDate>Fri, 07 Mar 2025 13:49:52 +0000</pubDate>
      <link>https://dev.to/jsdevspace/javascript-weekly-top-links-for-march-7-2025-4oo3</link>
      <guid>https://dev.to/jsdevspace/javascript-weekly-top-links-for-march-7-2025-4oo3</guid>
      <description>&lt;p&gt;Welcome to your JavaScript Weekly Roundup! As we approach mid-March, the JavaScript ecosystem continues to evolve with exciting new tools and techniques. This week's collection features breakthrough libraries, time-saving development tips, and thought-provoking articles that will enhance your coding workflow and keep you informed on the latest trends.&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Articles &amp;amp; Tutorials
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ramda.js: Enhancing Array and Object Operations in JavaScript
&lt;/h3&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%2Fjd4y6mbkd41lgjyoycnk.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%2Fjd4y6mbkd41lgjyoycnk.png" alt="Ramda.js" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ramdajs.com/" rel="noopener noreferrer"&gt;Ramda.js&lt;/a&gt; is a powerful functional programming library for JavaScript. Unlike Lodash, it focuses on code purity, supports currying, and ensures data immutability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Currying&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Allows calling functions step by step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ramda&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;add&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Function Composition&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Replaces &lt;code&gt;.map().filter().reduce()&lt;/code&gt; chains with more readable code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;normalizeNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLower&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&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;&lt;strong&gt;Working with APIs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Filtering active users and normalizing their names:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;processUsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;propEq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;'&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="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toLower&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;&lt;strong&gt;Objects: assoc, dissoc, evolve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modify objects without mutations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&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="mi"&gt;1&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&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;updatedUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assoc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status&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="s1"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&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;withoutAge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dissoc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;age&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;updatedUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Data Grouping&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;groupedOrders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;R&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  When is Ramda Not Needed?
&lt;/h3&gt;

&lt;p&gt;For simple operations, standard methods like map, filter, and reduce are often more convenient. Ramda is beneficial for complex transformations, ensuring immutability, and writing declarative code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.allanfernandes.dev/blog/build-your-own-chrome-extension" rel="noopener noreferrer"&gt;Build your own chrome extension&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://techhub.iodigital.com/articles/frontend-automation-with-github-actions-and-aws" rel="noopener noreferrer"&gt;Frontend Automation with Github Actions and AWS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.syncfusion.com/blogs/post/load-save-image-in-react-image-editor" rel="noopener noreferrer"&gt;React Image Editor: Load and Save Images from a Database Easily&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/advanced-type-tricks/" rel="noopener noreferrer"&gt;Navigating TypeScript's Type System: 24 Brilliant Advanced Techniques&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/mastering-redux/" rel="noopener noreferrer"&gt;Understanding the Redux Ecosystem: From Concept to Implementation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.appsignal.com/2025/01/22/fuzz-testing-rest-apis-in-nodejs.html" rel="noopener noreferrer"&gt;Fuzz Testing REST APIs in Node.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://css-tricks.com/a-css-only-star-rating-component-and-more-part-1/" rel="noopener noreferrer"&gt;A CSS-Only Star Rating Component and More!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.angular.dev/micro-frontends-with-angular-and-native-federation-7623cfc5f413" rel="noopener noreferrer"&gt;Micro Frontends with Angular and Native Federation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/combine-two-nodes/" rel="noopener noreferrer"&gt;How to Combine Two Nodes into One&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/mastering-js-closures/" rel="noopener noreferrer"&gt;How to Master JavaScript Closures: Theory, Practice, and Examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsdev.space/howto/implement-hash-history/" rel="noopener noreferrer"&gt;How to Implement Routing with Hash and History API in JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://neon.tech/blog/building-a-vscode-chat-extension-to-order-lunch" rel="noopener noreferrer"&gt;Building a VSCode Chat Extension to Order Lunch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tropicolx.hashnode.dev/building-a-telegram-clone-with-nextjs-and-tailwindcss-part-one" rel="noopener noreferrer"&gt;Building a Telegram Clone with Next.js and TailwindCSS - Part One&lt;/a&gt;, &lt;a href="https://tropicolx.hashnode.dev/building-a-telegram-clone-with-nextjs-and-tailwindcss-part-two" rel="noopener noreferrer"&gt;two&lt;/a&gt;, &lt;a href="https://tropicolx.hashnode.dev/building-a-telegram-clone-with-nextjs-and-tailwindcss-part-three" rel="noopener noreferrer"&gt;three&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚒️ Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://zippystarter.com/tools/shadcn-ui-theme-generator" rel="noopener noreferrer"&gt;shadcn UI theme generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://modern-fluid-typography.vercel.app/" rel="noopener noreferrer"&gt;Modern fluid typography editor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/trycua/lume" rel="noopener noreferrer"&gt;lume&lt;/a&gt;: A lightweight CLI and local API server to create, run and manage macOS and Linux virtual machines (VMs) natively on Apple Silicon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/agno-agi/agno" rel="noopener noreferrer"&gt;Agno&lt;/a&gt;: A lightweight library for building Multimodal Agents with memory, knowledge and tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ricochet-im/ricochet" rel="noopener noreferrer"&gt;ricochet&lt;/a&gt;: A peer-to-peer instant messaging system built on Tor hidden services.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Libs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/usertour/usertour" rel="noopener noreferrer"&gt;Usertour&lt;/a&gt;: An alternative to: Appcues, Userpilot, Userflow, userguiding, Chameleon , Etc...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/algora-io/tv" rel="noopener noreferrer"&gt;Algora TV&lt;/a&gt;: A React component to embed a live streaming video player.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/SendWithSES/Drag-and-Drop-Email-Designer" rel="noopener noreferrer"&gt;Drag-and-Drop-Email-Designer&lt;/a&gt;: A drag and drop email designer for SES.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/pruvious/pruvious/tree/v4" rel="noopener noreferrer"&gt;Pruvious&lt;/a&gt;: A reliable CMS for your Nuxt app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/webjsx/webjsx" rel="noopener noreferrer"&gt;webjsx&lt;/a&gt;: A library for building web applications with JSX and Web Components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Goldziher/kreuzberg" rel="noopener noreferrer"&gt;kreuzberg&lt;/a&gt;: A text extraction library supporting PDFs, images, office documents and more&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/yousboot/Memory" rel="noopener noreferrer"&gt;Memory&lt;/a&gt;: A self-hosted editor and note taking app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/NifrasUsanar/InfoShop" rel="noopener noreferrer"&gt;InfoShop&lt;/a&gt;: Free and open source laravel + Inertia JS (React JS) Point of Sale platform&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tofast-png"&gt;fast-png&lt;/a&gt;:PNG image decoder and encoder written entirely in JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mercurius-js/mercurius" rel="noopener noreferrer"&gt;mercurius&lt;/a&gt;: A GraphQL HTTP Server for Fastify with TypeScript and hooks support.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⌚ Releases
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://vercel.com/blog/ai-sdk-4-1" rel="noopener noreferrer"&gt;AI SDK 4.1&lt;/a&gt;: Vercel AI SDK 4.1 is out with new features and improvements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nextjs.org/blog/next-15-2" rel="noopener noreferrer"&gt;Next.js 15.2 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://astro.build/blog/astro-540/" rel="noopener noreferrer"&gt;Astro 5.4&lt;/a&gt;: Astro 5.4 is out with new features and improvements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bun.sh/blog/bun-v1.2.3" rel="noopener noreferrer"&gt;Bun v1.2.3 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eslint.org/blog/2025/02/eslint-v9.21.0-released/" rel="noopener noreferrer"&gt;ESLint v9.21.0 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/angular/angular/releases/tag/19.2.0" rel="noopener noreferrer"&gt;Angular v19.2 Released&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.emberjs.com/ember-released-6-2/" rel="noopener noreferrer"&gt;Ember 6.2 Released&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📺 Videos
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=mKIQZNKdU2w&amp;amp;t=915s" rel="noopener noreferrer"&gt;How To Setup Rich Text Editor In Next.js&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=8m-O_KiHRjk" rel="noopener noreferrer"&gt;Build your first MCP Server in TypeScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=OTP4hhX_xpM" rel="noopener noreferrer"&gt;New React Animation API Is Insane&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=bMqi1ujAgUc" rel="noopener noreferrer"&gt;The BEST UI Animation Library of 2025? 🤯 You NEED to See This!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=9DEvkYB5_A4" rel="noopener noreferrer"&gt;Using web sockets on Next.js | NO third party solution&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=w11cMyzKQ2A" rel="noopener noreferrer"&gt;CSS Clamp: Responsive design in one line&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=jHVDnbuB23k" rel="noopener noreferrer"&gt;Stream Video In React &amp;amp; Next.js OPTIMALLY (WebM, CDN, m3u8 / HLS / ABS, ImageKit)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=YxnxghkFqjI" rel="noopener noreferrer"&gt;How to create a Glassmorph Navbar (Next.js 15, Shadcn, Tailwind)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=wbj-DuaL748" rel="noopener noreferrer"&gt;The Ultimate React Native Course | Build Your First Mobile App in 2025&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=3EnathFYgz8" rel="noopener noreferrer"&gt;Fix Your Slow React App With React-Scan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=x2WtHZciC74" rel="noopener noreferrer"&gt;Claude 3.7 goes hard for programmers…&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=IUAk1pjXDWM" rel="noopener noreferrer"&gt;This one tool forever changed how I use Docker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ArmPzvHTcfQ" rel="noopener noreferrer"&gt;Ultimate Next 15 Course: Build a YouTube Clone (2025)&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎤 Talks &amp;amp; Podcasts
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://player.fm/series/javascript-jabber-130015/beyond-aesthetics-what-the-next-generation-of-frameworks-should-offer-jsj-670" rel="noopener noreferrer"&gt;Beyond Aesthetics: What the Next Generation of Frameworks Should Offer - JsJ_670&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.htmlallthethings.com/podcasts/ai-has-broken-the-web-developer-job-market-w-kent-c-dodds" rel="noopener noreferrer"&gt;AI Has Broken the Web Developer Job Market w/ Kent C. Dodds&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🗞️ News &amp;amp; Updates
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tailwindcss.com/blog/tailwind-plus" rel="noopener noreferrer"&gt;Tailwind UI is now Tailwind Plus&lt;/a&gt; - Tailwind UI is now Tailwind Plus, with new features and improvements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tanstack.com/blog/announcing-tanstack-form-v1" rel="noopener noreferrer"&gt;Announcing TanStack Form v1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for checking out this week's JavaScript roundup! We hope these resources help you build better applications and solve challenging problems. Join us next Friday when we'll be back with another curated selection of JavaScript excellence from around the web.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
