一键导入
remote-dev
Guidelines for structuring and developing IntelliJ remote development modules. Use when working on Remote Development features.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Guidelines for structuring and developing IntelliJ remote development modules. Use when working on Remote Development features.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | remote-dev |
| description | Guidelines for structuring and developing IntelliJ remote development modules. Use when working on Remote Development features. |
.frontend - UI code that runs on client side.backend - computation code that runs on server side.shared - code common to both frontend and backend@Rpc annotation in shared moduleRemoteApiProvider to register implementationssuspend functions@SerializableVirtualFile.rpcId() and VirtualFileId.virtualFile())StateFlow and FlowDetailed documentation in docs/IntelliJ-Platform/4_man/Remote-Development/:
External: Remote Development Overview (user documentation)
After creating any new remote-dev .iml, register it with the project-file helper instead of editing modules.xml by hand:
bun build/jps-module.mjs register <path-to-iml> --fix-iml-eof
The helper updates .idea/modules.xml, also updates community/.idea/modules.xml for community modules, and uses the canonical order by .iml basename.
Standard Module: intellij.<pluginGroup>.<frameworkName>
Example: intellij.java.dsm, intellij.cidr.debugger
Remote Development Modules (split architecture):
intellij.<feature>intellij.<feature>.rpc (for RPC interfaces)intellij.<feature>.backendintellij.<feature>.frontendintellij.<feature>.frontend.split, intellij.<feature>.backend.splitplatform/feature/ following V2 plugin formatplatform/feature-rpc/ for RPC interfaces@Rpc interfaces, DTOs, and supporting classesplatform/feature/backend/intellij.platform.feature.backend.xml in resourcesintellij.platform.backendessential-modules.xmlplatform/feature/frontend/intellij.platform.feature.frontend.xml in resourcesintellij.platform.frontendessential-modules.xml and intellij.platform.frontend.main.imlremote-dev/feature/frontend.split.rpc suffix for RPC interfaces.backend suffix as V2 plugin moduleintellij.platform.backend and .rpc module.frontend suffix as V2 plugin moduleintellij.platform.frontend and .rpc module.frontend.split suffix in appropriate locationintellij.platform.frontend.splitThe following patterns are essential when implementing reactive UI components for Remote Development:
.toRpc() extension to convert StateFlow to RpcFlow for RPC transfertoFlow().stateIn() pattern to convert RpcFlow to StateFlowExample: Reactive Breakpoint DTO
// Flow-based DTO with initial values
@Serializable
data class XBreakpointDto(
// Static properties
val displayText: String,
val iconId: IconId,
val sourcePosition: XSourcePositionDto?,
// Initial values for immediate use
val initialEnabled: Boolean,
val initialSuspendPolicy: SuspendPolicy,
// Reactive flow fields
val enabledState: RpcFlow<Boolean>,
val suspendPolicyState: RpcFlow<SuspendPolicy>,
)
Example: Frontend Component with Reactive State
class FrontendXBreakpointProxy(
private val project: Project,
private val cs: CoroutineScope,
private val dto: XBreakpointDto
) {
// Convert RpcFlow to StateFlow with initial values
val enabled: StateFlow<Boolean> = dto.enabledState.toFlow()
.stateIn(cs, SharingStarted.Eagerly, dto.initialEnabled)
// Access current value from StateFlow
fun isEnabled(): Boolean = enabled.value
}
Pluginize a Product DSL module set by hand-writing a wrapper plugin module next to its feature modules. Use when promoting modules out of an aggregate module set (e.g. `essential`, `ide.common`) into a bundled plugin so products can include or omit them through normal plugin wiring, when updating bundled plugin registration for such a wrapper, or when fixing tests whose plugin loading logs show a missing wrapper plugin for a former module set.
Pluginize a Product DSL module set by hand-writing a wrapper plugin module next to its feature modules. Use when promoting modules out of an aggregate module set (e.g. `essential`, `ide.common`) into a bundled plugin so products can include or omit them through normal plugin wiring, when updating bundled plugin registration for such a wrapper, or when fixing tests whose plugin loading logs show a missing wrapper plugin for a former module set.
Extract an optional dependency from a plugin module into a new content module. Use when making a library dependency optional by separating integration code into its own module.
Extract an optional dependency from a plugin module into a new content module. Use when making a library dependency optional by separating integration code into its own module.
How to manage module dependencies in IntelliJ codebase. Use when adding or modifying module dependencies in iml files.
Guidelines for structuring and developing IntelliJ remote development modules. Use when working on Remote Development features.