scaffold-project
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.