Contributing

Contributing code to advance HASH


Introduction

HASH has been in continuous development since January 2019 and the core application consists of more than a million human-written lines of code (about half of which are Rust), contributed by more than 50 engineers. To make this manageable we enforce strict rules in our codebase that ensure consistency and quality, enabling predictability when working with HASH's code.

Whilst HASH's external interfaces will always be versioned and supported, its internals may change regularly, significantly, and without prior warning. Contributing from outside the core team is therefore not currently as streamlined as we would like, but doing so can be a great way to familiarize yourself with the platform's workings, and the decisions that have influenced its architecture.

Codebase Overview

The HASH codebase can be found on GitHub and is divided up into several key sections:

  • /apps contains the primary code powering our runnable applications
  • /blocks contains our public Block Protocol blocks
  • /infra houses deployment scripts, utilities and other infrastructure useful in running our apps
  • /libs contains libraries of shared code which multiple apps rely on, including npm packages and Rust crates
  • /tests contains end-to-end and integration tests that span across one or more apps, blocks or libs

A lot of our code, and all newly written or updated JavaScript files, are structured fractally. You'll need to follow this pattern when contributing.

Dictionary of Terms

In addition to familiarizing yourself with the user-facing core concepts found in HASH, we also maintain a separate dictionary of terms for codebase contributors, to help you find your way around the application's internals, and to ensure we're all using the same language to refer to the same things. The developer dictionary should be understood in addition to the user-facing list of core concepts as it refrains from duplicatively defining things already explained there.

Get Involved

If you would like to help out developing HASH, contact us, and/or check out the contributing guide in GitHub.

Join our community of HASH developers