Thank you for your interest in contributing! This guide will help you get started.
- Node.js >= 20.0
- npm >= 10.0
- Git
- Basic understanding of TypeScript and React (for UI modifications)
# Clone the repository
git clone https://github.com/your-username/customIDE.git
cd customIDE
# Install dependencies
npm install
# Download plugins
npm run download:plugins
# Verify both versions build
npm run buildStart both versions simultaneously:
npm run startOr individually:
npm run start --workspace=browser-app # http://localhost:3000
npm run start --workspace=electron-app # Desktop appFor development with hot reload:
npm run watchFor specific workspace:
npm run watch --workspace=custom-ui- Custom color schemes
- Keyboard shortcut customization
- Layout variations
- Accessibility enhancements
Files to modify: custom-ui/src/frontend/
- Add useful VSCode extensions
- Create custom keybindings
- Develop Theia-specific plugins
Files to modify: Root package.json (theiaPlugins section)
- Custom commands and contributions
- Workspace management improvements
- Custom editor views
Files to modify: Depends on feature (custom-ui, browser-app, electron-app)
- Tutorials and guides
- API documentation
- Troubleshooting improvements
- Examples
Files to modify: README.md, create new .md files as needed
- Cross-platform testing (Windows, macOS, Linux)
- Bug fixes and compatibility improvements
- Performance optimization
Files to modify: Varies by issue
git checkout -b feature/my-feature
# or
git checkout -b fix/my-bugfixEdit relevant files for your contribution type:
Modifying UI layout:
custom-ui/
├── src/frontend/
│ ├── application-shell.ts
│ ├── navigator-widget-factory.ts
│ ├── commands-contributions.ts
│ └── style/
Modifying plugins:
Root package.json → theiaPlugins section
Modifying preferences:
browser-app/package.json → theia.frontend.config.preferences
electron-app/package.json → theia.frontend.config.preferences
For custom-ui changes:
npm run build --workspace=custom-ui
npm run bundle --workspace=browser-app
npm run bundle --workspace=electron-appTest in both platforms:
npm run startAccess browser at http://localhost:3000 and verify Electron app launches.
Run tests (if applicable):
npm testBefore submitting, ensure no security vulnerabilities:
npm audit
npm audit fixUse clear, descriptive commit messages:
git commit -am 'Add feature: descriptive title
- Change 1
- Change 2
- Fixes #123'Commit message format:
- First line: Short summary (50 chars max)
- Blank line
- Detailed explanation if needed
- Reference issues:
Fixes #123,Closes #456
git push origin feature/my-featureThen create a PR on GitHub with:
- Clear title describing the change
- Description of what and why
- Screenshots if UI-related
- Testing steps
- Any breaking changes noted
- Follow existing code patterns in the project
- Use TypeScript for new code
- Format with prettier (if configured)
- Keep functions small and focused
- Test changes in both browser and Electron versions
- Verify plugin loading if plugin-related
- Check console for errors and warnings
- Test on different platforms if possible
- Update README.md for user-facing changes
- Add comments to complex logic
- Document new configuration options
- Update this file if process changes
- Minimize bundle size impact
- Avoid unnecessary re-renders (React)
- Profile before/after changes
- Consider plugin loading time
- Don't add credentials or secrets
- Run
npm auditregularly - Keep dependencies updated
- Report security issues privately
Before submitting PR:
- Changes tested in both browser and Electron
- No breaking changes (or clearly documented)
- Code follows project style
- Dependencies updated if needed
- No security issues (
npm audit) - Documentation updated
PR Template:
## Description
Brief description of changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] UI improvement
- [ ] Documentation
- [ ] Other
## Testing
Steps to verify the change:
1.
2.
3.
## Screenshots (if applicable)
Before/after or relevant UI changes
## Checklist
- [ ] Tested in browser version
- [ ] Tested in Electron version
- [ ] Updated documentation
- [ ] No security issues
- [ ] Build successful- Find extension on Open VSX
- Get VSIX URL
- Add to
package.json:"publisher.extension-name": "https://open-vsx.org/api/.../file/...vsix"
- Run
npm run download:plugins - Test:
npm run start
- Edit files in
custom-ui/src/frontend/ - Rebuild:
npm run build --workspace=custom-ui - Bundle:
npm run bundle --workspace=browser-app && npm run bundle --workspace=electron-app - Test:
npm run start
Edit both:
browser-app/package.json→theia.frontend.config.preferenceselectron-app/package.json→theia.frontend.config.preferences
Then restart app.
- Create directory in
custom-ui/src/frontend/ - Add TypeScript files with exports
- Import in
index.ts - Register contribution if needed
- Build and test
When reporting bugs, include:
Required:
- OS and Node.js version
- Steps to reproduce
- Expected vs actual behavior
- Error message or screenshot
Optional:
- Browser/Electron console output
- Custom configuration if relevant
- Related plugins or extensions
- Attempted solutions
Good bug report example:
**Environment**:
- OS: Ubuntu 22.04
- Node: 20.11.0
- npm: 10.5.0
**Steps to reproduce**:
1. Launch customide-browser
2. Open a file
3. Try to close the file
**Expected**: File closes
**Actual**: File doesn't close, console shows error
**Error**:
Error: Cannot read property 'close' of undefined at FileWidget.closeFile (application-shell.ts:123)
**Workaround**: Restart the app
- Check README.md for common issues
- Review existing GitHub issues
- Read Theia documentation
- Check VSCode extension API docs
- Ask in GitHub discussions
- Be respectful and inclusive
- No harassment or discrimination
- Constructive feedback only
- Report violations to maintainers
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.
Thank you for contributing to Custom IDE!