Council-Kit
Council kit is the complete toolkit for scaffolding your own DAO using the council protocol. This repository is designed to be forkable for your own council protocol variant.
Get started with the Docs.
Requires Node 14+
.
What's inside?
This monorepo uses Yarn as a package manager. It includes the following packages/apps:
Apps
Name | Description |
---|---|
council-ui | A reference user interface built with NextJS and using the SDK. |
council-sdk-starter | A boilerplate TypeScript project that uses the SDK. |
Packages
Name | Description |
---|---|
council-sdk | A TypeScript SDK for interfacing with the Council protocol. |
council-deploy | A template for deploying council contracts on Goerli. |
council-typechain | Type classes generated from the council protocol contracts using Typechain. |
Utility Packages
Name | Description |
---|---|
eslint-config | Package for static type checking. |
prettier-config | Package for code formatting. |
tsconfig | Package for TypeScript configuation. |
Each package/app is 100% TypeScript.
Monorepo commands
Build
To build all apps and packages, run the following command:
yarn build
# build only packages (useful for app development)
yarn build:packages
Develop
To run the development server for all apps, run the following command:
yarn dev
Linting
To run linting on all apps and packages, run the following command:
yarn lint
Formatting
To run formatting on all apps and packages, run the following command:
yarn format:check
# write formatting changes to files
yarn format
Development
- Clone the repo:
git clone git@github.com:delvtech/council-kit.git
- Run
yarn
at the top-level to install all packages across every workspace
Installing new packages
Here are a few examples of how to install packages in this repo:
# Install prettier for the top-level package.json, useful for tooling that
# runs against the entire monorepo
yarn add prettier
# Install lodash for the packages/council-sdk workspace.
# Note: specify the workspace by the name in its `package.json`, ie: `@council/sdk` not `council-sdk`
yarn workspace @council/sdk add lodash
Installing a workspace package
To install a project from the packages/ directory as a dependency, copy it
directly into your app package.json like this, then run yarn
.
{
"dependencies": {
"@council/sdk": "*",
"@council/typechain": "*"
}
}
Running workspace scripts
To run scripts in workspaces, use the following command:
yarn workspace <workspace-name> <package.json script>
Example
yarn workspace council-ui start
Turborepo
This package uses the turborepo monorepo framework. Turborepo provides additional features compared to a plain monorepo such as local/remote command caching and parallel npm script execution.
Remote Caching
Turborepo can use a technique known as Remote Caching to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can create one, then enter the following commands:
cd my-turborepo
npx turbo login
This will authenticate the Turborepo CLI with your Vercel account.
Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your turborepo:
npx turbo link
Resources
Learn more about the power of Turborepo: