ESLint 10 is making moves

Issue #461.February 11, 2026.2 Minute read.
Bytes

Today’s issue: Open source freemasons, agents replacing frameworks, and the only slop that ever mattered.

Welcome to #461.


Eyeballs logo

The Main Thing

Carl Wheezer saying, I am straight up not having a baja blast

Joining a team that still uses the ESLint Airbnb config in 2026

ESLint 10 is making moves

You probably haven’t thought about ESLint for a while, but that doesn’t mean ESLint isn’t thinking about you 🧘‍♂️.

They just shipped v10.0.0 last week, and it’s a big, opinionated step forward for the OG JavaScript linter, with breaking changes that finally lock in the patterns it’s been slowly rolling out for years.

The biggest one is that eslintrc is now officially dead. ESLint has already been nudging developers toward its flat config system for a while because it’s more explicit and avoids a lot of the hidden magic for merging and inheritance that made large monorepos extra confusing. And in v10, the transition is complete.

This means that .eslintrc.* files, .eslintignore, legacy CLI flags, and /* eslint-env */ comments are no longer supported. There’s no opt-out and no environment variable to flip back. Flat config is the only path forward now.

Here are a few more key changes from v10:

  • Config lookup is smarter – ESLint now resolves config files starting from each linted file instead of the current working directory, which makes multi-package repos less chaotic.

  • JSX references are finally tracked correctly<Component /> now behaves like a real variable reference, eliminating long-standing false positives and false negatives in React projects. Hallelujah.

  • Built-in TypeScript types + stricter rule testing – Espree and ESLint Scope now ship their own type definitions, and RuleTester can now enforce message and location assertions so that tests don’t pass when they shouldn’t.

Bottom Line: When there was one set of footprints in my editor, that was ESLint dragging me to dead variable hell and back.


Eyeballs logo

The Main Thing

A Renaissance cherub looking confused and disappointed

Claude Code when I ask it to 'please just fix my auth' for the third time

”clerk/skills” gives your coding agent specialized Clerk auth knowledge

Clerk just launched clerk/skills – a new set of packages you can install with one command that teaches your coding agent how to use Clerk auth better: npx skills add clerk/skills

Once installed, you can hand off auth tasks to your agent and get far more accurate, Clerk-aware results. Stuff like:

  • “Add Clerk auth to my Next.js app”
  • “Build a custom sign-in form with email and password”
  • “Set up organizations for my B2B SaaS”
  • “Sync Clerk users to my Prisma database”

Learn more here or try it free with npx skills add clerk/skills.


Pop Quiz logo

Pop Quiz

Sponsored by Sentry

This article breaks down how Sentry’s Seer catches real bugs that could break production, instead of styling nits that just add noise.

Python has a range function that generates a sequence of numbers starting at the first argument, incrementing by the third argument, and stopping at the second argument.

range(0, 5) // [0, 1, 2, 3, 4, 5]
range(3, 9, 3) // [3, 6, 9]
range(10, 50, 10) // [10, 20, 30, 40, 50]

Cool Bits logo

Cool Bits

  1. Vouch is a new community trust management system, where trusted individuals can vouch for others, allowing them to contribute to a project. Like Freemasons, but for open source and with less secret handshakes (for now).

  2. Maxime Heckel wrote another beautiful article, this time about Shades of Halftone.

  3. Only idiots write manual tests – modern engineering teams like Notion, Dropbox and LaunchDarkly use Meticulous to maintain e2e UI tests that cover every edge case of your web app. [sponsored]

  4. bun v1.3.9 shipped bun run --parallel and --sequential, letting you run multiple package.json scripts concurrently or sequentially with Foreman-style prefixed output.

  5. Mitchell Hashimoto wrote about his AI adoption journey. As someone who’s been asking Mitchell to adopt me for years, it’s disappointing to see AI steal yet another dream away from me.

  6. Datadog created this free solution brief on How to adopt Shift-Left Testing, without any specialized tooling or training. [sponsored]

  7. Mathis Van Eetvelde wrote this guide to error handling in bash.

  8. Microsoft open-sourced LiteBox, a minimal sandboxing OS that maximizes security by shrinking the interface to the host.

  9. Dan Kelly from the Expo team broke down 5 tips to increase mobile app downloads and retention in 2026, so you can avoid the ASO mistakes that most indie developers make. [sponsored]

  10. Travels is a framework-agnostic undo/redo library that only stores changes (not full snapshots), making it significantly faster than traditional systems.

  11. Alain Di Chiappari wrote about how coding agents have replaced every framework he used, and why he’s surprisingly ok with it.

  12. WC3UI is a themeable component library inspired by the Warcraft III interface. Just let the nostalgia wash over you and take you back to a time where the only slop you worried about was for feeding the pig farms to power your orc army.


Pop Quiz logo

Pop Quiz: Answer

Sponsored by Sentry

range(0, 5) // [0, 1, 2, 3, 4, 5]
range(3, 9, 3) // [3, 6, 9]
range(10, 50, 10) // [10, 20, 30, 40, 50]

How would you recreate this in JavaScript? There are a few ways, one of them is the following.

const range = (start, stop, step=1) => {
  return Array.from(
    { length: (stop - start) / step + 1 },
    (value, i) => start + i * step
  )
}

The function uses Array.from() to generate an array of a specified length and fill it with values generated by the provided function. The length is calculated as (stop - start) / step + 1, which represents the number of elements in the desired range. The function passed to Array.from() generates each element by starting with start, adding an increment of i * step, where i is the index of the current element.