New: Julia for JetBrains IDEs (Flexible Julia)

I confirm I cant see Julia option (I am on windows 11)

Trying new WSL option

Two remarks

  • the file browser does NOT see Ubuntu symbolic links as links, only as ordinary files (and, by the way, I am complicated, so some of those linux symlinks points back to Windows fs via /mnt …)

  • I have a (two) IDE internal error/ FlexibleJulia exception

first exception

Failed to start Julia PTY REPL

java.io.IOException: Couldn't create PTY
	at com.pty4j.windows.winpty.WinPtyProcess.<init>(WinPtyProcess.java:84)
	at com.pty4j.windows.winpty.WinPtyProcess.<init>(WinPtyProcess.java:54)
	at com.pty4j.PtyProcessBuilder.start(PtyProcessBuilder.java:193)
	at com.ilscipio.language.julia.repl.JuliaJediTermView.startLocalRepl(JuliaJediTermView.java:391)
	at com.ilscipio.language.julia.repl.JuliaJediTermView.startRepl(JuliaJediTermView.java:301)
	at com.ilscipio.language.julia.repl.JuliaJediTermView.lambda$createUI$1(JuliaJediTermView.java:278)
	at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:236)
	at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:22)
	at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:198)
	at com.intellij.openapi.application.impl.AppImplKt$runnableUnitFunction$1.invoke(appImpl.kt:124)
	at com.intellij.openapi.application.impl.AppImplKt$runnableUnitFunction$1.invoke(appImpl.kt:124)
	at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.runWriteIntentReadAction(NestedLocksThreadingSupport.kt:705)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:1094)
	at com.intellij.openapi.application.impl.ApplicationImpl$7.lambda$run$0(ApplicationImpl.java:648)
	at com.intellij.concurrency.ThreadContext.installThreadContext(threadContext.kt:305)
	at com.intellij.openapi.application.impl.ApplicationImpl$7.run(ApplicationImpl.java:646)
	at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:192)
	at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:192)
	at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:198)
	at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:192)
	at com.intellij.util.concurrency.ContextRunnable.lambda$run$0(ContextRunnable.java:26)
	at com.intellij.concurrency.ThreadContext.resetThreadContext(threadContext.kt:294)
	at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:25)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1$1$0(NonBlockingFlushQueue.kt:334)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:928)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1$1(NonBlockingFlushQueue.kt:333)
	at com.intellij.concurrency.ThreadContext.resetThreadContext(threadContext.kt:294)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1(NonBlockingFlushQueue.kt:330)
	at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.tryRunWriteIntentReadAction(NestedLocksThreadingSupport.kt:747)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent(NonBlockingFlushQueue.kt:326)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.flushNow(NonBlockingFlushQueue.kt:305)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.FLUSH_NOW$lambda$0(NonBlockingFlushQueue.kt:167)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:323)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:732)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:711)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:721)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:574)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$0$0$0(IdeEventQueue.kt:378)
	at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$0(IdeEventQueue.kt:1111)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106)
	at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:1111)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$0(IdeEventQueue.kt:376)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:416)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
Caused by: com.pty4j.windows.winpty.WinPtyException: Error running process: CreateProcess failed. Code 2
	at com.pty4j.windows.winpty.WinPty.<init>(WinPty.java:128)
	at com.pty4j.windows.winpty.WinPtyProcess.<init>(WinPtyProcess.java:81)
	... 48 more

second exception

