{"id":664279,"date":"2025-12-08T09:28:21","date_gmt":"2025-12-08T08:28:21","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=webstorm&#038;p=664279"},"modified":"2026-02-27T14:45:40","modified_gmt":"2026-02-27T13:45:40","slug":"webstorm-2025-3","status":"publish","type":"webstorm","link":"https:\/\/blog.jetbrains.com\/webstorm\/2025\/12\/webstorm-2025-3\/","title":{"rendered":"WebStorm 2025.3: Enhanced Monorepo Support, Framework Improvements, Vitest 4 Support, Multiple Agents in AI Assistant, Remote Debugging, and More"},"content":{"rendered":"\n<p>WebStorm 2025.3 is now available!<br>After months of development, this release brings a host of new features and improvements. Highlights include:<\/p>\n\n\n\n<ul>\n<li><strong>Service\u2011powered type engine <\/strong>gradual enablement for more accurate TypeScript type evaluation.<\/li>\n\n\n\n<li><strong>Enhanced module resolution and monorepo support<\/strong>, with improved handling of pnpm and Nx workspaces.<\/li>\n\n\n\n<li>Upgraded <strong>AI Assistant<\/strong> with Claude Agent and Junie integration in a single chat.<\/li>\n\n\n\n<li><strong>Remote<\/strong> <strong>debugging for JavaScript projects<\/strong> in WSL, Docker, and dev containers, including the ability to launch a browser on your local machine during remote sessions.<\/li>\n\n\n\n<li><strong>Webref\u2011aligned CSS syntax update<\/strong>, bringing support for the latest specs and adding new math functions like <code>round()<\/code>, <code>rem()<\/code>, and <code>mod()<\/code>.<\/li>\n\n\n\n<li><strong>Unified <\/strong><strong><em>JavaScript Runtime<\/em><\/strong><strong> settings page<\/strong> that consolidates Node.js, Bun, and Deno configuration.<\/li>\n\n\n\n<li><strong>Vitest 4 support<\/strong>, enabling the correct discovery and execution of tests written for the latest Vitest version.<\/li>\n<\/ul>\n\n\n\n<p>This release also includes numerous fixes and quality\u2011of\u2011life enhancements for TypeScript, Angular, Vue, Astro, Prettier, and more.<\/p>\n\n\n\n<p>You can update to WebStorm 2025.3 via the Toolbox App or download it directly from our website. We can\u2019t wait for you to try it. Please let us know what you think \u2013 your feedback helps make WebStorm better with each release. Happy coding!<\/p>\n\n\n\n<p><p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/webstorm\/download\" target=\"_blank\" rel=\"noopener\">DOWNLOAD WEBSTORM 2025.3<\/a><\/p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Key improvements<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>TypeScript&nbsp;<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Service\u2011powered type engine&nbsp;<\/h4>\n\n\n\n<p><br>The experimental type engine introduced via the WebStorm@next program now has an official name: the <strong>service\u2011powered type engine<\/strong>. This engine delegates type evaluation to the TypeScript language service instead of WebStorm\u2019s internal type resolver. It generally reduces CPU usage, improves performance in many scenarios, and ensures better compatibility with native TypeScript behavior.<\/p>\n\n\n\n<p><br>Starting from 2025.3, this engine will be enabled gradually for a subset of WebStorm users. Other JetBrains IDEs remain unchanged, so their TypeScript experience is not affected. A status bar widget indicates the engine status, and you can also submit bug reports from this widget.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/image-3.png\" alt=\"\" class=\"wp-image-664290\" title=\"Service-powered type engine\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Better module resolution and monorepo support<\/h4>\n\n\n\n<p>WebStorm 2025.3 uses the <a href=\"https:\/\/www.typescriptlang.org\/tsconfig\/#customConditions\" target=\"_blank\" rel=\"noopener\">customConditions<\/a> property in <code>tsconfig.json<\/code> and \u201cdevelopment\u201d conditions in <code>exports<\/code> fields to <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-74252\/Numerous-issues-with-Nx-monorepo-using-TypeScript-project-references\" target=\"_blank\" rel=\"noopener\">support<\/a> build\u2011free editing (see the <a href=\"https:\/\/nodejs.org\/api\/packages.html#community-conditions-definitions\" target=\"_blank\" rel=\"noopener\">Node.js documentation<\/a>). This means auto\u2011imports, <em>Go to Definition<\/em>, and <em>Find Usages<\/em> work without building output directories. The automatic import mechanism has also been improved for pnpm symlinked packages. To ensure TypeScript correctly detects workspace packages, we suggest using explicit <code>exports<\/code> entries and <code>moduleResolution:\"nodenext\"<\/code> (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-74274\/Auto-import-doesnt-work-right-with-pnpm-workspaces\" target=\"_blank\" rel=\"noopener\">WEB-74887<\/a>).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Detecting out\u2011of\u2011memory errors in the TypeScript service<\/h4>\n\n\n\n<p>Large TypeScript projects can occasionally trigger out\u2011of\u2011memory (OOM) errors in the TypeScript language service. To help you diagnose and resolve these issues, WebStorm now monitors <code>stderr<\/code> output for specific OOM messages and presents a notification suggesting that you increase the service\u2019s heap size.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"1150\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/detecting_out_of_memory_errors_in_TS_service.png\" alt=\"\" class=\"wp-image-664339\" style=\"aspect-ratio:1.391304347826087;width:840px;height:auto\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">File extension handling and .mts support&nbsp;<\/h4>\n\n\n\n<p>Several long\u2011standing issues with module extensions have been resolved. A <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-74496\/Autocomplete-replaces-chosen-.mts-with-.mjs\" target=\"_blank\" rel=\"noopener\">fix<\/a> in WebStorm 2025.2.3 and 2025.3 prevents <code>.mjs<\/code> files from replacing <code>.mts<\/code> in auto\u2011imports. There is also a proposal to honor TypeScript 5.0\u2019s <code>allowImportingTsExtensions<\/code> flag via <em>Code Style | TypeScript | Use file extension = \u201cAuto\u201d<\/em>. With this configuration, <code>.ts<\/code> or <code>.js <\/code>will be chosen automatically based on your <code>moduleResolution<\/code> setting and whether allowImportingTsExtensions is <code>true<\/code> (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-60748\/TypeScript-5.0-allowImportingTsExtensions-should-override-behavior-with-typemodule-in-package.json\" target=\"_blank\" rel=\"noopener\">WEB-60748<\/a>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>AI Assistant: Junie and Claude Agent integration<\/strong><\/h3>\n\n\n\n<p>In this release, Claude Agent is now available natively inside the JetBrains AI Assistant chat interface! Agents have full access to IDE capabilities via the JetBrains MCP server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/WS253_AIA_junie.png\" alt=\"\" class=\"wp-image-664350\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>New default look: The Islands theme<\/strong><\/h3>\n\n\n\n<p>The <em>Islands<\/em> theme is now the default look in WebStorm and other JetBrains IDEs. Designed to help you stay focused and code with ease, it features instantly recognizable tabs, enhanced in-editor contrast, distinct separation between work areas, and rounded corners. This update is purely visual, so all functionality remains unchanged.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/image-6.png\" alt=\"\" class=\"wp-image-664448\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Debugging JavaScript projects in remote environments<\/strong><\/h3>\n\n\n\n<p>You can now use WebStorm\u2019s built-in JavaScript debugger when developing remotely with WSL, Docker, or other remote setups.&nbsp;<\/p>\n\n\n\n<p>For frontend projects, the IDE launches a browser on your client machine that connects back to the remote environment, allowing you to set breakpoints and step through your code with the same workflow you use locally. WebStorm 2025.3 includes support for JavaScript debug and npm run configurations. We\u2019re actively gathering feedback to guide further improvements.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Angular<\/strong><\/h3>\n\n\n\n<ul>\n<li><strong>Angular 20.2 <code>as<\/code> aliases in <code>else if<\/code> blocks<\/strong> \u2013 WebStorm now <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-74381\/Angular-20.2-Support-as-aliases-on-else-if-blocks\" target=\"_blank\" rel=\"noopener\">understands<\/a> the new syntax introduced in Angular 20.2, allowing aliases in <code>@else if<\/code> conditions. Available in WebStorm 2025.3, this fix will also be backported to 2025.2.3.<\/li>\n\n\n\n<li><strong>Support for Angular 20.1\u2019s<\/strong> <strong>binary assignment operators <\/strong>(<code>+= <\/code>and <code>-=<\/code>) in template bindings is now available in WebStorm 2025.2.1 and 2025.3 (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-73861\" target=\"_blank\" rel=\"noopener\">WEB\u201173861<\/a>).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Vue<\/strong><\/h3>\n\n\n\n<ul>\n<li><strong>Initial Vapor mode support<\/strong> \u2013 Vue 3.6 introduced Vapor mode, a lightweight compiler that eliminates the runtime. WebStorm 2025.3 adds initial support for this, including:\n<ul>\n<li>Recognition of the new <code>createVaporApp<\/code> factory function \u2013 directives registered in the application are treated as Vapor directives.<\/li>\n\n\n\n<li>The <em>New Vue Component<\/em> wizard can now generate Vapor components that use either <code>&lt;script vapor&gt;<\/code> or <code>&lt;script setup vapor&gt;<\/code>.<\/li>\n\n\n\n<li>Directives declared in a component\u2019s <code>script<\/code> section or registered via an application or plugin are recognised \u2013 global directives are partially supported.<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Composition and two\u2011script blocks<\/strong> \u2013 WebStorm <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-70815\/Having-both-script-and-script-setup-blocks-in-Vue-SFC-breaks-auto-complete-suggestions\" target=\"_blank\" rel=\"noopener\">now supports <\/a>multiple <code>&lt;script&gt;<\/code> blocks in single file components.<br><\/li>\n\n\n\n<li><strong>Plugin\u2011registered directives<\/strong> \u2013 Vue 3 directives registered through plugins are now recognized. WebStorm 2025.3 adds support for both plugin forms (function and object with <code>install<\/code>). Directives are collected when the plugin is registered using <code>app.use(myPluginWithDirectives)<\/code>, but not when the plugin is invoked as a function (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-52800\/Vue3-directives-registered-through-the-plug-in-method-cannot-be-recognized\" target=\"_blank\" rel=\"noopener\">WEB-52800<\/a>).<br><\/li>\n\n\n\n<li><strong>Global components and global directives<\/strong> \u2013 We\u2019ve fixed the issue where global components declared in the <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">GlobalComponents<\/code> interface were not resolved. Our<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-73178\/Vue-global-components-declared-in-GlobalComponents-interface-not-resolved-in-template\" target=\"_blank\" rel=\"noopener\"> fix<\/a> adds support for <code>.d.ts<\/code> files in the <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">types<\/code> field of <code>compilerOptions<\/code> and makes the <code>.d.ts<\/code> extension optional. Additionally, WebStorm 2025.3 implements support for the <code>GlobalDirectives<\/code> interface, for example, Vuetify\u2019s <code>vVuetifyClickOutside<\/code>.<br><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>CSS<\/strong><\/h3>\n\n\n\n<p>WebStorm 2025.3 includes a major CSS syntax data update based on synchronization with WebRef. This <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-70107\/umbrella-CSS-syntax-checker#focus=Comments-27-12884393.0-0\" target=\"_blank\" rel=\"noopener\">generic solution<\/a> brings the latest specification data into the IDE, ensuring modern and accurate CSS support.<\/p>\n\n\n\n<p>This includes support for math functions <code>round()<\/code>, <code>rem()<\/code>, and <code>mod()<\/code>, as well as color-related features like <code>color()<\/code>, <code>conic-gradient()<\/code>, and others. If you encounter issues or have suggestions, please comment on the <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-70107\" target=\"_blank\" rel=\"noopener\">umbrella issue<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Vitest<\/strong><\/h3>\n\n\n\n<p>Vitest 4 introduced breaking changes to its reporter API, which previously caused WebStorm to show <em>No tests found<\/em> errors for Vitest 4 suites. The integration has been updated to work with the new API and is <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-75191\/No-tests-found-when-running-Vitest-4-tests\" target=\"_blank\" rel=\"noopener\">available<\/a> in the 2025.3 release.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Astro<\/strong><\/h3>\n\n\n\n<p>Fixes to the Astro parser remove false errors when using expressions inside HTML tags and eliminate incorrect highlighting of truthy tags (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-60565\/Astro-project-highlights-html-markup-incorrectly-as-invalid-when-using-truthy-tag\" target=\"_blank\" rel=\"noopener\">WEB-60565<\/a>, <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-69032\/Astro-support-expressions-in-HTML-raw-text-content\" target=\"_blank\" rel=\"noopener\">WEB-69032<\/a>).&nbsp;<\/p>\n\n\n\n<p>These changes make Astro templates behave correctly in the IDE. In parallel, the team is working on a broader update to align WebStorm\u2019s Astro support with the official Astro Language Server for even better compatibility in a future release.<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Prettier<\/strong><\/h3>\n\n\n\n<p>The new <strong>Prettier language status widget<\/strong> indicates whether the current file is handled by Prettier, displays any formatting errors on save, and provides a <em>Go to Configuration File<\/em> action for quick access to your <code>.prettierrc<\/code> or equivalent configuration files.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/prettier_language_status_widget.png\" alt=\"\" class=\"wp-image-664361\"\/><\/figure>\n\n\n\n<p>WebStorm can now <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-74085\/Automatically-format-code-with-Prettier-upon-pasting-into-an-editor\" target=\"_blank\" rel=\"noopener\">automatically run<\/a> Prettier when you paste code, ensuring that pasted snippets immediately conform to your project\u2019s Prettier configuration. You can enable or disable this behaviour in the <em>Code Style <\/em>settings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Unified <\/strong><strong><em>JavaScript Runtime<\/em><\/strong><strong> settings page<\/strong><\/h3>\n\n\n\n<p>WebStorm 2025.3 introduces a <strong>unified <em>JavaScript Runtime<\/em> settings page<\/strong> that consolidates Node.js, Bun, and Deno configuration. From this single page, you can configure interpreters for all supported runtimes and select the appropriate one for <code>.js<\/code> or <code>.ts<\/code> run configurations. Please keep in mind that Node.js is still used for the TypeScript and language servers (<a href=\"https:\/\/youtrack.jetbrains.com\/issue\/WEB-73571\" target=\"_blank\" rel=\"noopener\">WEB\u201173571<\/a>).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1600\" height=\"1480\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/unified_javascript_runtime_settings.png\" alt=\"\" class=\"wp-image-664373\"\/><\/figure>\n\n\n\n<p>If you\u2019d like a list of everything included in&nbsp;<a href=\"https:\/\/www.jetbrains.com\/webstorm\/download\" target=\"_blank\" rel=\"noreferrer noopener\">WebStorm 2025.3<\/a>, please check out the&nbsp;<a href=\"https:\/\/youtrack.jetbrains.com\/articles\/WEB-A-233538698\/WebStorm-2025.3-253.28294.332-build-Release-Notes\" target=\"_blank\" rel=\"noreferrer noopener\">release notes<\/a>. As always, please share your feedback with us and report any issues you find to our&nbsp;<a href=\"https:\/\/youtrack.jetbrains.com\/issues\/WEB\" target=\"_blank\" rel=\"noreferrer noopener\">issue tracker<\/a>.<\/p>\n\n\n\n<p><em>The WebStorm team<\/em><\/p>\n","protected":false},"author":1474,"featured_media":664513,"comment_status":"closed","ping_status":"closed","template":"","categories":[89,907],"tags":[8981],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/webstorm\/664279"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/webstorm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/types\/webstorm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/users\/1474"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/comments?post=664279"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/webstorm\/664279\/revisions"}],"predecessor-version":[{"id":684274,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/webstorm\/664279\/revisions\/684274"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media\/664513"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=664279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=664279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=664279"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=664279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}