Contributing to Create Dot App
June 17, 2026 ยท View on GitHub
Thank you for your interest in contributing to Create Dot App! This project helps developers quickly bootstrap Polkadot-based decentralized applications with various frontend frameworks and SDK integrations.
๐ Table of Contents
๐ Getting Started
Prerequisites
- Bun (latest version)
- Node.js 18+ (for compatibility testing)
- Git
Quick Setup
# Clone the repository
git clone https://github.com/preschian/create-dot-app.git
cd create-dot-app
# Install dependencies
bun install
# Build the CLI
cd cli && bun run build
# Test the CLI locally
bun run test
๐ Development Setup
Repository Structure
This is a monorepo with the following structure:
create-dot-app/
โโโ cli/ # Main CLI package
โ โโโ src/ # CLI source code
โ โโโ __tests__/ # E2E tests
โ โโโ package.json # CLI package config
โโโ templates/ # Project templates
โ โโโ next/ # Solidity (Next.js + Wagmi, Polkadot Hub EVM)
โ โโโ next-papi/ # Substrate (Next.js + PAPI light client)
โ โโโ nuxt/ # Solidity (Nuxt + Wagmi, Polkadot Hub EVM)
โโโ docs/ # Documentation site
โโโ package.json # Root package config
Local Development
-
CLI Development:
cd cli bun run dev # Watch mode for development -
Testing Changes:
# Build and test bun run build bun run test # Test CLI manually node dist/index.js my-test-app -
Documentation Development:
cd docs bun run dev # Start documentation server
๐ Project Structure
CLI Source Code (cli/src/)
index.ts- Main CLI entry pointtemplate-selector.ts- Interactive template selection logicposthog.ts- Anonymous telemetry (optional)
Key Technologies
- CLI Framework: @clack/prompts for interactive prompts
- File Operations: fs-extra
- Template Management: @begit/core for template cloning
- Testing: Vitest with node-pty for E2E tests
- Build Tool: tsdown
๐ง Making Changes
Types of Contributions
- Bug Fixes - Fix issues in existing functionality
- New Templates - Add support for new frontend frameworks or SDKs
- CLI Improvements - Enhance user experience or add features
- Documentation - Improve guides, README, or inline documentation
- Testing - Add or improve test coverage
Development Workflow
-
Create a Branch:
git checkout -b feature/your-feature-name # or git checkout -b fix/your-bug-fix -
Make Your Changes:
- Follow the existing code style
- Add tests for new functionality
- Update documentation as needed
-
Test Your Changes:
cd cli bun run build bun run test bun run lint -
Commit Your Changes:
git add . git commit -m "feat: add support for SvelteKit template"
Commit Message Convention
We follow the Conventional Commits specification:
feat:- New featuresfix:- Bug fixesdocs:- Documentation changestest:- Test additions or modificationsrefactor:- Code refactoringchore:- Maintenance tasks
Examples:
feat: add Svelte template with PAPI integration
fix: resolve template selection navigation issue
docs: update contributing guidelines
test: add E2E test for error handling
๐งช Testing
Test Types
-
E2E Tests (
cli/__tests__/cli.e2e.test.ts):- Test complete user flows
- Use
node-ptyto simulate real CLI interactions - Verify file creation and project structure
-
Template Tests:
- Ensure all templates build successfully
- Verify package.json configurations
- Check for required dependencies
Running Tests
# Run all tests
cd cli && bun run test
# Run tests in watch mode
bun run test:watch
# Run with coverage
bun run test --coverage
# Run specific test
bun run test --run cli.e2e.test.ts
Writing Tests
When adding new features, include corresponding tests:
it('should create project with new template', async () => {
// Test implementation using node-pty
// Verify expected files are created
// Check package.json is updated correctly
})
๐จ Contributing Templates
Template Requirements
Each template must include:
-
Core Files:
package.jsonwith correct dependenciesREADME.mdwith setup instructionstsconfig.json(for TypeScript projects)- Build configuration (
vite.config.ts,nuxt.config.ts, etc.)
-
Polkadot Integration:
- SDK setup (PAPI or Dedot)
- Connection management
- Basic wallet integration
- Transaction handling examples
-
Components (recommended):
Connect- Wallet connectionBalance- Account balance displaySignTransaction- Transaction signingAccountCard- Account information
Adding a New Template
-
Create Template Directory:
mkdir templates/framework-sdk # Example: templates/svelte-papi -
Implement Required Structure:
templates/your-template/ โโโ package.json โโโ README.md โโโ src/ (or app/ for Nuxt) โโโ components/ โโโ utils/ โโโ config files -
Update CLI Template List:
// In cli/src/template-selector.ts const templates = [ // ... existing templates { name: 'Framework + SDK', value: 'framework-sdk', description: 'Framework with SDK integration' } ] -
Add Template Tests:
// Add test case in cli/__tests__/cli.e2e.test.ts it('creates project with new template', async () => { // Test template creation })
Template Best Practices
- Use TypeScript for type safety
- Include error handling for SDK operations
- Provide clear component examples
- Follow framework-specific conventions
- Include proper ESLint configuration
- Use consistent styling approach
- Document SDK-specific setup steps
๐ Submitting Changes
Pull Request Process
-
Fork the Repository (for external contributors)
-
Create a Feature Branch:
git checkout -b feature/your-feature -
Make Your Changes following the guidelines above
-
Test Thoroughly:
bun run build bun run test bun run lint -
Update Documentation if needed
-
Submit Pull Request:
- Use a clear, descriptive title
- Reference any related issues
- Provide detailed description of changes
- Include testing steps
๐ฆ Release Process
Version Management
We use Changesets for version management:
# Add a changeset
bun run changeset
# Version packages
bun run version-packages
# Release
bun run release
Release Types
- Patch (1.0.1) - Bug fixes, small improvements
- Minor (1.1.0) - New features, new templates
- Major (2.0.0) - Breaking changes
๐ค Code of Conduct
Our Standards
We are committed to providing a welcoming and inclusive experience for everyone. We expect all contributors to:
- Use welcoming and inclusive language
- Be respectful of differing viewpoints and experiences
- Gracefully accept constructive criticism
- Focus on what is best for the community
- Show empathy towards other community members
Unacceptable Behavior
- Harassment, discrimination, or offensive comments
- Personal attacks or trolling
- Publishing private information without consent
- Any conduct that would be inappropriate in a professional setting
Enforcement
Project maintainers are responsible for clarifying standards and will take appropriate corrective action in response to unacceptable behavior.
โ Getting Help
Community Support
- GitHub Issues: Report bugs or request features
- GitHub Discussions: Ask questions or share ideas
- Documentation: Check the docs site
Maintainer Contact
For sensitive issues or direct communication:
- Email: Contact through GitHub profile
- GitHub: @preschian
๐ Recognition
Contributors will be recognized in:
- Project README
- Release notes for significant contributions
- GitHub contributor list
Thank you for contributing to Create Dot App! Your efforts help make Polkadot development more accessible to everyone. ๐
This contributing guide is a living document. Please suggest improvements through issues or pull requests.