14 KiB
JetBrains Plugin Support - Technical Design Document
Context
This document addresses Issue #9982, which requests JetBrains IDE support for Roo Code.
User Requirements
Based on community feedback, users are requesting:
- Full Roo Code functionality in JetBrains IDEs
- Primary focus on IntelliJ IDEA and WebStorm
- Custom model integration capabilities (highest priority)
- Leverage JetBrains' superior Java and Git tooling
- Native JetBrains UI experience
Current Architecture Analysis
VS Code Extension Structure
Roo Code is currently built as a VS Code extension with the following key components:
-
Core Extension (
src/extension.ts)- VS Code API integration
- Extension lifecycle management
- Command registration and handling
-
Webview UI (
webview-ui/)- React-based interface
- VSCode webview toolkit integration
- Communication via message passing
-
Core Services
- Provider management (Anthropic, OpenAI, OpenRouter, etc.)
- Model configuration and selection
- Terminal integration
- File system operations
- Code indexing
- MCP (Model Context Protocol) server support
-
Cloud Integration (
@roo-code/cloud)- Authentication and user management
- Remote control capabilities
- Profile synchronization
-
Type Definitions (
@roo-code/types)- Shared TypeScript interfaces
- Provider settings schemas
- API contracts
VS Code-Specific Dependencies
The following components are tightly coupled to VS Code APIs:
- Editor Integration: TextEditor, TextDocument, Range, Selection APIs
- Webview System: VS Code's webview API for UI rendering
- Terminal Integration: Terminal creation and command execution
- File System: VS Code's workspace and file system APIs
- Configuration: VS Code's settings and state management
- Commands: VS Code's command palette integration
- Diff Views: Custom diff view provider
- Code Actions: Quick fix and refactoring suggestions
Approaches to JetBrains Support
Option 1: Native JetBrains Plugin (Recommended)
Build a separate native plugin using JetBrains Platform SDK.
Architecture
roo-code-jetbrains/
├── src/main/kotlin/ # Plugin code in Kotlin/Java
│ ├── actions/ # IntelliJ Actions (commands)
│ ├── services/ # Background services
│ ├── ui/ # Tool windows and dialogs
│ ├── settings/ # Settings UI
│ └── integration/ # IDE integration points
├── src/main/resources/ # Resources and plugin.xml
└── build.gradle.kts # Gradle build configuration
Key Components to Implement
-
Tool Window: Replace VS Code sidebar
- Use IntelliJ's ToolWindow API
- Implement UI with Swing or Kotlin UI DSL
- Or embed browser component for web-based UI
-
Editor Integration
- Document modification API
- PSI (Program Structure Interface) for code analysis
- Editor actions and intentions
-
Terminal Integration
- TerminalRunner API
- Command execution
-
File System Operations
- VirtualFileSystem API
- Document manager
-
Settings Management
- PersistentStateComponent
- Configurable interface for settings UI
-
Provider Management
- Port provider configuration system
- API key management
- Model selection interface
Shared Components
Leverage existing code where possible:
- API Integration: HTTP clients for LLM providers (can be shared)
- Type Definitions: TypeScript types → Kotlin data classes
- Business Logic: Core algorithms and workflows
- Model Configurations: JSON schemas and definitions
UI Strategy
Option A: Native Kotlin UI
- Pros: True native experience, better IDE integration
- Cons: Requires complete UI rewrite, more maintenance
Option B: Hybrid (Embedded Browser)
- Pros: Can reuse React UI, faster development
- Cons: Less native feel, performance overhead
- Use JCEF (Java Chromium Embedded Framework)
Option 2: Language Server Protocol (LSP) Bridge
Create a language server that both VS Code and JetBrains can connect to.
Architecture
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
│ VS Code │◄───────►│ Roo Code LSP │◄───────►│ JetBrains │
│ Extension │ LSP │ Server │ LSP │ Plugin │
└─────────────┘ └──────────────────┘ └─────────────┘
│
▼
┌──────────────┐
│ LLM Providers│
└──────────────┘
Pros
- Shared business logic
- Single codebase for core functionality
- Standard protocol
Cons
- LSP not designed for AI coding assistants
- Limited UI capabilities
- Custom protocol extensions needed
- Still requires significant client-side code
Option 3: Minimal Adapter Plugin
Create a lightweight JetBrains plugin that communicates with the VS Code extension.
Architecture
┌─────────────┐ ┌──────────────────┐
│ JetBrains │ │ VS Code │
│ Plugin │◄───────►│ Extension │
│ (Thin UI) │ HTTP/ │ (Core Logic) │
└─────────────┘ WS └──────────────────┘
Pros
- Minimal JetBrains-specific code
- Leverage existing VS Code extension
Cons
- Requires VS Code running in background
- Poor user experience
- Dependency complexity
- Not truly native
Recommended Approach
Build a native JetBrains plugin (Option 1) with a hybrid UI strategy.
Phase 1: Core Functionality (MVP)
- Tool window with chat interface
- Provider configuration (custom models priority)
- Basic file editing capabilities
- Terminal command execution
- Settings UI
Phase 2: Advanced Features
- Code indexing and search
- Multi-file operations
- Diff views
- Cloud integration
- MCP server support
Phase 3: Polish and Optimization
- Performance optimization
- JetBrains-specific features (PSI integration)
- Multiple IDE support (IntelliJ, WebStorm, PyCharm)
- Comprehensive testing
Technical Challenges
1. UI Framework
- Challenge: React webview UI won't work in JetBrains
- Solution:
- Option A: Rewrite in Kotlin with Compose/Swing
- Option B: Use JCEF to embed web UI
- Recommendation: Start with JCEF for faster MVP, migrate to native later
2. Editor Integration
- Challenge: Different APIs for document manipulation
- Solution: Create abstraction layer over editor operations
- Map VS Code concepts to IntelliJ equivalents:
- TextDocument → Document
- TextEditor → Editor
- Range → TextRange
- Selection → Caret
3. State Management
- Challenge: VS Code's ExtensionContext vs IntelliJ's services
- Solution: Use IntelliJ's service architecture and state components
4. File System Operations
- Challenge: Different file system APIs
- Solution: Abstract file operations behind common interface
5. Terminal Integration
- Challenge: Different terminal APIs
- Solution: Adapter pattern for terminal operations
6. Configuration Sync
- Challenge: Users may want settings across both IDEs
- Solution: Leverage Roo Code Cloud for cross-IDE profile sync
Development Roadmap
Prerequisites
- JetBrains Platform SDK knowledge
- Kotlin/Java development
- Gradle build system
- IntelliJ plugin development experience
Estimated Timeline
Phase 1 (MVP): 3-4 months
- Plugin structure and basic UI: 4 weeks
- Provider integration and model config: 3 weeks
- File editing capabilities: 3 weeks
- Terminal integration: 2 weeks
- Testing and bug fixes: 2 weeks
Phase 2 (Feature Parity): 3-4 months
- Advanced file operations: 4 weeks
- Code indexing: 4 weeks
- Cloud integration: 3 weeks
- MCP support: 3 weeks
- Testing and refinement: 2 weeks
Phase 3 (Polish): 2-3 months
- Performance optimization: 4 weeks
- Multi-IDE support: 4 weeks
- Documentation: 2 weeks
- Beta testing: 2 weeks
Total: 8-11 months for full feature parity
Resource Requirements
Team Composition
- 1-2 JetBrains plugin developers (Kotlin/Java)
- 1 UI developer (if building native UI)
- 1 backend developer (shared logic)
- 1 QA engineer (testing across IDEs)
- Product manager (feature prioritization)
Infrastructure
- JetBrains marketplace account
- CI/CD for plugin builds
- Testing infrastructure (multiple IDE versions)
- Documentation site updates
Risks and Mitigation
Risk 1: Maintenance Burden
- Risk: Maintaining two separate codebases
- Mitigation:
- Maximize code sharing through packages
- Shared API client libraries
- Common business logic in TypeScript (can be ported)
- Automated testing
Risk 2: Feature Divergence
- Risk: Features available in one IDE but not the other
- Mitigation:
- Clear feature roadmap
- Parity tracking
- Staged rollout across platforms
Risk 3: User Confusion
- Risk: Different experiences across IDEs
- Mitigation:
- Consistent UI/UX where possible
- Clear documentation
- IDE-specific guides
Risk 4: Development Complexity
- Risk: Learning curve for JetBrains platform
- Mitigation:
- Hire experienced JetBrains plugin developers
- Start with simpler features
- Leverage JetBrains documentation and community
Code Sharing Strategy
Shared Components
-
API Clients
- HTTP clients for LLM providers
- Authentication logic
- Model definitions
-
Type Definitions
- Convert TypeScript types to Kotlin data classes
- Shared JSON schemas
-
Business Logic
- Prompt engineering
- Response parsing
- Error handling
-
Configuration
- Provider settings schemas
- Model configurations
Implementation Approach
roo-code/
├── packages/
│ ├── core/ # Shared business logic (TypeScript)
│ ├── types/ # Shared type definitions
│ └── api-clients/ # Provider API clients
├── vscode-extension/ # Current VS Code extension
└── jetbrains-plugin/ # New JetBrains plugin
├── src/main/kotlin/ # Kotlin implementation
└── src/main/resources/
Alternative: Web-Based Solution
Roo Code Desktop App
Instead of IDE plugins, create a standalone desktop application.
Pros
- Single codebase
- Works with any IDE
- Easier maintenance
Cons
- Not integrated into IDE
- Separate window context
- Less seamless workflow
This could be a future option but doesn't address the core request for native IDE integration.
Recommendations
-
Validate Demand: Survey users to gauge interest and prioritize features
- Create GitHub discussion
- Discord/Reddit polls
- Understand willingness to adopt
-
Start with Design Prototype: Before full implementation
- UI mockups for JetBrains plugin
- User flow diagrams
- Technical proof of concept
-
Phased Approach: Don't aim for feature parity immediately
- Start with core features users care about most (custom models)
- Iterate based on feedback
- Add advanced features incrementally
-
Consider Strategic Partnership
- Engage with JetBrains
- Potentially official partnership
- Marketplace promotion
-
Open Source Collaboration
- Community contributions
- Plugin architecture allows experimentation
- Early adopter testing
Success Criteria
MVP Success (Phase 1)
- Plugin installable from JetBrains Marketplace
- Custom model configuration working
- Basic chat interface functional
- File editing capabilities
- 100+ active users within first month
Feature Parity Success (Phase 2)
- 80%+ feature parity with VS Code extension
- Cloud sync working across IDEs
- 1000+ active users
- <5% crash rate
Long-term Success (Phase 3)
- All major features available
- Support for IntelliJ, WebStorm, PyCharm
- 10,000+ active users
- 4+ star rating on JetBrains Marketplace
- Sustainable maintenance model
Next Steps
-
Community Feedback (Week 1-2)
- Share this document with issue reporter
- Gather additional requirements
- Validate assumptions
-
Technical Spike (Week 3-4)
- Create minimal JetBrains plugin prototype
- Test JCEF embedding
- Validate architecture decisions
-
Go/No-Go Decision (Week 5)
- Review prototype results
- Assess resource availability
- Decide on timeline
-
Kickoff (Week 6+)
- Assemble team
- Set up project structure
- Begin Phase 1 development
Conclusion
Building JetBrains plugin support for Roo Code is technically feasible but requires significant investment. The recommended approach is a native plugin with a hybrid UI strategy, developed in phases over 8-11 months.
Key considerations:
- User Demand: Validate that sufficient users want this
- Resource Commitment: Requires dedicated team
- Maintenance: Ongoing cost of supporting multiple platforms
- Strategic Value: Expands market, especially for Java developers
The custom model integration feature, which is the highest priority for the requesting user, can be delivered in Phase 1 (MVP), providing value quickly.
Recommendation: Proceed with community validation and technical spike before committing to full development.
Document Status: Draft for Community Review
Related Issue: #9982
Author: Roomote
Date: 2025-12-12
Version: 1.0