Dominik 🔮
@tkdodo.eu
⚛️ Maintaining TanStack Query
🔮 https://query.gg
👨💻 Software Engineer @sentry.io
📚 Blog at https://tkdodo.eu
🇦🇹 Vienna, Austria
👧👦 Father of two
🔮 https://query.gg
👨💻 Software Engineer @sentry.io
📚 Blog at https://tkdodo.eu
🇦🇹 Vienna, Austria
👧👦 Father of two
Pinned
Dominik 🔮
@tkdodo.eu
· Nov 19
📢 After more than 11 years of working at Adverity in various positions, I’ve decided to look for new challenges in 2025.
🚀 I'm excited to share that starting in January, I'll be joining the Frontend Platform Team at @sentry.io.
🚀 I'm excited to share that starting in January, I'll be joining the Frontend Platform Team at @sentry.io.
What’s the latest take on checking `e.defaultPrevented` in event handlers of component libraries to allow consumers to override default behavior by calling e.preventDefault()
onMouseEnter={(e) => {
props.onMouseEnter?.(e);
if (e.defaultPrevented) return;
// do your stuff
}}
yay or nay?
onMouseEnter={(e) => {
props.onMouseEnter?.(e);
if (e.defaultPrevented) return;
// do your stuff
}}
yay or nay?
November 7, 2025 at 9:23 AM
What’s the latest take on checking `e.defaultPrevented` in event handlers of component libraries to allow consumers to override default behavior by calling e.preventDefault()
onMouseEnter={(e) => {
props.onMouseEnter?.(e);
if (e.defaultPrevented) return;
// do your stuff
}}
yay or nay?
onMouseEnter={(e) => {
props.onMouseEnter?.(e);
if (e.defaultPrevented) return;
// do your stuff
}}
yay or nay?
Reposted by Dominik 🔮
People give `useEffect` a bad rap, but it isn't usually the source of the problem. The real problem is too many `useState`s.
Devs fail to see how their data is connected and model it too discretely. As those connections appear, it is easier to synchronize than refactor the model. 1/
Devs fail to see how their data is connected and model it too discretely. As those connections appear, it is easier to synchronize than refactor the model. 1/
November 6, 2025 at 4:41 PM
People give `useEffect` a bad rap, but it isn't usually the source of the problem. The real problem is too many `useState`s.
Devs fail to see how their data is connected and model it too discretely. As those connections appear, it is easier to synchronize than refactor the model. 1/
Devs fail to see how their data is connected and model it too discretely. As those connections appear, it is easier to synchronize than refactor the model. 1/
Reposted by Dominik 🔮
Looking for a new challenge in 2026? 👀
Maybe it's your turn to take the stage at #JSHeroes. 🌟
📝 Submit your talk proposal using the link below, and get the chance to share your ideas with fellow tech enthusiasts.
👉 jsheroes.io/speak
⏳ Submissions are open until the end of the year.
#TechEvent
Maybe it's your turn to take the stage at #JSHeroes. 🌟
📝 Submit your talk proposal using the link below, and get the chance to share your ideas with fellow tech enthusiasts.
👉 jsheroes.io/speak
⏳ Submissions are open until the end of the year.
#TechEvent
November 6, 2025 at 2:30 PM
Looking for a new challenge in 2026? 👀
Maybe it's your turn to take the stage at #JSHeroes. 🌟
📝 Submit your talk proposal using the link below, and get the chance to share your ideas with fellow tech enthusiasts.
👉 jsheroes.io/speak
⏳ Submissions are open until the end of the year.
#TechEvent
Maybe it's your turn to take the stage at #JSHeroes. 🌟
📝 Submit your talk proposal using the link below, and get the chance to share your ideas with fellow tech enthusiasts.
👉 jsheroes.io/speak
⏳ Submissions are open until the end of the year.
#TechEvent
Reposted by Dominik 🔮
Back in Vienna! 🇦🇹
Come meet the community on Dec 18 at the LEAN-CODERS office.
→ Reserve your spot:
luma.com/rc84shks
Come meet the community on Dec 18 at the LEAN-CODERS office.
→ Reserve your spot:
luma.com/rc84shks
Effect Vienna Meetup · Luma
Join us for an evening focused on Effect, the powerful library for building production-grade software in TypeScript.
Talks and special guests will be announced…
luma.com
November 6, 2025 at 1:04 PM
Back in Vienna! 🇦🇹
Come meet the community on Dec 18 at the LEAN-CODERS office.
→ Reserve your spot:
luma.com/rc84shks
Come meet the community on Dec 18 at the LEAN-CODERS office.
→ Reserve your spot:
luma.com/rc84shks
Reposted by Dominik 🔮
Self reviews were a good idea before AI but are now a necessity. Don't put that burden on your co-workers. If you use AI, review it 🤖
So I'm reviewing a PR from a colleague that was written for like 95% by AI, and while it might have made his job easier, it's making mine a lot harder because it's riddled with mistakes and issues that I have to now fix, and I feel like I have to thoroughly check every single line of code twice
November 4, 2025 at 11:35 AM
Self reviews were a good idea before AI but are now a necessity. Don't put that burden on your co-workers. If you use AI, review it 🤖
Self reviews were a good idea before AI but are now a necessity. Don't put that burden on your co-workers. If you use AI, review it 🤖
So I'm reviewing a PR from a colleague that was written for like 95% by AI, and while it might have made his job easier, it's making mine a lot harder because it's riddled with mistakes and issues that I have to now fix, and I feel like I have to thoroughly check every single line of code twice
November 4, 2025 at 11:35 AM
Self reviews were a good idea before AI but are now a necessity. Don't put that burden on your co-workers. If you use AI, review it 🤖
There is some opportunities that feels unreal. This is one of them! I've joined the TanStack Router team to keep pushing the boundaries of typescript and routing!
Huge thanks to @manuelschiller.bsky.social and @tannerlinsley.com for their trust ❤️
Huge thanks to @manuelschiller.bsky.social and @tannerlinsley.com for their trust ❤️
November 4, 2025 at 9:42 AM
✂️ If you're using knip at work, try and get your employer to sponsor @webpro.nl
✂️ Thank you, sponsors!
We've officially hit €500/month in sponsorships ❤️
→ knip.dev/sponsors
Most of them are supporting Knip for quite a while already which I truly appreciate! 🙏
We've officially hit €500/month in sponsorships ❤️
→ knip.dev/sponsors
Most of them are supporting Knip for quite a while already which I truly appreciate! 🙏
November 3, 2025 at 12:36 PM
✂️ If you're using knip at work, try and get your employer to sponsor @webpro.nl
Reposted by Dominik 🔮
knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip
November 2, 2025 at 8:32 PM
knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip knip
Note that this doesn't happen with @tanstack.com start server functions because unlike "directives", they are actually typed so you'll get a Promise on type level and linting can tell you if you forget to await it. So types are good I guess, who would've thought 🤷♂️
How our "perfect" one-line isOwner() function in Next.js started always returning true.
Spoiler: It is because of server functions...
Wrote about the bug, the fix, and the "magic" that caused it:
marma.dev/articles/202...
#webdev #javascript #typescript #react #nextjs #serverfunctions
Spoiler: It is because of server functions...
Wrote about the bug, the fix, and the "magic" that caused it:
marma.dev/articles/202...
#webdev #javascript #typescript #react #nextjs #serverfunctions
marma.dev
November 2, 2025 at 8:57 AM
Note that this doesn't happen with @tanstack.com start server functions because unlike "directives", they are actually typed so you'll get a Promise on type level and linting can tell you if you forget to await it. So types are good I guess, who would've thought 🤷♂️
Reposted by Dominik 🔮
Quite happy with this (mostly) vibe-coded result: github.com/getsentry/se...
October 31, 2025 at 1:25 PM
Quite happy with this (mostly) vibe-coded result: github.com/getsentry/se...
Does claude have to say “You're absolutely right!” every time?
October 31, 2025 at 12:37 PM
Does claude have to say “You're absolutely right!” every time?
Does anyone know a good alternative to github.com/plantain-00/... to compute type-coverage ? This one doesn’t seem actively maintained and I’m running into some obvious false positives ...
GitHub - plantain-00/type-coverage: A CLI tool to check type coverage for typescript code
A CLI tool to check type coverage for typescript code - plantain-00/type-coverage
github.com
October 31, 2025 at 8:23 AM
Does anyone know a good alternative to github.com/plantain-00/... to compute type-coverage ? This one doesn’t seem actively maintained and I’m running into some obvious false positives ...
Reposted by Dominik 🔮
Had a great time at the @viennajs.bsky.social meetup today hosted in our brand new @sentry.io office. I talked about how we use knip by @webpro.nl to get rid of dead code 🙌
October 29, 2025 at 10:03 PM
Had a great time at the @viennajs.bsky.social meetup today hosted in our brand new @sentry.io office. I talked about how we use knip by @webpro.nl to get rid of dead code 🙌
Reposted by Dominik 🔮
I am looking for a full-time job.
Being independent in open source for 3.5+ years has been wonderful. I've gotten done most of the high-level goals I wanted to, and miss having people & structure around me.
If you know of a role for a staff-level TypeScript+web developer, let me know! 🙂
Being independent in open source for 3.5+ years has been wonderful. I've gotten done most of the high-level goals I wanted to, and miss having people & structure around me.
If you know of a role for a staff-level TypeScript+web developer, let me know! 🙂
October 30, 2025 at 2:40 PM
I am looking for a full-time job.
Being independent in open source for 3.5+ years has been wonderful. I've gotten done most of the high-level goals I wanted to, and miss having people & structure around me.
If you know of a role for a staff-level TypeScript+web developer, let me know! 🙂
Being independent in open source for 3.5+ years has been wonderful. I've gotten done most of the high-level goals I wanted to, and miss having people & structure around me.
If you know of a role for a staff-level TypeScript+web developer, let me know! 🙂
Had a great time at the @viennajs.bsky.social meetup today hosted in our brand new @sentry.io office. I talked about how we use knip by @webpro.nl to get rid of dead code 🙌
October 29, 2025 at 10:03 PM
Had a great time at the @viennajs.bsky.social meetup today hosted in our brand new @sentry.io office. I talked about how we use knip by @webpro.nl to get rid of dead code 🙌
Reposted by Dominik 🔮
October 29, 2025 at 11:57 AM
Reposted by Dominik 🔮
We just crossed 1 million downloads a week! 🎉🚀
Thanks to everyone supporting our community!
Thanks to everyone supporting our community!
October 28, 2025 at 11:27 PM
We just crossed 1 million downloads a week! 🎉🚀
Thanks to everyone supporting our community!
Thanks to everyone supporting our community!
Reposted by Dominik 🔮
Oh you want to hear about why TanStack Start’s middleware is so incredible??
I gotchu
frontendmasters.com/blog/introdu...
I gotchu
frontendmasters.com/blog/introdu...
Introducing TanStack Start Middleware
TanStack Start is one of the most exciting full-stack web development frameworks I’ve seen. I’ve written about it before. In essence, TanStack Start takes TanStack Router, a superb, strongly-typed cli...
frontendmasters.com
October 24, 2025 at 7:09 PM
Oh you want to hear about why TanStack Start’s middleware is so incredible??
I gotchu
frontendmasters.com/blog/introdu...
I gotchu
frontendmasters.com/blog/introdu...
@ssalbdivad.dev you're amazing 🤩. Obviously WTF!? but in a good way 🤪
📢Introducing ArkRegex📢
a drop in replacement for new RegExp() with types ⬇️
a drop in replacement for new RegExp() with types ⬇️
October 28, 2025 at 6:57 PM
@ssalbdivad.dev you're amazing 🤩. Obviously WTF!? but in a good way 🤪
After a week of not doing open source, I'm drowning in notifications and stuck in analysis paralysis because there are so many things I want to / need to do at the same time. I'm not really liking this right now
October 28, 2025 at 9:06 AM
After a week of not doing open source, I'm drowning in notifications and stuck in analysis paralysis because there are so many things I want to / need to do at the same time. I'm not really liking this right now
Reposted by Dominik 🔮
My talk at @nextjs.org conf is online!
Go watch it, it contains two gems:
- The dangers and limits of URL state (to make you a better engineer)
- A live demo of how @nuqs.dev uses a declarative approach to type-safe and time-safe behaviours, in a composable way.
Go watch it, it contains two gems:
- The dangers and limits of URL state (to make you a better engineer)
- A live demo of how @nuqs.dev uses a declarative approach to type-safe and time-safe behaviours, in a composable way.
Type-safe URL state in Next.js with nuqs
YouTube video by Vercel
www.youtube.com
October 27, 2025 at 11:19 PM
My talk at @nextjs.org conf is online!
Go watch it, it contains two gems:
- The dangers and limits of URL state (to make you a better engineer)
- A live demo of how @nuqs.dev uses a declarative approach to type-safe and time-safe behaviours, in a composable way.
Go watch it, it contains two gems:
- The dangers and limits of URL state (to make you a better engineer)
- A live demo of how @nuqs.dev uses a declarative approach to type-safe and time-safe behaviours, in a composable way.
Reposted by Dominik 🔮
🚩 So many red flags in a form with basically one field:
- Using placeholder as label
- Insufficient contrast on the continue button
- A negated checkbox that opts you into marketing stuff per default
Bad a11y and shady practices - both illegal in the EU (GDPR and EAA)
- Using placeholder as label
- Insufficient contrast on the continue button
- A negated checkbox that opts you into marketing stuff per default
Bad a11y and shady practices - both illegal in the EU (GDPR and EAA)
October 26, 2025 at 3:52 PM
🚩 So many red flags in a form with basically one field:
- Using placeholder as label
- Insufficient contrast on the continue button
- A negated checkbox that opts you into marketing stuff per default
Bad a11y and shady practices - both illegal in the EU (GDPR and EAA)
- Using placeholder as label
- Insufficient contrast on the continue button
- A negated checkbox that opts you into marketing stuff per default
Bad a11y and shady practices - both illegal in the EU (GDPR and EAA)