Towards a mature ecosystem of Ethereum developer tools
Buidler: helping Ethereum one tool at a time.
For any developer that’s experienced developing smart contracts for Ethereum, it should be clear that as a development platform it’s still in its infancy and it needs a lot of work to catch up.
From our perspective the current development tools are unreliable, rigid and not very extensible. The effect this has had in the code that’s been published isn’t unpredictable: a lot of fragmentation and waste through duplicated efforts. This prevents the investment each project is putting into building tools from compounding within the ecosystem through deeper open source re-use.
We’re aiming to unlock value and productivity through flexibility, interoperability, and standardization.
Smart contracts are a component of a system that works in unison. Most significant software projects end up with the need to write ad-hoc tooling to cover the specific needs of working on these systems. Testing, compiling and deploying Solidity code are only a fraction of those needs. Bindings, linting, continuous integration and style checks are some examples that fall outside this basic scope.
Buidler addresses this reality by providing a task runner and opening up its internal infrastructure (config, Ethereum connector, command line interface, etc) to be used at will.
Buidler has been inspired by tools from other platforms, such as Gradle, Gulp and Webpack, which are too tied to their own platforms to serve Ethereum well. Like these projects, Buidler will have a plugin system that allows other tools to be easily integrated into a development cycle.
With wide adoption, Buidler would provide a standard interface to interact with Ethereum dev tools in the same way that most modern Java dev tools can be interacted with by knowing how to use Gradle.
Today most Ethereum projects are tied to rigid frameworks like Truffle, where putting together a development tool generally means it will run through an ad-hoc script that users don’t know how to use without documentation. Building it as a Buidler task would allow for smoother usage, integration and adoption of such tools.
Developers will be able to hook into or even completely replace the existing default tasks, so for example you could generate TypeScript bindings for your contracts whenever you run
buidler compile. This reduces the friction of incorporating these kind of tools significantly, and thus increases the incentive to build them. We want to lower the barrier to entry, while at the same time raise the bar when it comes to quality and usability.
Focusing on building out a small extensible core will allow us to have high standards when it comes to its quality.
We thought through what impact we would like to have through Buidler, and we came up with a definition for the maturity of a developer tools ecosystem.
At Nomic Labs we believe that a mature ecosystem of dev tools is:
Diverse — there should be many tools that do different things, with some redundancy around different approaches.
Interoperable — these tools should be compatible and leverage each other.
Dependable — developers should be able to trust the tools they use to be reliable, stable and maintainable.
Extensible — it should be possible to extend the basic functionality that tools provide, as well as use them as platforms to build smaller, more specific tools on top.
Accessible — there should be thorough and friendly documentation, alongside clear avenues to ask for help.
We aim to help Ethereum improve on these qualities by raising the bar on what a developer tool should be like. The first step was launching an alpha version of Buidler during ETHBuenosAires, and now with the funding the Ethereum Foundation is providing us we’re working towards the first stable release.
Get a high-quality smart contract audit from Nomic Labs.