Thank you for your interest in contributing to Rise! This guide will help you get started whether you're fixing bugs, adding features, improving documentation, or creating plugins.
Current Phase: Phase 3 (Code Generation & Preview) - ~95% complete
Next Phase: Phase 4 (Testing & Polish)
MVP Target: Schema Level 1 Only
Important: MVP focuses exclusively on Level 1 features. Level 2 and 3 features are deferred to post-MVP. Always check docs/SCHEMA_LEVELS.md before implementing anything.
Areas accepting contributions:
- Bug fixes for existing features
- Performance optimizations
- Test coverage improvements
- Documentation improvements
- UI/UX enhancements (within Level 1 scope)
Not accepting yet:
- Level 2 features (state, events, expressions)
- Level 3 features (database, real-time)
- Major architectural changes
- Framework plugins (React only for MVP)
Always welcome:
- Fix typos and grammar
- Clarify confusing sections
- Add examples and tutorials
- Improve API documentation
- Create video guides
How to report:
- Check existing issues first
- Include Rise version and OS
- Provide steps to reproduce
- Include error messages/logs
- Share minimal test case if possible
Before requesting:
- Check
docs/MVP_ROADMAP.md- it might be planned - Verify it's not a Level 2/3 feature (post-MVP)
- Search existing issues
In your request:
- Describe the problem you're solving
- Explain the proposed solution
- Consider implementation complexity
- Note any breaking changes
- Node.js: v18.0.0 or higher
- npm: v9.0.0 or higher
- Git: For version control
- Code Editor: VS Code recommended (with ESLint/Prettier extensions)
- OS: macOS, Windows, or Linux
-
Fork and Clone:
git clone https://github.com/YOUR_USERNAME/rise.git cd rise -
Install Dependencies:
npm install
-
Run in Development:
npm run dev
-
Open Test Project:
- File → New Project
- Create a test project
- Try creating components
rise/
├── src/
│ ├── main/ # Electron main process
│ │ ├── ai/ # AI component generation
│ │ ├── project/ # Project management
│ │ └── index.ts # Main entry point
│ │
│ ├── renderer/ # Electron renderer (React UI)
│ │ ├── components/ # UI components
│ │ ├── hooks/ # React hooks
│ │ ├── stores/ # Zustand state stores
│ │ └── main.tsx # Renderer entry
│ │
│ └── core/ # Core logic (used by both)
│ ├── manifest/ # Manifest management
│ ├── codegen/ # Code generation
│ ├── validation/ # Schema validation
│ ├── security/ # Security features
│ └── files/ # File system operations
│
├── tests/
│ ├── unit/ # Unit tests
│ ├── integration/ # Integration tests
│ └── fixtures/ # Test data
│
├── docs/ # Documentation
├── .implementation/ # Task specifications
└── electron/ # Electron config
-
Pick an Issue:
- Look for "good first issue" label
- Comment to claim it
- Get confirmation before starting
-
Create Branch:
git checkout -b fix/issue-description
-
Make Changes:
- Follow coding standards (see below)
- Write tests for new code
- Update documentation
- Run linter and tests
-
Commit:
git add . git commit -m "fix: description of what you fixed"
-
Push and PR:
git push origin fix/issue-description
- Create Pull Request on GitHub
- Fill out PR template
- Link related issue
Required:
- Use TypeScript for all new code
- Provide types for all function parameters and returns
- Avoid
any(useunknownif necessary) - Use interfaces for object shapes
Example:
// ✅ Good
interface GenerateOptions {
incremental: boolean;
verbose: boolean;
}
function generate(manifest: Manifest, options: GenerateOptions): GenerationResult {
// implementation
}
// ❌ Bad
function generate(manifest, options): any {
// implementation
}Requirements:
- JSDoc comments on all public APIs
- Inline comments for complex logic
- README in each major directory
Comment Ratio: 1 comment per 3-5 lines of code
Example:
/**
* Generate React code from component manifest
*
* @param component - Component definition from manifest
* @param manifest - Full manifest for context
* @returns Generated React code as string
*
* @example
* const code = generator.generateComponent(comp, manifest);
* // Returns: "import React from 'react'..."
*/
export function generateComponent(
component: Component,
manifest: Manifest
): string {
// Build import statements for child components
const imports = buildImports(component, manifest);
// Generate props destructuring with defaults
const props = buildProps(component);
// Generate JSX element tree
const jsx = buildJSX(component);
// Combine and format
return assembleCode(imports, props, jsx);
}Unit Tests:
- All core logic must have tests
- Aim for >90% coverage
- Use descriptive test names
Example:
describe('ReactCodeGenerator', () => {
describe('generateComponent', () => {
it('should generate valid React code for button component', () => {
const component = createButtonComponent();
const code = generator.generateComponent(component, manifest);
expect(code).toContain('export function Button');
expect(code).toContain('return <button');
expect(code).toMatch(/className=["'].*["']/);
});
it('should throw error for invalid component', () => {
const invalid = { id: 'test' }; // Missing required fields
expect(() => {
generator.generateComponent(invalid as Component, manifest);
}).toThrow('Invalid component structure');
});
});
});Running Tests:
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
npm run test:unit # Unit tests onlyUse ESLint and Prettier:
npm run lint # Check for issues
npm run lint:fix # Auto-fix issuesKey Rules:
- No semicolons (Prettier removes them)
- Single quotes for strings
- 2-space indentation
- Max line length: 100 characters
- Trailing commas in multiline
Naming Conventions:
- Components:
PascalCase.tsx - Utilities:
camelCase.ts - Types:
types.tsorComponentName.types.ts - Tests:
ComponentName.test.ts
Import Order:
// 1. External dependencies
import React from 'react';
import { someUtil } from 'external-lib';
// 2. Internal absolute imports
import { Component } from '@/core/manifest/types';
import { validate } from '@/core/validation';
// 3. Relative imports
import { helper } from './utils';
import type { LocalType } from './types';- Code follows style guide
- Tests added/updated
- Tests pass locally
- Documentation updated
- No console.logs left in code
- No commented-out code
- Meaningful commit messages
## Description
Brief description of what this PR does
## Related Issue
Fixes #123
## Type of Change
- [ ] Bug fix
- [ ] New feature (Level 1 only!)
- [ ] Documentation
- [ ] Performance improvement
## Testing
How did you test this?
## Screenshots (if applicable)
Before/after screenshots
## Checklist
- [ ] My code follows the style guide
- [ ] I have added tests
- [ ] All tests pass
- [ ] I have updated documentation
- [ ] No breaking changes-
Automated Checks:
- CI runs tests
- Linter checks code
- Build verification
-
Human Review:
- Core maintainer reviews code
- May request changes
- Discusses approach
-
Approval & Merge:
- Once approved, maintainer merges
- Squash commits for clean history
- PR automatically closes linked issues
Always check before implementing:
Is this feature in Level 1?
↓ YES
Implement it!
↓ NO
Is it critical for MVP?
↓ YES
Discuss with maintainers first
↓ NO
Defer to Level 2/3 (post-MVP)
Level 1 Includes:
- Static component properties
- Component hierarchy
- Props (parent → child)
- Tailwind styling
- Code generation
- AI generation (basic)
Level 1 Excludes:
- State management
- Event handlers
- Expressions
- Computed properties
- Custom logic
- Database/API integration
For complex changes, include confidence rating:
/**
* @confidence 9/10 - Well-tested, follows established patterns
* @concerns None identified
*/Scale:
- 10/10: Trivial change, impossible to break
- 8-9/10: Well-understood, tested, confident
- 6-7/10: Some complexity, edge cases considered
- 4-5/10: Significant complexity, needs review
- 1-3/10: Experimental, needs discussion
Below 8/10: Flag for mandatory human review
Critical Code:
- API key handling
- File system operations
- IPC communication
- User input sanitization
Requirements:
- Never log sensitive data
- Validate all inputs
- Use parameterized queries (future DB work)
- Follow principle of least privilege
Targets:
- Code generation: < 100ms per component
- UI interactions: < 16ms (60 FPS)
- Manifest save: debounced 500ms
- File watching: debounced 200ms
Optimization Techniques:
- Use React.memo for expensive components
- Debounce frequent operations
- Virtual scrolling for large lists
- Lazy loading of heavy dependencies
Rise was built with heavy AI assistance. You can too!
-
Read Task Specifications:
- Check
.implementation/directory - Follow the detailed specifications
- Reference related documentation
- Check
-
Provide Context:
I'm implementing Task 3.5 from the Phase 3 specification. Current Context: - We're in Phase 3 (Code Generation) - Level 1 schema only - ReactCodeGenerator already exists Task: Add incremental generation support Requirements: [paste relevant requirements from task spec] -
Iterate on Output:
- Review AI-generated code carefully
- Test thoroughly
- Refine based on results
-
Document Decisions:
- Add comments explaining why
- Update relevant docs
- Note in PR description
- Create component file:
src/renderer/components/MyComponent.tsx - Define props interface
- Implement component with TypeScript
- Add to appropriate parent component
- Style with Tailwind
- Write tests:
MyComponent.test.tsx - Update documentation if public API
- Identify correct module (
manifest,codegen, etc.) - Create new file or extend existing
- Define TypeScript interfaces
- Implement with comprehensive comments
- Write unit tests (>90% coverage)
- Export from module index
- Update relevant documentation
- Write failing test that reproduces bug
- Fix the code
- Verify test now passes
- Add regression test if needed
- Document fix in PR
- Measure current performance
- Identify bottleneck
- Implement optimization
- Measure improvement
- Document benchmarks in PR
For maintainers only:
- Version bump in
package.json - Update
CHANGELOG.md - Tag release:
git tag v0.1.0 - Push tags:
git push --tags - Build release binaries
- Create GitHub release
- Announce to community
Use for:
- Bug reports
- Feature requests
- Task tracking
Format:
- Clear, descriptive title
- Complete description
- Steps to reproduce (bugs)
- Expected vs actual behavior
- Environment details
Use for:
- Questions about usage
- Design discussions
- RFC (Request for Comments)
- Sharing projects built with Rise
Not for:
- Bug reports (use Issues)
- Support requests (use Issues with "question" label)
We are committed to:
- Welcoming and inclusive environment
- Respectful communication
- Constructive feedback
- Collaboration over competition
Unacceptable behavior:
- Harassment or discrimination
- Trolling or insulting comments
- Personal attacks
- Spam or self-promotion
Violations will result in:
- Warning
- Temporary ban
- Permanent ban
Report issues to project maintainers.
Stuck? Here's how to get help:
-
Check Documentation:
- Read relevant docs in
/docs - Check examples in
/tests/fixtures - Review task specifications in
/.implementation
- Read relevant docs in
-
Search Issues:
- Someone may have had the same question
- Check closed issues too
-
Ask in Discussions:
- Describe what you're trying to do
- Share what you've tried
- Include code snippets if relevant
-
Pair Programming:
- Maintainers occasionally available
- Schedule through Discussions
Contributors are recognized in:
CONTRIBUTORS.mdfile- Release notes
- GitHub contributor graph
Significant contributions may result in:
- Maintainer status
- Project credits
- Community shout-outs
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to Rise! Together we're building something special. 🚀