Welcome Contributors!
Thank you for your interest in contributing to New Expensify! This guide will help you get started with your first contribution.Before contributing, please read the Contributing Guidelines and Code of Conduct.
Prerequisites
Required Knowledge
- JavaScript/TypeScript: Strong understanding required
- React & React Native: Experience building React applications
- Git: Familiarity with branching, commits, and pull requests
- Command Line: Comfortable using terminal/command prompt
Recommended Reading
- CLAUDE.md: Complete repository overview
- README.md: Development setup and testing
- CONTRIBUTING.md: Contribution process and guidelines
Environment Setup
See Development Setup for detailed instructions.Quick Start
Finding Issues to Work On
For External Contributors
- Browse GitHub Issues: Look for issues with the
Help Wantedlabel - Check Upwork: View available jobs on Upwork
- Follow @ExpensifyOSS: Get notified of new jobs on Twitter
Before Proposing
- Check for existing proposals: Read other proposals to ensure yours is different
- Reproduce the issue: Verify you can reproduce the problem
- Test on all platforms: iOS, Android, Web, mWeb, macOS
Creating Test Accounts
You can create test accounts directly at new.expensify.com.Important Guidelines
-
Use + in email addresses: e.g.,
[email protected]- Marks accounts as test accounts
- Prevents assignment of Expensify Guides
- Do not chat with Concierge: This diverts to customer support
- Do not interact with onboarding teams: Let them know you’re a contributor
- Do not post in public rooms: Use test rooms or this staging room
Generating Multiple Test Accounts
Use the+ postfix in emails:
All emails go to [email protected] but create separate accounts.
Making Your First Contribution
Step 1: Reproduce the Issue
Step 2: Create a Proposal
Only after reproducing the issue and after the
Help Wanted label is added.Proposal Guidelines
- Be specific: Include file paths and line numbers
- Be different: Don’t duplicate existing proposals
- Be thorough: Explain root cause, not just symptoms
- One proposal only: Don’t submit multiple proposals for same issue
Step 3: Wait for Selection
Once a Contributor+ (C+) or Expensify engineer reviews proposals:- If selected, you’ll be hired on Upwork
- The GitHub issue will be assigned to you
- You can then begin coding
Step 4: Create a Branch
Step 5: Make Your Changes
Post-Edit Checklist: Always run Prettier, ESLint, and TypeScript checks before committing.
Step 6: Commit Changes
All commits must be signed. See Signing Commits below.Step 7: Create Pull Request
- Go to GitHub and create a pull request from your branch
- Fill out every section of the PR template
- Link the issue:
Fixes https://github.com/Expensify/App/issues/12345 - Provide test steps for each platform
- Include screenshots for each platform
Step 8: Code Review
Your PR will be reviewed by:- A Contributor+ (C+) team member
- An Expensify engineer
- Respond to feedback promptly
- Make requested changes
- Post “Updated” comment when ready for re-review
- Provide daily updates on weekdays
- Never force push after review starts
Step 9: Deployment & Payment
Once your PR is:- Merged: PR is merged to main
- Deployed to Staging: Tested on staging environment
- Deployed to Production: Released to all users
- Regression Period: 7 days after production deploy
- Payment: Issued 7+ days after production deploy (if no regressions)
Payment timing: Minimum 7 days after production deployment. If regressions occur, payment is delayed until they’re fixed.
Signing Commits
All commits must be signed with GPG.Setup GPG Signing
Working on Beta Features
Some features are behind beta flags during development:Communication Channels
Slack: #expensify-open-source
For general questions and discussions. To join:- Fill out this form
- Include your email and Upwork profile
- Wait for approval
GitHub Issues
For job-specific questions, always comment on the GitHub issue, not Slack.- Security vulnerabilities: [email protected] (subject: “Vulnerability Report”)
- General inquiries: [email protected]
Payment Information
Getting Paid
- Create Upwork account: Ensure profile is fully verified
- Add profile to GitHub: Link in your GitHub bio
- Apply on Upwork: After proposal is selected on GitHub
- Payment timeline: 7+ days after production deployment
Payment via Expensify
Contributors can receive payment via Expensify 18 months after first assignment. See PAYMENT_VIA_EXPENSIFY.md for details.Common Mistakes
1. Not Reading Documentation
2. Proposing Too Early
Wait for theHelp Wanted label before proposing.
3. Not Testing All Platforms
Test on iOS, Android, Web, and mWeb before submitting.4. Skipping Prettier
Always runnpm run prettier before committing. CI will fail otherwise.
5. Not Signing Commits
Set up GPG signing before your first commit.6. Force Pushing During Review
Never force push after review starts - it breaks review history.Tips for Success
1. Start Small
Begin with smaller issues to learn the codebase.2. Read Existing Code
Study similar features to understand patterns.3. Ask Questions Early
If stuck reproducing an issue, ask in the GitHub issue.4. Provide Daily Updates
Comment on your PR daily with progress updates.5. Be Patient
Reviews take time. Use the waiting period to work on tests or documentation.Next Steps
Development Setup
Detailed environment setup for all platforms
Coding Standards
Code style and best practices
Testing
Writing and running tests
Pull Requests
PR process and review guidelines
