Skip to main content

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
  1. CLAUDE.md: Complete repository overview
  2. README.md: Development setup and testing
  3. CONTRIBUTING.md: Contribution process and guidelines

Environment Setup

See Development Setup for detailed instructions.

Quick Start

Finding Issues to Work On

For External Contributors

  1. Browse GitHub Issues: Look for issues with the Help Wanted label
  2. Check Upwork: View available jobs on Upwork
  3. Follow @ExpensifyOSS: Get notified of new jobs on Twitter

Before Proposing

Do not submit proposals before the Help Wanted label is added to an issue. Proposals submitted early will be ignored.
  1. Check for existing proposals: Read other proposals to ensure yours is different
  2. Reproduce the issue: Verify you can reproduce the problem
  3. Test on all platforms: iOS, Android, Web, mWeb, macOS

Creating Test Accounts

You can create test accounts directly at new.expensify.com.

Important Guidelines

  1. Use + in email addresses: e.g., yourname+test1@gmail.com
    • Marks accounts as test accounts
    • Prevents assignment of Expensify Guides
  2. Do not chat with Concierge: This diverts to customer support
  3. Do not interact with onboarding teams: Let them know you’re a contributor
  4. Do not post in public rooms: Use test rooms or this staging room

Generating Multiple Test Accounts

Use the + postfix in emails:
  • test+1@example.com
  • test+2@example.com
  • test+123@example.com
All emails go to test@example.com but create separate accounts.

Making Your First Contribution

Step 1: Reproduce the Issue

Follow the steps in the GitHub issue to reproduce the problem.

Step 2: Create a Proposal

Only after reproducing the issue and after the Help Wanted label is added.
Use the Proposal Template:

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:
  1. If selected, you’ll be hired on Upwork
  2. The GitHub issue will be assigned to you
  3. You can then begin coding
New contributors: Work on one job at a time. Don’t propose on new jobs until your first PR is merged.

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

  1. Go to GitHub and create a pull request from your branch
  2. Fill out every section of the PR template
  3. Link the issue: Fixes https://github.com/Expensify/App/issues/12345
  4. Provide test steps for each platform
  5. Include screenshots for each platform
Incomplete PR checklists are a violation of Rule #2 and may result in warnings.

Step 8: Code Review

Your PR will be reviewed by:
  • A Contributor+ (C+) team member
  • An Expensify engineer
During Review:
  • 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:
  1. Merged: PR is merged to main
  2. Deployed to Staging: Tested on staging environment
  3. Deployed to Production: Released to all users
  4. Regression Period: 7 days after production deploy
  5. 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

Now all commits will be automatically signed.

Working on Beta Features

Some features are behind beta flags during development:

Communication Channels

Slack: #expensify-open-source

For general questions and discussions.
Do not DM Expensify team members. They cannot respond to direct messages.
To join:
  1. Fill out this form
  2. Include your email and Upwork profile
  3. Wait for approval

GitHub Issues

For job-specific questions, always comment on the GitHub issue, not Slack.

Email

Payment Information

Getting Paid

  1. Create Upwork account: Ensure profile is fully verified
  2. Add profile to GitHub: Link in your GitHub bio
  3. Apply on Upwork: After proposal is selected on GitHub
  4. Payment timeline: 7+ days after production deployment
Unverified Upwork profiles risk non-payment. Verify your profile before accepting jobs.

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

Read CLAUDE.md, README.md, and CONTRIBUTING.md in full before asking questions.

2. Proposing Too Early

Wait for the Help Wanted label before proposing.

3. Not Testing All Platforms

Test on iOS, Android, Web, and mWeb before submitting.

4. Skipping Prettier

Always run npm 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

Additional Resources