Submit a pull request

To ask for a change you’ve made in your own RapidSMS repository to be merged into the official repository, you make a pull request.

If you’re already familiar with Github and pull requests, here’s all you need to know:

1. Sign a Contributor License Agreement.

2. Open a pull request against the develop branch of the RapidSMS repository (

Otherwise, here are the details.


Work on a branch from the develop branch. RapidSMS uses the Git Flow system to manage branches and releases. If you’re using the gitflow tool, you can start your branch with:

$ git flow feature start NAME
Switched to a new branch 'feature/NAME'

Summary of actions:
- A new branch 'feature/NAME' was created, based on 'develop'
- You are now on branch 'feature/NAME'

Now, start committing on your feature. When done, use:

     git flow feature finish NAME


If you’re not using the gitflow tool, create a new branch from develop and switch to it:

$ git branch feature/NAME develop
$ git checkout feature/NAME
Switched to branch 'feature/NAME'


You’ll need a Github account to proceed. They’re free.

Fork the repository

Once you have a Github account, login, then go to the RapidSMS repository on Github and create a fork by clicking the Fork button near the top right of the page.

Add a remote

We’ll assume you already have a local clone of the repository that you’ve been working in, so all you need to do is add a new remote definition pointing to your new fork. You might choose to name your new remote definition using your Github username, to keep it distinguished from the remote pointing at the official repository.

$ git remote add username
$ git remote -v
username (fetch)
username (push)
origin      git:// (fetch)
origin      git:// (push)

Push your change to your own repository

Your change needs to be on Github before you can open a pull request against the RapidSMS code. Unless you have RapidSMS commit privileges, you’ll need to upload your change to your own fork of the repository.

Assuming your branch name is feature/NAME:

$ git push -u username feature/NAME
Total 0 (delta 0), reused 0 (delta 0)
 * [new branch]      feature/NAME -> feature/NAME
Branch feature/NAME set up to track remote branch feature/NAME from username.

Open a pull request

Go to your fork of the RapidSMS repository on the Github web site (

Click the Pull request button near the top center of the page.

Check the settings:

base repo
base branch
head repo
username/rapidsms (your repo)
head branch
feature/NAME (your branch)

Enter an informative name and description for your pull request. By default, Github will try to pull these from your commit messages, but often you can improve them.

Your pull request description is your chance to convince people that your change is worthwhile and will benefit RapidSMS. Here are some things to consider addressing:

  • why is this change needed
  • why will this be useful to general RapidSMS users (not just you)
  • what change was made
  • why that change was made, as opposed to some other way of achieving the same ends
  • what testing has been done
  • whether this change has already been used in real RapidSMS applications
  • etc.

Switch to the Files Changed tab and check that the changes shown are what you expect. If not, go back and check that you’ve committed the changes you intended on your branch, that you pushed it to your repo, and that the pull request settings are correct for your repo and branch.

When everything looks right, switch back to the New Pull Request tab and click the green Send pull request button in the lower right, below the description box.