Artem Zakharchenko
banner
kettanaito.com
Artem Zakharchenko
@kettanaito.com
Software engineer. Helping you master automated testing at http://EpicWeb.dev. Author mswjs.io. Instructor egghead.io.

I tell stories @zakarcher.com.

My debut book "LOGGERHEADS" it out 👇
https://zakarcher.com/books/loggerheads
Pinned
Huge news! I've written a book.

This is a story of light and dark that won't leave you indifferent. Illustrated, atmospheric, and meaningful. The kind that stays with you.

Please enjoy this cover reveal for Loggerheads:
zakarcher.com/blog/cover-...

📚💙
Cover reveal: Loggerheads
zakarcher.com
Nice. My CI lagged and took 12m on a job that's supposed to time out after 10s. And then it did that 5 times. Here goes my first GitHub bill in a decade.

Going to put some hard cancel jobs in my private repos from now on, I guess.
February 12, 2026 at 8:42 PM
I'm considering a utility to help you schedule cleanup side effects from your handlers in MSW. Any thoughts? Curious to hear your suggestions around the name in particular.
February 12, 2026 at 5:06 PM
I'm updating the Playwright binding for MSW to be more in-line with the best practices of fixtures. This also is a preparation for another API change coming, hopefully, soon to everyone.
February 10, 2026 at 2:31 PM
I'ma tell you, it's nice not to care about the hooks when using Solid. Or the `key` prop. Or creating/deriving state.

It's not all sunshine and butterflies, but I do feel Solid growing on me.
February 9, 2026 at 7:57 PM
Wrapped up recording an exercise on how to test passkeys in Playwright the other day. Researching this topic was so much fun. I had no idea how to do that correctly. Now I do! And soon you'll know, too.
February 9, 2026 at 7:53 PM
Reposted by Artem Zakharchenko
I had the pleasure of participating in one more online interview. Will share the link once it's published.
February 9, 2026 at 7:49 PM
As I'm working on the new architecture of MSW, it's so nice to finally have all the areas outlined. It's finally a composition of layers with their own responsibility. That enables superb customization as you can swap some pieces while keeping the rest of MSW's behaviors.
February 9, 2026 at 7:48 PM
Okay, so I looked into the comments on the MSW usage in the latest State of JS, and the negative ones are either misunderstanding what mocking is or blatantly promoting what feels like their own tools.

This made me happy. I don't consider any of that a relevant feedback.
February 6, 2026 at 10:53 PM
I know there are a ton of people who think "mocks = bad". Not only is that a huge misconception, but if you truly abide by it, you will produce terrible tests.

Mocking is a tool. Is a brush bad? Depends on who's holding it, I suppose. The same applies to mocking.
February 6, 2026 at 10:50 PM
📦 MSW v2.12.8 fixes two issues that resulted in a memory leak in Node.js. Please update your projects!

Release notes:
github.com/mswjs/msw/r...
Release v2.12.8 · mswjs/msw
v2.12.8 (2026-02-03) Bug Fixes update @mswjs/interceptors to fix a memory leak (#2659) (e5e905f) @kettanaito update rettime (#2657) (3a7b451) @kettanaito
github.com
February 6, 2026 at 2:48 PM
I will never be not amazed at how a seemingly trivial bugfix can suck you into a rabbit hole of issues that spans three dependencies deep. That was a fun quest!
February 6, 2026 at 2:43 PM
Enjoyed talking about authentication in end-to-end tests in a recording today! The thing is, the way you approach authentication as a feature and as a prerequisite to test other features has one important difference.

Overall, this is already my most detailed workshop to date ❤️
February 5, 2026 at 2:04 PM
100M a week. Sheesh.
February 4, 2026 at 7:31 PM
Can I pick your brain, folks?

Reply with 3 topics you consider advanced in automated testing 👇
February 3, 2026 at 1:26 PM
I genuinely don't know how npm cli and website aren't considered abandonware at this point. Trusted Publishing is broken, features behaving inconsistently across them, token management is non-existent, obscure error messages...

😔
February 3, 2026 at 11:38 AM
Thank you, Santosh! ❤️
The last part of my sponsorship budget goes to @apimocking.bsky.social happy to support work by @kettanaito.com o always a big fan of his work.
February 3, 2026 at 9:40 AM
Can someone tell me what am I doing wrong?

The whole point of trusted publishing is so I DON'T have to log in to npm to publish a package from a trusted workflow. So no tokens are involved.
February 2, 2026 at 6:44 PM
One sponsor cancellation away from being unsustainable btw 😔
January 31, 2026 at 9:27 PM
I am judging your framework based on how the principles you promote affect the testability of the end code.

Good frameworks make your code easy to test. Bad frameworks riddle your code with side effects and dependencies, then check out and leave you in a mocking hell.
January 30, 2026 at 9:14 PM
Once, my friend asked me if by teaching others I'm not creating competition for myself.

I get where he was coming from, but that's not how I see it. We aren't in a race, we are in a life-long hackathon. If someone levels up, everyone wins. And I win, too.
January 30, 2026 at 11:44 AM
Reposted by Artem Zakharchenko
🟦 #WORKSHOP DAY - Just Confirmed 😉

👨🏻‍💻 React Query - Beyond the Basics 👨🏻‍💻 with @tkdodo.eu

Learn More & Save Your Seat NOW!
⚠️Limited Seats
👉🏼 react.paris
January 30, 2026 at 10:32 AM
Reposted by Artem Zakharchenko
🟦 #WORKSHOP DAY - Just Confirmed 😉

👨🏻‍💻 Level Up Your URL State In Next.js With @nuqs.dev 👨🏻‍💻with @francoisbest.com

Learn More & Save Your Seat NOW!
⚠️Limited Seats
👉🏼 react.paris
January 30, 2026 at 10:34 AM
If you don't know how many emus there are in an inch, I don't think we can be friends.
January 29, 2026 at 6:41 PM
Never in my life did I want to see a GUI when shortcutting to "Settings" in any editor. You literally have a tool for developers. Give me that JSON I can edit. Make the GUI gone.

Why this matters is because editing a JSON is times faster and seeing that UI is disappointing.
January 29, 2026 at 4:55 PM
I think I've found the final boss of TypeScript.

Here's the error. And nothing else. I know what library causes it, but I have (1) no idea what tsc means here; (2) even less idea how to fix it.

Send help.
January 28, 2026 at 3:29 PM