The Future of JavaScript

Issue #342.November 18, 2024.2 Minute read.
Bytes

Today’s issue: Scanning for problematic relatives renders, the React team squashes its beef with library maintainers, and Chrome DevRels threaten my identity (again).

Welcome to #342.


Eyeballs logo

The Main Thing

Tommy Pickles

it's pronounced "volt"

vlt is building the future of JS

Ever since getting contact high at an Allman Brothers reunion concert when I was 12, I’ve always been a little nervous when I hear people talk about “getting the band back together.”

But even I was intrigued when npm (pronounced “npm”) creator Isaac Schlueter announced back in March that he was reuniting the old npm team to start vlt – another VC-backed company with a 3-consonant name that’s building the future of JavaScript packages.

Fast forward to this month, and vlt (pronounced “volt”) just launched its first two products – the vlt package manager and a serverless package registry called vsr.

Let’s take a closer look at those, but first, we need to answer the question I know you’re too polite to ask: Why?

Well, if you’ve ever tried to perform lockfile surgery, you know that managing dependencies in JavaScript is somewhere between Dante’s 5th and 6th circles of hell. And when you add in supply chain attacks and the growing bloat of the JS ecosystem, it’s pretty clear we could use some better tools.

Thankfully, Isaac and the old npm crew are back to clean up the mess they kind of helped start. Here’s what they’ve launched so far:

The vlt package manager is compatible with npm, yarn, bun, and the rest of the ecosystem – but it can do more than just install packages. It comes with special tooling to query and visually inspect your dependencies in the browser.

The VSR serverless registry gives companies a way to distribute custom JavaScript packages securely. It comes with a CDN, proxies for other registries, and other stuff you’d probably expect, but the most interesting feature is granular access tokens.

That might sound like a boring enterprisey thing, but it gives you precise control over who can interact with your packages and how they do so. This means I can finally start selling tiered access to my left-pad clone.

Bottom Line: It’s still early days for vlt, but it’s exciting to see another solid team working to clean up the JS package ecosystem.

        

QA Wolf logo

Our Friends
(With Benefits)

Woody from Toy Story looking sad at his computer

Me seeing bugs in prod after paying an outsourced QA team thousands of dollars to stop bugs from reaching prod.

QA Wolf is the best way to get E2E test coverage

But how do they compare to other outsourced QA companies?

A lot better, it turns out. That’s because they don’t just hire a bunch of contractors to do some basic QA work – they provide a full technology platform that helps you catch more errors, speed up QA cycles, and more:

  • Most coverage per dollar – QA Wolf sells complete coverage, not labor hours. So every dollar goes to running tests, not hours worked.

  • 5x faster impact – their AI-native platform allows them to create, maintain, and run Playwright tests 5x faster than anyone else.

  • Proven results – 92% of their customers release faster, 90% of them eliminate post-release hot fixes, and 85% increase revenue (see case studies).

Set up a personalized demo – and see why enterprises like Mailchimp and Drata trust QA Wolf.


Pop Quiz logo

Pop Quiz

Sponsored by bolt.new

Build fully functional applications in minutes, not months

function p1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => reject("Error in p1"), 1000);
  }).catch((error) => {
    console.error(error);
  })
}

function p2() {
  return new Promise((resolve) => {
    setTimeout(() => resolve("p2 resolved"), 1000);
  });
}

function pAll() {
  Promise.all([p2(), p1()])
    .then((results) => {
      console.log("All data resolved:", results);
    })
    .catch((error) => {
      console.error("Error resolving data:", error);
    });
}

pAll();

Cool Bits logo

Cool Bits

  1. The Million team just released React Scan, which scans your React app for problematic renders and highlights the exact components you need to fix.

  2. Lucas Unietis is hosting a live Retool demo where you’ll build a custom client portal in 30 minutes. You’ll walk away with a functional, end-to-end app that has a home screen for users, custom login pages and onboarding flows, and other slick features. [sponsored]

  3. Roman Komarov wrote about a new technique for fit-to-width text, which he describes as “hacky but possible.” Put that on my tombstone.

  4. Ryan Dahl and Andy Jiang wrote about how recent upgrades to deno compile allow you to compile complete applications directly to native binaries.

  5. React v19rc1 introduced a new sibling pre-rendering feature that settles the Suspense drama with library maintainers from earlier this year. And with that, TkDodo can finally rest.

  6. Shiki v1.23 comes with a few big updates for the powerful syntax highlighter, including a new JavaScript engine that supports more languages.

  7. Manifest describes itself as “a backend so simple that it fits in a single YAML file” – and yes, that does sound exactly like the punchline of a Yo’ Momma joke from 2006.

  8. Unlayer provides embeddable content creation tools for SaaS, so you can give your users a drag-n-drop builder to create emails, web pages, or popups. Teams at Netflix, Fidelity, and 1,000+ other companies use Unlayer to build content features faster, and save an average of 52% on dev and maintenance costs. [sponsored]

  9. Chrome DevRel lead, Paul Kinlan dared to ask the question, Will we care about frameworks in the future? If not, some of y’all are gonna need to adopt new personalities real quick.

  10. Anchoreum is a game for learning CSS anchor positioning where you work as a “volunteer” at the third-largest anchor museum in the world. But that’s not super realistic, since we all know it’s impossible to get an anchor museum internship without a glowing letter of recommendation from your local senator.


Pop Quiz logo

Pop Quiz: Answer

Sponsored by bolt.new

Build fully functional applications in minutes, not months

function p1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => reject("Error in p1"), 1000);
  }).catch((error) => {
    console.error(error);
  })
}

function p2() {
  return new Promise((resolve) => {
    setTimeout(() => resolve("p2 resolved"), 1000);
  });
}

function pAll() {
  Promise.all([p2(), p1()])
    .then((results) => {
      console.log("All data resolved:", results);
    })
    .catch((error) => {
      console.error("Error resolving data:", error);
    });
}

pAll();

First, Error in p1 is logged, then [ 'p2 resolved', undefined ] is logged. Since p1 catches the rejection, it doesn’t propagate to the Promise.all catch handler allowing p2 to resolve. But, since p1 doesn’t return anything, its result is undefined.