bundle thank-you - a donation system for ruby gems (and other package managers)

Nearly two years ago I’ve experimented with the idea of using bitcoin payments to tip open source projects. The idea is to analyze the dependencies of a project (by parsing the bundler Gemfile or npm package.json), extract donation information and send a “thank you” to these projects. 

Bitcoin is the perfect protocol for this. We can directly transfer value and do not need any intermediary. The projects and users do not have to agree on a service provider (like paypal or patreon), no signup es required. It is implemented on a protocol level and not as a tool/service.

As a demo I had created a small video showing the interaction and user flow:

How does it work?

Thanks to the nature of Bitcoin transactions it is possible (and even encouraged) to send one transaction to multiple recipients (outputs).

bundle-thankyou analyzes the dependencies from the package manger file (Gemfile, package.json,...) and gathers the recipient addresses from the locally installed gems - thus no need for a central directory or similar.
Then we the user is asked how much should be paid and a single transaction is created and published. Done.

Obviously one could envision any fancy user interface and features to do that.

What the author needs to do:

The gem author adds a Bitcoin address to the gemspec (in the metadata field).
That’s all the author has to do.

Because the address is in the gemspec we can be sure it is the address the author/maintainer wants the money to go to.

The author could also decide to dedicate the donations to somebody else. For example the rails gems could say thankyous should go to RailsGirls or similar projects.

What the user has to do:

Use this tool and basically run bundle thankyou and pay the desired amount. The amount will automatically be split among all the used gems.

With Bitcoin becoming more and more popular it also gets easier for people to start using it. And it would also be possible to create a service on top of this “standard” that allows users to pay with credit cards and handles the bitcoin payments.

Advantages

  • No signup whatsover
  • User and maintainer do not need to agree on a service (like paypal) to perform the transaction
  • No central directories and services
  • Based on existing tools (rubygems, npm, etc.)
  • Implemented on a "standard/protocol level" - additional service can be built and integrated. (like any existing bitcoin services, subscriptions, etc.)
  • Works internationally (not everybody has a credit card or can have a paypal account)
  • One transaction for multiple recipients
  • Usable in the moment where the user interacts with the gems (in the terminal running a bundle command)

Questions:

Why Bitcoin?
It is probably the most broadly adopted solution. But any other cryptocurrency would be possible.

But I want to pay with credit card (or whatever else)
Bitcoin is used as a method/"protocol" to transfer value.

We could provide additional service (for both user and project maintainer separately) to better fit their needs - for example different payment methods, subscriptions, etc. For example card payments could be easily possible with services like Coinbase.

But I want to receive payments on my credit card
Again Bitcoin is the "protocol". There are already plenty tools out there that for example give you a visa/master card for spending the received bitcoins. Or bank transfers, or m-pesa mobile money payments, or....

A comment about money

I am very critical about the human perception of the "payment". I do not want it to feel like I've "paid" somebody for something.
The tone/message is super important and it should not be "payment" but a way of saying "thank you"... thus bundle thankyou.