# IntelliJ Platform Gradle Plugin 2.12.0 and the future of Gradle Grammar Kit Plugin

**URL:** <https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820>\
**Category:** Gradle Build Scripts\
**Created:** [March 7, 2026, 7:11am UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820 "2026-03-07T07:11:58Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![jakub.chrzanowski](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jakub.chrzanowski/32/38_2.png) [@jakub.chrzanowski](https://platform.jetbrains.com/u/jakub.chrzanowski)\
**Post date:** [March 7, 2026, 7:11am UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/1 "2026-03-07T07:11:58Z")

</div>

Hi, folks!

Yesterday, I released a new IntelliJ Platform Gradle Plugin [2.12.0](https://github.com/JetBrains/intellij-platform-gradle-plugin/releases/tag/2.12.0) release with a pretty long changelog. The most important items are:

### Add `org.jetbrains.intellij.platform.grammarkit` plugin with `generateLexer`/`generateParser` tasks.

When building a plugin that supports custom language plugins, you most likely rely on the [Gramar Kit](https://github.com/JetBrains/Grammar-Kit) library for generating parser and lexer files. To make this process easier, we introduced the [Gradle Grammar Kit Plugin](https://github.com/JetBrains/Gradle-Grammar-Kit-plugin).  
Recently, when fixing the support for IntelliJ Platform 2026.1, I realized we need features and libraries present in the IntelliJ Platform Gradle Plugin. After copying some of the code between projects, I decided to merge those two into a single code base, which resulted in the Grammar Kit support being a part of the IntelliJ Platform Gradle Plugin.

From now on, you can apply in your `gradle.build.kts`:

```kotlin
plugins {
  id("org.jetbrains.intellij.platform") version "2.12.0"
  id("org.jetbrains.intellij.platform.grammarkit") version "2.12.0"
}

```

This will make the original `generateLexer` and `generateParser` tasks available for you, so you can (and should) drop the `org.jetbrains.grammarkit` plugin from your setup.

If your setup was using only the Grammar Kit features, the `org.jetbrains.intellij.platform.grammarkit` plugin can still be applied all alone.

The original Gradle Grammar Kit Plugin will be sunset in the near future.

### Move sandbox directory from `build/idea-sandbox` to `.intellijPlatform/sandbox`; it’s path is accessible for reading and adjusting with `intellijPlatform.sandboxContainer`

Since this release, the sandbox directory is moved by default to a new location. This is the directory where all IDE settings and logs were stored when testing or running a fuest instance of the IDE with the `runIde` task.  
Before, we used the `build/idea-sandbox/` for it, which was removed when rebuilding the project, preventing you from persisting the setup between builds. That was an issue i.e. when you entered any license key in the IDE. It was already possible to change it in the Gradle setup, but it wasn’t obvious enough, so we decided to swith to `.intellijPlatform/sandbox/` where settings will persist.

In order to revert this location back to the old place, use:

```kotlin
intellijPlatform {
    sandboxContainer = layout.buildDirectory.dir("idea-sandbox") 
}

```

You can also access the current location with `intellijPlatform.sandboxContainer` property for any custom scripting purposes you have.

### Android Studio dependency resolution: improve version handling, prioritize local dependencies, and enhance test coverage

Google, starting from `2025.3.1.6`/`Panda RC1`, changed the naming convention of Android Studio artifacts from `https://edgedl.me.gvt1.com/android/studio/install/2025.2.3.9/android-studio-2025.2.3.9-mac_arm.dmg` to `https://edgedl.me.gvt1.com/android/studio/install/2025.3.1.6/android-studio-panda1-rc1-mac_arm.dmg`, which prevented Gradle from resolving them.

### Update minimal supported Gradle version to `9.0.0`

The IntelliJ Platform Gradle Plugin started using the latest Gradle 9.4.0 for building. Unfortunately, it deprecated Kotlin 1.8, which was available in Gradle 8.\* — this forces us to stick to what is described in their [Compatibility matrix](https://docs.gradle.org/current/userguide/compatibility.html) and compile plugin to Kotlin 2.2, meaning the lowest supported Gradle version is now 9.0.0.

* * *

The full changelog is avaialable [here](https://github.com/JetBrains/intellij-platform-gradle-plugin/releases/tag/2.12.0). If you have any questions related to the above highligh or any other changes, feel free to ask!

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [March 7, 2026, 3:48pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/2 "2026-03-07T15:48:40Z")

</div>

`intellijPlatform.sandboxContainer` returns something like `C:\Projects\ij-extra-tools-pack\.intellijPlatform\sandbox`.  
Is it possible to have directly the path of the sandboxed IDE? (something like `C:\Projects\ij-extra-tools-pack\.intellijPlatform\sandbox\IC-2025.1.4.1`). I have to guess how the intellijPlatform plugin computes the “IC-2025.1.4.1” string. For now, I pick the platform type and version from my `gradle.properties`.

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [March 7, 2026, 4:34pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/3 "2026-03-07T16:34:28Z")

</div>

One more thing, I was configuring the sandbox directory the old way, via things like `sandboxDirectory`, `sandboxSuffix`, etc. It’s now partially broken, so I decided to rely on the new default settings.

I’m running a sandboxed IDE with a custom task named “runIde2” (`val runIde2 by intellijPlatformTesting.runIde.registering {....}`) because I needed to set multiple jvmArgs, and some of them cannot be set with the regular `runIde` task.  
Question: when running my task, I see a suffix is added to the config, log, plugins, and system directories. Is it possible to not apply a suffix?

 ![image](https://us1.discourse-cdn.com/flex001/uploads/jetbrains_platform/original/2X/0/0e27c7c9289192ee337eb4ade906c3d0b73c203a.png)

It tried to set

```auto
prepareSandboxTask {
    sandboxSuffix = ""
}

```

but it now says I should declare `:prepareSandbox_runIde2` as an input of `:buildPlugin`. I don’t understand why.  
More exactly, it says:

```auto
* Exception is:
org.gradle.internal.execution.WorkValidationException: Some problems were found with the configuration of task ':prepareSandbox_runIde2' (type 'PrepareSandboxTask').
  - Gradle detected a problem with the following location: 'C:\Projects\ij-extra-tools-pack\.intellijPlatform\sandbox\IC-2025.1.4.1\plugins'.
    
    Reason: Task ':buildPlugin' uses this output of task ':prepareSandbox_runIde2' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.

Possible solutions:
      1. Declare task ':prepareSandbox_runIde2' as an input of ':buildPlugin'.
      2. Declare an explicit dependency on ':prepareSandbox_runIde2' from ':buildPlugin' using Task#dependsOn.
      3. Declare an explicit dependency on ':prepareSandbox_runIde2' from ':buildPlugin' using Task#mustRunAfter.

```

But I see no reason to do that.  
It worked correctly with the previous platform plugin.

Thanks

---

<div class="post-metadata">

**Author:** ![jakub.chrzanowski](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jakub.chrzanowski/32/38_2.png) [@jakub.chrzanowski](https://platform.jetbrains.com/u/jakub.chrzanowski)\
**Post date:** [March 7, 2026, 5:02pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/4 "2026-03-07T17:02:04Z")

</div>

> [@jonathanlermitage.1](#):
>
> `intellijPlatform.sandboxContainer` returns something like `C:\Projects\ij-extra-tools-pack\.intellijPlatform\sandbox`.  
> Is it possible to have directly the path of the sandboxed IDE?

As the name says — it’s a container for all IDE-specific directories. At the top level, you cannot guess which IDE it is there. That depends on your tasks. If you work with `runIde`, it implements the `SandboxAware`, which has sendbox-relevant fields that point you to the directory related to the base IntelliJ Platform dependency.  
Same, the `TestIdeTask`, it’ll point to the directory related to the base IntelliJ Platform dependency, but config, log, and similar directories have the `_test` suffix.  
With this release, nothing changed regarding accessing and resolving sandbox locations.

> [@jonathanlermitage.1](#):
>
> Question: when running my task, I see a suffix is added to the config, log, plugins, and system directories. Is it possible to not apply a suffix?

This is expected that for `runIde` and `runIde2`, there are different suffixed directories created. That’s done like that to avoid conflicts when running different tasks.  
You can alter that behavior by adjusting the `sandboxSuffix` property of the `PrepareSandboxTask`.  
The default `runIde` is associated with `prepareSandbox` default task.  
For your `runIde2`, you can access the related sandbox task with:

```kotlin
val runIde2 by intellijPlatformTesting.runIde.registering {
    // ...
    prepareSandboxTask {
        sandboxSuffix = ""
    }
}

```

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [March 7, 2026, 5:14pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/5 "2026-03-07T17:14:49Z")

</div>

Thx for the details.

```auto
val runIde2 by intellijPlatformTesting.runIde.registering {
    // ...
    prepareSandboxTask {
        sandboxSuffix = ""
    }
}

```

still generates the error I mention.

---

<div class="post-metadata">

**Author:** ![jakub.chrzanowski](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jakub.chrzanowski/32/38_2.png) [@jakub.chrzanowski](https://platform.jetbrains.com/u/jakub.chrzanowski)\
**Post date:** [March 7, 2026, 5:16pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/6 "2026-03-07T17:16:52Z")

</div>

This is probably related to another issue that is caused by a new location of the sandbox. It’s weird that tests didn’t fail on that.  
I’ll fix it soon.

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [March 7, 2026, 5:18pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/7 "2026-03-07T17:18:50Z")

</div>

Hum, I was running `gradlew buildPlugin runIde2`. It’s ok if I run `gradlew runIde2` directly.  
There was no problem with the previous platform plugin version.

Anyway, this is not a real issue.  
I think everything is ok now. Thx a lot for your help!

Just one last thing, and I’m sorry to insist on this: is there any progress regarding the build times on Windows? It’s still terribly slow.

---

<div class="post-metadata">

**Author:** ![jakub.chrzanowski](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jakub.chrzanowski/32/38_2.png) [@jakub.chrzanowski](https://platform.jetbrains.com/u/jakub.chrzanowski)\
**Post date:** [March 7, 2026, 7:17pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/8 "2026-03-07T19:17:35Z")

</div>

> [@jonathanlermitage.1](#):
>
> Hum, I was running `gradlew buildPlugin runIde2`. It’s ok if I run `gradlew runIde2` directly.

The `runIde` tasks don’t need the fully built plugin as they work on the sandbox, so you should skip the `buildPlugin` task for performance reasons.

> [@jonathanlermitage.1](#):
>
> Just one last thing, and I’m sorry to insist on this: is there any progress regarding the build times on Windows? It’s still terribly slow.

Yes, we have picked this story back up and discussed it this week with @robert.novotny and Florian, who will now work on it. Related ticket: [MP-7927](https://youtrack.jetbrains.com/issue/MP-7927)

---

<div class="post-metadata">

**Author:** ![illuminatedcloud](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/illuminatedcloud/32/55_2.png) [@illuminatedcloud](https://platform.jetbrains.com/u/illuminatedcloud)\
**Post date:** [March 8, 2026, 5:53pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/9 "2026-03-08T17:53:05Z")

</div>

> [@jakub.chrzanowski](#):
>
> > [@jonathanlermitage.1](#):
> >
> > Just one last thing, and I’m sorry to insist on this: is there any progress regarding the build times on Windows? It’s still terribly slow.
> 
> Yes, we have picked this story back up and discussed it this week with @robert.novotny and Florian, who will now work on it. Related ticket: [MP-7927](https://youtrack.jetbrains.com/issue/MP-7927)

Do you know if anyone is also looking at issues with Windows/ARM64? I would love to revisit moving my plugin from old-school ant to latest-and-greatest Gradle, but of course not until these performance issues are addressed on Windows, and also some Windows/ARM64-specific issues that I hit.

**UPDATE:** It looks like perhaps many Gradle-specific Windows/ARM64 issues were addressed late last year:

> <https://github.com/gradle/gradle/issues/21703>
>
> Hi 👋,
> 
> I am encountering a number of build failures when using Gradle on ARM64… Windows, all of the issues I have come across so far happen when Gradle tries to read the windows registry through the \[native-platform\](https://github.com/gradle/native-platform) library. Gradle most commonly does this when finding existing Java installations or locating the Visual Studio install path when building native code.
> 
> Some of my projects that do not use these features work as expected.
> 
> \### Expected Behavior
> All Gradle functionality should run natively on ARM64 Windows.
> 
> \### Current Behavior
> The Gradle native-platform library is not build for and does not support ARM64 windows, causing crashes when some commonly used features are used. An example of such crash can be seen in \[this gist\](https://gist.github.com/modmuss50/914c39209cf4c49469206c95c4aa8a28). Attemping to build the native-platform library on ARM64 windows encounters similar issues.
> 
> \### Context
> I believe ARM64 Windows in an up and coming platform that Gradle should support. Microsoft has recently been improving its ARM64 developer experience by proving native ARM64 versions of their developer tools (Visual Studiom Visual Studio Code) alongside their distribution of Java.
> 
> I have been using a Parallels virtual machine on my M1 Max MBP as a very capable windows ARM64 developer machine. Microsoft also have "\[Project Volterra\](https://docs.microsoft.com/en-us/windows/arm/dev-kit)" that aims to provide an ARM64 device for developers.
> 
> Tested with:
> Gradle 7.5.1
> Windows 11 ARM64 (In Parallels VM)

I’m currently trying to see if switching IntelliJ IDEA’s Gradle plugin to use that instead of the bundled one helps at all. Fingers crossed!

**UPDATE 2:** The good news is that with Gradle 9.4.0, the build works on Windows/ARM64 without any workarounds. The bad news is that when I execute the `runIde` task, the IDE never comes up, at least not completely. I’ve seen it get to the splash screen, but that process seems to hang interminably. And many times it never even gets that far. I’m trying to see if perhaps there’s still some cruft from the earlier Gradle versions that might be getting in the way.

---

<div class="post-metadata">

**Author:** ![jojoatxgme](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jojoatxgme/32/1550_2.png) [@jojoatxgme](https://platform.jetbrains.com/u/jojoatxgme)\
**Post date:** [March 21, 2026, 3:17pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/10 "2026-03-21T15:17:51Z")

</div>

Are you also going to take ownership and potentially revise the GrammarKit plugin? I just wanted to shamelessly highlight my PR again which resolves some problematic patterns/defaults in the existing plugin. 🫣 [Simplify plugin configuration by JojOatXGME · Pull Request #179 · JetBrains/gradle-grammar-kit-plugin · GitHub](https://github.com/JetBrains/gradle-grammar-kit-plugin/pull/179).

---

<div class="post-metadata">

**Author:** ![jakub.chrzanowski](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jakub.chrzanowski/32/38_2.png) [@jakub.chrzanowski](https://platform.jetbrains.com/u/jakub.chrzanowski)\
**Post date:** [March 21, 2026, 6:42pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/11 "2026-03-21T18:42:28Z")

</div>

Yes, I just noticed this PR has been there for quite some time… 🫣  
Do you think you can apply your changes to the IJPGP and its GK-related setup and tasks?

---

<div class="post-metadata">

**Author:** ![mlytvyn](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/mlytvyn/32/1555_2.png) [@mlytvyn](https://platform.jetbrains.com/u/mlytvyn)\
**Post date:** [April 3, 2026, 8:12pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/12 "2026-04-03T20:12:22Z")

</div>

@jakub.chrzanowski , great news, will the new Gradle GrammarKit plugin support Mixins? It was a limitation for previous Gradle plugin → [Gradle Grammar-Kit Plugin | IntelliJ Platform Plugin SDK](https://plugins.jetbrains.com/docs/intellij/tools-gradle-grammar-kit-plugin.html#usage) & [Grammar-Kit/README.md at master · JetBrains/Grammar-Kit · GitHub](https://github.com/JetBrains/Grammar-Kit/blob/master/README.md#using-with-gradle)?

---

<div class="post-metadata">

**Author:** ![jakub.chrzanowski](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jakub.chrzanowski/32/38_2.png) [@jakub.chrzanowski](https://platform.jetbrains.com/u/jakub.chrzanowski)\
**Post date:** [April 3, 2026, 10:38pm UTC](https://platform.jetbrains.com/t/intellij-platform-gradle-plugin-2-12-0-and-the-future-of-gradle-grammar-kit-plugin/3820/13 "2026-04-03T22:38:32Z")

</div>

Regular mixin inheritance is supported, but method mixins are still not, because Gradle generation relies on the Grammar-Kit CLI and that flow is still single-pass. To support method mixins in Gradle, the fix needs to be implemented in the CLI first; until then, PSI has to be generated from the IDE and committed.
