RSSAmplifier

Blog

Goldblog

A blog about open source, static analysis, and web dev.

joshuakgoldberg.comRSS feed ↗75 posts

Latest posts

Stepping Back from Open Source (Mostly)

Leaving most of my open source projects in security mode and/or with other maintainers.

2025 In Review

Looking back at the accomplishments and goals from my fourth and final year as a full-time independent open source maintainer.

2025 Finances In Review

Breaking down the income streams and totals from my fourth and final year as a full-time independent open source maintainer.

If I Wrote a Linter, Part 4: Summary

Summarizing the last three posts of ideas for a new linter, along with next steps for its Flint prototype.

If I Wrote a Linter, Part 3: Ecosystem

This is how I would steer a new ecosystem around a modern linter from scratch: emphasizing shared terminology, a plugin registry, and one-way compatibility layers.

If I Wrote a Linter, Part 2: Developer Experience

This is how I would tailor the developer experience for a modern linter from scratch: focusing on end-to-end type safety, self-apparent configs, and native workspaces.

If I Wrote a Linter, Part 1: Architecture

This is how I would architect a modern linter from scratch: focusing on built-in TypeScript support, a straightforward rule development experience, and deduplicating tooling.

Hybrid Linters: The Best of Both Worlds

Native speed for parsing and type checking is wonderful. I also want the huge benefits of writing lint rules in an ecosystem's primary language. Here's how I think we can have both.

So You've Got A Gap In Code Coverage

This is my standard explainer for pull request reviews where changed lines aren't covered by unit tests.

My Plans for 2025

How I'm going to make my 2025 impactful.

2024 In Review

Looking back at the accomplishments and goals from my third year as a full-time independent open source maintainer.

2024 Finances In Review

Breaking down the income streams and totals from my third year as a full-time independent open source maintainer.

Split Out Unrelated Changes

This is a general explainer for pull request reviews where I think unrelated changes should be split into a separate PR.

Try...Catch As Little As Possible

This is a general explainer for pull request reviews where a try...catch statement is used more than I think it needs to be.

Why I'm Migrating from X to Bluesky

Twitter has been a core part of my web development career for over a decade. But Twitter's been replaced by the vastly inferior X. Here's why I'm finally ready to commit to Bluesky.

How I Attend a Conference

From attending a few dozen conferences and co-organizing one of my own, this is how I make the most of in-person event.

Why Typed Linting Needs TypeScript Today

Typed linting is powerful but requires a full type checker to function well. Today, that means TypeScript. This is why we haven't found a suitable replacement yet.

Definitely Formatted

How we migrated the massive DefinitelyTyped repository from using a linter for formatting to the dprint formatter.

The Cost of a Lint Rule

Explaining why deep work can be so difficult in open source.

Please Stop Sending Me Nested Dependency Security Reports

Security is important. Overusing report mechanisms for non-actionable noise is counterproductive.

My Plans for 2024

How I'm going to make my 2024 beautiful.

2023 In Review

Looking back at my second year as a full-time independent open source maintainer.

2023 Conferences In Review

Recapping the fantastic in-person conferences I attended in 2023.

You Probably Don't Need `eslint-config-prettier` or `eslint-plugin-prettier`

Explaining two popular Prettier integrations for ESLint, and why I avoid both of them.

Rust-Based JavaScript Linters: Fast, But No Typed Linting Right Now

Explaining why the speed gains from Rust linters aren't comparable to the full feature set of typescript-eslint.

TypeScript Contribution Diary: Filtering Out Types From JavaScript-Only Import Suggestions

Removing type-land entries from import completions that can't be used in value-only-land.

Contributing to a create-typescript-app Repository: FAQs

FAQs for contributing to my create-typescript-app project or any repository scaffolded using it.

Contributing to a create-typescript-app Repository

A thorough guide through contributing to create-typescript-app or any repository scaffolded using it.

Speeding Up Centered Part 5: Emoji Processing

Finding and eliminating thousands of calls to recreate a giant regular expression in a popular open source emoji plugin.

Speeding Up Centered Part 4: Unused Code Bloat

Using Knip to automatically detect unused files and dependencies in the Centered repository.

Speeding Up Centered Part 3: Barrel Exports

Automating changes to module imports to overcome the build system not correctly tree shaking barrel exports.

Speeding Up Centered Part 2: Hidden Embedded Images

Finding and removing giant unused assets hidden in marketing page to speed up that page's performance.

Speeding Up Centered Part 1: 81 <iframe> Embeds

Improving a page's performance by over-eager loading most of its embedded content.

The Blurry Line Between Formatting and Style

Why separating responsibilities between your formatter and linter isn't always clear-cut.

Configuring ESLint, Prettier, and TypeScript Together

How I recommend getting your formatter, linter, and type checker to play together nicely.

Configuring ESLint, Prettier, and TypeScript Together: FAQs

How I recommend getting your formatter, linter, and type checker to play together nicely.

Seven Reasons Why Conversational AI is Dangerous

While AI systems such as OpenAI and ChatGPT can be helpful in certain situations, there are also significant risks associated with their use.

TypeScript Contribution Diary: Tuple Types Indexed by a Type Parameter

Fixing a slight bug in how TypeScript resolves type elements of tuple types indexed by type parameters.

My Plans for 2023

How I'm going to make 2023 awesome.

Configuring Markdownlint Alongside Prettier

Using the common markdown linter and disabling any rules that would intersect with dedicated formatters such as Prettier.

2022 In Review

Looking back at a pivotal year in my open source career.

How I Apply to Conferences: FAQs

Common questions and answers for my How I Apply To Conferences article.

How I Apply to Conferences

From a hundred conference applications and thirty speaking roles, this is my process for submitting talks.

No Unattainable Intelligence

In trying to make ourselves relatable, we reinforce the negative perception of intelligence gaps.

Six Months of Full Time Open Source

What it's like to quit your job and try to work on open source tooling full time.

Type Parameters in the "Add Missing Function" Codefix

Corrects the missing function codefix to add type parameters when the function needs to be generic.

Standards Compliant Rickrolling

How to create an effective rickroll site with the Vimeo Player SDK despite modern web browser autoplay restrictions.

Why Open Source Pull Requests Can Take A While

Maintenance and development costs run both ways. Open source contributors and maintainers alike have to balance their finite energy and time resources within many constraints.

TypeScript Contribution Diary: Allowing Code in Constructors Before `super()` (Technical Overview)

More technical descriptions around allowing derived classes with properties to include code before `super()` call that doesn't touch `this`.

TypeScript Contribution Diary: Allowing Code in Constructors Before `super()`

Allowing derived classes with properties to include code before `super()` call that doesn't touch `this`. A grand pull request three years in the making -- with cake!