Thank you for your interest in contributing to MeshHook! This guide will help you get started with contributing to our webhook-first workflow engine.
MeshHook is an MIT-licensed, webhook-first workflow engine with a visual builder and Temporal-like durability via event sourcing on Postgres. We mesh your webhooks and orchestrate everything with simplicity, durability, and security.
Before you begin, ensure you have:
- Node.js (v18 or later) or Bun
- pnpm (recommended package manager)
- Git
- Supabase CLI (
pnpm install -g supabase) - Docker (for local Supabase)
1. Fork and clone
git clone https://github.com/YOUR_USERNAME/meshhook.git
cd meshhook2. Install dependencies
pnpm install3. Setup environment
pnpm run setupSelect "Local Development" when prompted.
4. Start Supabase locally
pnpx supabase start5. Run database migrations
pnpm run db:migrate6. Start the orchestrator
pnpm run startYour local instance should now be running at http://localhost:8080
- UI/API: SvelteKit (Svelte 5)
- Database/Queues/Realtime/Storage: Supabase (Postgres)
- Workers: Node.js or Bun (stateless)
- Queue: pg-boss or pgmq (Postgres-native)
- Transforms: JMESPath
- Single Service: All components run on port 8080
1. Create a feature branch
git checkout -b feature/your-feature-name
# or for bug fixes
git checkout -b fix/bug-description2. Make your changes
- Write clean, readable code
- Follow our style guide
- Add tests if applicable
- Update documentation if needed
3. Test your changes
pnpm run lint
pnpm run start
pnpm run db:migrate # if you changed the database4. Commit your changes
git add .
git commit -m "Brief description of your changes"Good commit messages:
- ✅
Add webhook retry logic - ✅
Fix event sourcing race condition - ✅
Update JMESPath transform examples
5. Push to your fork
git push origin feature/your-feature-name6. Create a Pull Request
Go to your fork on GitHub and click "New Pull Request". Fill out the PR template with:
- Description of changes
- Related issue number (if applicable)
- Testing performed
- Screenshots (for UI changes)
7. Address review feedback
- Respond to comments promptly
- Make requested changes
- Push updates to the same branch
We welcome contributions in many forms:
- Bug fixes - Found a bug? Please fix it!
- New features - Have an idea? Open an issue first to discuss
- Documentation - Improve guides, add examples, fix typos
- Tests - Add missing test coverage
- Performance improvements - Make MeshHook faster
- Webhook integrations - Add new webhook sources or destinations
- JMESPath transforms - Create reusable transform templates
- UI/UX enhancements - Improve the visual builder
Looking for your first contribution? Check issues labeled good first issue or hacktoberfest.
- Use TypeScript for new code
- Use
constandlet, avoidvar - Prefer arrow functions for callbacks
- Use async/await over raw promises
- Name variables descriptively (avoid single letters except in loops)
- Add JSDoc comments for functions and complex logic
- Use Svelte 5 runes (
$state,$derived,$effect) - Keep components small and focused
- Use TypeScript in script blocks
- Follow reactive programming patterns
- Extract reusable logic into composables
- Use Tailwind CSS utility classes when possible
- For custom styles, use component-scoped CSS
- Follow mobile-first responsive design
- Maintain consistent spacing using Tailwind's scale
- Use Postgres-native features whenever possible
- Follow event sourcing patterns for workflow state
- Use pg-boss or pgmq for queue operations
- Leverage Supabase Realtime for live updates
- Write efficient queries, considering partitioning strategy
- Keep transforms simple and readable
- Add comments explaining complex expressions
- Test transforms with sample data
- Document expected input/output structures
We are committed to providing a welcoming and inclusive environment. We expect all contributors to:
- Be respectful - Treat everyone with kindness and empathy
- Be collaborative - Work together, share knowledge, help others
- Be patient - Remember that everyone is learning
- Be constructive - Provide helpful feedback, focus on solutions
- Be inclusive - Welcome people of all backgrounds and skill levels
- GitHub Issues - For bug reports and feature requests
- Pull Request comments - For code-specific discussions
- Project discussions - For general questions and ideas
When reporting a bug, please include:
- Clear description of the issue
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, Node version, Supabase version)
- Screenshots or error logs if applicable
- Relevant workflow configuration (if applicable)
- Never commit sensitive information (API keys, passwords, tokens, Supabase credentials)
- Use environment variables for all configuration
.env.stagingand.env.productionare not committed to the repository- Report security vulnerabilities privately to the maintainers
- Follow security best practices in webhook handling and data transformations
Before submitting a PR:
- Test locally with
pnpm run start - Verify migrations work:
pnpm run db:migrate - Test webhook intake and workflow execution
- Check for linting errors:
pnpm run lint - Verify that existing functionality still works
- Test with both local Supabase and remote instances (if possible)
When adding new features:
- Update relevant documentation in
./docs/ - Add code comments for complex logic
- Update PlantUML diagrams if architecture changes
- Add examples for new webhook integrations or transforms
- Update the README if necessary
pnpm run setup # Interactive environment configuration
pnpm run db:migrate # Run database migrations (auto-detects environment)pnpm run start # Start the orchestrator worker
pnpm mh --help # CLI helppnpm test # Run tests (if available)
pnpm run lint # Check for linting errorspnpx supabase start # Start local Supabase
pnpx supabase stop # Stop local Supabase
pnpx supabase status # Check Supabase status.env.local- Local development (committed to repo with safe defaults).env.staging- Staging environment (not committed).env.production- Production environment (not committed).env- Symlink to active environment (created by setup script)
Never commit .env.staging or .env.production!
Before making architectural changes, review:
./docs/Architecture.md- System architecture overview./docs/Event-Partitioning.md- Event sourcing and partitioning strategy./docs/PRD.md- Product requirements and design decisions./docs/diagrams/*.puml- Visual architecture diagrams
If you're unsure about anything:
- Check existing documentation in
./docs/ - Review similar implementations in the codebase
- Open a new issue with the "question" label
- Reach out to maintainers through project communication channels
All contributors are valued and will be recognized in our project documentation. Thank you for helping make MeshHook better!
Happy Contributing! 🎉
MeshHook — Mesh your webhooks. Orchestrate everything.
This guide is maintained by the MeshHook community. If you find areas for improvement, please submit a PR!