<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/fixing-intellisense-performance-issues-in-nx-and-turborepo-k7txqvvfp" -->

---
title: Fixing IntelliSense Performance Issues in Nx and Turborepo
description: A debugging story about resolving severe IntelliSense slowdowns in an Nx monorepo. The root cause was traced to the next-intl library generating massive...
canonical: https://daily.dev/posts/fixing-intellisense-performance-issues-in-nx-and-turborepo-k7txqvvfp
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Fixing IntelliSense Performance Issues in Nx and Turborepo | daily.dev
og:description: A debugging story about resolving severe IntelliSense slowdowns in an Nx monorepo. The root cause was traced to the next-intl library generating massive...
og:url: https://daily.dev/posts/fixing-intellisense-performance-issues-in-nx-and-turborepo-k7txqvvfp
og:image: https://api.daily.dev/og/posts/k7tXqvVFP.png
og:image:alt: Fixing IntelliSense Performance Issues in Nx and Turborepo
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Fixing IntelliSense Performance Issues in Nx and Turborepo

**[greenonsoftware](https://daily.dev/sources/greenonsoftware)** · [@polubis](https://daily.dev/polubis) · 3 min read · 52 upvotes · 8 comments

## Summary

A debugging story about resolving severe IntelliSense slowdowns in an Nx monorepo. The root cause was traced to the next-intl library generating massive TypeScript union types that overwhelmed the TypeScript language server. The investigation used git bisection to narrow down when performance degraded, ruling out project size, cyclic dependencies, and configuration issues. The solution involved removing problematic type definitions, highlighting how complex type unions and generated types can create IDE performance bottlenecks in large codebases.

## Content

Petr Kratochvíl, thanks for the post inspiration and for letting me share this interesting story :D

It was a Thursday evening. I was sitting at home, playing my guitar, when suddenly a notification popped up – Petr had messaged me on LinkedIn, asking if I had a moment to help solve a frustrating problem in the NX ecosystem – a painfully slow IDE. I thought, “Sure, brother, schedule the meeting and let’s go!”

Petr’s project was quite large (though not huge) – its size definitely didn’t justify such a slow IDE. Sometimes, very large NX projects (no matter what you do) can still feel sluggish in the IDE — especially when you add AI-based typeahead (Cursor/Copilot) into the mix. That can create a major bottleneck, and often the only solution is to work with “namespaces” — but that’s a story for another time.

As a clue, Petr mentioned that the issue had started about two months ago. That immediately ruled out the project size as the cause — it hadn’t grown that much during that time. Previously, everything had been running razor-fast.

We had a few suspects:

1. Misconfigured tsconfig in the projects

2. Cyclic dependencies

3. Incorrectly configured package.json / nx.json files

4. HUGE TypeScript types (or rather, their unions)

The only way to confirm it was to roll back commits to about two months ago and search for the culprit — ideally using a halving method: first 2 months back, then 1.5, then 1, narrowing down the range where the issue began.

The culprit turned out to be the next-intl library used for translations. How was it fixed? In this case, the only reasonable solution was a types removal (for quick fix), replacement later.

But why does this happen in the first place?

TypeScript unions are costly for the TS server — they require constant recalculations (I described this in detail in my article, so I won’t go deep into it here).

In short: the more unions and complex type inference you have (e.g., with zod, custom abstractions, trpc, etc.), the higher the risk your IntelliSense will start burning — especially when you have massive generated types. In the article, I describe how to avoid this.

You can read the full case study here:

https://lnkd.in/dFAEzgYM

PS: Petr Kratochvíl, I was genuinely impressed by how fast you navigate through the IDE! I haven’t seen that kind of speed in a long time — and it was already well past 5:00 PM. You must’ve had a lot of coffee 😄 And if that’s your normal pace, full respect! ☕🔥

## Community discussion

Top comments from developers on daily.dev.

**@akkitto** · 6 upvotes

> Not sure, where the hype comes from about Monorepos. Just because Facebook made a big announcement about it or what? They use their own version control system, so it's a different story there.
>
> I've worked with a lot of Monorepos in the past, at work. Right now, I'm working with each repository being one thing and in my free time I've always been doing this.
>
> So, I have extensive experience with both methods and I can 100% confirm, that in my experience, using one repository for one thing, instead of a Monorepo, is pretty much always better.
>
> I'll spare you the technical details, as they are...

**@friedrich** · 1 upvotes

> Really good article.
>
> Monorepos are my favourite way to setup projects now and since not too many people talk about them, it is good to come across this kind of stories.
>
> "e.g., with zod, custom abstractions, trpc, etc" this. This. This, man. This is so true. I can't describe, I can't talk 🤣🤣🤣. The thing would work like one day ago and suddenly it breaks, `trpc` type safety lost. It can get pretty complicated with the tsconfigs. This is a whole rabbit hole. And still we want monorepo.
>
> In your case it was a complex type that slowed down the TypeScript Language Server. And from the...

**@a\_meb\_a** · 0 upvotes

> love the image hahahaha

**@toilatofu** · 0 upvotes

> Very on point, thank you for sharing

**@markmed** · 0 upvotes

> Don't tell me that... i just started the final project of my degree as a monorepo 😵

## Similar posts on daily.dev

- [Fixing TypeScript Performance Problems: A Case Study](https://daily.dev/posts/fixing-typescript-performance-problems-a-case-study-mmpqg73be) · Viget · 88 upvotes · 2 comments
- [TypeScript Performance: Speed Up Your tsc and Editor in 2026](https://daily.dev/posts/typescript-performance-speed-up-your-tsc-and-editor-in-2026-mfubzkliy) · Alex CloudStar · 0 upvotes · 0 comments
- [Nx 23.1 Is Here: Per-Run Performance Reports, TypeScript 6, and Angular 22](https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13) · Nx · 2 upvotes · 0 comments
- [Untapped Way to Learn a Codebase: Build a Visualizer](https://daily.dev/posts/untapped-way-to-learn-a-codebase-build-a-visualizer-maesktxb7) · Hacker News · 4 upvotes · 0 comments
- [Fix AI Code Hallucinations: TypeScript Compiler \+ TDD](https://daily.dev/posts/fix-ai-code-hallucinations-typescript-compiler-tdd-ucvfxgpnp) · SitePoint · 1 upvotes · 0 comments

---

Tags: [#general-programming](https://daily.dev/tags/general-programming), [#performance](https://daily.dev/tags/performance), [#typescript](https://daily.dev/tags/typescript), [#webdev](https://daily.dev/tags/webdev)

[View this post on daily.dev](https://daily.dev/posts/fixing-intellisense-performance-issues-in-nx-and-turborepo-k7txqvvfp)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"DiscussionForumPosting","mainEntityOfPage":"https://daily.dev/posts/fixing-intellisense-performance-issues-in-nx-and-turborepo-k7txqvvfp","headline":"Fixing IntelliSense Performance Issues in Nx and Turborepo","text":"A debugging story about resolving severe IntelliSense slowdowns in an Nx monorepo. The root cause was traced to the next-intl library generating massive TypeScript union types that overwhelmed the TypeScript language server. The investigation used git bisection to narrow down when performance degraded, ruling out project size, cyclic dependencies, and configuration issues. The solution involved removing problematic type definitions, highlighting how complex type unions and generated types can create IDE performance bottlenecks in large codebases.","url":"https://daily.dev/posts/fixing-intellisense-performance-issues-in-nx-and-turborepo-k7txqvvfp","datePublished":"2025-10-30T09:39:02.226Z","dateModified":"2026-03-15T05:30:30.563Z","author":{"@type":"Person","name":"Adrian Połubiński","url":"https://daily.dev/polubis","image":"https://media.daily.dev/image/upload/s--aWVxvhyd--/f_auto/v1743866604/avatars/avatar_aqUm7LRN374b6vKvvXeaC","description":"I’m an experienced web developer with 10 years in the field, primarily focused on full-stack web dev","interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":310}},"image":"https://media.daily.dev/image/upload/s--ZvGovLnG--/f_auto/v1761817142/posts/k7tXqvVFP?_a=BAMAK+ZW0","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":52},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":8}],"comment":[{"@type":"Comment","text":"Not sure, where the hype comes from about Monorepos. Just because Facebook made a big announcement about it or what? They use their own version control system, so it’s a different story there.\nI’ve worked with a lot of Monorepos in the past, at work. Right now, I’m working with each repository being one thing and in my free time I’ve always been doing this.\nSo, I have extensive experience with both methods and I can 100% confirm, that in my experience, using one repository for one thing, instead of a Monorepo, is pretty much always better.\nI’ll spare you the technical details, as they are obvious. I will argue for it on an abstract level, to get the concept across.\nIf you have 10 squishy balls, you can always choose to squish some of them together, if you need a bigger one. No problem. However, if you have one huge ball, try to split it int 10 equally pretty, equally sized and equally shaped balls. It’s very difficult.\nSame with Monorepos. If you need all the stuff in it, fine, maybe it helps. But if you usually work on one thing only, like e.g. one “folder” in that Monorepo, then you deal with so many changes and extra stuff, you don’t need and sometimes even breaks some IDE functionalities, depending on the situation.\nLong story short, if you don’t have a really really great super duper reason for using a Monorepo, then don’t. Every repository should do one thing. One thing well. That’s it. That’s the way to go.\nReplace Monorepos with Workspaces, like the ones in Visual Studio Code and Git submodules, etc.","datePublished":"2025-10-31T00:48:43.599Z","url":"https://daily.dev/posts/k7tXqvVFP#c-LLFiY69kq","author":{"@type":"Person","name":"Daniel","url":"https://daily.dev/akkitto","image":"https://media.daily.dev/image/upload/s--FtwJqX4c--/f_auto/v1754900041/avatars/avatar_29TCpY2hJR72V3BlxPXzX?_a=BAMClqZW0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":6}},{"@type":"Comment","text":"Really good article.\nMonorepos are my favourite way to setup projects now and since not too many people talk about them, it is good to come across this kind of stories.\n“e.g., with zod, custom abstractions, trpc, etc” this. This. This, man. This is so true. I can’t describe, I can’t talk 🤣🤣🤣. The thing would work like one day ago and suddenly it breaks, trpc type safety lost. It can get pretty complicated with the tsconfigs. This is a whole rabbit hole. And still we want monorepo.\nIn your case it was a complex type that slowed down the TypeScript Language Server. And from the article I going to “steal” the analysis tools you mentioned such especially the dependency graph analyser. I’m going to look if Turborepo has one.\nUsually my custom setup would be : Nestjs for the backend and Vite/Nextjs/astro for the frontend. And I use trpc in the middle  because why use a ts monorepo if I can’t have end to end type safety ? I really like to get the best of both worlds: typesafety from trpc procedures and the modularity of Nestjs.\nAnd sometimes wire up all that together can be tricky. In my case for example, since Nestjs is commonjs only (at least for the moment, I think), I had to do some weird gymnastics to have the type output of the trpc AppRouter: generate the .d.ts files in a common package from where I export the AppRouter to use it in the frontend(s) app(s), otherwise when the AppRouter type is imported in the frontend it is typed as any xD. Pretty interesting to make all that work, mess around with the tsconfigs here and there 🤣.\nThe other day I had an issue with an astro app where everything (trpc type safety) was working just fine and suddenly broke. The culprit: I forgot to use the references in the tsconfig (you talked about that in the article too). Those subtle bugs can be tricky to find. But overall I like monorepos and I want to keep using them.","datePublished":"2025-10-30T23:55:23.649Z","url":"https://daily.dev/posts/k7tXqvVFP#c-s07pgkWtj","author":{"@type":"Person","name":"Friedrich WT","url":"https://daily.dev/friedrich","image":"https://avatars.githubusercontent.com/u/136119888?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"love the image hahahaha","datePublished":"2025-11-07T12:02:52.508Z","url":"https://daily.dev/posts/k7tXqvVFP#c-Q81Ddm06r","author":{"@type":"Person","name":"Phillippe Michel Weir","url":"https://daily.dev/a_meb_a","image":"https://media.daily.dev/image/upload/s--BwH-uTMq--/f_auto/v1740136991/avatars/avatar_N403VFK9lAHNRwlSAhl1h"}},{"@type":"Comment","text":"Very on point, thank you for sharing","datePublished":"2025-11-10T08:48:09.128Z","url":"https://daily.dev/posts/k7tXqvVFP#c-YcOP6bPE7","author":{"@type":"Person","name":"Trần Đăng Khôi","url":"https://daily.dev/toilatofu","image":"https://avatars.githubusercontent.com/u/88824627?v=4"}},{"@type":"Comment","text":"Don’t tell me that… i just started the final project of my degree as a monorepo 😵","datePublished":"2025-11-09T08:40:26.219Z","url":"https://daily.dev/posts/k7tXqvVFP#c-AP2h1tV80","author":{"@type":"Person","name":"Marcos Á. Medina","url":"https://daily.dev/markmed","image":"https://avatars.githubusercontent.com/u/33690842?v=4"}}],"isPartOf":{"@type":"WebPage","url":"https://daily.dev/squads/greenonsoftware","name":"greenonsoftware"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"greenonsoftware","item":"https://daily.dev/squads/greenonsoftware"},{"@type":"ListItem","position":3,"name":"Fixing IntelliSense Performance Issues in Nx and Turborepo"}]}
```

