Easy contributor license agreements for your GitHub projects.
Ruby HTML CSS Other
Latest commit 45a2de6 Feb 24, 2017 @ryanttb ryanttb committed on GitHub Merge pull request #156 from edent/features/fix-http
Upgraded http links to https where supported
Failed to load latest commit information.
app Upgraded http links to https where supported Feb 13, 2017
config Increase log level to debug oauth issue Jul 5, 2016
db Add Field#description. Add "Corporate Contributor Information" field. Feb 18, 2013
doc rails new clahub --database=postgresql -T Sep 28, 2012
lib Follow pagination links for #67 Oct 11, 2014
log rails new clahub --database=postgresql -T Sep 28, 2012
public wip: favicon and apple icons Feb 18, 2013
script rails new clahub --database=postgresql -T Sep 28, 2012
spec Add ability to change owner of a CLA May 4, 2016
vendor rails new clahub --database=postgresql -T Sep 28, 2012
.gitignore Introduce Vagrant to facilitate contributions Jan 17, 2015
.rspec be rails g rspec:install Sep 28, 2012
.ruby-version Update to latest Ruby 2.2.x version Jun 2, 2016
.travis.yml Bump ruby version for TravisCI Jun 3, 2016
DEPLOY.md Upgraded http links to https where supported Feb 13, 2017
Gemfile Update to latest Ruby 2.2.x version Jun 2, 2016
Gemfile.lock Update to latest Ruby 2.2.x version Jun 2, 2016
Guardfile Add guard-livereload and explain usage in README Jan 19, 2013
LICENSE.md Update and rename LICENSE to LICENSE.md Jan 11, 2016
Procfile Configure for foreman Sep 28, 2012
Procfile.dev Add Procfile.dev Feb 18, 2013
README.md Upgraded http links to https where supported Feb 13, 2017
Rakefile rails new clahub --database=postgresql -T Sep 28, 2012
Vagrantfile Introduce Vagrant to facilitate contributions Jan 17, 2015
config.ru Allow HTTP-only for ^/repo_hook to support already-registered GitHub … Apr 8, 2014
provision.sh Upgraded http links to https where supported Feb 13, 2017



CLAHub provides a low-friction way to have a Contributor License Agreement for your open source project that's hosted on GitHub. Contributors digitally sign your CLA by signing in with GitHub. Then, it automatically marks up your pull requests based on whether the contributors have all signed your CLA.

Right now it's running at https://www.clahub.com

I don't intend for this to lead to a proliferation of CLAs. But when they're appropriate, I hope it can reduce the friction of contribution.

This project is a work-in-progress. Any and all feedback is welcome!

It currently works, but could use UI and functionality improvement. Find such discussion in GitHub issues.

Build status

Build Status

What's a CLA?

Contributor Agreements are a way to prove intellectual property (IP) provenance of contributions to an open-source project. They generally say that:

  1. The code I’m contributing is mine, and I have the right to license it.

  2. I’m granting you a license to distribute said code under the terms of this agreement (typically “as you see fit” or “under an OSI-approved license” or whatever).

-- From Contributor License Agreements by Jacob Kaplan-Moss

Here's some more background on CLAs:

Want to choose a CLA? Harmony Agreements is a web tool that helps you quickly select a CLA:

Legal disclaimer

I am not a lawyer, and none of the CLAhub documentation, functionality, or other communication constitutes legal advice. Consult your lawyer about contributor agreements for your project.



Register a new app at GitHub to get an OAuth key and secret:


Set up a .env file with your GITHUB_KEY and GITHUB_SECRET. You can also specify an HTTP port for local foreman:


Register for two new GitHub applications, one will be used for project owner signups and one for contributors signups.

You will need to configure the authorization callback URL for each:

This file is .gitignored so it's private.

We use the dotenv gem to provide these variables to the test environment as well.

JavaScript acceptance tests use poltergeist which requires installing PhantomJS. Follow the PhantomJS installation instructions on the poltergeist README.

Getting set up

Install gems and initialize databases:

rake db:create db:migrate db:test:prepare

Run the tests to make sure things are working:


Running the app

Run with Foreman if you like:

foreman start

Or as normal (.env is loaded by dotenv gem):

rails server
rails console


Use SimpleCov to build code coverage:

COVERAGE=true rake


When working on display-heavy features, LiveReload saves valuable keystrokes and time. We use guard-livereload to watch templates and assets and reload when they change.

To take advantage of this:

Development and Webhooks

As part of the app, we sign up to receive GitHub webhooks (HTTP requests to /repo_hook) to be notified when stuff happens to repos we care about. (In particular, we want to know about new pushes so we can assess whether their contributors have agreed to the relevant CLA.)

When you're developing locally, GitHub can't send webhook events to you at localhost:3000, so use a local tunnelling service like ngrok or localtunnel.me.

Then, you should run the Rails server with the HOST environment variable set, like HOST=http://my.fancy.dynamic.host.name rails server, or set it in .env if using foreman. This is read in config/initializers/host.rb

Note that the dynamic hostname you use is saved in the GitHub webhook registrations. If your dynamic hostname changes, you will need to update the webhooks in GitHub so that it knows where to send the requests.


See DEPLOY.md for information on deploying.


See LICENSE for the project license.

The "Clipboard and pencil" graphic used in the homepage logo is licensed from iStockPhoto.com:


The graphic is licensed for a single-seat install and is in use at https://www.clahub.com. It is not licensed for multi-seat use, so any other installations should purchase a separate license or use a different image.