TL;DR — working with Ethereum wallets during dApp development just got a little bit easier: Purser is now open-source on GitHub!

While working on Colony’s dApp reference client, I realized that building Ethereum applications is hard.

Part of the difficulty is just the decentralized paradigm: We want every component of our dApp to be actually decentralized™ — which means no reliance on a server somewhere that could, conceivably, be shut down or taken over by malicious actors. I wrote about some of these difficulties in my previous post on securing local storage for dApps.

The other significant challenge of building applications for Ethereum is the simple fact that all this stuff is really new, and tooling has a long way to go.

For example, we want our dApp to support a variety of Ethereum wallets access methods, including seed words, keystore files, and private keys. We also want to enable access via browser plugin like Metamask, and hardware wallets like the Ledger and Trezor. While working on wallet support for the Colony dApp, I felt it would have been really great to have a single library that aggregated all of these wallet types together in a standard, predictable object to work with, but such a tool did not exist.… So I made it :)

Rather than building the support we needed directly into the dApp, we decided it was better keep it separate as a standalone open-source library. This way, others out there looking for a wallet integration solution won’t have to start from scratch.

I present to you “Purser” — a developer’s toolkit for working with Ethereum wallets. Purser is responsible for handling the administration of all accounts in a dApp, and when imported to a project, standardizes all wallet types to a single wallet object that’s easy to work with.

Purser supports seed phrases, keystore files and private keys. It also brings in support for the Trezor and Ledger hardware wallets, and it plays nice with Metamask. All are brought together as a simple, predictable interface that requires almost no setup, and which is entirely asynchronous (read: good for blockchains and dApps).

These first wallet types are what we need for the dApp at this time, but now that Purser is an open-source tool accepting contributions, we hope that it’ll grow to become a universal tool for all wallet types.

If you’re an Ethereum developer looking for a way to painlessly import Ethereum wallets into your project, I invite you to try out Purser for your dApp.

To install Purser, add it to your project using yarn or npm. You can read more about Purser’s features and API in the colony open-source docs. If you discover any bugs or want to build a new feature, please contribute on Github!


Raul is a Javascript developer who spends most of his time in a terminal emulator.

For the past decade he’s been working in the tech industry doing sysadmin work, back-end development and even some electronics.

When not writing code at Colony he pursues his passion for flying.


If you have any feedback or stories to share, reach out to us on Twitter.

Colony is a platform for open organizations.

Join the discussion on Discourse, follow us on Twitter, sign up for (occasional) email updates, or if you’re feeling old-skool, drop us an email.