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
Can someone ELI5 why API mocking tools even need team collaboration? To sync the mocks across teams or something? I genuinely don't understand.
December 29, 2025 at 10:02 AM
One of the biggest things I want to address in 2026 is how developers think about API mocking. We're used to import some library, call some functions, and requests are magically intercepted. I think we can do better.
December 28, 2025 at 3:13 PM
Before we close the chapter that is 2025, I've got a few small gifts for everyone using GraphQL with MSW:

github.com/mswjs/msw/r...
Release v2.12.7 · mswjs/msw
v2.12.7 (2025-12-27) Bug Fixes graphql: export the GraphQLLinkHandlers type (#2647) (cfab780) @kettanaito graphql: support TypedDocumentString as request predicate (#2646) (494d5e8) @kettanaito gr...
github.com
December 28, 2025 at 2:59 PM
Remember when GitHub showed you how people discovered your projects? A jolly good time that was.
December 28, 2025 at 1:37 PM
When is it going to be safe to remove placeholder folders like

/node/package.json

in favor of export conditions? Tried earlier this year, a bunch of tools still need those folders and fail to see that there's an export condition for "/node". Is there a way to track this?
December 27, 2025 at 10:41 PM
The state of typography in fantasy, circa 2025.
December 27, 2025 at 10:24 PM
Everyone assumed Oda was talking about Laugh Tale as "the island that only Pirate King has reached". What about Lodestar? No pirate has reached that island either, and Laugh Tale is the one after that.
December 26, 2025 at 12:01 PM
Called it out years ago. Finally, we're getting an improved publishing experience. This won't solve all problems but, hopefully, it will make malicious packages harder to publish. A good move.
No way this is actually happening 🥹

github.blog/security/sup...
December 24, 2025 at 9:43 PM
"Source open" is the smallest part of open source. It's all about the culture.
December 23, 2025 at 11:12 PM
The kind soul that got themselves my book before Christmas, thank you! Enjoy the story, and merry holidays! ❤️
December 23, 2025 at 11:06 PM
The modern human is so chronically starved for entertainment that they would sooner run the planet to the ground for slop than pick up a pencil, or a guitar, or a pen and get themselves a bottomless dopamine well for life.

Because consumption is effortless, but it is not free.
December 22, 2025 at 8:47 PM
So music is, basically, math and nobody has told me?
December 22, 2025 at 8:14 PM
When you spend a whole day writing an orchestral piece that you think is in Locrian but it turns out to be somehow easy and fun, I've got bad news for you...

It's not in Locrian.
December 19, 2025 at 6:53 PM
📰 Today, I'm writing about an API so dark, so magical, you should never use it in your product code. Naturally, I've used it in my tests and let me show you how.

Let's talk about Symbol.iterator and how the spread syntax works in JavaScript.
December 18, 2025 at 2:48 PM
For a while, I thought this was the pinnacle dialog experience. Until I realized this isn't how I want to consume dialogs. Let me explain.
December 17, 2025 at 4:26 PM
I just got my CI from 6m44s down to 4m7s and it took ONE change in Playwright config.

How come nobody ever told me Playwright fails to properly calculate the number of cores your CI machine has? This tiny screenshot screams of MONTHS of time wasted on CI over the years.
December 17, 2025 at 4:05 PM
My novelette, Loggerheads, is 50% off for the holidays! That includes both digital and physical editions.

A perfect story to get oneself lost in with a hot cup of tea in your hand and a crackling fireplace by your side. Get yourself a copy below 👇
December 17, 2025 at 3:12 PM
I want to see more books about book covers and their history.
December 17, 2025 at 1:30 PM
Turns out, my blog amasses around 30k unique visitors per month. That is bananas, considering I write (mostly) about extremely niche things.

Thank you, dear reader!
December 16, 2025 at 8:17 PM
A huge thank you for Kraken Tech (github.com/kraken-tech) for becoming a new MSW sponsor on GitHub! ❤️

Your support means a ton. Thank you!
Kraken Tech
Kraken | Upgrade your utility. Kraken Tech has 12 repositories available. Follow their code on GitHub.
github.com
December 16, 2025 at 2:40 PM
I got to the point where I wanted to start writing first tests in my project and I caught myself kind of trying to skip that. Huh. I know how important tests are and yet I wasn't excited to write them.

That turned into such an important lesson I want to talk about it.
December 13, 2025 at 4:53 PM
What is the best practice for writing large files via the File System API? Even writing a 5MB file to disk takes ~2s. That's extremely slow.

Folks mentioned OPFS, but I don't see how that's a solution at all. It's a different way of *storing* data, not a replacement for FS API
December 12, 2025 at 9:08 PM
When designing your APIs it's natural to want to name things for what they are. But when choosing method names, it's often much better to let the name describe what the method *does* instead of what it is.

Compare these two (see what I did here?):
December 12, 2025 at 4:56 PM
You might not need Server Components.
You might not need hooks.
You might not need React.
You might not need a framework.
You might not need a server.

Choose the stack that solves your users' problems best.
December 12, 2025 at 3:04 PM
There's no technical reason you shouldn't be able to return an ArrayBuffer (or even a stream) from page.evaluate in Playwright. Those things are serializable. But here we are...
December 12, 2025 at 1:29 PM