Prerequisites
Before you begin, ensure you have the following installed:Node.js >=22.6
Snapshot X requires Node.js version 22.6 or higher.If you need to upgrade, download from nodejs.org or use a version manager like nvm.
Docker
Docker is required for running local backend services (API and Mana).Download from docker.com if not installed.
Clone the Repository
Clone the Snapshot X monorepo from GitHub:Install Dependencies
Install all dependencies across the monorepo:The monorepo uses Turborepo for task orchestration, allowing efficient parallel builds and caching.
Project Structure
The monorepo is organized into apps and packages:Apps
| Directory | Description |
|---|---|
apps/ui | Vue 3 frontend for Snapshot |
apps/api | Apollo GraphQL server + Checkpoint blockchain indexer |
apps/mana | Express transaction relayer for gasless voting |
apps/highlight | Highlight integration app |
Packages
| Directory | Description |
|---|---|
packages/sx.js | Shared TypeScript SDK (published as @snapshot-labs/sx) |
Other Directories
scripts/- Monorepo development scriptstests/- E2E tests using Playwrightdocs/- Documentation for common patterns
Architecture Overview
Understanding the architecture helps when developing: UI (Vue 3) → Queries API via GraphQL for governance data, submits transactions to Mana via JSON-RPC. API (Apollo + Checkpoint) → Indexes governance events from EVM, Starknet, and offchain. Serves unified GraphQL for spaces, proposals, votes, and users. Supports Snapshot X, Compound Governor, and OpenZeppelin Governor. Mana (Express) → Relays transactions for gasless voting, handles cross-chain execution (L1↔L2), manages relayer wallets and automated proposal execution. SX.js → Shared SDK used by all services for signing and blockchain interactions.External Services
- snapshot-hub - API and data store for offchain Snapshot spaces
- snapshot-sequencer - Receives signed messages for offchain votes and proposals
Tooling
The monorepo uses:- Turborepo - Task orchestration and caching
- ESLint - Code linting with
@snapshot-labsconfig - Prettier - Code formatting with
@snapshot-labs/prettier-config - TypeScript - Type checking across all packages
Next Steps
Now that your environment is set up:- Run the development services
- Learn about contributing to the project
- Explore the SDK overview