Coinbase Logo

Introducing Coinbase Open Source Fund

By Jori Lallo


, February 7, 2018

, 4 min read time

Like many startups, Coinbase got started as a humble Rails project. Ever since the first commit, Coinbase has relied tremendously of open source software to build its systems and products. As we grown over the years, we open sourced bits and pieces of our own work to help others with their projects.

Many of the projects we’re using to build Coinbase need support to continue flourishing, either in the form of code contributions or financial support. Unfortunately, like many fast growing startups, most of our focus has gone into growing and supporting the company. This means that we haven’t had the time and the resources we would have liked to devote to helping the projects we care about.

To give back to the community that got us started, we’re excited to launch the Coinbase Open Source Fund from which we’ll be donating $2500 each month to open source projects.

Specific projects will be selected monthly by the members of Coinbase’s engineering team based on Coinbase’s current and future use. We’ll also consider projects we think benefit to the greater open source community and don’t have a significant corporate sponsor. Each month we’ll post them to our engineering blog and to our open source site. On top of this new financial support, we will continue supporting projects (like Sidekiq!) through paid Pro.


We know how hard maintaining open source projects can be and are excited to see projects like Open Collective get started which are making open source work more sustainable. If you’re looking to support open source work, it has never been easier!

February 2018 Donations

For our first batch, we focused on supporting larger Javascript projects which we’re using across several Coinbase web products, including and

  1. Mobx — $1000

  2. Webpack — $500

  3. Babel — $500

  4. Styled-components — $500

Project highlight: MobX

MobX is designed to enable building web applications with a complex data model in an intuitive and very performant manner. Using React and MobX is currently the simplest way to build component based web applications.

Single page web application state management is notably a hard problem to solve in large projects. Unlike projects like Backbone and Vue, which included their own state management solutions, React ecosystem has gone through a lot of iterations when it comes to state libraries and patterns. While it’s easy to get started with React’s build-in setState, it doesn’t scale well for larger applications and it forces you to bundle your application logic with view logic.

Screenshot of MobX

MobX is a small but full-fledged state library for React applications. Together with its React sister library, mobx-react, it’s almost as easy to as setState to get started with, but it also scales easily to larger applications. Unlike Redux, another popular state management library, which usually is coupled with other libraries to better handle asynchronous API calls and memoized selectors, MobX is very much a “batteries included” solution with a minimal API.

import React from 'react';
import { observable, computed, action } from 'mobx';
import { observer } from 'mobx-react';
class UserStore {
@observable firstName;
@observable lastName;
@observable isLoading = false;
@observable error;
get fullName() {
return `${this.firstName} ${this.lastName}`;
fetchUserData = async () => {
this.isLoading = true;
try {
const res = await fetch('/api/user');
const data = await res.json();
this.firstName = data.firstName;
this.lastName = data.lastName;
} catch (e) {
this.error = e.message;
this.isLoading = false;
class UserComponent extends React.Component {
constructor(props) {
super(props); = new UserStore();
componentDidMount() {;
render() {
return (
{ && (
<div>Error loading user: ({})</div>
{ ? (
<div>Loading user...</div>
) : (
<div>User: {}</div>

view rawmobx-example.js hosted with ❤ by GitHub

Example code above includes a simple React component with separated state store, which fetches data from an external API, shows a loading indicator and handles errors. Thanks to observer, component is updated automatically after state values are updated and computed memorizes derived values automatically. While not part of the current Javascript spec, using decorators is a common pattern in MobX applications to reduce boilerplate and make the code more readable.

Both Coinbase and GDAX have been using MobX in production for over a year at this point and it has proven to be extremely stable and reliable. Thanks to its simplicity, getting new developers onboarded to the codebase is easy and fast.

MobX was created by Michel Weststrate, a Javascript developer living in The Netherlands, who still leads and maintains the project. Originally published in 2015, there has since been 149 releases to the project and its currently on v3. Next major release, v4, is currently under active development.

Michel still accounts for the majority of the code contributions to the core library but majority of the new development is done on mobx-state-tree package, which is a more opinionated state container build on top of core MobX library. If you’re looking for a simple state manager, it’s worth a look.

Thanks for all the hard work Michel and other contributors have put into MobX. It has helped us build products faster and help Coinbase scale. We can’t wait to share more project highlights in the coming months!

* * *

The links in this blog post are being provided as a convenience and for informational purposes only; they do not constitute an endorsement or an approval by Coinbase of any of the content or views expressed by or on any external site. Coinbase bears no responsibility for the accuracy, legality or content of the external site or for that of subsequent links. Contact the external site for answers to questions regarding its content.

Thanks to Jesse Pollak and Shane da Silva

Coinbase logo