<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog</title>
	<atom:link href="https://blog.jetbrains.com/idea/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.jetbrains.com</link>
	<description>Developer Tools for Professionals and Teams</description>
	<lastBuildDate>Sat, 22 Aug 2026 11:31:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.jetbrains.com/wp-content/uploads/2024/01/cropped-mstile-310x310-1-32x32.png</url>
	<title>IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog</title>
	<link>https://blog.jetbrains.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Spring Boot Configuration Management Best Practices</title>
		<link>https://blog.jetbrains.com/idea/2026/08/spring-boot-configuration-management-best-practices/</link>
		
		<dc:creator><![CDATA[Siva Katamreddy]]></dc:creator>
		<pubDate>Fri, 21 Aug 2026 08:35:26 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/IJ-social-BlogFeatured-1280x720-1-2.png</featuredImage>		<category><![CDATA[idea]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[best-practices]]></category>
		<category><![CDATA[spring-boot]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=730538</guid>

					<description><![CDATA[Spring Boot provides comprehensive externalized application configuration support. It enables one application artifact to run in different environments by supplying values from various sources such as: In this article, we&#8217;ll explore the best practices for managing Spring Boot application configuration.A well-designed configuration strategy should ensure that: Configuration properties classification Typically, Spring Boot application configuration falls [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Spring Boot provides comprehensive <a href="https://docs.spring.io/spring-boot/reference/features/external-config.html#features.external-config" target="_blank" rel="noopener">externalized application configuration</a> support. It enables one application artifact to run in different environments by supplying values from various sources such as:</p>



<ul class="wp-block-list">
<li>Property files</li>



<li>Environment variables</li>



<li>System properties</li>



<li>Command-line arguments</li>
</ul>



<p><br>In this article, we&#8217;ll explore the best practices for managing Spring Boot application configuration.<br>A well-designed configuration strategy should ensure that:</p>



<ul class="wp-block-list">
<li>Configuration remains separate from the application code. </li>
</ul>



<ul class="wp-block-list">
<li>The application fails to start when the required configuration is missing or invalid.</li>
</ul>



<ul class="wp-block-list">
<li>Default values can be overridden for each deployment environment.</li>
</ul>



<ul class="wp-block-list">
<li>Sensitive values are supplied by a dedicated secrets management system.</li>
</ul>



<h2 class="wp-block-heading">Configuration properties classification</h2>



<p>Typically, Spring Boot application configuration falls into three categories:</p>



<ul class="wp-block-list">
<li><strong>Application defaults:</strong> Safe, non-secret values such as third-party service URLs, timeouts, and retry limits. Store these with the application.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Deployment configuration:</strong> Values that identify an environment, such as database hosts, queue names, and external service URLs. Supply these through the deployment platform.</li>
</ul>



<ul class="wp-block-list">
<li><strong>Secrets:</strong> Passwords, API keys, certificates, and private keys. Store these in a dedicated secrets system.</li>
</ul>



<p></p>



<p>For example, <code>application.properties</code> can provide application default configuration properties:<br></p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">app.promotion-service.base-url=http://localhost:8181
app.promotion-service.timeout=3s
app.promotion-service.retries=3
logging.level.com.jetbrains=DEBUG
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.open-in-view=false</pre>



<p>A default value should be safe for every environment in which it may be used. Properties such as database URLs and credentials should never be hard-coded in the application code. If a required value has no safe default, validate its presence during startup.</p>



<h2 class="wp-block-heading">Use @ConfigurationProperties for binding application properties</h2>



<p>Spring applications can access configuration values through <code>Environment</code>, <code>@Value</code>, or <code>@ConfigurationProperties</code>.</p>



<p>Use <code>Environment</code> when property names must be resolved dynamically or infrastructure code needs direct access to property sources.</p>



<p>Use <code>@Value</code> for isolated values:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">PromotionService(
  @Value("${app.promotion-service.base-url}") String baseUrl,
  @Value("${app.promotion-service.timeout}") Duration timeout,
  @Value("${app.promotion-service.retries}") int retries) {
    this.baseUrl = baseUrl;
    this.timeout = timeout;
    this.retries = retries;
}</pre>



<p>Scattered <code>@Value</code> expressions make property names difficult to discover, validate, and refactor. A dedicated configuration type using <code>@ConfigurationProperties</code> supports all these features.</p>



<p>For related configuration properties, prefer <code>@ConfigurationProperties</code>. It provides:</p>



<ul class="wp-block-list">
<li>Type-safe binding and conversion</li>



<li>Relaxed binding between property names and Java members</li>



<li>Group-level validation</li>



<li>IDE completion and navigation through generated metadata</li>
</ul>



<p></p>



<p>For example, if we are integrating with a third-party REST API, we may want to configure the service base URL, timeout, and number of retries.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">app.promotion-service.base-url=${PROMOTION_SERVICE_URL}
app.promotion-service.timeout=${PROMOTION_SERVICE_TIMEOUT:3s}
app.promotion-service.retries=3</pre>



<p>In the above configuration, we are setting <code>base-url</code> value from the environment variable <code>PROMOTION_SERVICE_URL</code> and <code>timeout</code> value from the <code>PROMOTION_SERVICE_TIMEOUT</code> environment variable with a default value of 3 seconds.</p>



<p>Spring Boot supports setter-based binding. You can bind properties to a class that uses setters as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@ConfigurationProperties(prefix = "app.promotion-service")
public class PromotionSvcProperties {

    private String baseUrl;
    private Duration timeout;
    private int retries;

    // Setters and getters
}</pre>



<p>Register configuration types using <code>@ConfigurationPropertiesScan</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@SpringBootApplication
@ConfigurationPropertiesScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}</pre>



<p>The <code>@ConfigurationPropertiesScan</code> annotation scans for <code>@ConfigurationProperties</code> annotated components and registers them as Spring beans.</p>



<p>Now we can inject <code>PromotionSvcProperties</code> into other Spring beans and access property values.</p>



<h2 class="wp-block-heading">Prefer Records for @ConfigurationProperties binding</h2>



<p>Typically, configuration is normally established during startup and remains unchanged for the lifetime of the application.</p>



<p>For most application configurations, a Java record is the preferred option. It provides immutability out of the box so that their values won’t be modified even by mistake in contrast to class-based binding where you can accidentally invoke a setter:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@ConfigurationProperties(prefix = "app.promotion-service")
public record PromotionSvcProperties(
        String baseUrl,
        Duration timeout,
        int retries) {
}</pre>



<p>Spring Boot&#8217;s relaxed binding maps canonical kebab-case names such as <code>base-url</code> to the <code>baseUrl</code> field.</p>



<p>Sometimes we may want to bind properties to a bean provided by a third-party library, and we can’t change their source code to add <code>@ConfigurationProperties</code> annotation.</p>



<p>To bind configuration properties directly to a third-party class, declare it as a <code>@Bean</code> and annotate the bean method with <code>@ConfigurationProperties</code>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Configuration
public class ClientConfiguration {

    @Bean
    @ConfigurationProperties(prefix = "third-party.client")
    public ThirdPartyClientProperties clientProperties() {
        return new ThirdPartyClientProperties();
    }
}</pre>



<p>You can configure the <code>third-party.client</code> properties as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">third-party.client.base-url=https://api.example.com
third-party.client.connect-timeout=5s
third-party.client.read-timeout=30s</pre>



<p>If the third-party class is immutable or not supports setter binding, create your own properties class and use it to construct the third-party object:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@ConfigurationProperties(prefix = "third-party.client")
public record ClientProperties(
    URI baseUrl,
    Duration connectTimeout,
    Duration readTimeout
) {}


@Configuration
@EnableConfigurationProperties(ClientProperties.class)
class ClientConfiguration {

    @Bean
    ThirdPartyClient thirdPartyClient(ClientProperties properties) {
        return new ThirdPartyClient(
                properties.baseUrl(),
                properties.connectTimeout(),
                properties.readTimeout()
        );
    }
}</pre>



<p>The wrapper approach is generally preferable because it avoids coupling your application configuration directly to the third-party library&#8217;s class structure.</p>



<h2 class="wp-block-heading">Fail fast, fail early: validate configuration during startup</h2>



<p>Configuration errors should be detected on application startup and fail fast if a configuration is missing or invalid. Add <code>@Validated</code> to a <code>@ConfigurationProperties</code> bean and apply <strong>Jakarta Bean Validation</strong> constraints to its properties.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Validated
@ConfigurationProperties(prefix = "app.promotion-service")
public record PromotionSvcProperties(
 @NotBlank String baseUrl,
        @NotNull Duration timeout,
        @Min(1) @Max(5) int retries,
        @NotNull @Valid SyncProperties sync) {

    public record SyncProperties(@NotEmpty String cron) {
    }
}</pre>



<p>With <code>spring-boot-starter-validation</code> on the classpath, binding or validation failures stop application startup. Validate required values, numeric ranges, nested groups, and other application-level constraints.</p>



<p>Use wrapper types when absence must be distinguished from a Java default. For example, an <code>Integer</code> annotated with <code>@NotNull</code> can identify a missing value, while an <code>int</code> defaults to 0.</p>



<h2 class="wp-block-heading">Understand property precedence</h2>



<p>Spring Boot combines multiple property sources. When the same property appears in more than one source, the source with higher precedence supplies the effective value.</p>



<p>The following simplified order shows the sources most commonly used in application deployments, from lowest to highest precedence:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">application.properties/yaml (low-precedence)
           ↓
profile-specific configuration files
           ↓
OS environment variables
           ↓
Java system properties
           ↓
command-line arguments    (high-precedence)</pre>



<p>Spring Boot configuration loading precedence matters when troubleshooting a value that differs from the expected configuration value.</p>



<p>Environment variables are widely supported by operating systems, container runtimes, and cloud platforms. Spring Boot derives environment variable names from canonical property names by replacing dots with underscores, removing dashes, and converting the result to uppercase:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">app.payment-timeout     -> APP_PAYMENT_TIMEOUT
spring.datasource.url   -> SPRING_DATASOURCE_URL</pre>



<p>Determining the effective value of a property can be challenging when it is defined in multiple configuration sources. IntelliJ IDEA can display resolved configuration values as editor inlay hints. Selecting a hint identifies the property source that supplies the value and indicates whether it is overridden by another source, such as an environment variable or a system property.</p>



<figure class="wp-block-video"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/08/effective-config-values.mp4"></video></figure>



<p>IntelliJ IDEA also provides navigation between property declarations, <code>@ConfigurationProperties</code> members, and property usages. For custom configuration properties, this support is enhanced by the metadata generated by <code>spring-boot-configuration-processor</code>.</p>



<figure class="wp-block-video"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/08/property-navigation.mp4"></video></figure>



<h2 class="wp-block-heading">Store secrets in a dedicated system</h2>



<p>Do not store passwords, API keys, certificates, or private keys in source control. Use a system such as <a href="https://www.hashicorp.com/en/products/vault" target="_blank" rel="noopener">HashiCorp Vault</a>, <a href="https://aws.amazon.com/secrets-manager/" target="_blank" rel="noopener">AWS Secrets Manager</a>, <a href="https://cloud.google.com/security/products/secret-manager" target="_blank" rel="noopener">Google Cloud Secret Manager</a>, <a href="https://azure.microsoft.com/en-us/products/key-vault" target="_blank" rel="noopener">Azure Key Vault</a>, or an equivalent platform service.</p>



<p>Ensure that secrets are excluded from logs, error messages, configuration metadata, and publicly accessible management endpoints.</p>



<p><strong>NOTE:</strong> In non-production environments, the <strong>Actuator</strong> <code>env</code> endpoint can help identify the source of an effective property. It should not be exposed publicly because configuration may contain sensitive information.</p>



<h2 class="wp-block-heading">Recommended configuration management</h2>



<p>There is no single configuration-management approach that works for every application. Choose a strategy based on the application&#8217;s architecture, deployment environment, and complexity.</p>



<h3 class="wp-block-heading">Monolith</h3>



<p>For a monolithic application, keep shared defaults in the application, use profile-specific files only where necessary, and supply deployment-specific overrides through environment variables. Store sensitive values in a dedicated secret manager.</p>



<h3 class="wp-block-heading">Containerized workloads</h3>



<p>For workloads running in a container platform such as Kubernetes, keep sensible defaults in the application and provide deployment-specific configuration through <a href="https://kubernetes.io/docs/concepts/configuration/configmap/" target="_blank" rel="noopener">ConfigMaps</a>. Store secrets separately in a dedicated secret-management system.</p>



<h3 class="wp-block-heading">Microservices</h3>



<p>For a microservices architecture, consider <a href="https://spring.io/projects/spring-cloud-config" target="_blank" rel="noopener">Spring Cloud Config Server</a> to centralize configuration, governance, and versioning. Continue to manage secrets through a dedicated secret-management system.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>Effective application configuration starts with sensible defaults, type-safe <code>@ConfigurationProperties</code>, and startup validation. Keep environment-specific values outside the application, understand property-source precedence, and store secrets in a dedicated secret-management system.</p>



<p>The right configuration strategy should reflect the application&#8217;s architecture and deployment environment.</p>



<p>During local development and <a href="https://blog.jetbrains.com/idea/2026/01/spring-boot-debugging-now-remote/">debugging remotely</a>, IntelliJ IDEA helps reveal the effective configuration by showing resolved property values and their sources, highlighting overrides, and providing navigation between configuration files and bound Java properties.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Use AI Agents in IntelliJ IDEA With ACP</title>
		<link>https://blog.jetbrains.com/idea/2026/08/how-to-use-ai-agents-in-intellij-idea-with-acp/</link>
		
		<dc:creator><![CDATA[Anton Arhipov]]></dc:creator>
		<pubDate>Wed, 12 Aug 2026 14:50:50 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/Blog-Featured-AI-Agents-1280x720-1.png</featuredImage>		<category><![CDATA[ai]]></category>
		<category><![CDATA[ai-assistant]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[acp]]></category>
		<category><![CDATA[ai-agent]]></category>
		<category><![CDATA[ai-in-ij]]></category>
		<category><![CDATA[intelij-idea]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=730793</guid>

					<description><![CDATA[The Agent Client Protocol (ACP) defines a common contract between a client – like IntelliJ IDEA – and an agent. IntelliJ IDEA already includes several ACP-compatible agents: Codex, Claude Agent, and Junie. Beyond these bundled options, the ACP Registry provides more choices, and teams can register internal or unlisted agents through acp.json. The key idea [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The <a href="https://agentclientprotocol.com/protocol/overview" target="_blank" rel="noopener">Agent Client Protocol (ACP)</a> defines a common contract between a client – like IntelliJ IDEA – and an agent. IntelliJ IDEA already includes several ACP-compatible agents: Codex, Claude Agent, and Junie. Beyond these bundled options, the ACP Registry provides more choices, and teams can register internal or unlisted agents through acp.json.</p>



<p>The key idea is the <strong>boundary</strong>. IntelliJ IDEA remains the environment where you navigate the project, inspect code, and review changes. Across the ACP connection, each agent maintains its own models, behavior, authentication, and agent-side tools.</p>



<p>This makes the replaceable unit larger than an LLM. An ACP-compatible agent includes the full harness around the model: its planning logic, tools, model-routing behavior, and observability. Because ACP standardizes the boundary between the IDE and the agent, you can swap one agent for another smoothly, without changing how IntelliJ IDEA integrates with it.&nbsp;</p>



<h2 class="wp-block-heading"><strong>ACP in a nutshell</strong></h2>



<p>ACP is often described as the LSP (Language Server Protocol) for coding agents. The analogy works because the integration problem is similar.</p>



<p>Before the LSP, supporting each language meant writing a separate editor integration. The <a href="https://blog.jetbrains.com/idea/2026/08/intellij-idea-goes-lsp/">LSP</a> replaced that matrix with a single contract.</p>



<p>ACP applies the same idea to the connection between an editor or IDE and a coding agent. Any ACP-compatible agent can connect without requiring a bespoke plugin or&nbsp; private API for each pairing.</p>



<p>ACP originated from a <a href="https://blog.jetbrains.com/ai/2025/10/jetbrains-zed-open-interoperability-for-ai-coding-agents-in-your-ide/">collaboration between JetBrains and Zed</a>, with both JetBrains IDEs and Zed targeted as clients from the start.</p>



<p>For local agents, IntelliJ IDEA starts a subprocess and communicates with it via JSON-RPC over standard input and output. During initialization, the IDE and the agent negotiate protocol versions and capabilities. Once connected, prompts flow to the agent, while progress updates, file operations, and permission requests return to the IDE.</p>



<p>Agents can still behave differently under that shared contract. During initialization, each one declares the optional capabilities it supports. Plans, modes, slash commands, session loading, terminal operations, and other features can differ between agents.</p>



<p>ACP carries the interaction between IntelliJ IDEA and the agent. Additional tools and context can reach the agent through MCP (Model Context Protocol), including user-configured servers and the integrated IntelliJ MCP server.</p>



<h1 class="wp-block-heading">Start with an available agent</h1>



<p>IntelliJ IDEA ships with several agents that require no manual ACP configuration, including Codex, Claude Agent, and Junie. Choose one and describe the task you want it to handle.</p>



<p>Each agent has its own workflow style, which may include a planning mode, slash commands, or a particular authentication flow. ACP lets IntelliJ IDEA host that interaction through a shared contract while preserving those differences.</p>



<p>Ask the agent to make a small change. After it edits a file, AI Chat shows the changed file in the conversation. Click it to open the diff in the editor beside the chat and inspect exactly what changed.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" fetchpriority="high" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image3-1.png" alt="" class="wp-image-730827"/></figure>



<p>That edit-and-review loop is the part worth keeping. If you switch agents later, having the loop inside the IDE prevents you from having to move the project or review changes in a separate tool.</p>



<h1 class="wp-block-heading">Install an agent from the ACP Registry</h1>



<p>The <a href="https://agentclientprotocol.com/registry" target="_blank" rel="noopener">ACP Registry</a> contains additional ACP-compatible agents, together with the metadata IntelliJ IDEA needs to install them.</p>



<p>In IntelliJ IDEA, open <em>Settings | Tools | AI Assistant | Agents</em> and then choose an agent from the registry. The <a href="https://www.jetbrains.com/help/ai-assistant/acp.html#install-agent-from-registry" target="_blank" rel="noopener">current ACP documentation</a> describes the complete installation flow.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image-44.png" alt="" class="wp-image-730797"/></figure>



<p>The agent&#8217;s configuration view also lets you expose the MCP servers configured in AI Assistant, the integrated IntelliJ MCP server, or both.</p>



<p>IntelliJ IDEA downloads the agent files when you apply the settings. The first session may ask you to authenticate using a method supported by that agent.</p>



<p>The registry also supplies the metadata used for updates and uninstallation. These operations remain in the <em>Agents</em> settings, so adding an agent does not require maintaining another IDE plugin.</p>



<p>Each registry agent retains its own license, service, credentials, and privacy terms. Check these details before granting repository access.</p>



<h1 class="wp-block-heading">Connect a custom agent with acp.json</h1>



<p>Registry agents are intended for broad distribution. An internal agent, however, often has a narrower role and should stay inside the company.</p>



<p>If an internal agent implements ACP, register it in ~/.jetbrains/acp.json. IntelliJ IDEA provides an <em>Add Custom Agent</em> action that creates and opens this file, but you can also edit the file directly.</p>



<p>The configuration below registers a hypothetical company migration agent:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="json" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
  "agent_servers": {
    "Company Migration Agent": {
      "command": "/opt/company/bin/migration-agent",
      "args": ["acp"]
    }
  }
}
</pre>



<p>Each key under agent_servers becomes the agent&#8217;s display name. The command value must contain the full path to the executable that IntelliJ IDEA will start. Place the arguments required to activate that agent&#8217;s ACP mode in args; the exact values come from the agent&#8217;s documentation.</p>



<p>Use env when the process needs environment variables. Many agents expect you to authenticate through their CLI first and reuse credentials stored in the agent&#8217;s user configuration. If an agent accepts an API key through env, follow its documentation and avoid committing the file or its secrets to a repository.</p>



<p>Save <code>acp.json</code> and then select the configured agent in IntelliJ IDEA.</p>



<p>If any ACP-compatible agents are already installed on the machine, the IDE will detect them and offer to add them to the configuration.</p>



<h1 class="wp-block-heading">Why use more than one agent?</h1>



<p>Teams may want different agents for different kinds of work. ACP gives those agents a common way to connect to IntelliJ IDEA:</p>



<ul class="wp-block-list">
<li>Connecting an ACP-compatible agent through `<code>acp.json</code>` avoids developing and maintaining a separate IntelliJ IDEA plugin.</li>



<li>Navigation, editing, and diff review remain in IntelliJ IDEA while developers choose the agent for the work.</li>



<li>If an agent&#8217;s service or model provider is unavailable, developers can switch to another configured agent and continue working in the same IntelliJ IDEA project.</li>
</ul>



<h1 class="wp-block-heading">Keep the IDE, choose the agent</h1>



<p>Use an agent already available in IntelliJ IDEA, install one from the ACP Registry, or register an internal agent in <code>acp.json</code>.</p>



<p>ACP turns the coding agent from an IDE commitment into a replaceable choice you can revisit at any time.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Top 5 AI Features in IntelliJ IDEA</title>
		<link>https://blog.jetbrains.com/idea/2026/08/top-5-ai-features-in-intellij-idea/</link>
		
		<dc:creator><![CDATA[Anton Arhipov]]></dc:creator>
		<pubDate>Wed, 12 Aug 2026 07:58:30 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/Blog-Featured-5-AI-Features-1280x7200-1.png</featuredImage>		<category><![CDATA[agentic-ai]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[ai-agent]]></category>
		<category><![CDATA[ai-in-ij]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=727710</guid>

					<description><![CDATA[When developers hear &#8220;AI in the IDE&#8221;, the first thing that often comes to mind is a chat window. IntelliJ IDEA includes an AI chat, but JetBrains AI features also appear in many other parts of the development workflow. Some of those features are easy to miss because they are built into existing IDE actions: [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>When developers hear &#8220;AI in the IDE&#8221;, the first thing that often comes to mind is a chat window. IntelliJ IDEA includes an AI chat, but JetBrains AI features also appear in many other parts of the development workflow.</p>



<p>Some of those features are easy to miss because they are built into existing IDE actions: editing code, generating code in place, explaining selected code, working with stack traces, writing commit messages, and choosing which model or agent should handle a task. This overview focuses on five AI features in IntelliJ IDEA that are worth knowing about, with a few additional capabilities explained at the end. The list starts with one that can help before you even open the chat.</p>



<h1 class="wp-block-heading">1. AI completion</h1>



<p>You change a line, and the IDE points out the next line that needs to be changed to match. Rename a field, and it walks you to the other places that reference it, one keystroke at a time. Press <em>Tab</em> to jump to the spot, and <em>Tab</em> again to accept the edit. Ordinary completion guesses what should follow directly under your cursor. This type looks a step ahead, at the edit you haven&#8217;t made yet.</p>



<p>It runs on JetBrains&#8217; own models, tuned for coding, and it stays out of your way. Fix the spacing after one comma in a parameter list, and it will offer to fix every other comma in the file. On a larger scale, this is also where full-method generation is handled – the editor has enough local shape to fill in a method body without turning the task into a chat session.</p>



<p>The feature is easiest to understand in small edits. Change one line, and IntelliJ IDEA suggests the next related change in the file.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image4.png" alt="" class="wp-image-728576"/></figure>



<h1 class="wp-block-heading">2. In-editor code generation</h1>



<p>Press <em>Ctrl+\</em> anywhere in a file, type what you want in plain words, like &#8220;turn this loop into a stream&#8221; or &#8220;give me a builder for this class&#8221;, and the code appears right there at the cursor. The code lands in place, and you never have to switch to a chat to copy an answer back out of a conversation.</p>



<p>For a small, well-scoped change, the convenience is that the prompt starts where the edit happens. You type the instruction in the editor, review the generated code in place, and keep moving.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image10.png" alt="" class="wp-image-728587"/></figure>



<p>The generated code appears as an in-editor diff, so you can accept it, reject it, or refine the prompt. If the first version misses a constraint, add more context, ,like&nbsp; &#8220;Keep the method name&#8221; or &#8220;use Optional instead of null&#8221;. IntelliJ IDEA regenerates the code with the extra information and shows the new diff in the same place.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image7.png" alt="" class="wp-image-728598"/></figure>



<p>It is the hidden gem in the list – a general-purpose prompt you can invoke at the cursor for small, arbitrary edits, without opening the AI chat or copying code back into the file.</p>



<h1 class="wp-block-heading">3. AI Actions</h1>



<p><em>AI Actions</em> is the menu for people who never want to have a conversation with our model. Select a piece of code, press <em>Alt+Enter</em>, and choose from a variety of useful actions – no chat required.</p>



<p><em>Explain Code</em> takes a regex you didn&#8217;t write, a SQL query someone left you, or a cron expression, and tells you in plain English what it does. <em>Generate Unit Tests</em> opens the tests in a diff, so you can argue with them before they land in your project. <em>Generate Documentation</em> writes the doc comment for a public method. These actions keep you in the file. Point at your chosen code, pick an action, and get an actionable response immediately.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image8.png" alt="" class="wp-image-728609"/></figure>



<h1 class="wp-block-heading">4. Bring your own agent</h1>



<p>At some point, the task stops being a single editor action. It needs file changes, tests, and a diff you can review. Through the Agent Client Protocol (ACP), you connect an external coding agent and drive it from the same place where you already inspect files, diffs, tests, and problems. Think of ACP as the LSP for agents: one protocol, so the IDE doesn’t need a custom integration for every new agent that appears next month. JetBrains&#8217; own agent, Junie, shows up in the same registry as the third-party agents and receives no special treatment.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image5.png" alt="" class="wp-image-728620"/></figure>



<p>You ask the agent to change one endpoint. It proposes the steps, edits the service and the test, runs the test command, and leaves you with a diff you can open from the chat before accepting anything. That is the IDE part of the story. The agent can act, but the review still happens where you already review code.</p>



<p>Skills sit next to that. A skill is a reusable capability you set up once: triaging a CI failure, working through PR comments, converting Java to Kotlin, or nudging an agent away from the usual Spring Data JPA pagination mistake. You add skills from the <em>+</em> menu in the chat, and supported agents can use them without you having to retype the same long set of instructions every time.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image.png" alt="" class="wp-image-727730"/></figure>



<p>That is where the IDE demonstrates its worth. The agent can make a series of edits, but you can inspect each one as it appears – open the affected files, check test outputs, and review diffs before accepting anything. The chat, code, and review stay in the same window, making it easier to stay in control while the agent handles the mechanical work.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image9.png" alt="" class="wp-image-728631"/></figure>



<h1 class="wp-block-heading">5. Bring Your Own Key</h1>



<p>Once agents are in the IDE, the next decision is more straightforward – which provider your organization allows the IDE to call. Bring Your Own Key (BYOK) enables you to add the API key or endpoint for any provider your team already uses.</p>



<p>A configured key can sit behind the AI chat and selected IDE features, such as commit message generation, depending on what features the provider and model support. For some teams, the ability to use a provider that has already passed internal review matters more than support for the one at the top of the current model leaderboard.&nbsp;</p>



<p>You can configure your keys in <em>Settings | Tools | AI Assistant | Providers &amp; API keys</em>. Choose a provider under <em>Third-party AI providers</em>, enter the key or endpoint, and test the connection. Once it is connected, the provider&#8217;s models will appear in the AI chat&#8217;s model selector.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image6.png" alt="" class="wp-image-728642"/></figure>



<h1 class="wp-block-heading">Beyond the top five</h1>



<p>Aside from the top five headline features, a couple of smaller capabilities are still worth knowing about because they appear where the IDE already has context.</p>



<h2 class="wp-block-heading">When the stack trace is already in the console</h2>



<p>The run console is where optimism goes for a reality check. When your app throws an error and the stack trace lands there, the <em>Explain with AI </em>action is on hand. The IDE reads the trace and then gives you a likely cause and a suggested fix. That is a better use of thirty seconds than pasting the top line into a search engine and opening three tabs from 2017.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image3.png" alt="" class="wp-image-728653"/></figure>



<h2 class="wp-block-heading">When the staged diff needs a sentence</h2>



<p><em>Generate Commit Message</em> reads your staged diff and writes the message for you. Edit it, commit, and move on. It is a small feature, but it is exactly the kind you keep using once you know it exists.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image-1.png" alt="" class="wp-image-727785"/></figure>



<h1 class="wp-block-heading">The part you may have missed</h1>



<p>The <em>AI Chat</em> window is still here, and has gotten more interesting with agents and skills. The easy-to-miss part is the layer of AI-powered productivity features around it: edits suggested as you type, code generated at the cursor, explanations for selected code and stack traces, and commit messages written from the staged diff.</p>



<p>The final effect is boring in the best way: IntelliJ IDEA, doing a little more than it used to, without making a ceremony out of it.</p>



<p>If you tried AI Assistant a year ago and mostly remember the chat, this is the part you may have missed.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Agent Skills in IntelliJ IDEA</title>
		<link>https://blog.jetbrains.com/idea/2026/08/agent-skills-in-intellij-idea/</link>
		
		<dc:creator><![CDATA[Siva Katamreddy]]></dc:creator>
		<pubDate>Wed, 12 Aug 2026 07:58:12 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/Blog-Featured-Agent-Skills-1280x720-1.png</featuredImage>		<category><![CDATA[ai]]></category>
		<category><![CDATA[ai-assistant]]></category>
		<category><![CDATA[ai-agent]]></category>
		<category><![CDATA[ai-skills]]></category>
		<category><![CDATA[ai-in-ij]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=728520</guid>

					<description><![CDATA[Agent Skills have become a key building block of the Agent Harness for AI-driven agentic development. They give AI agents additional capabilities and knowledge, enabling them to complete tasks in a way that aligns with your preferences. If you are new to Agent Skills, I recommend reading AI-Assisted Java Application Development with Agent Skills first. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Agent Skills have become a key building block of the Agent Harness for AI-driven agentic development. They give AI agents additional capabilities and knowledge, enabling them to complete tasks in a way that aligns with your preferences.</p>



<p>If you are new to Agent Skills, I recommend reading <a href="https://blog.jetbrains.com/idea/2026/03/ai-assisted-java-application-development-with-agent-skills/"><em>AI-Assisted Java Application Development with Agent Skills</em></a> first.</p>



<p>IntelliJ IDEA and other JetBrains IDEs include AI Assistant, which helps developers with AI agentic development. AI Assistant provides an elegant and secure way to use and manage Agent Skills.</p>



<p>If you missed the announcement, see <a href="https://blog.jetbrains.com/ai/2026/04/skill-manager-and-skill-repository/"><em>Introducing the Skill Manager and Skill Repository</em></a>.</p>



<p>In this article, we will explore:</p>



<ul class="wp-block-list">
<li>How to install <a href="https://www.jetbrains.com/help/ai-assistant/agent-skills.html#skills-sources" target="_blank" rel="noopener">Agent Skills</a> via the Skills Manager.</li>



<li>Managing skills with the Skill Repository.</li>



<li>Installing skills globally, per project, or per agent.</li>



<li>Adding your own Skill Repository.</li>
</ul>



<h2 class="wp-block-heading">Skills Manager</h2>



<p>AI Assistant supports a wide range of AI agents through <a href="https://www.jetbrains.com/help/ai-assistant/acp.html" target="_blank" rel="noopener">ACP</a> (Agent Client Protocol).</p>



<p>The Skills Manager in AI Assistant lets you view the list of available skills and install them.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image1.png" alt="" class="wp-image-729897"/></figure>



<p>If you have already installed Agent Skills globally, the Skills Manager detects them and helps you install them as IntelliJ IDEA agent skills.</p>



<p>You can install a skill globally, at the project level, or per agent.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image4-1.png" alt="" class="wp-image-729908"/></figure>



<h2 class="wp-block-heading">Skill Repositories</h2>



<p>The Skill Repository lets you manage a list of locations where your verified skills are stored.</p>



<p>By default, JetBrains provides a Skill Repository hosted at <a href="https://github.com/JetBrains/skills" target="_blank" rel="noopener">https://github.com/JetBrains/skills</a>.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image5-1.png" alt="" class="wp-image-729919"/></figure>



<p>These skills are verified by JetBrains for security vulnerabilities.</p>



<p>It is essential to check for security issues before using agent skills downloaded from the internet. A better approach is to maintain an organization-wide Skill Repository, verified by your team, and add it to the Skill Repository list.</p>



<h2 class="wp-block-heading">Agent Skills in action</h2>



<p>Based on the prompt description, the AI agent automatically detects and uses relevant agent skills.</p>



<p>For example, I installed <a href="https://github.com/sivaprasadreddy/sivalabs-agent-skills" target="_blank" rel="noopener">spring-boot-skill</a>, and when I asked the AI agent to write tests for Spring Boot REST API endpoints, it used the <strong>spring-boot-skill</strong>.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image-8.png" alt="" class="wp-image-728554"/></figure>



<p>You can also explicitly invoke an agent skill using $skill-name [prompt] with Codex or `/skill-name [prompt]` with Claude.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image-9.png" alt="" class="wp-image-728556"/></figure>



<p></p>



<h2 class="wp-block-heading">Agentic Debugging using Debugger Skill</h2>



<p>IntelliJ IDEA also includes the bundled <code>ij-debugger</code> skill, which teaches AI agents such as Junie, Claude, and Codex how to use the IDE’s debugger. It is particularly useful when source code analysis and logs are not enough. For example, when an incorrect value appears only at runtime, execution follows an unexpected branch, or you need to inspect variables, expressions, threads, and call stacks. The agent can start and control a debugging session, manage breakpoints, step through the code, and collect runtime evidence to identify the root cause. See <a href="https://www.jetbrains.com/help/idea/agentic-debugging.html#install-skill" target="_blank" rel="noopener">Install the debugger skill</a> to make it available to your agent.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/ij-debugger-skill.png" alt="" class="wp-image-732809"/></figure>



<p>To debug your code, describe the problem in natural language and provide any useful details, such as how to reproduce it or where you suspect the issue occurs. <br><br>For example, <em>&#8220;A pet whose name differs only by case is not detected as a duplicate. Start a debug session, set a breakpoint in <code>Owner.getPet()</code>, and find out why.</em>&#8221; <br><br>The agent sets the necessary breakpoints, runs the application, inspects the call stack and runtime values, evaluates its hypotheses, and reports its findings. Because it controls the standard IntelliJ IDEA debugger, you can follow the investigation in the Debug tool window and take over at any time. <br><br>For more details, see <a href="https://www.jetbrains.com/help/idea/agentic-debugging.html?utm_source=chatgpt.com" target="_blank" rel="noopener">Agentic debugging</a>.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>AI Assistant&#8217;s Skills Manager makes agent skills part of your regular IDE workflow. You can discover, install, and manage skills without leaving IntelliJ IDEA, then make them available globally, for a specific project, or only to a particular AI agent. The AI agent can automatically select a relevant skill from your prompt, while explicit invocation gives you control when you need it.</p>



<p>Just as importantly, the Skill Repository provides access to skills verified by JetBrains for security vulnerabilities. Teams can also add their own repositories containing internally reviewed skills. This makes it easier to benefit from reusable agent capabilities while maintaining control over which skills developers use in their projects.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ IDEA 2026.2.1 Is Out!</title>
		<link>https://blog.jetbrains.com/idea/2026/08/intellij-idea-2026-2-1/</link>
		
		<dc:creator><![CDATA[Maria Kosukhina]]></dc:creator>
		<pubDate>Mon, 10 Aug 2026 13:33:37 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/IntelliJ-IDEA-2026.2.1.png</featuredImage>		<category><![CDATA[bug-fix-update]]></category>
		<category><![CDATA[intellij-idea]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=728861</guid>

					<description><![CDATA[We’ve just released the first minor update for IntelliJ IDEA 2026.2 – v2026.2.1. You can update to this version from inside the IDE, using the&#160;Toolbox App, or using snaps if you are a Ubuntu user. You can also download it from our&#160;website. Here are the most notable updates: To find out more details about the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We’ve just released the first minor update for IntelliJ IDEA 2026.2 – v2026.2.1.</p>



<p>You can update to this version from inside the IDE, using the&nbsp;<a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noreferrer noopener">Toolbox App</a>, or using snaps if you are a Ubuntu user. You can also download it from our&nbsp;<a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noreferrer noopener">website</a>.</p>



<p>Here are the most notable updates:</p>



<ul class="wp-block-list">
<li>Markdown shell scripts now execute in the correct order. [<a href="https://youtrack.jetbrains.com/issue/IJPL-92206/Markdown-shell-scripts-run-in-reverse-order" target="_blank" rel="noopener">IJPL-92206</a>]</li>



<li>Undo now works correctly after applying <em>Optimize imports on the fly</em>. [<a href="https://youtrack.jetbrains.com/issue/IDEA-285011/Optimize-Imports-On-The-Fly-breaks-Undo" target="_blank" rel="noopener">IDEA-285011</a>]<strong>&nbsp;</strong></li>



<li>Dragging a terminal tab after using the <em>Move to Editor</em> action no longer restarts the terminal session. [<a href="https://youtrack.jetbrains.com/issue/IJPL-165734/Terminal-restarts-when-dragged-after-Move-to-Editor" target="_blank" rel="noopener">IJPL-165734</a>]</li>



<li>The IDE no longer throws exceptions caused by the new <em>Resolve Conflicts</em> mechanism for Mercurial projects.[<a href="https://youtrack.jetbrains.com/issue/IJPL-249379/vcs.merge.conflict.iterative.resolution-causes-java.lang.IndexOutOfBoundsException" target="_blank" rel="noopener">IJPL-249379</a>]</li>



<li>Java code formatting now correctly respects the <em>Smart tabs</em> setting. [<a href="https://youtrack.jetbrains.com/issue/IDEA-388356/Does-not-respect-smart-tabs-setting" target="_blank" rel="noopener">IDEA-388356</a>]</li>
</ul>



<p></p>



<p>To find out more details about the issues resolved, please refer to the <a href="https://youtrack.jetbrains.com/articles/IDEA-A-2100662729/IntelliJ-IDEA-2026.2.1-262.9437.185-build-Release-Notes" target="_blank" rel="noopener">release notes</a>.</p>



<p>If you encounter any bugs, please report them to our&nbsp;<a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noreferrer noopener">issue tracker</a>.</p>



<p>Happy developing!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Println Debugging Done Right</title>
		<link>https://blog.jetbrains.com/idea/2026/08/println-debugging-done-right/</link>
		
		<dc:creator><![CDATA[Igor Kulakov]]></dc:creator>
		<pubDate>Thu, 06 Aug 2026 11:30:00 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/JB-social-BlogFeatured-1280x720-1.png</featuredImage>		<category><![CDATA[idea]]></category>
		<category><![CDATA[tips-tricks]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[intellij-idea]]></category>
		<category><![CDATA[java]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=727050</guid>

					<description><![CDATA[The simplest tools are often the most useful, and debugging is a prime example of this. There are many advanced debugging techniques, and while they all have their use cases, println debugging is still the #1 choice, whether you&#8217;re doing it manually or with the help of coding agents. Inserting a println statement to inspect [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The simplest tools are often the most useful, and debugging is a prime example of this.</p>



<p>There are many advanced debugging techniques, and while they all have their use cases, println debugging is still the #1 choice, whether you&#8217;re doing it manually or with the help of coding agents.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-45.png" alt="" class="wp-image-727139" style="width:539px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>Inserting a println statement to inspect a program&#8217;s state is one of the first things novice developers do, even before they hear the word &#8220;debugging&#8221;. Years later, simple debug logging remains one of the most useful tools for diagnosing all sorts of problems in real codebases. And now, it&#8217;s also one of the favorite tools of coding agents.</p>



<h2 class="wp-block-heading"><strong>Better foundation + modern workflows</strong></h2>



<p>The technique can be improved without losing its original simplicity. In fact, IntelliJ IDEA&#8217;s <em>logpoints</em> have long been a more capable superset of println debugging: While performing the same function, they can also be conditional, print stack traces, use hit counters and caller filters, be grouped, saved for later, and much more. If you try to imagine the most unusual debugging use case, chances are IntelliJ IDEA&#8217;s logpoints already have a feature for it (for example, did you know they can <a href="https://youtrack.jetbrains.com/issue/IJPL-88493" target="_blank" rel="noopener">beep</a>?).</p>



<p>In 2026.2, we&#8217;re taking logpoints further with several improvements focused less on specific use cases and more on strengthening the foundation:</p>



<ul class="wp-block-list">
<li><a href="https://docs.google.com/document/d/1Ul1aXOfQ99eDVETuwTJ_WnsN_-PRe_Q91UQ3ywk-1HE/edit?tab=t.0#heading=h.qhbngdwysub4" target="_blank" rel="noopener"><em>Instrumentation</em></a><em> instead of debugger-side evaluation</em>: IntelliJ IDEA now instruments your code directly for conditional and logging breakpoints, removing the bottleneck that other Java debuggers have.</li>



<li><a href="https://docs.google.com/document/d/1Ul1aXOfQ99eDVETuwTJ_WnsN_-PRe_Q91UQ3ywk-1HE/edit?tab=t.0#heading=h.khru2mg7b089" target="_blank" rel="noopener"><em>Agent compatibility</em></a>: We’ve revised logpoints so they can be used reliably by AI agents. Together with a new bundled skill, this gives agents the guidelines and handles they need to control the debugging session and use all the logpoint features of the IDE.</li>



<li><a href="https://docs.google.com/document/d/1Ul1aXOfQ99eDVETuwTJ_WnsN_-PRe_Q91UQ3ywk-1HE/edit?tab=t.0#heading=h.y874qnxxkw8i" target="_blank" rel="noopener"><em>New UI and navigation</em></a>: The new UI makes logpoints easier to set up. In addition, the console now tracks which println or logpoint produced each logging entry, letting you navigate there.</li>
</ul>



<p>All these features are supported in both local and remote JVM debug sessions.&nbsp;</p>



<p>Let&#8217;s look more closely at each of them.</p>



<h2 class="wp-block-heading"><strong>A short demo</strong></h2>



<p>For this demo, I set up a <a href="https://github.com/flounder4130/grpc-timeout.git" data-type="link" data-id="https://github.com/flounder4130/grpc-timeout.git" target="_blank" rel="noopener">mini gRPC server/client</a> scenario, in which we’re supposed to debug the server side. For those new to logpoints, the next post in this series will feature a detailed tutorial based on this project. For now, let’s examine the new features.</p>



<p>In this particular case, suspending the app with a regular breakpoint is useless. If we try to do so, the timeout expires quickly, and execution follows the cancellation path, hiding the state we were going to inspect.</p>



<p>So, instead of using a breakpoint, let&#8217;s <em>log</em> the state, preferably with a coding agent doing it for us:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-47.png" alt="" class="wp-image-727161" style="width:406px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>The agent not only sets the logpoints but also executes the run configurations, summarizes the resulting logs, finds the bug, and cleans up after itself.</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-43.png" alt="" class="wp-image-727083" style="width:433px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>Since IntelliJ IDEA tracks which logpoints belong to the agent, the agent cannot accidentally change yours. It does have full control over its own logpoints, though, including toggling them and modifying any properties that you can. When changing state is <em>necessary</em> for reproducing the bug, IntelliJ IDEA lets agents do that, but the skill steers the agent to avoid side effects and prefer logpoints whenever possible.</p>



<p>Here’s a short video showing how that works:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="IntelliJ IDEA 2026.2: ij-debugger skill" src="https://www.youtube.com/embed/HKOziq93gis?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading"><strong>Run from the terminal</strong></h2>



<p>In the example above, we&#8217;re running the agent through the AI chat, but the same works equally well with agents in the built-in terminal or outside the IDE. Once the skill is installed, it becomes available in the agent of your choice:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-46.png" alt="" class="wp-image-727150" style="width:620px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>The workflow is the same, this time with Claude Code:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-44.png" alt="" class="wp-image-727101" style="width:779px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<h2 class="wp-block-heading"><strong>Setting logpoints manually</strong></h2>



<p>Setting logpoints manually now takes a single click: Select the expression to log, and then click in the gutter between any two executable lines. If the expression is not in front of you in the editor, you can enter a custom expression afterwards:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-48.png" alt="" class="wp-image-727172" style="width:685px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>To find out which piece of code produced a specific line in the console, click the line and then select <em>Open</em>:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-49.png" alt="" class="wp-image-727183" style="width:412px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>IntelliJ IDEA will show the <em>Open</em> button that brings you to the corresponding code in the editor. Additionally, if it comes from an instrumented logpoint, the IDE will show the stack trace of how it got there – you get the same information as with the <a href="https://www.jetbrains.com/help/idea/logpoints.html#convert-breakpoint-to-logpoint" target="_blank" rel="noopener">Log stack trace</a> option, but now without cluttering the console with noisy messages.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="IntelliJ IDEA 2026.2: Logpoints" src="https://www.youtube.com/embed/swBXjtYGCjE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading"><strong>How much faster have logpoints become?</strong></h2>



<p>Many benefits of logpoints are shared across debuggers:</p>



<ul class="wp-block-list">
<li>Logpoints do not require source changes.</li>



<li>They are easy to turn on and off.</li>



<li>They let you inspect code that would otherwise be inconvenient to modify.</li>
</ul>



<p>IntelliJ IDEA&#8217;s implementation has many advantages beyond the basics, but performance is what stands out in this release.</p>



<p>If you’ve ever put a conditional or logging breakpoint in a hot path, you’ve seen the cost. With the traditional JPDA/JDWP breakpoint model, every hit suspends the application, evaluates the condition/log expression, and then resumes execution. For occasional hits this is fine, but in hot paths, this standard model becomes a bottleneck.</p>



<p>The overhead of traditional Java logpoints is not just a nuisance. The delay could hide a latency-sensitive failure, make a race condition disappear, or throttle the application load in a way that masks the problem. There’s a real risk that you would be debugging behavior introduced by the debugger itself.</p>



<p>Some time ago, I wrote about <a href="https://flounder.dev/posts/troubleshoot-slow-debugging/#conditional-breakpoints-in-hot-code" target="_blank" rel="noopener">ways to work around this</a>. Luckily, IntelliJ IDEA 2026.2 makes these hacks obsolete by instrumenting the debugged code for conditional and logging breakpoints. This chart shows the results of our internal benchmarking:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/07/image-50.png" alt="" class="wp-image-727194" style="width:643px;height:auto; width:100% !important; height:auto !important; max-width:100% !important;"/></figure>



<p>In our test set, the improvement is around 30x, making logpoints usable again in timing-sensitive code. You keep the same logpoint workflow, and so do agents, now with the performance of a regular print statement.</p>



<p>The best part is, you don’t need to do any setup to enjoy this speedup. IntelliJ IDEA will automatically detect logpoints that can be instrumented and do so behind the scenes in the same debug session, with no restart required.</p>



<h2 class="wp-block-heading"><strong>Summary</strong></h2>



<p>Logpoints are still the same simple idea that makes println debugging great: Obtain the right bit of information and put it in the most accessible place. And with the new pieces, this technique becomes even more useful for both developers and AI agents.</p>



<p>More agent skills and debugger capabilities are on the way. If there is a debugging workflow you would like agents to handle, tell us in the comments under this post. And if you have a concrete feature request for IntelliJ IDEA, please file it in our <a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noopener">YouTrack</a> so it doesn&#8217;t go unnoticed.</p>



<p>Happy debugging!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Java Annotated Monthly – August 2026 </title>
		<link>https://blog.jetbrains.com/idea/2026/08/java-annotated-monthly-august-2026/</link>
		
		<dc:creator><![CDATA[Irina Mariasova]]></dc:creator>
		<pubDate>Wed, 05 Aug 2026 12:30:38 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/IJ-social-BlogFeatured-1280x720-1.png</featuredImage>		<category><![CDATA[news]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java-annotated]]></category>
		<category><![CDATA[java-annotated-monthly]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[spring]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=728863</guid>

					<description><![CDATA[July gave the tech world plenty to talk about, from fresh releases and useful tutorials to Kotlin updates, AI experiments, and new ideas across the wider ecosystem. We packed the best of it into one issue, so you can skip scrolling and get straight to the good stuff. To top it all off, Donald Raab [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>July gave the tech world plenty to talk about, from fresh releases and useful tutorials to Kotlin updates, AI experiments, and new ideas across the wider ecosystem. We packed the best of it into one issue, so you can skip scrolling and get straight to the good stuff. To top it all off, Donald Raab joins us as this month’s featured author.</p>



<p>Let’s go!&nbsp;</p>



<h2 class="wp-block-heading">Featured Content&nbsp;</h2>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/1410569.jpeg" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Donald Raab</h4>
                                                <p>Donald Raab is a Java Champion and creator of the open source Java library Eclipse Collections. He is an international Java and open source conference speaker. Don is the author of the book <em>Eclipse Collections Categorically: Level Up Your Programming Game</em> and was a contributing author to <em>97 Things Every Java Programmer Should Know</em> from O&#8217;Reilly Media. He was a member of the JSR (Java Specification Request) 335 Expert Group, and has served on the JCP (Java Community Process) Executive Committee for two financial services firms. Donald was the winner of the JCP Member/Participant of the Year Award for 2025. He blogs regularly on his <a href="https://donraab.medium.com" target="_blank" rel="noopener">website</a>.</p>
                    </div>
                            </div>
        </div>
    </div>



<p>If there is one blog post you read this month, then I hope it will be <a href="https://stuartmarks.wordpress.com/2026/07/17/the-official-java-documentary/" target="_blank" rel="noopener">The Official Java Documentary</a> by <a href="https://stuartmarks.wordpress.com/about/" target="_blank" rel="noopener">Stuart Marks</a>.</p>



<h3 class="wp-block-heading">The importance of telling our Java stories</h3>



<p>We all have stories to tell, but they sometimes only get told when we tell them. Jim Grisanzio shared an <a href="https://www.linkedin.com/pulse/dukes-corner-archive-jim-grisanzio-eyjcc/" target="_blank" rel="noopener">archive of 77 Duke&#8217;s Corner Podcasts</a>, which is a literal treasure trove of Java stories. I am ecstatic to see Java Champions like <a href="https://mehmandarov.com/blog/" target="_blank" rel="noopener">Rustam Mehmandarov</a> blogging again. Write more please!</p>



<p>In <a href="https://donraab.medium.com/level-up-your-programming-game-with-a-java-book-and-smalltalk-3c4c9bffbb49?source=friends_link&amp;sk=d507f1de2db9a1db224ddcb539df6e78" target="_blank" rel="noopener">Level Up Your Programming Game With a Java Book and Smalltalk</a>, I tell the story of creating an open source Java library and writing a Java book inspired by my experience as a former Smalltalk developer.</p>



<h3 class="wp-block-heading">Memory efficiency is back, and it&#8217;s coming for your allocations</h3>



<p>In <a href="https://blog.vanillajava.blog/2026/06/why-you-should-tun-code-before-your.html" target="_blank" rel="noopener">Why You Should Tune Code Before Your Garbage Collector</a>, Peter Lawrey explains why optimizing memory allocation might make a bigger difference than your choice of garbage collector. As I like to say, the easiest garbage to collect is the garbage you didn&#8217;t create.</p>



<p>I&#8217;ve written a lot in the past four months about memory efficiency in Java. In <a href="https://donraab.medium.com/save-memory-in-java-by-making-memory-efficiency-your-top-priority-32fe9443eb8d?source=friends_link&amp;sk=5ae3e714963aa9a7e40fa109ebe53283[Save" target="_blank" rel="noopener">Save Memory in Java by Making Memory Efficiency Your Top Priority</a>, you will find many of the blog posts I have written recently about this topic. I&#8217;ve been teaching Java developers how to write code like it&#8217;s 2004 again, but with all the cool new Java language features.</p>



<h2 class="wp-block-heading">Java News</h2>



<p>Catch up on the latest updates:</p>



<ul class="wp-block-list">
<li>Java News Roundup <a href="https://www.infoq.com/news/2026/07/java-news-roundup-jul06-2026/?_gl=1*84h890*_up*MQ..*_ga*MjU0ODk3NzYyLjE3ODU3NjgyMjg.*_ga_VMVPD4D2JY*czE3ODU3NjgyMjckbzEkZzEkdDE3ODU3NjgzMTckajUxJGwwJGgw" target="_blank" rel="noopener">1</a>, <a href="https://www.infoq.com/news/2026/07/java-news-roundup-jul13-2026/?_gl=1*1lzllvv*_up*MQ..*_ga*MjU0ODk3NzYyLjE3ODU3NjgyMjg.*_ga_VMVPD4D2JY*czE3ODU3NjgyMjckbzEkZzEkdDE3ODU3NjgyOTQkajYwJGwwJGgw" target="_blank" rel="noopener">2</a>, <a href="https://www.infoq.com/news/2026/07/java-news-roundup-jul20-2026/?_gl=1*7bwxld*_up*MQ..*_ga*MjU0ODk3NzYyLjE3ODU3NjgyMjg.*_ga_VMVPD4D2JY*czE3ODU3NjgyMjckbzEkZzEkdDE3ODU3NjgyNTckajMwJGwwJGgw" target="_blank" rel="noopener">3</a>, <a href="https://www.infoq.com/news/2026/08/java-news-roundup-jul27-2026/?_gl=1*1cdsqbw*_up*MQ..*_ga*MjU0ODk3NzYyLjE3ODU3NjgyMjg.*_ga_VMVPD4D2JY*czE3ODU3NjgyMjckbzEkZzEkdDE3ODU3NjgyMzUkajUyJGwwJGgw" target="_blank" rel="noopener">4</a>&nbsp;</li>
</ul>



<h2 class="wp-block-heading">Java Tutorials and Tips</h2>



<p>Practical guides, clever shortcuts, and fresh ideas to help you understand Java better:&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://foojay.io/today/the-java-story-a-film-about-all-of-us/" target="_blank" rel="noopener">The Java Story: A Film About All of Us</a></li>



<li><a href="https://inside.java/2026/07/18/the-java-documentary/" target="_blank" rel="noopener">The Java Story | The Official Documentary</a></li>



<li><a href="https://inside.java/2026/06/30/zgc-performance-decade/" target="_blank" rel="noopener">ZGC: A Decade of Redefining Java Performance</a></li>



<li><a href="https://foojay.io/today/nulling-out-references-wont-help-your-garbage-collector/" target="_blank" rel="noopener">Nulling Out References Won’t Help Your Garbage Collector</a>&nbsp;</li>



<li><a href="https://foojay.io/today/why-we-moved-our-timefold-java-worker-pods-from-amd-to-arm64/" target="_blank" rel="noopener">Why We Moved Our Timefold Java Worker Pods from AMD to ARM64</a></li>



<li><a href="https://dzone.com/articles/jeffrey-java-flame-graphs" target="_blank" rel="noopener">Jeffrey Microscope for Generating Flame Graphs in Java</a></li>



<li><a href="https://spring.io/blog/2026/07/23/a-bootiful-podcast-billy-korando" target="_blank" rel="noopener">A Bootiful Podcast: Java Developer Advocate Billy Korando on Java 27 and Beyond</a></li>



<li><a href="https://mehmandarov.com/tus-resumable-uploads-jakarta/" target="_blank" rel="noopener">Resumable file uploads with plain Jakarta EE and TUS protocol</a></li>



<li><a href="https://nipafx.dev/talk-java-valhalla/" target="_blank" rel="noopener">Valhalla, Now!</a>&nbsp;</li>



<li><a href="https://quarkus.io/blog/to-cache-or-not-to-cache-virtual-threads/" target="_blank" rel="noopener">To Cache or Not to Cache Virtual Threads</a>&nbsp;</li>



<li><a href="https://inside.java/2026/07/25/design-java-mcp-tool/" target="_blank" rel="noopener">Pairing In-Process and Hosted Embeddings for Java MCP Tool Development</a>&nbsp;</li>



<li><a href="https://foojay.io/today/new-between-quarters-security-updates-for-java-what-cspus-mean-for-your-release-pipeline/" target="_blank" rel="noopener">New Between-Quarters Security Updates for Java: What CSPUs Mean for Your Release Pipeline</a></li>
</ul>



<h2 class="wp-block-heading">Kotlin Corner</h2>



<p>Explore what’s new in Kotlin, sharpen your skills, and put your knowledge into practice.</p>



<ul class="wp-block-list">
<li><a href="https://blog.jetbrains.com/kotlin/2026/07/kotlin-comes-to-bluej/">Kotlin Comes to BlueJ</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/07/in-conversation-with-the-golden-kodee-winners/">In Conversation With the Golden Kodee Winners</a></li>



<li><a href="https://foojay.io/today/exposed-kotlin-orm-complete-guide/" target="_blank" rel="noopener">Demystifying Exposed: The Intelligent SQL Library for Kotlin</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/07/introducing-the-kotlin-benchmark-evaluate-ai-coding-agents-on-real-world-kotlin-tasks/">Introducing the Kotlin Benchmark for AI Coding Agents</a></li>



<li><a href="https://blog.jetbrains.com/research/2026/07/the-history-of-kodee/">The History of Kodee, Kotlin’s Mascot</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/07/kotlin-turns-15-celebrate-the-kotlin-effect/">Kotlin Turns 15: Celebrate the Kotlin Effect</a></li>



<li><a href="https://blog.jetbrains.com/research/2026/07/kotlinllm-open-source/">KotlinLLM is Going Open Source&nbsp;</a></li>



<li><a href="https://www.youtube.com/watch?v=PB2YYHpEhkQ" target="_blank" rel="noopener">Dissecting Kotlin: 2026 | Huyen Tue Dao</a>&nbsp;</li>



<li><a href="https://www.youtube.com/watch?v=YeQijxpnI3E" target="_blank" rel="noopener">How I Learned to Stop Worrying and Love Value Semantics (in Kotlin) | Marat Akhin&nbsp;</a></li>



<li><a href="https://www.youtube.com/watch?v=-w97euRLTBA" target="_blank" rel="noopener">Run, Kotlin, Run! | Marc Reichelt</a></li>



<li><a href="https://www.youtube.com/watch?v=S19BE4Xvyrs" target="_blank" rel="noopener">The State of Amper | Joffrey Bion</a></li>



<li><a href="https://www.youtube.com/watch?v=6ALhoqxYrV0" target="_blank" rel="noopener">Local Lifetimes for Kotlin | Ross Tate</a></li>



<li><a href="https://www.youtube.com/watch?v=L2bZzPXfmyE&amp;t=3s" target="_blank" rel="noopener">Eval-Driven Development: The Fine Line Between Agentic Success and Failure | Urs Peter</a></li>



<li><a href="https://www.youtube.com/watch?v=9XL0r5lJNDs" target="_blank" rel="noopener">Building Enterprise Ready AI with Koog | Vadim Briliantov</a>&nbsp;</li>
</ul>



<h2 class="wp-block-heading">AI&nbsp;</h2>



<p>Explore smarter AI workflows and see how they reshape development:</p>



<ul class="wp-block-list">
<li><a href="https://www.youtube.com/watch?v=_ftzJ33mCTI" target="_blank" rel="noopener">95% of AI Projects Fail. Here&#8217;s Why. &#8211; Josh Long | The Marco Show</a></li>



<li><a href="https://www.danvega.dev/blog/can-you-use-java-for-ai" target="_blank" rel="noopener">Can You Use Java for AI? Why Java Is Better Positioned Than You Think</a></li>



<li><a href="https://verraes.net/2026/07/software-design-in-the-agentic-age/" target="_blank" rel="noopener">Software Design in the Agentic Age: Place Your Bets</a></li>



<li><a href="https://www.youtube.com/watch?v=aTaDkWR6_NE" target="_blank" rel="noopener">2026 State of the Art: Are Developers Being Replaced by AI?</a></li>



<li><a href="https://glaforge.dev/posts/2026/07/01/of-skills-and-loops-with-ai-assistance/" target="_blank" rel="noopener">Of Skills and Loops with AI Assistance</a></li>



<li><a href="https://www.infoq.com/minibooks/agentic-ai-architecture/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Agentic AI Architecture</a></li>



<li><a href="https://www.infoq.com/presentations/multi-agent-ai-architecture/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">The Multi-Agent Approach: Building Reliable and Controllable Software Development Automation</a></li>



<li><a href="https://glaforge.dev/talks/2026/07/15/making-sense-of-google-agentic-dev-tools/" target="_blank" rel="noopener">Making Sense of Google Agentic Dev Tools</a></li>



<li><a href="https://spring.io/blog/2026/07/16/a-bootiful-podcast-russ-miles" target="_blank" rel="noopener">A Bootiful Podcast: Russ Miles on Safer, More Productive Interactions with AI</a></li>



<li><a href="https://inside.java/2026/07/23/podcast-063/" target="_blank" rel="noopener">AI Solutions with Spring AI 2.0</a></li>



<li><a href="https://www.thoughtworks.com/insights/blog/architecture/non-functional-requirements-missing-guardrail-ai-generated-code" target="_blank" rel="noopener">Are non-functional requirements the missing guardrail for AI-generated code?</a></li>



<li><a href="https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/" target="_blank" rel="noopener">Better Models: Worse Tools</a>&nbsp;</li>
</ul>



<h2 class="wp-block-heading">Languages, Frameworks, Libraries, and Technologies</h2>



<p>Look beyond Java, Kotlin, and AI. There’s plenty more happening across development:&nbsp;</p>



<ul class="wp-block-list">
<li>This Week in Spring <a href="https://spring.io/blog/2026/07/07/this-week-in-spring-july-07-2026" target="_blank" rel="noopener">1</a>, <a href="https://spring.io/blog/2026/07/14/this-week-in-spring-july-14-2026" target="_blank" rel="noopener">2</a>, <a href="https://spring.io/blog/2026/07/21/this-week-in-spring-july-21-2026" target="_blank" rel="noopener">3</a>, <a href="https://spring.io/blog/2026/07/28/this-week-in-spring-july-28-2026" target="_blank" rel="noopener">4</a></li>



<li><a href="https://www.youtube.com/watch?v=JUBxwvwnpJE" target="_blank" rel="noopener">Spring AI 2 + Ollama: Local LLM, No API Keys</a></li>



<li><a href="https://spring.io/blog/2026/07/27/spring-office-hours-podcast-S5E19" target="_blank" rel="noopener">Spring Office Hours Podcast: S5E19 &#8211; Docker, Compose, Testcontainers, Oh My!</a></li>



<li><a href="https://spring.io/blog/2026/07/02/a-bootiful-podcast-sebastien-deleuze" target="_blank" rel="noopener">A Bootiful Podcast: Sébastien Deleuze on the latest-and-greatest in Spring AI and Spring Framework</a></li>



<li><a href="https://www.infoq.com/news/2026/07/kubernetes-ai-policy/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">The Kubernetes Approach to AI-Assisted Maintainership Prioritises Human Accountability</a></li>



<li><a href="https://spring.io/blog/2026/07/13/spring-office-hours-podcast-S5E18" target="_blank" rel="noopener">Spring Office Hours Podcast: S5E18 &#8211; The Latest from OpenAI, Anthropic and Spring AI 2.0</a></li>



<li><a href="http://hollycummins.com/joyful-journey-from-spring-boot-to-quarkus/" target="_blank" rel="noopener">The Joyful Journey from Spring Boot to Quarkus</a></li>



<li><a href="http://hollycummins.com/quarkus-ridiculous-things-idea-conf/" target="_blank" rel="noopener">Six and a half ridiculous things to do with Quarkus</a></li>



<li><a href="https://foojay.io/today/toward-a-durable-spring-petclinic/" target="_blank" rel="noopener">Toward a Durable Spring PetClinic</a></li>



<li><a href="https://www.infoq.com/articles/self-building-agent-langchain4j/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">The Self-Building Agent: A LangChain4j Experiment</a></li>
</ul>



<h2 class="wp-block-heading">Conferences and Events</h2>



<p>While taking a break from offline conferences, get ready for IntelliJ IDEA’s event this September.</p>



<figure class="wp-block-image size-full"><a href="https://lp.jetbrains.com/intellij-idea-conf-2026/?utm_source=newsletter&amp;utm_medium=jam&amp;utm_campaign=intellijideaconf" target="_blank" rel="noopener"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/image-10.png" alt="" class="wp-image-728864"/></a></figure>



<p><a href="https://lp.jetbrains.com/intellij-idea-conf-2026/?utm_source=newsletter&amp;utm_medium=jam&amp;utm_campaign=intellijideaconf" target="_blank" rel="noopener"></a></p>



<h2 class="wp-block-heading">Culture and Community</h2>



<p>Learn more about what is shaping the developer community:</p>



<ul class="wp-block-list">
<li><a href="https://www.infoq.com/presentations/ai-future-engineering/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">The Future of Engineering: Mindsets That Matter When Code Isn’t Enough</a></li>



<li><a href="https://seths.blog/2009/04/first-ten/" target="_blank" rel="noopener">First, ten</a></li>



<li><a href="https://foojay.io/today/foojay-podcast-100-when-a-podcaster-interviews-podcasters-and-what-they-all-have-in-common/" target="_blank" rel="noopener">Foojay Podcast #100: Java Podcasters on Why They Started, What Broke, and What They Learned</a></li>



<li><a href="https://www.allthingsdistributed.com/2026/06/return-to-two-pizza-culture.html" target="_blank" rel="noopener">A return to two-pizza culture</a>&nbsp;</li>
</ul>



<h2 class="wp-block-heading">And Finally…</h2>



<p>Check out what’s new in IntelliJ IDEA this July:&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://blog.jetbrains.com/idea/2026/08/intellij-idea-goes-lsp/">IntelliJ IDEA Goes LSP: Java and Kotlin Intelligence Comes to VS Code, Cursor, and Agentic Flows</a></li>
</ul>



<ul class="wp-block-list">
<li><a href="https://blog.jetbrains.com/idea/2026/07/intellij-idea-2026-2/">What’s New in IntelliJ IDEA 2026.2</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/07/whats-fixed-intellij-idea-2026-2/">What’s fixed in IntelliJ IDEA 2026.2</a></li>



<li><a href="https://www.youtube.com/playlist?list=PLBolw4tavnAY" target="_blank" rel="noopener">IntelliJ IDEA TechTalks</a> &#8211; check out the new bi-weekly podcast. </li>



<li><a href="https://blog.jetbrains.com/scala/2026/07/14/scala-plugin-2026-2/">IntelliJ Scala Plugin 2026.2 Is Out!</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/07/reverse-engineering-with-hibernate-7-4-and-intellij-idea/">Reverse Engineering with Hibernate 7.4 and IntelliJ IDEA</a></li>
</ul>



<p>That’s it for today! We’re always collecting ideas for the next Java Annotated Monthly – send us your suggestions via <a href="https://mail.google.com/mail/u/0/?fs=1&amp;tf=cm&amp;source=mailto&amp;to=JAM@jetbrains.com" target="_blank" rel="noopener">email</a> or <a href="https://x.com/intellijidea?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor">X</a> by August 20. Don’t forget to check out our archive of <a href="https://www.jetbrains.com/lp/jam/" target="_blank" rel="noopener">past JAM issues</a> for any articles you might have missed!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ IDEA Goes LSP: Java and Kotlin Intelligence Comes to VS Code, Cursor, and Agentic Flows</title>
		<link>https://blog.jetbrains.com/idea/2026/08/intellij-idea-goes-lsp/</link>
		
		<dc:creator><![CDATA[Marco Behler]]></dc:creator>
		<pubDate>Tue, 04 Aug 2026 10:48:16 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/08/IntelliJ-IDEA-goes-lsp.png</featuredImage>		<category><![CDATA[news]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=727805</guid>

					<description><![CDATA[It’s no secret that agentic development is changing how developers build software. As agents take on more and more of the implementation work, developers spend less and less time manually editing code.&#160; For this manual work, they might only need a basic, narrow set of features that IDEs provide, like navigating to declarations, finding references, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>It’s no secret that agentic development is changing how developers build software. As agents take on more and more of the implementation work, developers spend less and less time manually editing code.&nbsp;</p>



<p>For this manual work, they might only need a basic, narrow set of features that IDEs provide, like navigating to declarations, finding references, some simple code completion, or renaming.</p>



<p>These features are generally covered by the <a href="https://en.wikipedia.org/wiki/Language_Server_Protocol" target="_blank" rel="noopener">Language Server Protocol (LSP)</a>, which allows programming language support to be implemented once and then reused by any LSP-capable IDE or editor.&nbsp;</p>



<p>Even agents can make use of LSP servers today, leading to faster and more deterministic results and, eventually, reduced token consumption.&nbsp;</p>



<p>In response to these changes, we’ve been working hard at JetBrains to offer IntelliJ IDEA’s smart language features for Java and Kotlin in an LSP format.</p>



<p><strong>Today, we’re happy to announce that IntelliJ IDEA’s Java and Kotlin intelligence is available in a preview extension for third-party editors, starting with VS Code and its forks (such as Cursor).</strong></p>



<p>We have also been running internal trials and experiments with a select few external customers, and the results have shown that the same LSP functionality can significantly improve terminal-based agentic workflows, like with Claude Code or Codex. We will share the very promising results of these experiments soon.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/08/javaandkotlin_extension-1.png" alt="" class="wp-image-727908"/></figure>



<h2 class="wp-block-heading"><strong>Introducing the VS Code extension</strong></h2>



<p>The <strong>Java &amp; Kotlin by IntelliJ IDEA extension</strong> is now available, powered by IntelliJ IDEA’s Java and Kotlin language technology. It brings a focused set of capabilities to VS Code-based editors, including:</p>



<ul class="wp-block-list">
<li>Java, Kotlin, and mixed-language project support.</li>



<li>Debugging (DAP-based).</li>



<li>Smart code completion, navigation, and code analysis.</li>



<li>Refactorings and editor assistance.</li>



<li>Support for Maven, Gradle, and Bazel.</li>



<li>Fast and reliable performance, even for large projects and monorepos.</li>
</ul>



<p></p>



<p>You can find the full list of features in our <a href="https://www.jetbrains.com/help/intellij-vscode/About-instance.html" target="_blank" rel="noopener">documentation</a>.</p>



<h2 class="wp-block-heading"><strong>Getting started</strong></h2>



<p>You can install the Java &amp; Kotlin by IntelliJ IDEA extension from the Visual Studio Marketplace and the Open VSX registry.</p>



<p class="has-text-align-center"><a href="https://marketplace.visualstudio.com/items?itemName=JetBrains.intellij-server" target="_blank" rel="noopener"><strong>Install from Visual Studio Marketplace</strong></a></p>



<p class="has-text-align-center"><a href="https://open-vsx.org/extension/JetBrains/intellij-server" target="_blank" rel="noopener"><strong>Install from Open VSX registry</strong></a></p>



<p>After installation, open your Java or Kotlin projects in VS Code or Cursor.&nbsp;</p>



<p>The extension will start analyzing your projects, import the ones that have Maven, Gradle, or Bazel build files, and then enable Java and Kotlin language features in the editor for you.</p>



<figure class="wp-block-video"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/08/javakotlin.mp4"></video></figure>



<p><strong>Compatibility notice</strong></p>



<p>Java &amp; Kotlin by IntelliJ IDEA includes code analysis features and quick-fixes that overlap with Red Hat’s and Oracle’s extensions for Java. To avoid confusion, we recommend disabling those extensions while testing.</p>



<h2 class="wp-block-heading"><strong>Licensing</strong></h2>



<p>During the preview phase, the extension <strong>is free to use</strong>. <strong>Each build renews the evaluation period and is limited to 30 days.</strong></p>



<p>After the preview&nbsp; period, using the extension will require an IntelliJ IDEA Ultimate subscription.&nbsp;</p>



<p>The same license will let you use IntelliJ IDEA’s Java and Kotlin capabilities whether you are working in the IntelliJ IDEA desktop IDE, in VS Code-based editors, or in other supported environments. You can review the pricing options <a href="https://www.jetbrains.com/idea/buy/?section=commercial&amp;billing=yearly" target="_blank" rel="noopener">here</a>.</p>



<p>Note: For pure Kotlin projects, you can use the<a href="https://github.com/Kotlin/kotlin-lsp" target="_blank" rel="noreferrer noopener"> Kotlin LSP</a>, which we continue to develop and maintain. The Kotlin LSP&#8217;s source code is Apache 2.0 licensed. You can use it for free, either directly or via its extensions (<a href="https://marketplace.visualstudio.com/items?itemName=JetBrains.kotlin-server" target="_blank" rel="noreferrer noopener">Visual Studio Marketplace</a>, <a href="https://open-vsx.org/extension/JetBrains/kotlin-server" target="_blank" rel="noreferrer noopener">Open VSX registry</a>), with no subscription required.</p>



<h2 class="wp-block-heading"><strong>What’s next</strong></h2>



<p>The VS Code extension is just one milestone in a longer development journey to bring the intelligence of IntelliJ IDEA to our users wherever they are.&nbsp;</p>



<p>We strongly believe the best way to do Java and Kotlin development is inside IntelliJ IDEA. At the same time, we recognize that teams may have practical reasons to work in other environments, with other editors and tools. Wherever you choose to work, we want you to benefit from IntelliJ IDEA’s Java and Kotlin intelligence.</p>



<p>To this end, we’re already working on supporting fully agentic, terminal-based workflows. In the near future, we’ll share our initial results (think: reduced token consumption), and we’ll give you a chance to try out our agent plugins when they’re ready.</p>



<h2 class="wp-block-heading"><strong>Feedback and support</strong></h2>



<p>We are eager to hear what you think.&nbsp;</p>



<p>Please share feedback with us about what works well, what doesn’t, and which capabilities you would like to see next.</p>



<p>You can leave a comment here or <a href="https://intellij-support.jetbrains.com/hc/en-us/requests/new?ticket_form_id=66731&amp;product=intellij_for_vs_code" target="_blank" rel="noopener">submit a request to us</a>.</p>



<p>Your feedback during this preview phase will directly shape the extension as we move toward a stable 1.0 release.</p>



<p>Thank you!</p>



<p><strong><a href="https://marketplace.visualstudio.com/items?itemName=JetBrains.intellij-server" target="_blank" rel="noopener">Get the extension: Visual Studio Marketplace</a></strong></p>



<p><strong><a href="https://open-vsx.org/extension/JetBrains/intellij-server" target="_blank" rel="noopener">Get the extension: Open VSX registry</a></strong></p>



<p></p>
]]></content:encoded>
					
		
		
		                    <language>
                        <code><![CDATA[fr]]></code>
                        <url>https://blog.jetbrains.com/fr/idea/2026/08/intellij-idea-goes-lsp/</url>
                    </language>
                	</item>
		<item>
		<title>Reverse Engineering with Hibernate 7.4 and IntelliJ IDEA</title>
		<link>https://blog.jetbrains.com/idea/2026/07/reverse-engineering-with-hibernate-7-4-and-intellij-idea/</link>
		
		<dc:creator><![CDATA[Siva Katamreddy]]></dc:creator>
		<pubDate>Mon, 27 Jul 2026 07:38:42 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/07/IJ-social-BlogFeatured-1280x720-1-1.png</featuredImage>		<category><![CDATA[idea]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[reverse-engineering]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=707641</guid>

					<description><![CDATA[Reverse Engineering in the context of database-driven application development means generating Java persistence artifacts such as entity classes and mapping files from an existing database schema. This is useful when the database already exists, especially in legacy systems or large projects where creating entity classes manually can be slow and error-prone. Until now, these features [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Reverse Engineering in the context of database-driven application development means generating Java persistence artifacts such as entity classes and mapping files from an existing database schema.</p>



<p>This is useful when the database already exists, especially in legacy systems or large projects where creating entity classes manually can be slow and error-prone.</p>



<p>Until now, these features were provided by the separate Hibernate Tools project. Starting with Hibernate 7.4, the core Hibernate Tools modules are <a href="https://in.relation.to/2026/05/04/hibernate-tools-moves-to-orm/" target="_blank" rel="noopener">part of the Hibernate repository</a>. Maven and Gradle (and even Ant) users can now access reverse engineering through the Hibernate build plugins. This is especially useful for database-first projects, where the schema already exists and the application needs an initial set of persistence artifacts.</p>



<p>IntelliJ IDEA also provides <a href="http://jetbrains.com/help/idea/jpa-buddy-reverse-engineering.html" target="_blank" rel="noopener">Reverse Engineering</a> features that can help developers generate JPA entities from an existing database, generate Flyway or Liquibase migrations from JPA/JDBC entities, and much more.</p>



<p>In this article, let us explore both Hibernate 7.4 and IntelliJ IDEA Reverse Engineering capabilities and understand which tool to use in which scenario.</p>



<p><strong>You can check out the sample code for this article in this </strong><a href="https://github.com/sivaprasadreddy/hibernate-7.4-rev-eng-demo" target="_blank" rel="noopener"><strong>GitHub repository</strong></a><strong>.</strong></p>



<h2 class="wp-block-heading">Hibernate 7.4 Reverse Engineering</h2>



<p>Hibernate 7.4 can inspect an existing database and generate artifacts such as:</p>



<ul class="wp-block-list">
<li>JPA entity classes</li>



<li>Hibernate mapping files</li>



<li>DAO-style helper classes</li>



<li>Database schema SQL scripts</li>
</ul>



<p></p>



<p>In the <a href="https://github.com/sivaprasadreddy/hibernate-7.4-rev-eng-demo" data-type="link" data-id="https://github.com/sivaprasadreddy/hibernate-7.4-rev-eng-demo" target="_blank" rel="noopener">sample project</a>, the reverse engineering workflow is configured using the Maven plugin with reverse engineering customization specified in <code>hibernate-reverse-engineering.xml</code> as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE hibernate-reverse-engineering SYSTEM
        "https://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd">
&lt;hibernate-reverse-engineering>
    &lt;type-mapping>
        &lt;sql-type jdbc-type="NUMERIC" hibernate-type="big_decimal"/>
        &lt;sql-type jdbc-type="OTHER" hibernate-type="pg-uuid"/>
    &lt;/type-mapping>

    &lt;table-filter match-name=".*" package="com.jetbrains.entities"/>
    &lt;table-filter match-name="flyway.*" exclude="true"/>

    &lt;table name="products" class="Product">
        &lt;primary-key property="id">
            &lt;generator class="sequence">
                &lt;param name="sequence_name">product_id_seq&lt;/param>
            &lt;/generator>
        &lt;/primary-key>
        &lt;!-- other config -->
    &lt;/table>

    &lt;!-- other tables config -->
&lt;/hibernate-reverse-engineering></pre>



<p>This configuration lets us customize type mappings, package names, table filters, class names, and primary key generation.&nbsp;</p>



<p>Configure the hibernate-maven-plugin in pom.xml as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;properties>
   &lt;!-- update the version to the newer version of Hibernate -->
   &lt;hibernate.version>7.4.0.CR1&lt;/hibernate.version> 
&lt;/properties>

&lt;plugin>
    &lt;groupId>org.hibernate.orm&lt;/groupId>
    &lt;artifactId>hibernate-maven-plugin&lt;/artifactId>
    &lt;version>${hibernate.version}&lt;/version>
    &lt;configuration>
        &lt;revengFile>hibernate-reverse-engineering.xml&lt;/revengFile>
    &lt;/configuration>
    &lt;executions>
        &lt;execution>
            &lt;id>generate-entities&lt;/id>
            &lt;phase>generate-sources&lt;/phase>
            &lt;goals>
                &lt;goal>hbm2ddl&lt;/goal>
                &lt;goal>hbm2java&lt;/goal>
                &lt;goal>hbm2dao&lt;/goal>
            &lt;/goals>
        &lt;/execution>
    &lt;/executions>
&lt;/plugin></pre>



<p>The hbm2java goal generates JPA entity classes from database metadata, while hbm2ddl can generate database schema SQL. The hbm2dao goal can generate DAO-style helper classes with methods to perform CRUD operations on entities.</p>



<p>To generate the artifacts, run:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$ ./mvnw generate-sources</pre>



<p>This Maven goal generates JPA entities and DAO classes in target/generated-sources, and schema.ddl file in target/generated-resources directories.</p>



<h3 class="wp-block-heading">Regeneration and Version-Controlled Workflows</h3>



<p>Generated code is rarely the final version of an application model. After the first generation, developers often add validation annotations, helper methods, domain logic, fetch strategies, and other project-specific changes.</p>



<p>If these files are regenerated later, manual changes can be overwritten. This is why a regeneration workflow may not be ideal when developers edit generated entities directly.</p>



<p>However, regeneration is not always a drawback. Some teams prefer to keep the reverse engineering configuration in source control and make generation part of the build. In this setup, the output is reproducible, works in CI/CD, and does not depend on a specific IDE.</p>



<p>For example, a CI check can regenerate the artifacts and fail if the generated files are different from the committed version.</p>



<p>This workflow also works well with versioned database migrations. Migration scripts can remain the source of truth for schema history, while Hibernate reverse engineering generates Java artifacts from the current database schema.<br><br>Hibernate also has a built-in schema update mechanism, and the reverse-engineered output can be further customized with custom <code>RevengineeringStrategy</code>, so the underlying model doesn&#8217;t have to be a rigid, one-size-fits-all script either.</p>



<h2 class="wp-block-heading">IntelliJ IDEA Reverse Engineering</h2>



<p>IntelliJ IDEA provides a more interactive and flexible reverse engineering workflow. Instead of creating and maintaining a reverse engineering XML file, we can connect to a database from the IDE, select the tables, and generate JPA entities directly.</p>



<p>More importantly, IntelliJ IDEA supports progressive synchronization between the database schema and the code. When the database changes, the IDE can help sync those changes into existing entity classes without forcing a full regeneration. This helps preserve manual modifications that were made after the initial generation.</p>



<p>That difference matters in real projects. Entity classes often become part of the domain model, not just generated database mirrors. Being able to evolve generated entities safely is more valuable than repeatedly recreating them.<br><br>This functionality is provided by the IntelliJ IDEA Ultimate, so you need a subscription. It is not available in IntelliJ IDEA Community Edition or in other IDEs (yet), and it cannot be run as a command-line step in a build pipeline.</p>



<h3 class="wp-block-heading">More Feature-Rich and Flexible</h3>



<p>IntelliJ IDEA&#8217;s reverse engineering provide additional features apart from generating JPA entities from tables. The IDE supports related workflows such as:</p>



<ul class="wp-block-list">
<li>Generating JPA entities from an existing database schema</li>



<li>Synchronizing database changes into existing entity classes</li>



<li>Preserving manual changes during incremental updates</li>



<li>Generating Flyway migrations from JPA entities</li>



<li>Generating Liquibase migrations from JPA entities</li>



<li>Supports Spring Data JDBC entities in addition to JPA</li>
</ul>



<p></p>



<figure class="wp-block-video"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/05/IJ-RevEng-min.mp4"></video></figure>



<p>To learn more about these features, explore the following articles:</p>



<ul class="wp-block-list">
<li><a href="https://blog.jetbrains.com/idea/2024/11/how-to-use-flyway-for-database-migrations-in-spring-boot-applications/">How to Use Flyway for Database Migrations in Spring Boot Applications</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/01/spring-data-jdbc-made-easy-with-intellij-idea/">Spring Data JDBC Made Easy with IntelliJ IDEA</a></li>
</ul>



<p></p>



<p>This makes IntelliJ IDEA a better fit for day-to-day development, especially when the schema and code evolve together. It provides a guided workflow, visual database integration, and incremental updates without requiring a build-time generation configuration for every change.</p>



<h2 class="wp-block-heading">Choosing the Right Workflow</h2>



<p>Hibernate 7.4 reverse engineering is a strong option when we want a repeatable, build-driven process. It works well for generating the initial version of entities and schema SQL from an existing database, especially in automated workflows.</p>



<p>IntelliJ IDEA is more suitable when we want an iterative workflow. It helps developers&nbsp; progressively synchronize code and database changes without losing manual entity customizations. It also supports additional workflows around migrations and Spring Data JDBC, making it more feature-rich and flexible for application development.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>Both approaches solve the same core problem of generating Java persistence artifacts from an existing database schema, but they are designed for different situations.</p>



<p><strong>Use Hibernate 7.4 Reverse Engineering when:</strong></p>



<ul class="wp-block-list">
<li>You want the generation to be part of the build process to generate entities, DAOs, .hbm files based on the current database schema.</li>



<li>You need this to work in any IDE, or from the command line, or in a CI/CD pipeline, since it runs through Gradle or Maven.</li>



<li>You are comfortable regenerating entities, DAOs, and .hbm files from a version-controlled reveng.xml file rather than editing generated code by hand.</li>
</ul>



<p><br><strong>Use IntelliJ IDEA Reverse Engineering when:</strong></p>



<ul class="wp-block-list">
<li>You want an interactive and visual way to generate entities without writing any XML configuration.</li>



<li>Your database schema changes over time, and you need to keep the entity classes in sync without losing the custom logic you have already added.</li>



<li>You are working with Spring Data JDBC in addition to JPA, or you need to generate Flyway or Liquibase migration scripts.</li>



<li>You have an IntelliJ IDEA Ultimate subscription and don&#8217;t need reverse engineering to run outside the IDE (for example, in a CI/CD pipeline)</li>
</ul>



<p><br>IntelliJ IDEA is generally a strong choice for day-to-day development because it lets you evolve the database and the Java model together, as long as you have an Ultimate subscription and don&#8217;t need the step to run outside the IDE. It understands what already exists in your code and can merge schema changes into it, rather than replacing everything from scratch.&nbsp;</p>



<p>If your team needs this to run in any IDE or as part of a CI/CD pipeline, or if you prefer a version-controlled, reproducible generation step, Hibernate 7.4&#8217;s build-tool-based reverse engineering is the better fit.</p>



<p>If you are starting a brand-new project from an existing database, either approach can give you a solid starting point. From there, the right choice mostly comes down to your team&#8217;s workflow and tooling constraints.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What&#8217;s New in IntelliJ IDEA 2026.2</title>
		<link>https://blog.jetbrains.com/idea/2026/07/intellij-idea-2026-2/</link>
		
		<dc:creator><![CDATA[Maria Kosukhina]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 16:00:50 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/07/IJ-IDEA-2026.1.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=723179</guid>

					<description><![CDATA[IntelliJ IDEA 2026.2 is here! This version brings updates designed to streamline your workflows and help you confidently adopt the latest innovations across the Java ecosystem.&#160; You can download this latest release from our&#160;website&#160;or update to it directly from inside the IDE, via the free&#160;Toolbox App, or using snap packages for Ubuntu. Explore the What’s [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>IntelliJ IDEA 2026.2 is here! </p>



<p>This version brings updates designed to streamline your workflows and help you confidently adopt the latest innovations across the Java ecosystem.&nbsp;</p>



<p>You can download this latest release from our&nbsp;<a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noreferrer noopener">website</a>&nbsp;or update to it directly from inside the IDE, via the free&nbsp;<a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noreferrer noopener">Toolbox App</a>, or using snap packages for Ubuntu.</p>



<p>Explore the <strong><a href="https://www.jetbrains.com/idea/whatsnew/" target="_blank" rel="noopener">What’s New page</a></strong> for a complete overview of the key new features, including detailed explanations and demos.</p>



<p align="center"><a class="jb-download-button" href="https://www.jetbrains.com/idea/whatsnew/" target="_blank" rel="noopener">Explore the What&#8217;s New page</a></p>



<p>In addition, our developer advocates have recorded a walkthrough video covering all the release highlights. Check it out!</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="What&#039;s New in IntelliJ IDEA 2026.2" src="https://www.youtube.com/embed/1wzW-gM9OZE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>IntelliJ IDEA 2026.2 adds day-one support for Java 27 and the latest Kotlin 2.4 language features, helping you stay up to date with the newest JVM technologies. This release also streamlines Spring development with improved database migration workflows and richer Spring Security insights, while making debugging more powerful with new logpoints and enhanced navigation from runtime output to source code. </p>



<p>Here are the key highlights of this release:</p>



<p>AI upgrades:</p>



<ul class="wp-block-list">
<li>Native GitHub Copilot integration</li>



<li>Agent skills</li>



<li>AI completion support for third-party providers</li>
</ul>



<p></p>



<p>Productivity-enhancing features:</p>



<ul class="wp-block-list">
<li>Logpoints</li>



<li>Dependency completion</li>



<li>Early Gradle 10 support and migration assistance</li>



<li>Streamlined Git conflict resolution flow</li>



<li>Docker Compose improvements</li>
</ul>



<p></p>



<p>Support for new technologies:</p>



<ul class="wp-block-list">
<li>Java 27</li>



<li>Kotlin 2.4 Stable features</li>



<li>Spring support improvements </li>



<li>Terraform testing framework </li>



<li>TypeScript 7.0 </li>
</ul>



<p></p>



<p>Version 2026.2 also delivers numerous stability, performance, and usability improvements across the platform. These are described in a separate <a href="https://blog.jetbrains.com/idea/2026/07/whats-fixed-intellij-idea-2026-2/">What’s Fixed blog post</a>.</p>



<p>Let us know what you think about the new features in this release, as your feedback helps us shape the product so it works even better for you.</p>



<p><a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noopener">Update to IntelliJ IDEA 2026.2 now</a> to try out these new features. Don&#8217;t forget to join us on <a href="https://x.com/IntelliJIDEA">X</a>, <a href="https://bsky.app/profile/intellijidea.com/" target="_blank" rel="noopener">Bluesky</a>, or <a href="https://www.linkedin.com/showcase/intellijidea" target="_blank" rel="noopener">LinkedIn</a>, and be sure to share your favorite updates.</p>



<p>Thank you for using IntelliJ IDEA!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What’s fixed in IntelliJ IDEA 2026.2</title>
		<link>https://blog.jetbrains.com/idea/2026/07/whats-fixed-intellij-idea-2026-2/</link>
		
		<dc:creator><![CDATA[Dmitriy Smirnov]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 15:57:45 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/07/Whats-Fixed-in-IntelliJ-IDEA-2026.2.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=721935</guid>

					<description><![CDATA[Welcome to an overview of the most important fixes and usability improvements in IntelliJ IDEA 2026.2. This release brings more than 1,300 bug fixes and usability improvements, and it addresses 140 freezes and other performance issues identified through internal diagnostics and user reports. Below is a recap of the most impactful updates. Performance Responsiveness remains [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Welcome to an overview of the most important fixes and usability improvements in IntelliJ IDEA 2026.2.</p>
<p>This release brings more than <a href="https://youtrack.jetbrains.com/issues?q=Project:%20IDEA,%20IJPL,%20WEB,%20KTIJ%20%20Available%20in:%202026.2*%20%23resolved%20sort%20by:%20votes%20visible%20to:%20%7Bissue%20readers%7D%20Type:%20Bug,%20%7BUsability%20Problem%7D&amp;page=2" target="_blank" rel="noopener">1,300 bug fixes and usability improvements</a>, and it addresses <a href="https://youtrack.jetbrains.com/issues?q=project:%20%7BIntelliJ%20Platform%7D,%20%7BIntelliJ%20IDEA%7D%20,%20%7BKotlin%20IntelliJ%20IDEA%20plugin%7D,%20WebStorm%20%20%23%7BPerformance%20Problem%7D%20%7BAvailable%20in%7D:%202026.2*%20%23Resolved%20" target="_blank" rel="noopener">140 freezes and other performance issues</a> identified through internal diagnostics and user reports. Below is a recap of the most impactful updates.</p>
<h2><strong>Performance</strong></h2>
<p>Responsiveness remains a top priority. IntelliJ IDEA 2026.2 includes fixes for more <a href="https://youtrack.jetbrains.com/issues?q=project:%20%7BIntelliJ%20Platform%7D,%20%7BIntelliJ%20IDEA%7D%20,%20%7BKotlin%20IntelliJ%20IDEA%20plugin%7D,%20WebStorm%20%20%23%7BPerformance%20Problem%7D%20%7BAvailable%20in%7D:%202026.2*%20%23Resolved%20" target="_blank" rel="noopener">than 140 freezes and other performance issues</a>.</p>
<p>When editing Markdown files, the IDE is now much more responsive, improving the experience of writing specifications for agents</p>
<p>Projects opened natively in WSL or Docker environments should stall less often.</p>
<p>Editor file saves are now asynchronous. Writing a file to disk no longer blocks the UI thread, reducing the likelihood of freezes during save operations. If you develop IDE plugins, please refer to this <a href="https://blog.jetbrains.com/platform/2026/06/async-vfs-content-writes-what-plugin-authors-need-to-know/">dedicated blog post</a> for migration guidance.</p>
<p>The custom file chooser now loads directories using asynchronous I/O and lazily expandable nodes, reducing UI freezes and making navigation more responsive in large or remote directory structures. The custom file chooser is primarily used in WSL, Dev Containers, and remote development environments, but you can also use it more broadly by disabling the <em>Use native file chooser dialog</em> option in <em>Advanced Settings</em> on Windows or macOS.</p>
<p>The loading of Spring configuration metadata is also faster and more stable. We resolved issues that could cause excessive memory consumption, endless metadata collection loops, and exceptions during Spring Boot configuration analysis.</p>
<h2><strong>Spring</strong></h2>
<p>To ensure readability and help you better understand code written by others, whether humans or agents, we are doubling down on fixes related to code resolution, navigation, and usage detection.</p>
<p>Note that some of these improvements are planned for the IntelliJ IDEA 2026.2.1 update.</p>
<h3><strong>Spring Boot configuration properties</strong></h3>
<p>IntelliJ IDEA now handles more configuration patterns correctly in <code>application.properties</code> files, YAML files, annotations, test configurations, Kotlin classes, Java records, nested objects, maps, lists, and custom configuration classes. Resolution, highlighting, completion, navigation, and <code>@ConfigurationProperties</code> mapping have all been improved.</p>
<p>See YouTrack issue <a href="https://youtrack.jetbrains.com/issue/IDEA-370087/Spring-Boot-configuration-design-time-support" target="_blank" rel="noopener"><strong>IDEA-370087</strong></a> for the full list of fixes.</p>
<h3><strong>Spring Security <span class="release-tag" style="display: inline-block; padding: 0.1em 0.5em; border: 1px solid currentColor; border-radius: 999px; font-size: 0.8em; font-weight: 600; line-height: 1.4; white-space: nowrap; vertical-align: baseline;">2026.2.1</span></strong></h3>
<p>IntelliJ IDEA recognizes more ways to define request matchers, including paths supplied as arrays, the <code>requestMatchers(RequestMatcher...)</code> overload, and matchers created with <code>PathPatternRequestMatcher.pathPattern(...)</code>. For example, the IDE will recognize and highlight <code>new RegexRequestMatcher(pattern, method)</code> as a regular expression. SpEL expressions in <code>@PreAuthorize</code> and other security annotations will correctly understand all usages of <code>this</code>.</p>
<p>New inspections will help identify ordering problems in a <code>SecurityFilterChain</code>, warning you, for example, when <code>requestMatchers()</code> are placed after <code>anyRequest()</code>.</p>
<p>See YouTrack issue <a href="https://youtrack.jetbrains.com/issue/IDEA-391028" target="_blank" rel="noopener"><strong>IDEA-391028</strong></a> for the complete list of improvements.</p>
<h3><strong>Spring Cache <span class="release-tag" style="display: inline-block; padding: 0.1em 0.5em; border: 1px solid currentColor; border-radius: 999px; font-size: 0.8em; font-weight: 600; line-height: 1.4; white-space: nowrap; vertical-align: baseline;">2026.2.1</span></strong></h3>
<p>Support for Spring Cache annotations, including <code>@Cacheable</code>, <code>@CachePut</code>, <code>@CacheEvict</code>, and <code>@Caching</code>, is becoming more accurate, with better SpEL expression validation and proper usage detection for methods referenced only through a <code>#root.target</code> expression</p>
<p>Additionally, inspections for conflicting <code>@Cacheable</code> and <code>@CachePut</code>, for <code>#</code> prefixes missing from <code>root</code> or <code>result</code>, and others no longer produce false positives.</p>
<p>See YouTrack issue <a href="https://youtrack.jetbrains.com/issue/IDEA-390707/Spring-Cache-improve-plugin-quality" target="_blank" rel="noopener"><strong>IDEA-390707</strong></a> for the full list of fixes.</p>
<h3><strong>Spring Events <span class="release-tag" style="display: inline-block; padding: 0.1em 0.5em; border: 1px solid currentColor; border-radius: 999px; font-size: 0.8em; font-weight: 600; line-height: 1.4; white-space: nowrap; vertical-align: baseline;">2026.2.1</span></strong></h3>
<p>Improvements to the Spring Events support provide more reliable navigation between event publishers and listeners, including <code>ApplicationListener</code> implementations that listen for a base event type, events published through generic methods, custom generic events implementing <code>ResolvableTypeProvider</code>, and <code>publishEvent</code> calls made through method references</p>
<p>New inspections warn you when an <code>@EventListener</code> method listens for an early Spring Boot lifecycle and detect potentially incorrect combinations of <code>@TransactionalEventListener</code> and <code>@Transactional</code> that can otherwise fail only at runtime.</p>
<p>See YouTrack issue <a href="https://youtrack.jetbrains.com/issue/IDEA-390826/Spring-Events-plugin-quality" target="_blank" rel="noopener"><strong>IDEA-390826</strong></a> for the full list of improvements.</p>
<h3><strong>Thymeleaf</strong></h3>
<p>IntelliJ IDEA’s Thymeleaf support is now more reliable across expressions, tags, attributes, JavaScript inlining, completion, and property resolution. The IDE recognizes more expression forms, including inline output, bracket-based map access, nested selections, and <code>T()</code> references, while eliminating false warnings for common Thymeleaf and Layout dialect constructs. JavaScript expressions inside <code>&lt;script th:inline="javascript"&gt;</code> are handled correctly, numeric property keys now resolve as expected, and the <em>Empty tag</em> inspection can be disabled for Thymeleaf templates.</p>
<p>See YouTrack issue <a href="https://youtrack.jetbrains.com/issue/IDEA-370051/Thymeleaf-improve-plugin-quality" target="_blank" rel="noopener"><strong>IDEA-370051</strong></a> for the complete list of updates.</p>
<h2><strong>Kotlin</strong></h2>
<h3><strong>Server-side</strong></h3>
<p>We’re continuing to close the gaps between the Java and Kotlin support in Spring-based server-side projects.</p>
<p>IntelliJ IDEA can now configure Kotlin support for Lombok and other annotation processors through <code>kapt</code> automatically, reducing the amount of manual project setup required. These changes should make mixed Java and Kotlin projects more predictable.</p>
<h3><strong>Kotlin completion in Java code</strong></h3>
<p>IntelliJ IDEA’s Java code completion now also suggest Kotlin extension functions and companion object members. More complete and better sorted suggestions make working in mix-language codebases easier.</p>
<h3><strong>Removal of K1</strong></h3>
<p>With K2 adoption now above 99% across IntelliJ IDEA and Android Studio, we have removed the remaining K1-mode options and relevant code from the product.</p>
<h2><strong>Editor and navigation</strong></h2>
<p>The Markdown integration now supports standard footnotes, allowing the proper use of <code>[^label]</code> syntax. This resolves a long-standing feature request and makes it easier to work with technical documentation, articles, and other reference-heavy content directly in the IDE.</p>
<p>The IDE now knows how to keep your bookmarks when you switch Git branches. If you want to have your bookmarks preserved, disable the <em>Enable bookmark context restoration on branch switching</em> option in <em>Settings | Advanced Settings</em>.</p>
<p>When searching for classes, files, or symbols in <em>Search Everywhere</em>, IntelliJ IDEA now remembers the scope you selected, such as <em>Project Files</em>, <em>Project and Libraries</em>, or a custom scope. The same selection is restored automatically the next time you start a search.</p>
<p>Double-press shortcuts, such as <em>Shift+Shift</em> for <em>Search Everywhere</em> and <em>Ctrl+Ctrl</em> for <em>Run Anything</em>, are now fully customizable in <em>Settings | Keymap</em>.</p>
<h2><strong>User interface</strong></h2>
<p><em><strong>Islands</strong></em> <strong>theme color coding</strong></p>
<p>Colors assigned to scopes, such as test files or non-project files, remain visible when the tab is active, making it easier to identify the type of file you are currently editing at a glance.</p>
<h2><strong>Bundled plugins</strong></h2>
<h3><strong>Deprecation of the Machine Learning Code Completion (Ranking) plugin</strong></h3>
<p>The Machine Learning Code Completion plugin, which improved ranking, is being deprecated and will no longer be bundled with IntelliJ IDEA.</p>
<p>As AI completion, next edit suggestions, and coding agents have become the main forms of intelligent development assistance, the benefits of ML-based completion ranking have declined significantly.</p>
<p>The plugin <a href="https://plugins.jetbrains.com/plugin/28632-machine-learning-code-completion" target="_blank" rel="noopener">remains available</a> from JetBrains Marketplace, so you can install it separately and continue using it where needed.</p>
<h3><strong>Unbundling of the Task Management and Time Tracking plugins</strong></h3>
<p>The <a href="http://plugins.jetbrains.com/plugin/11545-task-management/versions" target="_blank" rel="noopener">Task Management</a> and <a href="https://plugins.jetbrains.com/plugin/11546-time-tracking" target="_blank" rel="noopener">Time Tracking</a> plugins have also been removed from the default IntelliJ IDEA distribution.</p>
<p>Both plugins saw relatively low usage, and unbundling them helps keep the standard installation leaner. Their functionality has not changed, and both plugins can still be installed directly from JetBrains Marketplace.</p>
<h3><strong>More relevant plugin search results</strong></h3>
<p>Plugins will be easier to find, as searching for them in <em>Settings | Plugins</em> now produces better-ranked results.</p>
<p>Previously, all plugins containing the search text in either their name or description could appear in an arbitrary order, but now name matches are prioritized.</p>
<h2><strong>Conclusion</strong></h2>
<p>Let us know which fixes make the biggest difference in your workflow and where you still encounter friction. Your reports, feedback, and sample projects help us understand which issues have the greatest impact and what we should prioritize next.</p>
<p>Try IntelliJ IDEA 2026.2 and share your favorite improvements with us on X, Bluesky, or LinkedIn.</p>
<p>Thank you for using IntelliJ IDEA!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ Scala Plugin 2026.2 Is Out!</title>
		<link>https://blog.jetbrains.com/scala/2026/07/14/scala-plugin-2026-2/</link>
		
		<dc:creator><![CDATA[Maciej Gorywoda]]></dc:creator>
		<pubDate>Tue, 14 Jul 2026 11:00:00 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/07/cover-1.png</featuredImage>		<product ><![CDATA[idea]]></product>
		<category><![CDATA[news]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[scala-programming]]></category>
		<category><![CDATA[2026-2]]></category>
		<category><![CDATA[intellij-idea]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=scala&#038;p=720459</guid>

					<description><![CDATA[Hello everyone, The new release of IntelliJ IDEA introduces a few new features for Scala developers that we’ve been working on for some time, as well as a number of fixes and improvements. We hope that they will make your Scala experience even better than before. Build tool support The logic behind sbt tasks in [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>Hello everyone,</p>



<p>The new release of IntelliJ IDEA introduces a few new features for Scala developers that we’ve been working on for some time, as well as a number of fixes and improvements. We hope that they will make your Scala experience even better than before.</p>



<p></p>



<h2 class="wp-block-heading">Build tool support</h2>



<p>The logic behind sbt tasks in run/debug configurations has been reworked and now allows for a wider range of sbt commands. This enabled us to fix an issue where passing multiple parameters to an sbt command was either interpreted as a single parameter or caused the command name to be treated as an additional parameter. To work around this, developers had to run the task in the sbt shell instead. The new logic is much simpler: We no longer modify the user input. Instead, the input is expected to be a valid sbt command, e.g. tasks must be separated with semicolons, and we do not unquote the input.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://admin.blog.jetbrains.com/wp-content/uploads/2026/07/RunConfig.png" alt="" class="wp-image-720466"/></figure>



<p>Additionally, we’ve fixed a bug in the sbt shell where sync failed after waiting for user input. Also, previously, sbt import would not work if the <strong>.jvmopts</strong> file contained key-value pairs separated by a whitespace, such as <code>--add-exports java.base/sun.nio.ch=ALL-UNNAMED</code> – we’ve fixed this, too.</p>



<p>Separate ScalaTest tests can now be run through Bazel. Previously, this functionality was implemented on the Bazel side, but with the introduction of the new official JetBrains Bazel plugin, it made more sense to move it to the Scala plugin. And, by the way, this is an external contribution from one of our users!</p>



<p></p>



<h2 class="wp-block-heading">WSL and Docker</h2>



<p>Starting with IntelliJ IDEA 2026.2, WSL and Docker support covers not only sbt projects, but also BSP projects and projects built with other BSP-based tools, such as Mill, Scala CLI, and Bloop. On top of that, we’ve stabilized WSL support and fixed several bugs where sbt imports and re-running tests used to fail in WSL.</p>



<p></p>



<h2 class="wp-block-heading">Scala 3</h2>



<p>The new release includes full support for <a href="https://docs.scala-lang.org/sips/clause-interleaving.html" target="_blank" rel="noopener">Clause Interleaving (SIP-47)</a>, which is a standard feature as of Scala 3.6. This allows IntelliJ IDEA to support previously impossible combinations of type parameters and regular parameters. This is illustrated in the <code>getOrElse</code> method declaration below, where it is necessary to know the instance of the <code>key</code> parameter to properly calculate the type bound of the <code>default</code> parameter:</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://admin.blog.jetbrains.com/wp-content/uploads/2026/07/scala3.png" alt="" class="wp-image-720519"/></figure>



<p>The update method in that code example also shows that we now support dependent parameter types belonging to the same clause. Previously, the example would have worked only if <code>key</code> and <code>value</code> had been placed in separate, single-parameter clauses.</p>



<p>On the error-highlighting front, we’re working on improving support for match types in the built-in highlighting. This new release supports type-level operations, as shown in the code example below. We’re working on expanding this support to cover some missing corner cases.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://admin.blog.jetbrains.com/wp-content/uploads/2026/07/matchtypes.png" alt="" class="wp-image-720530"/></figure>



<p>We’ve also fixed a bug where calling a synthetic companion object could not be resolved, and another one where a wrong number of indents could lead to changed semantics.</p>



<p></p>



<h2 class="wp-block-heading">Code completion</h2>



<p>In v2026.2, we introduce support for Scala in a recently added IntelliJ IDEA feature, command completion. You are likely already familiar with the behavior where, if you type a dot (.) after a symbol (be it a class, a method, or a value name), IntelliJ IDEA opens a code completion window. Now, if you type two dots quickly one after another, another popup will appear with suggestions for commands that might be useful in the situation. You can learn more from <a href="https://blog.jetbrains.com/idea/2025/11/universal-entry-point-a-single-entry-point-for-context-aware-coding-assistance/">our blog post dedicated to command completion</a> or watch the screen recording below.</p>



<figure class="wp-block-video"><video controls src="https://admin.blog.jetbrains.com/wp-content/uploads/2026/07/CommandCompletion.mp4"></video></figure>



<p></p>



<h2 class="wp-block-heading">Other improvements</h2>



<p>Additionally, we’ve improved the handling of <code>@throws</code> directives and of link references in ScalaDoc. The <code>@Language</code> injection annotation is now recognized on <code>apply</code> methods in case classes and implicit classes, and we’ve fixed an issue with how single tests are discovered in mUnit. Further improvements include a new version of the quick-fix for using <code>scala.compiletime.uninitialized</code> instead of <code>null</code> in null-initialized variables, as well as improved handling of nullable variables.</p>



<p>As always, we welcome your feedback. Please report any issues you find in<a href="https://youtrack.jetbrains.com/issues/SCL" target="_blank" rel="noopener"> YouTrack</a>. If you have any questions, feel free to ask us on<a href="https://discord.com/channels/931170831139217469" target="_blank" rel="noopener"> Discord</a>.</p>



<p></p>



<p>Happy developing!</p>



<p class="has-text-align-right">The Scala team at JetBrains</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
