scaffold-project
npx skills add https://github.com/iskysun96/aptos-agent-skills --skill scaffold-project
Agent 安装分布
Skill 文档
Scaffold Project Skill
Overview
This skill creates new Aptos dApp projects by bootstrapping directly from official templates using degit. This
approach provides clean copies of production-ready templates without git history.
Project Types
| Type | Template | Use Case |
|---|---|---|
| Fullstack dApp | boilerplate-template |
Frontend + smart contracts |
| Contract-only | contract-boilerplate-template |
Smart contracts without frontend |
Fullstack dApp Scaffolding
Step 1: Bootstrap with degit
# Bootstrap fullstack template (no git history)
npx degit aptos-labs/create-aptos-dapp/templates/boilerplate-template my-dapp
cd my-dapp
Note: The degit command references a specific template path in the aptos-labs/create-aptos-dapp repository. If you encounter errors, verify the template path exists at https://github.com/aptos-labs/create-aptos-dapp/tree/main/templates
Step 2: Configure Environment
Create .env file with the following variables:
# Create .env file
cat > .env << 'EOF'
PROJECT_NAME=my-dapp
VITE_APP_NETWORK=devnet
VITE_APTOS_API_KEY=""
VITE_MODULE_PUBLISHER_ACCOUNT_ADDRESS=
# This is the module publisher account's private key.
# Be cautious about who you share it with, and ensure it is not exposed when deploying your dApp.
VITE_MODULE_PUBLISHER_ACCOUNT_PRIVATE_KEY=
EOF
Configure the values:
PROJECT_NAME– Your project nameVITE_APP_NETWORK– Network to use (devnet,testnet, ormainnet)VITE_APTOS_API_KEY– Optional API key from Aptos LabsVITE_MODULE_PUBLISHER_ACCOUNT_ADDRESS– Your deployer account address (set afteraptos init)VITE_MODULE_PUBLISHER_ACCOUNT_PRIVATE_KEY– Your deployer private key (from~/.aptos/config.yaml)
â ï¸ CRITICAL: Ensure .env is in .gitignore:
# Verify .env is gitignored (should already be there)
grep -q "^\.env$" .gitignore || echo ".env" >> .gitignore
Step 3: Update Move.toml
Edit contract/Move.toml with your project name:
[package]
name = "my_dapp" # Your project name
version = "1.0.0"
authors = []
[addresses]
my_dapp_addr = "_" # Will be set during deployment
[dev-addresses]
my_dapp_addr = "0xCAFE" # For testing
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-framework.git", rev = "mainnet", subdir = "aptos-framework" }
Step 4: Install Dependencies
npm install
Step 5: Initialize Git
git init
git add .
git commit -m "Initial commit: Bootstrap Aptos dApp from boilerplate template"
Step 6: Verify Setup
# Compile Move contracts
npm run move:compile
# Run Move tests
npm run move:test
# Start frontend development server
npm run dev
Fullstack Project Structure
my-dapp/
âââ frontend/
â âââ components/ # React UI components
â âââ entry-functions/ # Write operations (transactions)
â âââ view-functions/ # Read operations (queries)
â âââ lib/ # Shared libraries (wallet, aptos client)
â âââ utils/ # Helpers
â âââ App.tsx
â âââ constants.ts
â âââ main.tsx
âââ contract/
â âââ sources/ # Move modules
â âââ tests/ # Move tests
â âââ Move.toml
âââ scripts/move/ # Deployment scripts
âââ package.json # npm scripts for move:compile, move:test, etc.
âââ .env # Environment variables (NEVER commit!)
âââ .gitignore # Must include .env
âââ [config files] # vite, tailwind, typescript, etc.
Key Directories Explained
| Directory | Purpose |
|---|---|
frontend/entry-functions/ |
Transaction payloads for write operations |
frontend/view-functions/ |
Queries for read operations |
frontend/lib/ |
Aptos client and wallet provider setup |
contract/sources/ |
Move smart contract modules |
scripts/move/ |
Deployment and utility scripts |
Contract-Only Scaffolding
Step 1: Bootstrap with degit
# Bootstrap contract-only template
npx degit aptos-labs/create-aptos-dapp/templates/contract-boilerplate-template my-contract
cd my-contract
Step 2: Configure Environment
Create .env file with the following variables:
# Create .env file
cat > .env << 'EOF'
PROJECT_NAME=my-contract
VITE_APP_NETWORK=devnet
VITE_APTOS_API_KEY=""
VITE_MODULE_PUBLISHER_ACCOUNT_ADDRESS=
# This is the module publisher account's private key.
# Be cautious about who you share it with, and ensure it is not exposed when deploying your dApp.
VITE_MODULE_PUBLISHER_ACCOUNT_PRIVATE_KEY=
EOF
# Ensure .env is gitignored
grep -q "^\.env$" .gitignore || echo ".env" >> .gitignore
Step 3: Update Move.toml
Edit contract/Move.toml:
[package]
name = "my_contract"
version = "1.0.0"
[addresses]
my_contract_addr = "_"
[dev-addresses]
my_contract_addr = "0xCAFE"
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-framework.git", rev = "mainnet", subdir = "aptos-framework" }
Step 4: Install & Verify
npm install
# Compile
npm run move:compile
# Test
npm run move:test
Step 5: Initialize Git
git init
git add .
git commit -m "Initial commit: Bootstrap Aptos contract from template"
Contract-Only Project Structure
my-contract/
âââ contract/
â âââ sources/ # Move modules
â âââ tests/ # Move tests
â âââ Move.toml
âââ scripts/move/ # Deployment scripts
âââ package.json # npm scripts
âââ .env # Environment variables (NEVER commit!)
âââ .gitignore # Must include .env
Available npm Scripts
Both templates include these npm scripts:
# Move development
npm run move:compile # Compile Move contracts
npm run move:test # Run Move tests
npm run move:publish # Publish to network (uses .env)
# Fullstack only
npm run dev # Start frontend dev server
npm run build # Build for production
Alternative: Manual Move-Only Setup
For pure Move development without the npm wrapper, use aptos move init:
# Initialize Move project
aptos move init --name my_module
# Configure Move.toml manually
# Create sources/ and tests/ directories
See the “Move-Only Reference” section below for detailed manual setup.
Quick Reference Commands
Fullstack dApp (Recommended)
# Bootstrap and setup
npx degit aptos-labs/create-aptos-dapp/templates/boilerplate-template my-dapp
cd my-dapp
npm install
git init
# Then create .env manually (see Step 2 above) - NEVER commit .env!
Contract-Only
# Bootstrap and setup
npx degit aptos-labs/create-aptos-dapp/templates/contract-boilerplate-template my-contract
cd my-contract
npm install
git init
# Then create .env manually (see Step 2 above) - NEVER commit .env!
Post-Scaffolding Checklist
After bootstrapping, complete these steps:
- Create
.envfile with required variables (see Step 2) - Verify
.envis in.gitignore - Update
Move.tomlwith project name and address alias - Run
aptos initto create deployer account - Add account address and private key to
.env - Verify compilation:
npm run move:compile - Verify tests pass:
npm run move:test - Initialize git repository
- (Fullstack) Verify frontend runs:
npm run dev
â ï¸ Before committing: Double-check that .env is NOT staged (git status)
Move-Only Reference (Manual Setup)
For cases where you need manual Move setup without templates:
Initialize
aptos move init --name my_module
Configure Move.toml
[package]
name = "my_module"
version = "1.0.0"
[addresses]
my_addr = "_"
[dev-addresses]
my_addr = "0xCAFE"
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-framework.git", rev = "mainnet", subdir = "aptos-framework" }
Create Module
// sources/main.move
module my_addr::main {
use std::signer;
struct Counter has key {
value: u64
}
public entry fun init_counter(account: &signer) {
move_to(account, Counter { value: 0 });
}
public entry fun increment(account: &signer) acquires Counter {
let counter = borrow_global_mut<Counter>(signer::address_of(account));
counter.value = counter.value + 1;
}
}
Verify
aptos move compile
aptos move test
ALWAYS Rules
- â
ALWAYS use
degitfor bootstrapping (clean copy, no git history) - â ALWAYS use the boilerplate-template for fullstack dApps
- â ALWAYS update Move.toml with your project name and address alias
- â
ALWAYS create
.envfile with required environment variables - â
ALWAYS ensure
.envis listed in.gitignore - â
ALWAYS run
npm installafter bootstrapping - â ALWAYS verify compilation and tests pass
- â ALWAYS initialize git after setup
- â ALWAYS use named addresses (myaddr = ““)
NEVER Rules
- â NEVER commit
.envto git (contains private keys!) - â NEVER push
.envto GitHub or any remote repository - â NEVER share your
VITE_MODULE_PUBLISHER_ACCOUNT_PRIVATE_KEY - â NEVER skip Move.toml configuration
- â NEVER use hardcoded addresses in code
- â NEVER skip verifying compilation after scaffolding
- â NEVER read
.envfiles after creation â to verify existence, usels -la .envnotcat .env - â NEVER display
VITE_MODULE_PUBLISHER_ACCOUNT_PRIVATE_KEYvalues in responses - â NEVER run
git add .orgit add -Auntil.gitignorecontains.envâ always verify first
Template Sources
References
Official Documentation:
- CLI Reference: https://aptos.dev/build/cli
- Move.toml: https://aptos.dev/build/cli/working-with-move-contracts
- TypeScript SDK: https://aptos.dev/sdks/ts-sdk
Related Skills:
write-contracts– Write Move modules after scaffoldinggenerate-tests– Create test suiteconnect-contract-to-frontend– Wire up frontend to contractsintegrate-wallet-adapter– Add wallet connection
Remember: Use degit for clean bootstrapping. The boilerplate template provides the best starting point for custom
dApps.