java.lang.IllegalStateException: This method is forbidden on EDT because it does not pump the event queue. Switch to a BGT, or use com.intellij.openapi.progress.TasksKt.runWithModalProgressBlocking. 
	at com.intellij.openapi.progress.CoroutinesKt.assertBackgroundThreadAndNoWriteAction(coroutines.kt:614)
	at com.intellij.openapi.progress.CoroutinesKt.runBlockingCancellable(coroutines.kt:150)
	at com.intellij.openapi.progress.CoroutinesKt.runBlockingCancellable(coroutines.kt:134)
	at com.intellij.execution.wsl.WslIjentUtil.runProcessBlocking(WslIjentUtil.kt:70)
	at com.intellij.execution.wsl.WSLDistribution.lambda$patchCommandLine$1(WSLDistribution.java:258)
	at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:98)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:283)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:744)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:819)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:775)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:743)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:87)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:267)
	at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:98)
	at com.intellij.execution.wsl.WSLDistribution.lambda$patchCommandLine$2(WSLDistribution.java:257)
	at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:579)
	at com.intellij.execution.configurations.GeneralCommandLine.startProcess(GeneralCommandLine.java:599)
	at com.intellij.execution.configurations.GeneralCommandLine.startProcess(GeneralCommandLine.java:446)
	at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:416)
	at com.intellij.execution.process.OSProcessHandler.startProcess(OSProcessHandler.java:85)
	at com.intellij.execution.process.OSProcessHandler.<init>(OSProcessHandler.java:45)
	at com.ilscipio.language.julia.repl.JuliaReplService.startRepl(JuliaReplService.java:598)
	at com.ilscipio.language.julia.settings.JuliaSettingsConfigurable.lambda$apply$14(JuliaSettingsConfigurable.java:1437)
	at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:236)
	at com.intellij.openapi.application.TransactionGuardImpl.access$100(TransactionGuardImpl.java:22)
	at com.intellij.openapi.application.TransactionGuardImpl$1.run(TransactionGuardImpl.java:198)
	at com.intellij.openapi.application.impl.AppImplKt$runnableUnitFunction$1.invoke(appImpl.kt:124)
	at com.intellij.openapi.application.impl.AppImplKt$runnableUnitFunction$1.invoke(appImpl.kt:124)
	at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.runWriteIntentReadAction(NestedLocksThreadingSupport.kt:705)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:1094)
	at com.intellij.openapi.application.impl.ApplicationImpl$7.lambda$run$0(ApplicationImpl.java:648)
	at com.intellij.concurrency.ThreadContext.installThreadContext(threadContext.kt:305)
	at com.intellij.openapi.application.impl.ApplicationImpl$7.run(ApplicationImpl.java:646)
	at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:192)
	at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:192)
	at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:198)
	at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:192)
	at com.intellij.util.concurrency.ContextRunnable.lambda$run$0(ContextRunnable.java:26)
	at com.intellij.concurrency.ThreadContext.resetThreadContext(threadContext.kt:294)
	at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:25)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1$1$0(NonBlockingFlushQueue.kt:334)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:928)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1$1(NonBlockingFlushQueue.kt:333)
	at com.intellij.concurrency.ThreadContext.resetThreadContext(threadContext.kt:294)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent$lambda$1(NonBlockingFlushQueue.kt:330)
	at com.intellij.platform.locking.impl.NestedLocksThreadingSupport.tryRunWriteIntentReadAction(NestedLocksThreadingSupport.kt:747)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.runNextEvent(NonBlockingFlushQueue.kt:326)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.flushNow(NonBlockingFlushQueue.kt:305)
	at com.intellij.openapi.application.impl.NonBlockingFlushQueue.FLUSH_NOW$lambda$0(NonBlockingFlushQueue.kt:167)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:323)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:732)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:711)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.kt:721)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.kt:574)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$0$0$0(IdeEventQueue.kt:378)
	at com.intellij.ide.IdeEventQueueKt.performActivity$lambda$0(IdeEventQueue.kt:1111)
	at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:106)
	at com.intellij.ide.IdeEventQueueKt.performActivity(IdeEventQueue.kt:1111)
	at com.intellij.ide.IdeEventQueue.dispatchEvent$lambda$0(IdeEventQueue.kt:376)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:416)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

General Question, is there a reason why the notebook support uses a sans serif instead of a monospaced font? That kind of confuses me when reading/writing code as in Pluto/Jupyter code cells would also still be rendered in monospace. Or is there a setting I missed somehow?

Thanks for your work!

Happy to change that for the next release - no reason other than, me “guessing” it all. Should have used JetBrains Mono for this

Ok, i need to take a look at all of those.

New Release: Flexible Julia 2026.9.37

