<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13" -->

---
title: Nx 23.1 Is Here: Per-Run Performance Reports, TypeScript...
description: Nx 23.1 brings several notable improvements: mouse support in the terminal UI (text selection, scrolling, clicking), more flexible targetDefaults via ordered...
canonical: https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Nx 23.1 Is Here: Per-Run Performance Reports, TypeScript 6, and Angular 22 | daily.dev
og:description: Nx 23.1 brings several notable improvements: mouse support in the terminal UI (text selection, scrolling, clicking), more flexible targetDefaults via ordered...
og:url: https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13
og:image: https://api.daily.dev/og/posts/S81tLfG13.png
og:image:alt: Nx 23.1 Is Here: Per-Run Performance Reports, TypeScript 6, and Angular 22
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.

# Nx 23.1 Is Here: Per-Run Performance Reports, TypeScript 6, and Angular 22

**[Nx](https://daily.dev/sources/nx)** · 7 min read · 2 upvotes · 0 comments

## Summary

Nx 23.1 brings several notable improvements: mouse support in the terminal UI (text selection, scrolling, clicking), more flexible targetDefaults via ordered arrays with filters, and a per-run performance report showing cache hit rate, critical path duration, and actionable recommendations. The release adds full TypeScript 6 support with migration tooling that runs a typecheck post-upgrade, Angular 22 support (Signal Forms stable, OnPush default, new @Service decorator, async DI), ESLint v9 and typescript-eslint v8 upgrades, and framework updates including rspack 2, Vite improvements, Expo SDK 56, and Next 14-to-15/React 18-to-19 migration paths. Over 90 bug fixes are included. Task hashing and project graph construction also received performance optimizations.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://nx.dev/blog/nx-23-1-release>

## Questions this post answers

### How do I set different targetDefaults for two plugins that both infer a target named test, like @nx/vitest and @nx/jest?

Starting with Nx 23.1, targetDefaults can be an ordered array instead of a single object, where each entry may include a filter scoped to a plugin, projects, or executor. Entries apply in document order with later ones overriding earlier ones, so you can put an unfiltered baseline entry first and then add filtered entries like { filter: { plugin: '@nx/vitest' }, inputs: [...] } to override just for that plugin.

_Developers wiring up per-plugin build configs can track Nx changes like this on daily.dev._

### Does Nx 23.1 support TypeScript 7?

Yes, but it must run side-by-side with TypeScript 6 rather than replacing it, because TypeScript 7 does not yet ship the programmatic API that Nx and many third-party tools rely on. Nx 23.1 itself ships full support for TypeScript 6, and its migration can run a post-upgrade typecheck to catch type errors introduced by the version bump before they hit CI.

_Teams planning a TypeScript upgrade path can follow releases like this on daily.dev before migrating._

### What breaking changes come with upgrading to Nx 23.1?

Nx 23.1 drops support for Angular v19 and ESLint v8. The nx migrate command handles the version bumps and config updates for both changes, and the accompanying ESLint migration adjusts dropped or modified lint rules, installs angular-eslint automatically for Angular projects converting to flat config, and bumps the React and Cypress ESLint plugins for v9 compatibility.

_Anyone scheduling a monorepo upgrade can watch for breaking changes like these via daily.dev._

## Similar posts on daily.dev

- [Nx 23.2 Is Here: Oxlint, Oxfmt, Leaner CLI Output and Better Caching](https://daily.dev/posts/nx-23-2-is-here-oxlint-oxfmt-leaner-cli-output-and-better-caching-y4qpshwax) · Nx · 1 upvotes · 0 comments
- [Nx 22.7 Is Here: Task Sandboxing, 7x Less Memory, and Worktree-Aware Caching](https://daily.dev/posts/nx-22-7-is-here-task-sandboxing-7x-less-memory-and-worktree-aware-caching-gushrqdhz) · Nx · 0 upvotes · 0 comments

---

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

[View this post on daily.dev](https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13)

```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":"TechArticle","headline":"Nx 23.1 Is Here: Per-Run Performance Reports, TypeScript 6, and Angular 22","url":"https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13"},"datePublished":"2026-07-15T15:10:05.175Z","dateModified":"2026-09-14T07:26:15.753Z","description":"Nx 23.1 brings several notable improvements: mouse support in the terminal UI (text selection, scrolling, clicking), more flexible targetDefaults via ordered...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ba76e13b55c477b590ff04f870619b22?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ba76e13b55c477b590ff04f870619b22?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Nx","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Nx","logo":"https://media.daily.dev/image/upload/s--09OCt--d--/f_auto/v1761722266/logos/nx","url":"https://daily.dev/sources/nx"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"webdev,general-programming,javascript,typescript,angular","timeRequired":"PT7M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Nx","item":"https://daily.dev/sources/nx"},{"@type":"ListItem","position":3,"name":"Nx 23.1 Is Here: Per-Run Performance Reports, TypeScript 6, and Angular 22"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/nx-23-1-is-here-per-run-performance-reports-typescript-6-and-angular-22-s81tlfg13#faq","mainEntity":[{"@type":"Question","name":"How do I set different targetDefaults for two plugins that both infer a target named test, like @nx/vitest and @nx/jest?","acceptedAnswer":{"@type":"Answer","text":"Starting with Nx 23.1, targetDefaults can be an ordered array instead of a single object, where each entry may include a filter scoped to a plugin, projects, or executor. Entries apply in document order with later ones overriding earlier ones, so you can put an unfiltered baseline entry first and then add filtered entries like { filter: { plugin: '@nx/vitest' }, inputs: [...] } to override just for that plugin. Developers wiring up per-plugin build configs can track Nx changes like this on daily.dev."}},{"@type":"Question","name":"Does Nx 23.1 support TypeScript 7?","acceptedAnswer":{"@type":"Answer","text":"Yes, but it must run side-by-side with TypeScript 6 rather than replacing it, because TypeScript 7 does not yet ship the programmatic API that Nx and many third-party tools rely on. Nx 23.1 itself ships full support for TypeScript 6, and its migration can run a post-upgrade typecheck to catch type errors introduced by the version bump before they hit CI. Teams planning a TypeScript upgrade path can follow releases like this on daily.dev before migrating."}},{"@type":"Question","name":"What breaking changes come with upgrading to Nx 23.1?","acceptedAnswer":{"@type":"Answer","text":"Nx 23.1 drops support for Angular v19 and ESLint v8. The nx migrate command handles the version bumps and config updates for both changes, and the accompanying ESLint migration adjusts dropped or modified lint rules, installs angular-eslint automatically for Angular projects converting to flat config, and bumps the React and Cypress ESLint plugins for v9 compatibility. Anyone scheduling a monorepo upgrade can watch for breaking changes like these via daily.dev."}}]}
```

