Contributing
Musubi is open source under the MIT licence and welcomes contributions. Whether that’s a bug fix, a new feature, better tests, or improved documentation — it’s all welcome.
Before you start
Section titled “Before you start”- Check the GitHub issues to see if someone is already working on what you have in mind
- For larger changes, open an issue first to discuss the approach before investing time in a PR
- Keep changes focused — one thing per pull request makes reviewing easier
Development setup
Section titled “Development setup”Follow the Running Locally guide to get the full stack running on your machine.
Making changes
Section titled “Making changes”The project uses pnpm workspaces and Turborepo. A few things to know:
- The mobile client lives in
apps/client/— it’s an Expo app with Expo Router - The API server lives in
apps/api/— Express.js with Better Auth and Drizzle - Shared types are in
packages/types/— if you’re adding or changing a data model, start here - The calendar component is a fork in
packages/calendar/— changes to calendar rendering go here
Don’t hardcode colours or fonts in components. Use colors and fonts from apps/client/constants/theme.ts. The design system is intentional.
Submitting a pull request
Section titled “Submitting a pull request”- Fork the repo and create a branch from
main - Make your changes
- Test on both iOS and Android if the change touches the client
- Open a PR with a clear description of what changed and why
Code style
Section titled “Code style”The codebase uses TypeScript throughout. A few conventions:
- React components use functional style with hooks
- State lives in Zustand stores in
apps/client/store/— components read from stores and call store actions, they don’t manage server state locally - Animations use Reanimated v4 — avoid the legacy
AnimatedAPI from React Native - No inline magic numbers for colours or spacing — use the theme constants
Questions
Section titled “Questions”Open a GitHub issue or discussion if you’re unsure about something before spending time on it.