What's up with Heavy Duty Builders and Bulldozer.
Tags: blockchain, web3, solana, devtools
Published: 2021-10-15 19:44:40

![Screenshot of bulldozer in action](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vyuae27hko30oz8m5haw.png)

TLDR;

Heavy Duty Builders is looking to become a DAO of Solana builders that creates open-source tools. Bulldozer is the first tool, a low-code platform to create Anchor-based programs in Solana.

## Intro

Building software is hard af. I mean it, it really is. That's why we, as builders too, are committed to creating the dopest power tools so other builders can focus on what matters, their projects.

Heavy Duty Builders aims to become a DAO, where developers can join and help build the tools of the future. Bulldozer is our first tool, a low-code platform for creating Anchor workspaces in Solana.

We're not VC funded. Right now, we're just two builders working on Bulldozer. We're still on the first stages, but we have been getting a good response from the community. We've noticed other builders interested in a tool such as Bulldozer.

We want to stay open source and that's why we want to be a DAO. One of our top priorities is to figure out a way to give rewards for issues and features, maybe an NFT-powered medal system. This way builders can use medals as proof that they are not just any other builder, they are Heavy Duty Builders.

There's a lot to figure out. But we'll keep y'all posted.

Now if you're a builder and want to read a bit more about the nitty-gritty details behind Bulldozer, keep reading.

## Overview

The system aims to make it easier for developers to write Solana programs. A program is some code that processes transactions in Solana runtime. For web2 developers, that's like a serverless cloud function. 

This is how I see it, when you configure an instruction in Solana, more specifically with Anchor, you define how this "cloud function" will behave when called. There's way more to it, but that's a simplification I like to use.

### Instruction

Bulldozer enables builders to configure an instruction through a client. The declarative nature of Anchor made it possible to create this configuration tool in a short time. Instructions take arguments that you can define in Bulldozer, and also, they take Accounts. 

An account is, well, a very important concept you must know, but let's see it as a "file" that lives in Solana. Solana programs are stateless, meaning that when you want to use an account's data inside a program, you need to provide the account to the instruction when calling it.

But no worries, Bulldozer lets you specify the accounts. 

There's also a very simple code editor that allows you to create the body of your instruction's handler.

### Collection

Accounts in Solana have data that you have to de-serialize to use. You can think of a collection as the "schema" of your account. Bulldozer allows builders to create collections and add attributes.

### Applications

An application maps to a Solana program, it consolidates a set of instructions and makes them available to the program.

### Workspace

It's common to have applications that need to communicate with each other, in that case, it's good if they all live together. A workspace gives builders the chance of grouping their applications.

All the information is stored on-chain. We want to give builders the ability to collaborate in real-time powered by Solana. Although, this isn't a feature yet, we have an idea of how to approach it with Anchor events and subscriptions.

## Architecture

We decided to go for a monorepo because we're planning to keep adding more tools. We chose Nx for managing the monorepo, it's not fully integrated with Rust build system which is kinda PITA, and that's something we're looking forward to fixing.

Since we're generating Anchor based programs, we went the same road with our code. As of now, there's a single program to do it all, but we're open to the idea of splitting it into multiple subprograms. 

The client is built using Angular. I know it's weird to see a Dapp without React, but who knew, right? It's actually doable! It uses the @solana/wallet-adapter library for connecting to wallets. The @project-serum/anchor TS library powers all the requests to Solana.

## Status

There's a CRUD for applications, collections, collection attributes, instructions, instruction arguments, instruction accounts, and instruction relations. The UI can perform all the management operations.

So far, we covered some Anchor features. We have a list of features we want to add ASAP. Improving the template engine is one of our top priorities, as well, as hiding some gory details when creating attributes and arguments.

The code is open source, so you can also go there and take a look at it yourself. You can find the [code for bulldozer here](https://github.com/heavy-duty/platform)

## What's next

We're planning on working full-time in Bulldozer and see how far it can go. We already have a roadmap of what want to achieve:

- Manage workspace and allow grouping of applications.
- Improve Anchor integrations.
- Enable real-time updates through events.
- Enhance usability across the whole process.
- Improve template engine.
- Set up continuous integration for internal development.
- Git integration for versioning of workspaces.
- CLI to list, build and deploy workspaces and applications.
- Plugin-support for community utilities.
- Cross program invocation between applications in a workspace.

Thanks for reading, if you want to stay tuned, [follow us on Twitter](https://twitter.com/notifications) or [join the Discord](https://discord.gg/Ej47EUAj4u). You can also [subscribe to our mailing list](https://heavyduty.builders/).

Peace.