Thanks for your interest in contributing! This guide will help you get started.
-
Fork the repository
-
Clone your fork:
git clone https://github.com/YOUR_USERNAME/create-dreamfactory.git cd create-dreamfactory -
Install dependencies:
npm install
-
Build the project:
npm run build
-
Test locally:
npm pack # Creates @dreamfactory-create-X.Y.Z.tgz # Test in a new directory: cd /tmp npm install /path/to/dreamfactory-create-X.Y.Z.tgz npx create-dreamfactory test-project
create-dreamfactory/
├── src/ # TypeScript source code
│ ├── cli.ts # Main CLI orchestration
│ ├── prompts.ts # User interaction
│ ├── generators/ # File generators
│ ├── setup/ # Docker & API setup
│ └── utils/ # Helper functions
├── templates/ # Files copied to user projects
│ ├── Dockerfile
│ ├── docker-compose.yml.template
│ ├── mcp-proxy/ # MCP daemon code
│ └── ...
├── docs/ # User documentation
└── tests/ # Test scripts
-
Create a branch:
git checkout -b feature/my-feature
-
Make your changes in
src/ -
Build:
npm run build
-
Test:
cd /tmp/test-area node /path/to/create-dreamfactory/dist/index.js my-test --yes -
Commit:
git add . git commit -m "Add feature: description"
-
Push & create PR:
git push origin feature/my-feature
Looking for something to work on?
- Improve README examples
- Add more troubleshooting scenarios
- Create video walkthrough transcripts
- Translate docs to other languages
- Design chatbot template schema
- Create analytics dashboard template
- Build e-commerce starter template
- Test on different platforms (Mac, Windows, Linux)
- Test with various databases
- Performance testing
- Database connection testing logic
- Interactive prompts for credentials
- Auto-configuration of DreamFactory services
- TypeScript: Use
async/await, avoid callbacks - Formatting: Run
npm run build(tsc handles formatting) - Naming: Descriptive function names (
promptAdminEmailnotgetEmail) - Comments: Explain "why" not "what"
// ❌ Bad
async function getData() {
const x = await fetch(url); // fetch data
return x;
}
// ✅ Good
async function fetchDreamFactoryStatus(): Promise<EnvironmentResponse> {
// Poll every 10s because DreamFactory takes 1-2min to initialize
const response = await pollWithTimeout(url, { interval: 10000 });
return response;
}Before submitting a PR, test:
- Setup completes without errors
- DreamFactory UI accessible at http://localhost:8080
- Demo database works
- MCP integration connects (Claude Desktop or Code)
- Can query demo database via Claude
- Logs are clean (no errors in
docker compose logs)
- macOS (Intel & Apple Silicon if possible)
- Linux (Ubuntu/Debian preferred)
- Windows (WSL2)
- Port conflict handling
- Docker not installed error
- Invalid admin password (< 16 chars)
- Network timeout during build
- Update documentation if you changed behavior
- Add yourself to contributors (we'll do this automatically)
- Link to related issue (e.g., "Fixes #123")
- Describe your changes:
- What problem does this solve?
- How did you test it?
- Any breaking changes?
## Description
Brief description of changes
## Motivation
Why is this change needed?
## Testing
How did you test this?
- [ ] Tested on macOS
- [ ] Tested on Linux
- [ ] Tested on Windows
## Screenshots (if applicable)See ROADMAP.md for planned features.
Claiming a feature:
- Comment on the related GitHub issue: "I'd like to work on this"
- Wait for maintainer approval (avoid duplicate work)
- Follow development workflow above
- GitHub Discussions: https://github.com/dreamfactorysoftware/create-dreamfactory/discussions
- Community Forum: https://community.dreamfactory.com
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.
Thank you for contributing! 🎉