Fixes:

  • New Project wizard now visible in PyCharm, CLion, and other JetBrains IDEs (was IntelliJ-only)
  • Notebook code cells now use the editor’s monospaced font instead of sans-serif
  • WSL REPL: fixed EDT thread violation when starting REPL from settings dialog
  • WSL REPL: fixed PTY creation failure (“CreateProcess failed”) on some configurations
  • Julia tool windows (REPL, Scientific, Profiler) now only appear in Julia projects


Bugfix release following 2026.9.36.

The New Project wizard was accidentally IntelliJ-only - now works in PyCharm, CLion, and the rest of the JetBrains family. The WSL REPL issues that were causing crashes on certain configurations are also fixed.

Notebook cells now use your editor’s monospaced font instead of sans-serif. Code should actually look like code now.

I also made it so that only Julia projects see our Julia panels - this is less annoying for those that use multiple language plugins in their IDE.


@ufechner7, @jdad: Thanks for catching the PyCharm wizard issue!
@taaem: Notebook font fix is in - good catch!
@jdad: WSL REPL exceptions sorted - appreciate the reports!

Update: the version was already accepted by JetBrains and is now available on the marketplace

New Release: Flexible Julia 2026.9.38

New Features:

  • Interactive Window (experimental): Send code to a Jupyter-like cell panel via the editor context menu or Ctrl+Alt+Shift+Enter - enable in Settings → Julia → Experimental


Trying something new here. The Interactive Window gives you a Jupyter-like experience without leaving your editor - select code, send it to the panel, see results inline. Think of it as a scratchpad that lives next to your code.

Still experimental, so you’ll need to enable it in Settings - Julia - Experimental. Would love feedback on this one.

If this works well for everyone, I may also try backporting it to VSCode or at the very least contribute to a detailed ticket (if time allows).


Thanks to @RoyiAvital for the idea - let’s play around with this :slight_smile:

Direct link (Install via File - Settings - Plugins - Install from Disk): https://plugins.jetbrains.com/plugin/download?rel=true&updateId=1086134

Another quick reminder to everyone that JetBrains discounts exist and I opted into all of them:

Discount Community Programs

  • For students and teachers (Free)
  • For classroom assistance (Free)
  • For Open Source projects (Free)
  • For universities and educational organizations (50% Off)
  • For startups (50% Off)
  • For former student license holders (40% Off)
  • For Developer Recognition Program (Free)
  • For non-profit organizations (50% Off)

see also: Monthly and yearly plans with JetBrains Toolbox

New Release: Flexible Julia 2026.9.39

New Features:

  • Joovy (experimental): Tiered lazy compilation. Bundled with the plugin, enable in Settings - Julia - Experimental


So I keep coming back to @tue and his post about performance. And having a background in Java, i keep thinking that maybe we need a Groovy like runtime environment. So I began playing around with that idea and here it is:

Joovy is a dynamic compilation engine that sits between you and Julia’s native compiler. It’s not a change tracker - so it is not a Revise.jl. Joovy replaces how compilation works.

So what Joovy does it, it wraps your code and sends it to joovy before hitting the compiler. There we determine which parts of all dependencies are actually required for your run and compile those, instead of the whole packages. We then have tiers. Tier 0 is basically a non compiled version of the code (so super slow to run, but instant to load), tier 1 is a our optimized approach - first run will be faster, but runtime a little slower than native Julia, lastly tier 2 is production ready fully compiled native julia code.

In flexible-julia (and if Joovy is enabled), I will now promote everything to tier 1. There is some optimization too, if you keep calling/processing certain code fragments, we promote it to native speed in the background. Your external packages get the same treatment.

The result: your first interaction with any code is fast, and hot paths converge to native performance without you doing anything.

So it is a useful addition to Julia compiler and Revise.jl and sits in between both, hopefully improving the overall feel during development.

I’ve also open-sourced Joovy for everyone to play around with:


As this is all very much experimental, it would be great if some of you could turn it on and run joovy_benchmark() after your calls, it should tell us exactly if things improved. (restart repl in between switching the joovy process on or off).

You can download the most recent version here: https://plugins.jetbrains.com/plugin/download?rel=true&updateId=1098549 (File - Settings - Plugins - Install from disk)

