|
| 1 | +# v23.0.0 |
| 2 | + |
| 3 | +v23.0.0 brings a commonly requested feature for those using Windows -- WSL support (!!!). |
| 4 | + |
| 5 | +Windows users can now develop Elixir projects hosted inside WSL directly from their JetBrains IDE. This closes issues dating back to 2018! |
| 6 | + |
| 7 | +Also, "funnily" enough, 2025.3 broke quite a few features with WSL when @sh41 was working on it, and was fixed in [2025.3.1.1](https://youtrack.jetbrains.com/articles/IDEA-A-2100662602/IntelliJ-IDEA-2025.3.1.1-253.29346.240-build-Release-Notes). |
| 8 | + |
| 9 | +This release also includes fixes for a bunch of other various issues, such as a deps watcher deadlock, broken JPS Builder module names, and false warnings in regex sigils with interpolation. |
| 10 | + |
| 11 | +## v23.0.0 , thanks to @sh41! |
| 12 | + |
| 13 | +This release is entirely the work of one person: |
| 14 | + |
| 15 | +- [sh41 (Steve Hall)](https://github.com/sh41) -- @sh41 submitted the original [WSL support PR (#3749)](https://github.com/KronicDeth/intellij-elixir/pull/3749) as a 63-commit "let's fix WSL" proof of concept, then patiently broke it into 7 PRs for review. |
| 16 | + |
| 17 | +Beyond WSL itself, @sh41 fixed a deps watcher deadlock, a JPS Builder regression, added Mix dependency health checks, built out Windows dev infrastructure, added UI test infrastructure, updated documentation, and fixed regex sigil inspection warnings. |
| 18 | + |
| 19 | +Thank you, @sh41 for the incredible work! |
| 20 | + |
| 21 | +## WSL Support |
| 22 | + |
| 23 | +The headline feature of this release. |
| 24 | + |
| 25 | +If you're developing Elixir on Windows using WSL, the plugin should hopefully be a bit better for you - if you find anything weird, please [submit an issue](https://github.com/KronicDeth/intellij-elixir/issues/new/choose). |
| 26 | + |
| 27 | +The work was split from [#3749] into these PRs: |
| 28 | + |
| 29 | +- [#3753](https://github.com/KronicDeth/intellij-elixir/pull/3753) |
| 30 | +- [#3754](https://github.com/KronicDeth/intellij-elixir/pull/3754) |
| 31 | +- [#3755](https://github.com/KronicDeth/intellij-elixir/pull/3755) |
| 32 | +- [#3756](https://github.com/KronicDeth/intellij-elixir/pull/3756) |
| 33 | +- [#3757](https://github.com/KronicDeth/intellij-elixir/pull/3757) |
| 34 | +- [#3758](https://github.com/KronicDeth/intellij-elixir/pull/3758) |
| 35 | +- [#3759](https://github.com/KronicDeth/intellij-elixir/pull/3759) |
| 36 | + |
| 37 | +This resolves the following issues: |
| 38 | + |
| 39 | +- [#1384](https://github.com/KronicDeth/intellij-elixir/issues/1384) - No WSL support (2018) |
| 40 | +- [#1911](https://github.com/KronicDeth/intellij-elixir/issues/1911) - Cannot add Erlang/Elixir SDK using Windows WSL |
| 41 | +- [#2499](https://github.com/KronicDeth/intellij-elixir/issues/2499) - WSL: "Selected directory is not a valid home for SDK" |
| 42 | +- [#3470](https://github.com/KronicDeth/intellij-elixir/issues/3470) - Cannot set SDK for Erlang and Elixir from WSL |
| 43 | +- [#3674](https://github.com/KronicDeth/intellij-elixir/issues/3674) - Cannot set Elixir SDK when opening project from WSL2 folder |
| 44 | +- [#3746](https://github.com/KronicDeth/intellij-elixir/issues/3746) - MIX_HOME points to wrong directory with asdf/mise |
| 45 | + |
| 46 | +This may also help with: |
| 47 | + |
| 48 | +- [#3659](https://github.com/KronicDeth/intellij-elixir/issues/3659) - SDK setup issues (improved SDK validation) |
| 49 | +- [#3716](https://github.com/KronicDeth/intellij-elixir/issues/3716) - SDK not being applied (improved persistence) |
| 50 | +- [#3715](https://github.com/KronicDeth/intellij-elixir/issues/3715) - Can't add Erlang SDK (better error handling) |
| 51 | + |
| 52 | +> It should be noted that @sh41 works on Windows, and I (Josh) use Linux/Mac. |
| 53 | +
|
| 54 | +### What works |
| 55 | + |
| 56 | +> Please see the [Windows Subsystem for Linux (WSL) Support in the README](https://github.com/KronicDeth/intellij-elixir?tab=readme-ov-file#windows-subsystem-for-linux-wsl-support). |
| 57 | +
|
| 58 | +- SDK detection and configuration for Elixir/Erlang in WSL (asdf, mise, kerl, kiex) |
| 59 | +- All run configurations (Mix, ExUnit, ESpec, Elixir, IEx) |
| 60 | +- External tools (Credo, Dialyzer, Mix Format) |
| 61 | +- Project creation wizard with WSL SDKs |
| 62 | +- Path conversion (Windows UNC paths <-> WSL POSIX paths) |
| 63 | +- Graceful BEAM process termination (double SIGINT) |
| 64 | +- Auto-assignment of project SDK when the first Elixir SDK is created |
| 65 | +- Proper `MIX_HOME` detection for mise/asdf version managers |
| 66 | + |
| 67 | +### Known Limitations |
| 68 | + |
| 69 | +> [!WARNING] |
| 70 | +> - JPS Builder does not support WSL -- use Mix run configurations to compile instead. |
| 71 | +> - SDK setup tip: Click "OK" directly after configuring SDKs. Avoid clicking "Apply" then "OK", as this can cause persistence issues. |
| 72 | +> - Performance: WSL is slower than native Linux. This is a WSL limitation, not a plugin issue. |
| 73 | +
|
| 74 | +### Tested Environment |
| 75 | + |
| 76 | +Tested on Windows 11 with Ubuntu 24.04 on WSL2, with Elixir/Erlang installed via both asdf and mise. There are many possible combinations of Windows versions, WSL distributions, and version managers -- we'd appreciate community testing and bug reports for configurations we haven't covered. |
| 77 | + |
| 78 | +### SDK Discovery |
| 79 | + |
| 80 | +The plugin can now discover Elixir and Erlang SDKs installed inside your WSL distributions. All the version managers you'd expect are supported: |
| 81 | + |
| 82 | +- asdf - `~/.asdf/installs/` |
| 83 | +- mise - mise install directories |
| 84 | +- kerl - Erlang installations via kerl |
| 85 | +- kiex - Elixir installations via kiex |
| 86 | +- Homebrew (Linuxbrew) - SDKs installed via Homebrew on Linux |
| 87 | +- Nix - SDKs in Nix store paths |
| 88 | + |
| 89 | +SDK discovery has been consolidated into a single `SdkHomeScan` component that works across both native and WSL environments, so the same scanning logic applies everywhere. |
| 90 | + |
| 91 | +During SDK setup, you can choose which WSL distribution to scan. Once an SDK is created, the plugin auto-assigns it as the project SDK if it's the first Elixir SDK configured. SDK persistence has been fixed to resolve workspace model mismatches that previously caused SDKs to "disappear" after restarting the IDE. |
| 92 | + |
| 93 | +### Path Conversion |
| 94 | + |
| 95 | +Transparent path conversion between Windows UNC paths and WSL Linux paths. Both `\\wsl$\` and `\\wsl.localhost\` formats are handled. You can open a project from a WSL network share and everything just works -- file paths are correctly resolved when communicating with WSL-hosted tooling. |
| 96 | + |
| 97 | +### Run Configurations |
| 98 | + |
| 99 | +All run configurations work with WSL-hosted SDKs and projects: |
| 100 | + |
| 101 | +- Mix tasks (`mix compile`, `mix format`, custom tasks) |
| 102 | +- IEx sessions |
| 103 | +- ExUnit tests (with clickable file/line links back to the IDE) |
| 104 | +- ESpec tests |
| 105 | +- Distillery releases |
| 106 | +- External tools (Credo, Dialyzer, Mix Format) |
| 107 | +- Project creation wizard with WSL SDKs |
| 108 | + |
| 109 | +All run configurations have been migrated to extend a new `WslSafeCommandLineState` base class. Test frameworks share a common `TestRunnerCommandLineState`. New WSL-aware command line classes (`WslAwareCommandLine`, `WslAwarePtyCommandLine`) handle path translation in command arguments, environment variables, and working directories behind the scenes. `ColoredProcessHandler` has been replaced with a custom `ElixirProcessHandler` across all configurations. |
| 110 | + |
| 111 | +### Process Handling |
| 112 | + |
| 113 | +Processes running inside WSL cannot be signaled directly from Windows, so dedicated handling was needed. The BEAM VM requires a double SIGINT to terminate gracefully (rather than SIGKILL), and this doesn't work across the WSL boundary with standard IntelliJ process handling. |
| 114 | + |
| 115 | +- DoubleSignalTerminator - Sends SIGINT twice to gracefully shut down the BEAM VM, working correctly across the WSL boundary |
| 116 | +- ElixirProcessHandler - WSL-safe process handler with proper state tracking, replacing `ColoredProcessHandler` |
| 117 | +- CommandLineLogging - Diagnostic logging for command-line construction to aid troubleshooting when things go wrong |
| 118 | + |
| 119 | +### WSL-aware SDK UI |
| 120 | + |
| 121 | +SDKs from WSL distributions are clearly labeled in the UI and status bar widget, so you can tell at a glance whether you're looking at a native Windows SDK or a WSL one. The SDK selection flow is WSL-aware and works in small IDEs (RubyMine, WebStorm, etc.) that don't have the full "Project Structure" dialog. |
| 122 | + |
| 123 | +## Mix Dependency Health Checks |
| 124 | + |
| 125 | +When you open a project, the plugin now checks whether Mix dependencies are installed. If they're missing or stale, you'll get a notification with an action to run `mix deps.get`. This works for both native and WSL-hosted projects via a shared `MixTaskRunner`. |
| 126 | + |
| 127 | +The Mix project import flow is also faster and more robust -- OTP apps are pre-scanned off the EDT, and results are reused in the import wizard. |
| 128 | + |
| 129 | +## Bug Fixes |
| 130 | + |
| 131 | +### Deps Watcher Deadlock ([#3761](https://github.com/KronicDeth/intellij-elixir/pull/3761)) |
| 132 | + |
| 133 | +Fixed a deadlock that occurred when the `/deps` directory was deleted while the deps watcher was active. This also fixes JPS Builder module name handling that had been broken since September 2025. |
| 134 | + |
| 135 | +### Regex Sigil Interpolation ([#3765](https://github.com/KronicDeth/intellij-elixir/pull/3765)) |
| 136 | + |
| 137 | +Fixed false inspection warnings in `~r` regex sigils containing interpolated variables (e.g., `~r/#{var}/`). When the `~H` sigil injection feature is enabled, the regex inspection engine was seeing the interpolation syntax and complaining. Interpolations are now stripped before passing the regex to the IDE's inspection engine. |
| 138 | + |
| 139 | +## Infrastructure |
| 140 | + |
| 141 | +Some behind the scenes features, which is really nice! |
| 142 | + |
| 143 | +- Windows development - Platform-aware build services, Gradle tasks, and run configurations for developing the plugin on Windows. Updated `CONTRIBUTING.md` with Windows setup instructions. |
| 144 | +- CI improvements - Fork-safe Gradle caching (~4.5 GB cache) to reduce Maven dependency downloads, Maven Central access diagnostics. |
| 145 | +- Experimental UI test infrastructure - IntelliJ IDE Starter-based UI tests under `testUI/` for automated IDE testing, including Ultimate-only tests for license activation and project import flows. |
| 146 | +- Documentation - README updated with WSL setup instructions, configuration steps, and troubleshooting guidance. |
| 147 | + |
| 148 | +## Installation steps |
| 149 | + |
| 150 | +Download the `Elixir-23.0.0.zip` file from below, under `Assets`. |
| 151 | + |
| 152 | +> [!TIP] |
| 153 | +> Please refer to the [Install plugin from disk](https://www.jetbrains.com/help/idea/managing-plugins.html#install_plugin_from_disk) JetBrains documentation for how to install plugins manually. |
| 154 | +
|
| 155 | +1. Ensure your IDE is 2025.3 or above. |
| 156 | +2. Open `Settings` -> `Plugins`. |
| 157 | +3. Click the cog icon and select `Install Plugin from Disk`. |
| 158 | +4. Select where the plugin `.zip` was downloaded and install it. |
| 159 | +5. Ensure the plugin is version 23.0.0. |
| 160 | +6. Click `OK` to close the plugin window and reload the IDE. |
0 commit comments