IntelliJ Platform plugin providing native audio/video playback in JetBrains IDEs using JCEF (embedded Chromium).
- Kotlin
- Gradle (Kotlin DSL)
- IntelliJ Platform SDK (2025.3+)
- JCEF (JBCefBrowser) for media rendering
- JDK 21
shared/,frontend/,client/,backend/— Plugin Model V2 content modules, each under<module>/src/main/kotlin/dev/twango/jetplay/.shared(loads everywhere): shared types, RPC contract, i18n bundle.frontend(loads on the Remote Dev host and client): file type + editor provider + JCEF player + loopback media server; JCEF is guarded off on the host.client(JetBrains Client only, binds the platform'sintellij.platform.frontend.splitmodule):rdclient.fileEditorModelHandlerthat renders the player client-side in split mode.backend(host): ffmpeg + RPC byte/transcode access.src/main/resources/META-INF/plugin.xml— root plugin descriptor (content-module wiring only)frontend/src/main/resources/dev.twango.jetplay.frontend.xml— frontend module descriptor; single source of truth for supported extensions. Thefrontendmodule loads on both host and client, so itsfileType/fileEditorProviderregister on the host (for detection/selection) while the JCEF player renders on the client.gradle.properties— plugin metadata and version config
- Follow IntelliJ Platform plugin conventions and API patterns
- Use
FileEditorProvider/FileEditorfor registering custom editors - Keep the plugin lightweight — no unnecessary services or actions
- Supported extensions are defined in the frontend module descriptor (
dev.twango.jetplay.frontend.xml), not hardcoded in Kotlin
./gradlew build # compile + test + verify
./gradlew runIde # launch sandbox IDE with plugin