JetBrains Fleet drops support for Kotlin Multiplatform
blog.jetbrains.com
blog.jetbrains.com
So far, it seems like they're very slowly recreating their IDEs from scratch in Fleet while continuing development on the IntelliJ Platform and related IDEs, doing twice as much work for nothing.
I love and use Jetbrains IDEs every day, but after a decade I still only find their UIs merely tolerable. Many of my colleagues try them out for an hour or two and then jump ship back to VSCode just because the initial "wtf is going on" factor is so high =/
I'm guessing Fleet was their answer, an opportunity to develop a greenfield UI for a new generation of devs raised with UX (vs the old guard of IntelliJ users from past decades). It made sense, until AI suddenly took over everything and nobody cared what your IDE UI is like anymore.
They're also now intent on destroying them in favor of the "new" primitive UI by trying to cater to new users (who are seemingly fine with never becoming power users). The good UI is still available through a plugin, but it's obvious it will be dropped in the next few years. I'm pretty sure they will lose the old guard like me right after that.
I am a power user of my tools. It is sad when a tool gets simplified and have configurations deleted, it is like getting rid of "Advanced" option, essentially.
Maybe my one main complaint is the side panes. I still loathe the hieroglyphic buttons. I would love a return to the sensible vertical text labels… but even then I realize I never change the order of those panes, so it’s not like I’m ever unsure of which pane is which at this point.
It feels… perfectly cromulent. I don’t really care at this point, if it helps new folks use IDEA IDEs, cool. Doesn’t affect my life at all now. And that’s coming from someone that does actually use the useful features of an IDE, and has been for a long time.
I get trying to be minimalist but the VCS icons are really useful because they also convey if something has not been pushed / pulled yet.
Now, there's the classic plugin but it's got an expiration date. I also could get used to all of this, and I did, I migrated to VSCode. It has a surprising (yet hilariously complex) amount of theming options and I got the contrast to previous JB defaults. Because Jetbrains' communication has been just awful throughout this change these past couple of years, I just don't trust them anymore to not destroy my workflow on a whim, it's a portent of enshittification.
I also don't think that's some obscure hypothesis on my part. It was just the zeitgeist at the time Fleet first came out (https://developers.slashdot.org/story/21/12/04/1655249/jetbr...)... seemed obvious that it was to counter VSCode. Fleet's own homepage says "We envisioned Fleet as a coding tool with a clear minimalist design that doesn’t overwhelm and helps keep you focused."
I'm not trying to convince anyone that one look & feel is better than another, just point out that there IS a generational divide (my guess) or at least a divide (of SOME sort) between those who prefer dense UIs and those who prefer simpler ones. My younger coworkers especially seem to struggle with the full-blown IntelliJ – it's just a trend I noticed, not some deep scholarly analysis. It's part of a generational fashion trend towards more whitespace and less information density.
Jetbrains already risked quite a flame war when they launched the "simplified UI" for IntelliJ, to a very mixed love-it-or-hate-it reception. They realized they couldn't change the existing UI too much without alienating some % of their existing users. So Fleet was a way to instead make an alternative, sharing some of the same backend but with a different enough UI for those who want it.
I doubt it's ever going to replace the traditional IntelliJ UI, especially now that they're refocusing efforts on AI stuff instead of minimalist UIs.
I've only recently started using JetBrains, so I'm only familiar with the new UI but I distinctly feel like I don't know what I'm missing on extra functions because I'm just not aware of it existing
Don't worry, I've been using it for 10+ years and I still feel that way every day :)
But also objectively.
Who should I take seriously now? The "power users" who claim that vim with lsp and terminal is the way, or the "power users" who claim that bloated UIs is the way?
As far as I am concerned, "power users" only really need the functionality to be there and accessible with a command palette, do away with "power users" panels and buttons please.
Typically if this happens I notice IDEA is indexing the entire dependency tree for something like node or python. It'll have an understanding of everything but is much slower to index and typically not needed. If you exclude node_modules you'll have very fast time once again
Compare that with the other main IDE I use, Visual Studio. It works great.
That's on you. What it comes with is great. And there's a huge selection of good third party plugins if one takes attention to what they install.
There is a whole nother discussion about "progressive discovery" of functionality which I think is actually wrong although that would be a fringe view among "UX" specialists.
Jetbrains IDEs go pretty fast when the JVM running them is switched over to the ZGC garbage collector, and by making sure the Metal or Vulkan renderer are being used. (And DirectX on Windows? idk?)
The difference is pretty stark. ZGC is Verygood. Everything is very responsive. This is not an “enterprisey” JVM GC that takes ages to spin up for throughput. It’s quick.
The whole IDE starts up in like 1 second on my 2018 Intel i7 laptop?, including open projects and all. It’s wild how fast IntelliJ can get – and it’s also kinda wild how much performance they leave on the table with the default options.
It’s an easy config change in the .vmoptions file.
I think on macOS the Metal GPU-accelerated UI rendering is the default these days. On Linux you need to opt in to the Vulkan equivalent. It’s still a bit unrefined but worth it even now.
ZGC is a much bigger difference though. Try it!!!
Seems like some things become faster while other things become slower? https://youtrack.jetbrains.com/issue/IJPL-1284/Increase-defa...
–Thanks for the link!
I only notice things getting much quicker, fwiw. I do habitually throw resources at the IDE as mentioned in the next Youtrack comment down.
I pay for them primarily to save me from LSP, which they do for many languages, though the Elixir plugin is not by Jetbrains (but it actually predates LSP itself).
People can rag on Electron apps all they like, but VSCode on modern hardware is very snappy. Jetbrains is a noticeable downgrade.
It's not Sublime Text fast, for sure.
VSCode is anyway running either Netbeans or Eclipse headless for its Java support, better use the real deal.
It’s definitely not as fast to load etc as say sublime, but it’s an IDE not an editor.
Sure indexing a new project takes a while and things will be sluggish at first but once it done, it works great. And you can easily edit huge files, like seriously huge files without problems, even the search will work smoothly. Basically the Java school of performance, absolute resources hog but scales very well.
For me vscode is intolerably slow. Sure it starts up quickly but the editing experience is absolutely infuriating. I had projects that I could not work with in vscode because a few thousand lines of code in a file were already too much for it.
I haven't tried Fleet but that could be part of it
Now I use Zed, which seems to be what Fleet should have been.
Some of us love this UI.
Xcode has its own share of weaknesses, don’t get me wrong. It’s just that I’m irritated more frequently by quirks of IntelliJ IDEs like how the sidebar palettes work in a way that they’re constantly at battle with each other and how super simple considerations like per-editor-pane back/forward/history are missing. They sometimes feel like they trip over the basics in pursuit of fancy gizmos.
It has all the same UI problems I remember of their other IDEs like WebStorm. Clunky and weird looking, and that’s coming from someone that appreciates generally Windows 9x style controls and palette, JetBrains just can’t get it right.
As a side note one of the advertised features of DataGrip is its AI/LLM features which I thought was kind of cool after dealing with a terribly designed and legacy database; LLMs have really helped with refactoring.
So once I got a license for DataGrip and then opened it the AI tool was no where to be seen. I had to go read the docs page online to find out I have to install the extension myself. Weird.
The advertised AI feature is… behind another paywall with a seven day trial. Hang on, I just got DataGrip for its “included” AI support and you want to charge me for it anyway?
I’m glad I got the license for free via their OSS support, but would I have bothered if I knew one of the main features is actually a separate paid feature? Probably not.
I would have love it though ;)
People who get hung up on the aesthetics of their IDEs are going to have other problems with programming generally.
Really?
I mean, the UIs are basically the same now. I have them open side by side on my desktop right now and they're both:
- black boxes with a panel on the left of icons, then a tree of files, then a tabbed pane of open files.
- clicking on the icons on the left opens some obscure subwindow depending on you magically knowing what the icon means.
The only meaningful difference is that in vscode there's a command palette at the top where you can type in random stuff and get a list of actions, and in intellij you have to 'know' that the shortcut for that is 'press shift 3 times' instead of 'shift control p'
...but I mean, thats it; they're otherwise pretty much identical, practically.
Honestly, anyone who opens intellij and then goes back to vscode because its too different is a numpty.
Things work differently, and people don't like different things, and if they go back because it was different or the shortcuts are different, that's fair. It is disruptive.
...but, because the 'wtf is going on' factor is too high? Realllllllly? What does that even mean?
Come on. They're not that different. If clicking on 'run' on the top right instead of on the left bar is too 'wtf', you really haven't made a real effort to try using the other IDE.
(The same goes for old school intellij users who try vscode and then run away. Give it a decent shot before you walk away because it's too hard if the only hard thing is your keyboard shortcut muscle memory... vscode is pretty great)
You only really see the deep differences when you use them extensively for things like refactoring and debugging.
IntelliJ ships a “VSCode” keymap in the product that you can switch to with one option in the settings.
Maybe things have changed since then, no idea.
My main reason for using JB is I loathe the shitty build your own ide experience of VSC. Everything is more difficult, whereas in JB everything just works.
Also, with a rewrite I've hoped that remote development will be less buggy than it currently is with Goland. It's laggy too and you see weird screen flashes. Sometimes certain features don't even work over remote.
I haven't tried again to see if newer versions have fixed the issue.
KMP support was the only reason I was still curious about Fleet. I presume this announcement is the beginning of the end for Fleet.
There was really no reason for ST users to switch to VSC other than better tool integration.
Winning people over from VSC means having a free and fast editor with great features and lots of useful plugins. Still a long way to go.
They don't necessarily need to exactly know what it is, perhaps is just Jetbrains hedging their bets.
But... but... I've always wanted (and willing to pay) a single IDE with any plugin that works in it - not just so many different versions...
I'm a multiple programming language user - mostly C++, but also Python, Go, Rust, C#, etc.
That should get you within 90%+ use cases
VSCode supports multiple languages in one container just fine. My hacky solution is to use a hybrid container with IntelliJ for the Java code and then connect VSCode to it for doing C++. That means I will be forfeiting my CLion license. I contacted their support (which is reasonably responsive), they say they're working on a solution but I don't know when it will be practical for me.
I'm trying latest IDEA (2025.1 EAP) and for the first time a bazel project that I have got parsed successfully (had to enable some old legacy flag though), so there is hope!
Mixed results. Almost always works on Linux/OSX, but my dominant platform is Windows.
Yesterday tried it again (BSP one) with IDEA 21.5 EAP with nightly on the plugins, and things got synced, but was not able to find any targets (they are C++ targets), funny it found and listed a "filegroup"
But I have my hopes up, the BSP looks like it's doing the right thing discovering much faster the targets, and probably needs more work just to finish all edge cases (like mine - Windows).
In fact, the JNI tooling support on Android Studio is a custom implementation done by Android team themselves.
I use their products because that aspect is best-in-class for many languages, but the actual applications themselves leave a lot of be desired. Core text editing is pretty good, but so many Byzantine nested menus and odd Java fully-modal locks-out-the-background dialogs.
crtl-shift-a
Maybe things changed after the 15 years that have passed since, but I don't see why would they.
It wouldn't surprise me if that was the case with Rust, C++, and possibly even C# too.
I'm sure there is some loss of UX and related features in this setup but there are always trade-offs.
Only Clion includes C++: https://www.jetbrains.com/products/compare/?product=idea&pro...
Only Rider includes C#: https://www.jetbrains.com/products/compare/?product=idea&pro...
I use another big tool which is around 20 years old, and that can do everything and a ton more from a single screen at the same speed or faster, with greater integration.
Yet people don't touch it because it's old, complex, looks ugly and its UI is too dense.
Oh, I forgot, it also includes a learning curve, but the same people devote their lives to "rice" their Vim installations for months.
Switching from a large, complex tool that includes a learning curve is expensive. You set a high bar for switching from Eclipse because you are used to it, paid a learning price and are productive in it. And you are right. But that also means that picking such a tool from a multitude of options should be done after careful consideration, which is exactly what using smaller tools provides.
On a somewhat related note, I want my professional software to only provide a (great) speedup of development. I want them to only do what I could do without them (even if it takes a week instead of a minute). This means I can often look at things that fail to work and understand what is failing. This is also helped by new engineers starting with smaller tools and building up to integrated, distributed tools only after knowing how individual elements work and can be connected. Integrating with a (good) big tool is then not a fight as it brings a "wow" moment -- "instead of doing all this by hand I can do it with a few mouseclicks!". My 2c.
In this case, it's not. Eclipse put Integrated into IDE, but doesn't subtract transparency in the process. You can see what it does, tweak every step meticulously if you want, and return to defaults with one click, if you prefer.
What this transparency brings is mental flexibility and understanding. Do I want or need to switch? I'm doing the same thing in Vim or KATE of BBEdit in 15 minutes. Maybe I stumble with a couple of shortcuts, but that's not a problem.
The funny thing is I see the compiler command every time I press build, so it's burned in my memory after a day. While I can read valgrind outputs and understand what it says, Eclipse highlights the lines automatically, so I'm faster. While I can gnuplot performance graphs, Eclipse auto-builds them so they are on my desktop after a 10 hour torture run.
In my case, Eclipse enables me to carry a whole toolbox and more in a single folder, yet all the tools it uses and what it does is so transparent that I can switch away on an instant if I don't get my installation with me, or I'm connecting to a server in a datacenter far, far away.
I don't like to be blindsided by my tools. I like blinkenligths in a way, and Eclipse gives me these blinkenlights while being highly automatic.
So while I understand your case, it doesn't apply to Eclipse, at least, because it's not a strangler, but a great enabler and HUD in my experience.
For the time investing part, I don't grind. I get a tool, and start using it, and when it becomes limiting, I start poking it and learn what feature solves that problem at hand. By that way, I learn the tool as I go, and if the tool can't expand to my needs at some point, it fades away from use gracefully. I don't do "stop, drop, roll" thing while changing tools, so I can't paint a timeline about when I picked a tool and dropped another.
I primarily do Java development. I started with eclipse, fell away because at the time it had pretty awful maven support. Moved over to Netbeans which has pretty good maven and java support, but went through a somewhat "unsupported" period of time and ultimately I moved over to intellij.
Intellij has been a joy to work with in Java code bases because everything just works and the smart features are actually worth it. Intellij can do pretty major refactors that both netbeans and eclipse can't think of. Further, it has really good code improvement suggestions that neither eclipse nor netbeans had. I can also simply check out any code base and tell intellij to open it and be up and running immediately.
A yellow line in intellij is almost certainly something you can right click on and hit "make better" and you'll have better and easier to understand code as a result.
All that said, you sound like you are working with a C/C++ environment. I've not done a lot with Intellijs clion so I couldn't tell you how comparable it is. It wouldn't shock me to learn eclipse is better as intellij is really well built for dynamic languages, maybe not so much for statically compiled languages.
For C/C++, Eclipse has a "so-called" indexer, which indexes the whole project, does static analysis on the fly, provides great auto-complete and warns you about gotchas. Since it can read the whole project, it has a better view than a C++ LSP, and it works reasonably fast and provides great detail.
Also, Eclipse has "Linux Tools Integration", which is also a boon for C++ development on Linux.
All in all, it helped me to build a materials simulation code without any memory leaks and with great performance insights, so I can't complain. Plus, I love build and launch profiles of that thing.
(Thirty years in, still using IDEs as glorified text editors, still dropping to vim on a regular basis.)
Example: now that I'm a solopreneur I use JetBrains DataGrip, and overall I am very pleased with it. But I couldn't have it on my previous two jobs. One of the jobs restricted my work computer to only allow MySQL Workbench (arbitrary Powershell scripts also were allowed, of course), and the other one didn't want to pay for a licence, no matter how much I pleaded.
So before I had to make due with (admittedly) inferior tools because they were free and available as the lowest common denominator in the general workplace.
Being comfortable with the tools affects a large part of my productivity, and I'm more productive with a crappy-but-familiar toolbox than I am with the unknown spaceship.
Again, the tool I gave as an example has integrated configuration snapshots, and if something breaks I can revert to a config 2 seconds or 2 years before, including component versions installed at that time.
To be honest, I probably used that feature at most two times in the last 20 years.
Workplace restrictions something off-limits and I can't tell anything about. The people I gave examples are persons I know and they have no such restrictions in place.
I have to use IntelliJ due to Kotlin codebase, but I'm still more of a fun of Emacs and I don't like Idea that much. I think IDEs somewhat lack the power that simpler tools have, which is automation.
One thing I miss from IntelliJ is programmability. That's why I still use Emacs on workplace for anything outside of Kotlin (git, grepping, note-taking etc). I even edit code in Emacs from time to time when it's easier to write a Lisp function which will batch edit code than doing keyboard macro.
Another thing I'm missing from IntelliJ is determinism. Everything is asynchronous, so the same combinations of actions can lead to different results, making automatisation painful.
https://dmitrykandalov.com/liveplugin
IntelliJ is very programmable, but it can be a bit intimidating because out of the box it assumes that you want to program it by creating plugins. That's very different to the elisp REPL driven approach. LivePlugin bridges the gap by letting you control the IDE from a repl-like console, building up scriptlets that use the same plugin APIs. There are examples for how to do things like add menu items, explore the semantic PSI trees, trigger refactorings or do whatever else you want to do.
- Tracks the mode globally (rather than per editor), and treats mode-switching as an edit operation (so if you accidentally enter a read-only tab in insert mode then you need to switch to another tab, escape, and then go back to get your keybinds back.
- Doesn't bind escape in sidebar dialogs, so trying to exit insert mode in a terminal or commit dialog just defocuses the sidebar instead
- Still applies its other binds, so even falling back to CUA/IntelliJ keybinds doesn't work either!
- Makes no effort to integrate IntelliJ keybinds, all you get for conflicts is "would you like to lose the Vim or IntelliJ functionality that binds this key?"
The difference is stark when you compare it to something like Evil that actually values the user experience. (How's that for an irony?)
Jumping into a new language with JetBrains is the difference between me spending 2 hours figuring out a codebase and submitting a PR, and me spending 2 hours fucking around trying to fix things.
I still don’t use an IDE for projects up to a certain size, but after a certain point, being able to also store all the nitty gritty bits about a project (building, profiles, environment, flags, etc.) in a project saves more time than it requires to set them up.
Most of my work is in Go, Rust and Typescript.
I was told by Jetbrains representatives that Fleet is now deprioritized internally, which is a pity.
I switch to Jetbrains from time to time because there are many impassable serious bugs in VSCode, on the other hand…
I really liked JetBrains tooling in the past, but that and then they also started hitting me with spammy advertising right after I paid for another year, and just couldn't stand it, refunded and cancelled.
Webstorm closer but overall a bit better than vscode. The latter benefits from typescript support, but the former has much nicer devx
Unfortunately they are forcing a VSCode UI on everyone and outright lying about their adoption figures (claiming it's off by default and everyone actively chose to use it). The new UI is just as much a broken mess as VSCode. The only way I can get work done is by using my fallback license for the 2023 versions.
It is apparently inconceivable to JetBrains that power users exist and pay good money for power user tools. JetBrains only cares about VSCode script kiddies anymore.
update: emphasis on "heavy". It's good for python projects. For some one-off script I'm more likely to use Zed. pyCharm indexing drives me nuts sometimes. But Zed lacks the features that I use in pyCharm for larger projects.
JetBrains has always had issues with performance and slightly clunky UI. But in return there's just a pile of amazing refactoring and analysis tools that nobody else offers.
I pay for tools that make my job easier so I can concentrate on delivering. Working without RustRover or CLion is just unpleasant.
I have an emacs + LSP + Rustic etc configuration which does about 80% of what I can do with RustRover. But it's brittle, slow, and takes work to maintain. VSCode suffers from similar problems (not slow, but brittle and ergonomics are worse).
This always felt to me like an old-school woodworker saying you can do a large project with hand tools.
We can start with basic things: the contrast, in default settings in dark mode for both. In theses conditions, Rider contrast is too low for a screen you have to stare all the day, compared to VS Code.
Commonly used item are in sub menus (in vscode they are sorted by most commonly items on top), common shortcuts requires finger gymnastics.
- it has bad defaults for theme (which I bet most devs change immediately anyways on every IDE)
- “common items” (which when unspecified could be assumed to be subjective to each persons workflow) are hidden in submenus?
- “common shortcuts” (again unspecified) require stretching (again, something trivially changed)
Unless you have more these feel not only extremely weak but extremely subjective. Please avoid trying to phrase your opinions as some fact it’s a tiring trope these days.
- “default theme sucks and is bad accessibility”. On its own this is objectively provable of course except when you’re talking about probably the single most commonly changed setting in a coders primary IDE other than maybe font. Calling the app objectively bad because it chose a bad default theme that gets immediately changed is a weak take
- “hidden menu options” this is the subjective one as I called out unless you can provide examples that are universal.
- “bad keyboard shortcuts” is subjective for the most part but even still is a widely changed option and very easy to fix. So calling the app objectively bad for this is also a weak take.
The items in VS Code are sorted the chance you have to use it depending of the context. In rider, commonly used items are in submenu (rename hiding in refactoring), less commonly used items are not in the submenus.
For the keyboard shorcuts, again you can argue practicality as an objective metric. The number of keys for a combo and distance between the keys have a big practicality factor, and Jetbrains IDEs loves F-keys (that you can't reach if you hold a keyboard like ergonomists recommends)
No, it’s subjectively bad for you.
It really grinds my gears when people use “objectively” when being objective is to deal purely in unbiased observable, repeatable facts.
Your justification starts first with screen contrast - something that is truly in the eye of the beholder.
Then you go on about “finger gymnastics” for shortcuts - again something that you (and yes I don’t disagree others as well) suffer from.
Neither are issues that have bothered me one iota - so much so that your mention is really the first time I’ve thought about either.
However you then compare this to another app that also has many detractors thus creating an instant bias.
Due to the poor font rendering and colors picked in Rider, by default there is a contrast of 4.77 which is just meet the minimum ratio, and for an app you stare all the day at, it's not enough.
From the firefox docs:
> Having good color contrast on your site benefits all your users
It's written all your users, it's not subjective.
Which is what? Is it a well defined fact?
So, they’re recommendations, not facts.
A fact is not a recommendation.
You can cling to this until the cows come home, but anything visual is dependent on the viewer. It’s not a fact. It’s subjective.
Anything else is subjective.
A UI can never be objectively bad because it is based upon how someone sees it.
For me, Gimp has a subjectivity bad UI because I’ve never been able to get my head around it.
Other people find it’s perfect and that it’s really easy to use.
Both statements are subjective.
“Objective” and “subjective” are both words that have well defined accepted dictionary definitions.
I presume the answer is yes, from what you said. Then it becomes less of an issue, if not an non-issue.
IDEs and code editors are tools which we live with for a long time. Nobody expects their defaults to be unchanged. Otherwise we'd be all using notepad.exe for coding.
Not having the defaults organized by your tastes is not a valid reason for disqualifying a tool out of the gate.
As a counter example, Electron's font rendering is nothing to drool over, from my perspective, and doesn't give an extra point for using it in my case.
If you still need to customize everything then, well, what did you actually gain over assembling your environment by yourself from actually competent pieces?
That said, every IDE is opinionated about workflows, and if you’re open to adapt to that, the defaults makes sense. Otherwise you slowly hammer it to the shape you want.
For me an IDEs greatest selling point or the infinite flexibility it provides.
The OC point was that VS Code UX "is a mess by comparison", and VS Code UX is fully configurable, therefor if you have a problem with VS Code UX, you are complaining about it's defaults settings.
Also Jetbrains IDEs font rendering is simply awful, it doesn't hold the comparison to electron: https://i.imgur.com/u4ZV2Kd.png
I often open code written in vs code and immediately spot a bunch of bugs
- The autocomplete popup sometimes froze the IDE completely (and killing the process caused minutes of data loss), open for close to a year
- Since two months ago, the Typescript language server fails to start in Vue projects (due to a broken update by the Vue team). A fixed version of WebStorm was released yesterday, in the meantime you were apparently expected to search for the error message, stumble upon the YouTrack page, and apply a workaround
- Performance is abysmal in a larger React MUI project, think 10-15 seconds for feedback on code changes, sometimes errors just stick around for a good minute or more, or even stay until you manually remove all code and put it back
- In some situations WebStorm makes autocomplete suggestions that aren't allowed - think effectively a type T with keys K | L, where Omit<T, K> leads to only suggesting K properties, while removing the Omit makes it suggest both K and L properties
- After updating from 2024.1.X to 2024.2.Y, the window had no buttons for minimizing/maximizing anymore. Now, this was partially caused by my environment, but after I found a workaround it was closed as "Third Party Problem". Still feels like a regression to me, since my environment did not change.
I've mostly stopped updating the IDE, as almost every version brings new regressions in basic editor features. This morning I updated and tried to copy some text. WebStorm showed me a "Copying..." dialogue for more than 30 seconds.
I have high hopes for "Junie" but fear it's going to be a while before it's ready for prime time.
I wonder if AI assistant will be deprecated once Junie is GA. Anyone know?
Phpstorm ran out of chances I'll give it. Last three tries all went the same way, permanently stuck indexing a project and being an overdeveloped notepad.exe during that; when vscode and phpintelphense could go from cold boot to code assist in seconds on the same project.
Genuine question - Does anyone actually do this? What for?
I have been writing code for about 25 years and not once did I wish for someone else to start editing the same files I’m editing in real time. Yet, this seems like a huge selling point for some of these editors.
If you don't do any peer programming, then you wouldn't understand it.
Frequently I would guide other developers to implementing something and in doing so I'd guide them down to what files to open and how to integrate it. I find this process a lot more convenient over Zoom where I can annotate with a pencil. I use that to underline blocks of code. It's a bit like you have a mouse and I have a mouse on the same screen but in a nice way.
In a workflow like that I sometimes want to write pseudo code and I would very much welcome a feature like that. Currently JetBrains has a "Code with me" plugin or something similar, but it's a bit laggy and struggles when fast typers meet. And a feature like that is good both when I take my laptop and sit next to you, and when we're on Zoom while talking.
Other than that never in my professional experience as a programmer. Except for open source work I was helping with. 3 of us would meet on Jitsi main contributor would sometimes share an SSH session with us in addition to streaming live coding sessions. Don't recall it actually being useful though. Dunno. It's probably one of those features that if it works well and is easy, then I might use it more.
In every instance, I’ve needed this I’ve already been on a Zoom call and can simply ask the other person to push their code.
[1] https://blog.jetbrains.com/kotlin/2024/10/kotlin-multiplatfo...
As someone who has been incredibly frustrated attempting to use multiplatform frameworks in the past and is used to them causing more problems than they solve, I've been very pleasantly surprised by KMP and Compose Multiplatform.
... but I never once used Fleet, I just do all the coding in Android Studio.
Vim for super quick changes (I’d like to increase my proficiency with vim but not really done much to do so).
Vscode for light text editing : coding which doesn’t require me to dig in to debug for a major length of time.
Jetbrains IDE for real work / tinkering were I may need to debug / leverage breakpoints / have good autocomplete.
Vs Code of course is the wider ecosystem of plugin compatible editors based on the vs codium platform. This includes a lot of the recent AI editors, and several non vs codium based editors that can integrate the plugins (e.g. vi).
The core issue is that Fleet is outside of that ecosystem and doesn't have the community or user adoption to get that fixed. It's a chicken egg problem that's hard to fix. It's being pulled two directions. On one hand you have existing intellij users who use that to do most of their development. And on the other hand you have people that are using vs code and depend on a lot of its plugins. Fleet is a bit of an empty room for both groups of users. None of my more serious projects load correctly in fleet. I've tried it a few times and it's just missing too much stuff for me to take it seriously. And I bet VS Code users would be equally unhappy.
Fixing that would involve bringing over the majority of features from intellij and vs code, and recreating those in fleet. Which of course wasn't really happening given that it's being positioned as a closed source platform.
IMHO keeping Fleet closed source was the mistake that doomed the whole effort from day 1. In short, they were on their own and not really able to pull that off. Google is understandably focusing on supporting intellij, which at least has an open source core. Providing an open source core for intellij in 2009 was the key enabler that allowed them to move from eclipse to intellij. Google embraded it in 2013. Some of the older people here might remember that Android Studio started out on the Eclipse platform. Eclipse support ended in 2015. Open source is what made that transition possible.
Which of course raises the question what the whole point of a closed source Fleet was given that users, plugin developers, and major partners like Google are all focus on the open source ecosystem around intellij. And the rest of the ecosystem is vs code based.
Answer: there is none. Hence this foregone conclusion.
And I would vastly prefer that they focus on robust IDE features than yet another bunch of "Now with AI" crap duct taped to their products.
Way too many tools force their shitty AI (API wrapper) upon me already. And i have yet to see any benefit.
(I don't just want to hear what everyone says; I specifically I want to hear what JetBrains lovers think about this.)
I was about to go all in on JetBrains becaue I can't stand VSCode, and about to transition from ChatGPT only to trying out in-IDE integrations... but if there's a better thing to try first... all ears.
If you're transitioning from ChatGPT pastes to an IDE integration, I would recommend a trial of Cursor. They have acquired SuperMaven, and the autocomplete feature is mostly appropriate and useful. I think the chat-diff-review-apply workflow really tightens and accelerates the feedback loop, as well as the ability to submit an error from the terminal to the chat session with a single click. People say good things about the Compose and Agent features, but I haven't so far been drawn to them to explore.
Their own offering, "Jetbrains AI" absolutely SUCKS (just read the reviews, you'll see why).
Third-party AI plugins are pretty basic. Most just offer inline completions and a chat sidebar. For example, GitHub Copilot for Intellij is a shell of itself: No agent capabilities, or even model switching (although that seems to be coming in a future update).
Generally speaking, Jetbrains seems to have missed the AI code editor revolution, and are now trying to play catch-up. The problem is that their plugin API seems to offer less capabilities than VS-Code when it comes to implementing advanced AI features (think of cursor like features). This, combined with the fact that Intellij products are closed source and can't simply be forked by someone who requires additional capabilities, makes it hard for third parties to build advanced AI features.
PS: I also tested their new "Agent" plugin called Junie (invite only beta). It's really basic (like 30% as good as cursors agent mode), but since it's still in invite only beta this should be taken with a grain of salt.
https://github.com/JetBrains/intellij-community is Apache 2.0
Only some of the language plugins are proprietary.
As someone who doesn't use AI all that much: what else does an IDE need besides an inline prompt and a ChatGPT window to the side? I've played around with the continue.dev plugin and I can't think of anything else I'd want out of AI assistants with the quality they're at at the moment.
> GitHub Copilot for Intellij is a shell of itself
That's on Github, to be honest. And to be expected. It doesn't make much sense for Microsoft to fund a plugin for a competitor's IDE when they already have their own IDEs to sell.
> Intellij products are closed source
They follow the same protocol Microsoft uses: the core is open, but some language plugin features are proprietary. For Microsoft, the proprietary part is just the C# debugger at this point, whereas IntellJ has a whole bunch of paid-for plugins that are closed-source. Still, you can fork the community edition of IntelliJ should you wish.
However, I have to say that it's a bit buggy, some things like running together with the SonarQube plugin breaks it, other times UI elements for keyboard shortcuts just hang around on the screen when they shouldn't be visible/present. There's a good deal of stuff in their issue tracker: https://github.com/continuedev/continue/issues?q=is%3Aissue%...
That said, I had a pretty good experience with the GitHub Copilot plugin, as long as you're willing to pay for it.
So much so that I ended up writing a queueing app for scheduling batches of sequential tasks on the server in Dart just to see how it could work as a NodeJS replacement, and thought the whole dev experience was great.
I think biggest thing it is missing is any kind of Google commitment on its long term usage.
Checked errors, via results or exceptions have never been the problem. It has always been Java the language that hasn't provided the syntax sugar for handling checked errors effectively.
There is no difference between:
A doIt() throws B
fun doIt(): Result<A, B>
It all comes down to what the language lets you do once you encounter that error.- Unwinds the stack to a try/catch or exception handler, making exceptions practically difficult to deal with in concurrent programming.
- If unchecked, can be ignored, silently propagating during stack unwinding.
- If checked, infects the call stack with 'throws' annotations.
The second is a normal return value, with no try/catch needed, handling the error case is mandatory in order to handle the success case, and there is not a separate execution regime occurring whenever an error case is encountered.
- In concurrent programming uncaught exceptions won’t leave the future. Both values are available to you just like Results. I also don’t think arguments for concurrent programming are valid though. 99% of all code is single threaded.
- It is checked.
- Result infects the call stack as well.
- handling the error case with a checked exception is also mandatory with handling the success case. There is no separate “execution regime”. What is the difference here:
val a = try {
a();
} catch (b) {
onB();
}
val a = match (a()) {
Success(a) => a
Failure(b) => onB()
} val a = a();
And start the stack unwinding. The `try/catch` is not mandatory to call a().Also, external crates like "anyhow" are required if you don't want to account for literally every single possible error case. Really seems like a pedantic's dream but a burden to everyone else.
Effective Java recommends checked exceptions only in the case where the caller may recover, but in practice you're usually just propagating the error to the caller in some form, so almost everything just becomes unchecked runtime exceptions.
The issue really just arises with Java not giving you the capability to uncheck that error easily if you can't recover from it. For example, you need a ton of lines to uncheck:
A doIt() throws B {
throw new B();
}
void usingIt() {
A a;
try {
a = doIt();
} catch (B b) {
throw new RuntimeException(b);
}
a.woohoo();
}
My ideal situation would be for some sort of throws unchecked operator (or whatever syntax we want to bikeshed over) that turns them into unchecked exceptions. void usingIt() throws unchecked B {
var a = doIt();
a.woohoo();
}That's essentially the direction of modern programming languages. It's part of that feeling you get when programming haskell. Once you get it running, it just works. It's very different from the old paradigm where once you get it working, it can crash and you have to debug and do more to get it working better.
kmp exposes everything as obj-c meaning c headers and not very good type annotations (enums are int only so you cant have full checking on each switch, everything is obj-c reference semantics meaning multi-threading gets tricky, kotlin exceptions are not catchable from swift) so there are a lot of edge cases to write unit tests for (on the client side) which negates a lot point of using kmp, and thats in addition to all of the kotlin-isms that leak out...
> Why wouldn't they at least generate enums!
they do but its going through objective-c which inherits c enums (which are basically integers) so when you use it from swift its like switching over an unbounded set so you always have to handle "default" cases leading to bugs compared to usage from androidI thought Fleet might add the "magic" to something more VSCode like, but I also don't understand the long term vision.
I keep my Kotlin LSP for NeoVim up to date but it's just not a great experience. I often have to open IntelliJ to sort out import issues. The entire Java community is built on "don't worry about knowing where your imports are coming from, your IDE will do that magic for you". So much is this the case, that the first Manning Kotlin book even said it. Because of this, I was eager to give Fleet a shot. My impression was, "you won't build an LSP because you're afraid of losing revenue... but you'll build this?" Ok. I guess that makes sense - keep people on your playground.
I sure do LOVE Kotlin as a language. But telling me I have to use your product to write it? I'd rather write Go... or even Typescript at that point. Both of those have really nice experiences in a simple text editor + LSP.
Can't I have both power, and responsiveness?
That's why I use JB products. I download them, start them up and that's it. I don't need any separate plugins, they just work perfectly out of the box.
It does work well but it's often too much and uses even more memory than vscodium.
Ram is cheap, I don't see why people complain that it's being utilized. Doesn't bother me at all.
I haven't looked into it but I would assume you can disable these unnecessary plugins if you don't want them?
I work on efficiency so when people say things like "it's ok for my IDE to be an inefficient pile of garbage that locks up resources" it makes me wonder what kind of program they are producing.
Historically the JVM will happily use all your RAM even if it doesn't need to, because that reduces the amount of GC work required which increases CPU time available to the IDE for analysis and other tasks. It can be told there's a limits, in which case it'll spend more time GCing to stay under it.
Modern JVMs changed this old default and will wait until the app is idle then start reclaiming memory and releasing it back to the OS. I guess it depends what you mean by "mid sized" but 10GB is quite a bit. It'd be worth checking that everything is running on a recent JVM. Gradle in particular can be a hog if you run it on old JVMs.
To quote Lord Farquaad: That is a sacrifice I am willing to make
My computer works completely fine while I have multiple jetbrains ides and browser windows, Docker etc running.
So maybe your perception is the one that's flawed. I know for a fact that my computer can handle it, but it seems like you mistakenly believe that it can't?
That agent must not be very helpful if it causes even the company creating it to be able to support less products.
I don't think it makes sense for something as compute intense as cloud LLM code generation to be made available for free. I do wish I'd have the ability to connect IntelliJ to a local LLM instance without having to bother with custom plugins or Ollama, though. They're supposedly working on a locally-hosted LLM integration, but that'll be locked behind a subscription as well.
But so far, it's a moderately capable assistant. My biggest complaints with it have more to do with its responses than its fit with the IDE.
And all that JetBrains IDEs do, feels to me like a pretty simple stuff. Like all these refactoring options (pretty much the main reason why I prefer their IDEs over simpler editors, it feels like a natural extension of Vim keybindings: why should I do anything as simple as extracting a method manually?), it seems like a thing that should be easily scriptable once you have powerful code-editing API, so I feel annoyed by the fact they are pretty much "hard-coded" into IDE and I cannot easily add a couple of my own simple refactorings. BTW, they didn't really change over the last 5 years or so. Some bugs get fixed, static code analysis gets smarter and more specialized for a current version of some language, but nothing that would feel like real progress. It's hundreds of tiny distinct things, and it seems like that would progress much faster, if all these things were open-source plugins. As people predicted, when LSP came about. Yet apparently it doesn't, because as imperfect PyCharm is, VSCode cannot do even as much.
So, basically, what distinguishes IDEA from anything else seem like super simple things, and it seems weird that for it it must compromise to use that clunky, configurable via UI (instead of neat JSON/TOML/whatever), memory-hungry IDE. And it still puzzles me. Of course, if it seems so simple, it's fair to ask why I didn't make my own yet. Well, yes, I didn't even look into it. But I just cannot understand, what's the hard problem that community struggles to solve, why all opensource or semi-opensource editors didn't leave clunky "traditioinal IDEs" far behind yet with regard to these core function, even though it seems those traditional IDEs haven't evolved for years?
While this isn't as powerful as the full plugin API, there is Edit > Find > Replace Structurally which can be used to write some pretty complex code alterations, and you can save/load templates to reuse them later.
IMO Jetbrains IDEs are the best IDEs. That doesn't make them amazing or great or outstanding. They have their bugs, their resource leaks, and sometimes just plain weird design decisions, but they're ahead of the competition by a long shot for many programming languages. Other IDEs can match what Jetbrains has to offer, but you have to install and configure every feature yourself, while the Jetbrains stuff mostly comes with batteries included.
https://github.com/JetBrains/intellij-community/tree/44a42be...
As you can see it's not that easy. At the core of an IDE is a database that has to incrementally update itself based on real time edits that can arbitrarily break the datasource (code) that the database is modeling, often in highly confusing ways. Refactorings often require sophisticated data analysis in order to not break code themselves, they aren't simple at all.
The LSP architecture complicates things further by introducing an asynchronous data structure synchronization problem between frontend and backend. Jetbrain's architecture is conventional, with analysis and UI running in-process. They can share data directly and use locks for mutual exclusion. The downside of this is that if locking isn't fine grained enough, or if the GC causes stalls, you can get UI hitches and sluggishness. The upside is that it's a pretty dramatic productivity upgrade because you aren't solving all these hard distributed computing problems that the LSP design introduces.
So the question becomes who solves their problems first? Jetbrains and Oracle have done a ton of work in recent years on solving these problems. Java GC pause times have been driven down aggressively, now there are fully pauseless GCs available although I don't know if IDEA uses them yet. GC pauses haven't been visible for me in years at any rate. And Jetbrains have done lots of work over time to reduce the amount of lock contention that can cause UI stalls, to introduce limited amounts of asynchronous replication within the process and so on.
The thing is, when you're in-process you can use the same ideas as in the LSP to reduce UI latency but to whatever extent makes sense or is necessary in a specific context. Nothing stops you tossing in an actor with a queue if you want that, or introducing a lock if a UI stall is in fact preferable to the alternatives (and sometimes it is). But you aren't bound to it all the time. Whereas the LSP design with separate processes and a hard address space separation doesn't allow that. To add anything you need to extend the protocol and handle the possibility of data skew between frontend and backend, which introduces a lot of surface area for bugs, which then drains time that could be spent on fixing refactoring bugs or adding new static analyses. So it's a hard tradeoff and one isn't clearly a winner to the other.
So now I use VSCode and lazyvim/neovim. Which I can install anywhere in about 5 minutes and have a fully working environment with 0 effort and 1 breakage a year. It's great.