Mark Erikson

@acemarke.dev

Redux maintainer, building time-travel devtools at Replay.io. I blog about React, Redux, and TS at https://blog.isquaredsoftware.com . Answering questions anywhere there's a textbox on the internet, and otherwise out on the golf course!

Counting the days until ZurichJS Conf. We have 74 community partners and 14 sponsors behind it, which makes me so proud. We’re still open to open-source projects, communities, companies and fun ideas. Nonprofit, community-first, with every contribution going back into the event. DM me.

I'm doing some first-pass prototyping experiments on what a rethought RTK Query 3.0 might look like. Trying to maintain the same shape, but restructuring definitions to unlock some TS-blocked capabilities and remove rough edges in the options. Might even make TS inference faster.

We’d love to invite everyone. 💛 But community conferences still have bills to pay, and we’re doing our best to keep tickets as affordable as possible. Standard pricing ends in a few days. Grab your ticket before Late Bird pricing starts: conf.zurichjs.com

Bild

📦 nuqs@2.9.3 is out! 🚀 It fixes a bug where state updates would blink/replay when pending state updates done in startTransition were rebased on top of other priority updates. Concurrent React is fun. Try it out: pnpm add nuqs@latest

Install nuqs@latest using your favourite package manager.

just to raise a pseudo-poll: how many folks work on a codebase that still actively uses React-Redux's `connect` API? I officially marked it as deprecated a few months ago in 9.3: github.com/reduxjs/reac... I don't plan to remove it any time soon. But I'm curious if I _could_, someday.

Release v9.3.0 · reduxjs/react-redux

This feature release officially marks the connect API as deprecated. That's it. That's the release. :) Changelog connect deprecation Way back in 2022, I officially marked the original Redux core cr...

github.com

Happy to announce Octane – the successor to Inferno. React’s programming model, compiled. Hooks, Suspense and Actions, compiled ahead of time. No virtual DOM. No Rules of Hooks. No manually maintained dependency arrays. The compiler understands what your code. octanejs.dev

// Counter.tsrx — hooks next to output, no rules of hooks
import { useState, useEffect } from 'octane';

export function Counter(props) @{
	const [count, setCount] = useState(0);

	// A hook behind a condition is fine — slots are
	// assigned by call site, not call order.
	if (!props.paused) {
		useEffect(() => {
			console.log('count is now', count);
		}); // the compiler infers [count]
	}

	<button onClick={() => setCount(count + 1)}>{'Count: ' + count}</button>
}

Pushed additional diff tracking logic to my React-Redux proxy+signals prototype PR. This seems to restore the perf improvements I'd had earlier, with better correctness: github.com/reduxjs/reac... Needs more follow-up work, but the updates here seem to validate the potential perf benefits!

[DRAFT] Add prototype signals+path-tracking implementation by markerikson · Pull Request #2318 · reduxjs/react-redux

This PR: Adds a pair of signals-based alternative Provider/selector implementations, SignalProvider and useSignalSelector, designed to optimize the performance of subscriber notifications and sele...

github.com

In my audits, reading the Performance profile is where people get stuck: the flame chart and waterfall look like noise at first I built an interactive guide to make them click, every figure is interactive, plus LCP, CLS, INP and the Insights panel perf.reviews/profile-guide #WebPerf #DevTools

Reading a Performance Profile: Field Guide

An interactive field guide to the Chrome DevTools Performance panel: waterfall, flame chart, LCP, CLS, INP, and the Insights panel.

perf.reviews

Yeah I wanna know more about the pain. The whole what’s-good-for-tree-shaking thing has felt like a moving target for years. As a lib maintainer it feels damn near impossible to get right for every bundler unless we publish every single function as a standalone entrypoint. Which…gross.

if you watched The Greenfield Games and were as mad as I was that the AI bot team was such a strong competitor, this tool is why. Brian from Replay set up an agentic loop that would build, deploy, run Loop QA, and repeat until it couldn't find any more problems — upsettingly good at checking boxes

Replay.io@replay-io.bsky.social · 2w ago

Useful question coming up from today’s Replay QA launch: Is this supposed to replace testing? No - that would be a silly claim. Replay QA is about catching browser-level broken flows and turning them into useful debugging context. www.producthunt.com/products/rep...

Maybe I'm just extra people-oriented and creative, but it boggles my mind that anyone thinks that number of lines of code per second was ever the challenge with building and maintaining software.

Rubber ducking, pairing, body doubling, and the freedom to ask stupid questions are tools I use daily. Programming axioms like DRY and maintainability are about collaboration with future you and other devs.

I've lost count of the number of times that speaking to a DevRel working a booth at a conference or another developer in the hallway track triggered a breakthrough at work or in my writing. I wouldn't be where I am today without the support of dozens of brilliant developers.

I think a lot about how the lone genius myth and desire to seem technical, not creative have resulted in the devaluation of the social aspects of programming.

the more people I talk to, the more convinced I am that (it's probably fair to say) none of us is okay we're in this together my friends 🫂

built a new thing! github.com/Saeris/deopt... it's a rebuild of Microsoft's Deoptimization Explorer designed for agents via MCP deoptkit surfaces V8 inline cache, map churn, and CPU profile data about your code so that you can identify perf deoptimizations and target them for improvement

GitHub - Saeris/deoptkit: 🔥 A V8 deoptimization toolkit for JavaScript and TypeScript on Node.js

🔥 A V8 deoptimization toolkit for JavaScript and TypeScript on Node.js - Saeris/deoptkit

github.com

Today the good people of the world commemorate the passing of Google Reader thirteen short years ago on July 1, 2013. To honor their memory (and in lieu of flowers) please add an RSS/Atom/JSON feed to your web site and keep building a web that connects people in meaningful and positive ways.

Was just telling this to a colleague at my new job this. Friction is a tool. Leverage it wrong, and you slow down more than you need to be. Leverage it right, and you prevent yourself from going down the wrong paths that could ultimately kill your project/biz/etc. I know which one I'd prefer there