> For the complete documentation index, see [llms.txt](https://canopy-network.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://canopy-network.gitbook.io/docs/app-builder/prerequisites.md).

# Prerequisites

### **What You Need**

#### **1. Go**

The Canopy node binary requires **Go 1.24 or later**. The Go plugin template requires **Go 1.25 or later**. Install the latest stable release to satisfy both.

```shell
# Verify your version
go version
# Expected: go version go1.25.x (or later)
```

If you don't have Go installed, follow the official instructions at [go.dev/doc/install](https://go.dev/doc/install). The recommended approach is to download the tarball and follow the install steps for your OS — avoid package managers like `apt` or `brew` for Go, as they frequently ship outdated versions.

After installing, make sure `~/go/bin` is on your `PATH`. The Canopy binary is installed there by `make build/canopy`.

```shell
# Add to ~/.bashrc or ~/.zshrc if not already present
export PATH="$PATH:$HOME/go/bin"
```

***

#### **2. Git**

You'll need Git to clone the repository. Any recent version works.

```shell
git version
# Expected: git version 2.x.x
```

***

#### **3. Make**

The repo uses a `Makefile` for all build targets. `make` is installed by default on macOS and most Linux distributions.

```shell
make --version
# Expected: GNU Make 3.x or later
```

***

#### **4. protoc and protoc-gen-go (for defining new transaction types)**

You only need these if you are defining new transaction types (which you will be, once you get past the quickstart). You don't need them just to run the default plugin.

Install `protoc` (the Protocol Buffer compiler):

```shell
# macOS
brew install protobuf

# Ubuntu / Debian
apt install -y protobuf-compiler

# Verify
protoc --version
# Expected: libprotoc 3.x or later
```

Install the Go code generator plugin:

```shell
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

# Verify it's on your PATH
protoc-gen-go --version
```

Install the struct tag injector (used by the plugin's `_generate.sh` script):

```shell
go install github.com/favadi/protoc-go-inject-tag@latest
```

***

#### **5. Docker (optional, but recommended for a clean environment)**

The repo ships a Docker setup that handles everything — building the node, running the plugin, and exposing RPC ports. If you'd rather not manage the Go toolchain directly, or want an environment that matches a production deployment, this is the easiest path.

```shell
# Verify Docker is available
docker --version
docker compose version
```

The Docker path is covered as an alternative in the quickstart section. The rest of these docs default to running things locally.

***

### **What You Don't Need**

* A running Ethereum node, Bitcoin node, or any external chain
* A separate database (Canopy uses [Pebble](https://github.com/cockroachdb/pebble), an embedded key-value store, bundled in the binary)
* Solidity or any smart contract tooling
* A validator keystore or staking tokens (local dev mode runs a single-validator chain with a pre-funded genesis account)

***

### **Language-Specific Prerequisites**

The Go plugin template is what these docs use throughout. If you're building with one of the other official templates, here's what you need additionally. The Canopy node setup and the overall plugin lifecycle are identical regardless of language — only the toolchain changes.

| Language       | Additional requirements                                                                |
| -------------- | -------------------------------------------------------------------------------------- |
| **Go**         | Nothing beyond the core prerequisites above                                            |
| **TypeScript** | Node.js 18+, npm, and the TypeScript compiler (`npm install -g typescript`)            |
| **Python**     | Python 3.10+ and pip                                                                   |
| **Kotlin**     | JDK 17+ (the build uses the bundled Gradle wrapper, no separate Gradle install needed) |
| **C#**         | .NET SDK 8.0+                                                                          |

For TypeScript, Python, Kotlin, and C#, the plugin directory for each language includes its own `README.md` and `Makefile` (or equivalent build file) with language-specific build commands. The `make build/plugin PLUGIN=<language>` target in the root Makefile handles compilation for all of them.

***

### **Verify Your Environment**

Run these checks before moving to the quickstart. All five should pass for Go development:

```shell
go version            # go1.25.x or later
git version           # any recent version
make --version        # GNU Make 3.x or later
protoc --version      # libprotoc 3.x or later
protoc-gen-go --version  # v1.x.x
```

If you're building with the TypeScript template instead of Go, also verify:

```shell
node --version     # v18.x or later
npm --version      # any recent version
```

If you're planning to use Docker instead of a local Go install, just verify:

```shell
docker --version
docker compose version
```

***

**Next:** [Chain Quickstart](/docs/app-builder/chain-quickstart.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://canopy-network.gitbook.io/docs/app-builder/prerequisites.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