I will also add a post under tooling that explains the concept a bit better.

EDIT: posted this in the dedicated thread instead

Here’s the dedicated discussion: joovy-faster-compilation-with-julia

Edit: I had to reupload the version - but the new link works https://plugins.jetbrains.com/plugin/download?rel=true&updateId=1098549

New Release: Flexible Julia 2026.9.40

New Features:

  • Joovy now precompiles faster (~2.4times faster than native julia for makie) at a cost of runtime performance

Just a quick one: I am currently optimizing Joovy and trying different ways to further break into cold start performance. So I ran various tests on how to precompile more efficiently (using a test program that uses Makie as my target). It improves somewhat, but still not a 10x factor or so. But it does feel like we are on the right track.

New Release: Flexible Julia 2026.9.41

New Features:

  • Julia REPL tool window now shows a setup card with “Open Julia Settings” and “Download Julia” buttons when no SDK is configured (replaces the old editor notification banner)
  • Setup card dynamically appears/disappears when SDK is configured or cleared in settings

Another quick update, after an unfortunate negative review on the marketplace. Some user reported the system slowing down and a constant repl crash-loop. I analyzed and came to the conclusion that this may have been a user who didn’t have Julia installed prior to installing the plugin. So now the users see a screen that tells them about the missing sdk instead of the repl. Hopefully that resolves it.

New Release: Flexible Julia 2026.9.43

New Features:

  • Joovy (experimental): Precompiles your packages in the background while you edit - no more compile waits when you run
  • Package Autocomplete: using/import now suggests all registry packages, not just installed ones

Fixes (2026.9.42):

  • Language Server no longer restarts on benign stderr messages - tightened fatal error detection and added double-restart guard (#130)
  • REPL setup card now updates when SDK is auto-detected at startup - was stuck showing “Julia SDK Not Configured”



A bugfix release with some Joovy improvements.

Joovy got smarter - it now precompiles your packages in the background while you’re editing. That way, by the time you hit run, compilation is already done. More details in the Joovy thread.

I also had to reupload the endless loop fix, as somebody else reported a similar issue (he also reported a license validation issue - if you run into this as well, a restart and perhaps reinstall should fix it. But please let me know as well - so I can take another look).

Lastly, I realized that typing "using " does not give you a package list yet, so I added that as well.

New Release: Flexible Julia 2026.9.44

New Features:

  • In-IDE User Guide: New documentation with screenshots, built into the redesigned Docs panel
  • Documentation Links: Added to the welcome screen plus a one-time notification for new users
  • Joovy Config: Set compilation tiers per package/module in a LocalPreferences.toml [Joovy] section

Fixes:

  • Joovy failed to load (“Joovy not available”) because a bundled source file was missing from the extracted package


Improved our documentation after receiving some feedback. The Docs panel now includes a full user guide with screenshots - no more hunting through forum posts. There’s also a link in the welcome screen and a one-time notification so new users actually find it.

For Joovy users: you can now configure compilation tiers per package/module via Preferences.jl. Just add a [Joovy] section to your LocalPreferences.toml.


@arnold-c: Thanks for suggesting the Preferences.jl config interface for Joovy!

And thanks to the user who emailed about missing documentation - you were right, it was overdue.

Question: Is there an equivalent to a VSCode project in JetBrains ? It consists of a set of folders, in my case, the main Julia project and the main dependencies (packages).

Hey,

Yes. I think what you are looking for is File - Project Structure. Add each folder (your main project and each package) as a content root (or module). They all live in one window.

Flexible Julia already supports mono-repo layouts with subprojects, so dependencies you keep as local packages work out of the box. I do that often with other projects (or just use folder structures, whichever I find easier at the time - but both works)

My plots have disappeared!
Both intellij (2026.2.0.1) and flexible julia (2026.9.44) updated today. Is there an incompatibility?
The julia panel just says “Nothing to show”

did you restart the ide? They are only kept in session. and you have to rerun them. Would you expect them to be permanent across restarts?

I will add that as a new feature - store in local cache, so that they are kept across restarts. Sorry if that confused you.