Development
This section is for contributing to Orchard’s source code: running it from a clone, making changes, and testing them. It is separate from the Install guide, which is for operators running a released build against their own services.
What Orchard is built from
Section titled “What Orchard is built from”Orchard is a monorepo with the client and server in their own directories:
| Part | Location | Stack |
|---|---|---|
| Client | src/client | Angular, Angular Material |
| Server | src/server | NestJS, GraphQL (Apollo) |
| Shared | src/shared | GraphQL types generated from the server schema |
The server stores its data with TypeORM in an SQLite database.
Prerequisites
Section titled “Prerequisites”- Node.js v22 (the version pinned in
.nvmrc), which includes npm. - git, to clone the repository.
- Docker with the Compose plugin, for the end-to-end tests.
- Bitcoin full node for the Oracle and end-to-end tests.
- Bitcoin, Lightning, and Cashu Mint on regtest for local development. Polar is useful for setting up a regtest environment.
- Ollama for the AI development and end-to-end tests.
Contributing changes
Section titled “Contributing changes”-
Fork
cashubtc/orchardon GitHub, then clone your fork:Terminal window git clone https://github.com/<you>/orchard.gitcd orchard -
Add the canonical repository as
upstreamso you can keep your fork in sync:Terminal window git remote add upstream https://github.com/cashubtc/orchard.git -
Create a branch for your change:
Terminal window git checkout -b my-change -
Make your changes and run the tests and checks before pushing.
-
Push to your fork and open a pull request against
cashubtc/orchard:Terminal window git push -u origin my-change
Updating your fork
Section titled “Updating your fork”Before starting new work, pull in the latest changes so your branch stays current:
git fetch upstreamgit rebase upstream/masterNew to the codebase? Running Locally walks through getting Orchard running from source.
In this section
Section titled “In this section”Development Development
Last updated: