Thank you for your interest in contributing to Craft! We welcome contributions from the community and are grateful for any help you can provide.
- Node.js >= 20.19.0
- pnpm (package manager)
- PostgreSQL database (we recommend Neon for development)
-
Fork the repository and clone your fork:
git clone https://github.com/<your-username>/craft.git cd craft
-
Install dependencies:
pnpm install
-
Set up environment variables:
cp apps/app/.env.example apps/app/.env
Edit
apps/app/.envand fill in the required values. At minimum, you need:DATABASE_URL— PostgreSQL connection stringBETTER_AUTH_SECRET— A random 32+ character secret- At least one AI provider API key (e.g.,
ANTHROPIC_API_KEY)
-
Run database migrations:
pnpm db:migrate
-
Start the development server:
pnpm dev
This starts the main app at
http://localhost:3000.
pnpm dev:www # Marketing website (localhost:3001)
pnpm dev:docs # Documentation site (localhost:3002)
pnpm dev:blog # Blog (localhost:3003)
pnpm dev:admin # Admin panel
pnpm dev:all # All services in parallelCreate a feature branch from main:
git checkout -b feat/your-feature-name- TypeScript is required for all source files
- ESLint — Run
pnpm lintto check for issues - Tailwind CSS v4 — Follow the design system in
docs/design-system.md - Use only neutral colors (
neutral-*,stone-*,gray-*) — no semantic colors - All interactive elements must use rounded corners
- All components must support dark mode via
dark:variants
We use Conventional Commits. All commit messages are validated by commitlint.
type(scope): subject
Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore
Scopes: ai, api, ui, db, auth, billing, sandbox, etc.
Examples:
feat(ai): add support for new model provider
fix(api): handle empty response in chat endpoint
docs: update self-hosting guide
Run the test suite before submitting:
pnpm lint
pnpm type-check- Ensure your code follows the style guidelines above
- Update documentation if you're changing user-facing behavior
- Make sure all checks pass
- Push your branch and open a Pull Request against
main - Fill out the PR template with a clear description of your changes
- Keep PRs focused — one feature or fix per PR
- Include screenshots for UI changes
- Reference related issues (e.g.,
Closes #123) - Be responsive to review feedback
- Use GitHub Issues to report bugs
- Include steps to reproduce, expected behavior, and actual behavior
- Include your environment details (OS, Node version, browser)
If you discover a security vulnerability, please do not open a public issue. Instead, see our Security Policy for responsible disclosure instructions.
By contributing to Craft, you agree that your contributions will be licensed under the Apache License 2.0.