Es fing mit einem Freemarker Plugin an. Wir haben Freemarker Templates in ScipioERP benutzt und die IDE-Unterstützung war mager - kein Autocomplete, keine Navigation, kein brauchbares Syntax Highlighting. Ich dachte mir, wie schwer kann das schon sein.
Stellt sich heraus: gar nicht so schwer. Die JetBrains Plattform ist mächtig. Die Dokumentation sagt einem das nur nicht.
Ein Plugin wurde zum Muster
Das Freemarker Plugin funktionierte. Leute luden es herunter. Ich bekam Emails. Und mir fiel auf, dass die Kerninfrastruktur, die ich gebaut hatte - der PSI-Tree-Builder, die Completion Engine, das Settings Framework - wiederverwendbar war. Unterstützung für eine neue Sprache hinzuzufügen bedeutete, die Grammatik und ein paar eigene Inspections zu implementieren. Alles andere war geteilt.
Also baute ich noch eins. Julia. Dann Solidity, Elixir, Haskell, ABAP, Swift, Arduino, OpenSCAD, Nuxt.js, Gutenberg. Und dann die UI-Komponentenbibliotheken - Mantine, DaisyUI, Base UI, shadcn. Dazu einige spezialisierte Integrationen für OFBiz, Magnolia CMS, AEM und zuletzt Spryker.
Das sind 22 Plugins. Ich hatte keine 22 geplant. Jedes einzelne löste ein Problem, das ich hatte oder das an mich herangetragen wurde, und die geteilte Infrastruktur machte jedes neue Plugin schnell umsetzbar.
Der Marketplace hat mich überrascht
Als Kronk CMS im ersten Monat ohne jegliches Marketing 10.000+ Downloads erreichte, wurde mir klar, dass der JetBrains Marketplace ein echtes Vertriebskanal ist. Entwickler durchsuchen ihn aktiv. Sie suchen nach Lösungen für konkrete Probleme. Und sie zahlen für Plugins, die diese lösen.
Einige unserer Plugins haben tausende Downloads. Andere 50. Der Unterschied liegt fast immer an der Größe der Sprach-Community, nicht an der Qualität des Plugins. Unsere OpenSCAD- und Arduino-Plugins bedienen kleine Communities. Die Nutzer sind zufrieden, aber die Zahlen sind überschaubar. Ich pflege sie trotzdem weiter, weil ich sie selbst benutze und weil ein Plugin offline zu nehmen sich falsch anfühlt, wenn Leute darauf angewiesen sind.
Das Preismodell, das funktioniert: 30 Tage Testphase, dann monatlich oder jährlich. JetBrains übernimmt Billing, Lizenzierung, Trial-Management. Man baut das Plugin, sie übernehmen den kommerziellen Teil. Für ein kleines Team ist das genau die richtige Aufteilung.
Freemium funktioniert übrigens besser als komplett kostenlos. Einige unserer frühen Plugins waren völlig gratis. Sie bekamen Downloads, aber kein Feedback. Ab dem Moment, als wir einen Trial-to-Paid-Flow einbauten, kamen Bug Reports, Feature Requests, Emails. Zahlende Nutzer haben ein Interesse.
Was wirklich anstrengend ist
Die IntelliJ Platform API ist mächtig, aber vielleicht zu 30% dokumentiert. Den Rest lernt man, indem man den Source Code der IntelliJ Community Edition liest, der immerhin Open Source ist. In den ersten Tagen habe ich mehr Kotlin-Quellcode gelesen als eigenen Code geschrieben.
Testen über IDE-Versionen hinweg ist brutal. JetBrains veröffentlicht ungefähr vierteljährlich, und jede Version kann Plugin-APIs brechen. Wir pflegen Kompatibilität über sechs oder mehr Versionen pro Plugin. Spaß macht das nicht, aber Nutzer aktualisieren nun mal nicht alle am selben Tag.
Und der Marketplace-Review-Prozess ist undurchsichtig. Man reicht ein Update ein, es landet in einer Queue, und man wartet. Manchmal zwei Tage, manchmal zwei Wochen. Keine Statusseite, keine geschätzte Bearbeitungszeit. Wenn man einen kritischen Bugfix hat, reicht man ihn ein und hofft.
Plugin-Discovery ist ebenfalls schwierig. Wenn jemand nach “Julia IDE support” sucht, findet er uns vielleicht. Wenn jemand “Julia language” sucht, wahrscheinlich nicht. SEO für Marketplace-Listings ist eine eigene Disziplin, die ich immer noch lerne.
22 Plugins später
Manche sind erfolgreich. Manche sind Experimente. Alle haben mir etwas über IDE-Entwicklung beigebracht, das ich auf keinem anderen Weg hätte lernen können. Wenn ihr darüber nachdenkt, ein JetBrains Plugin zu bauen - macht es. Fangt mit einem Problem an, das ihr selbst habt. Die Plattform ist besser, als die Dokumentation vermuten lässt. Und das erste Plugin hat bei mir ein Wochenende gedauert.