scaffold-project

📁 iskysun96/aptos-agent-skills 📅 8 days ago
11
总安装量
5
周安装量
#27272
全站排名
安装命令
npx skills add https://github.com/iskysun96/aptos-agent-skills --skill scaffold-project

Agent 安装分布

amp 4
opencode 4
kimi-cli 4
codex 4
github-copilot 4
gemini-cli 4

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 name
  • VITE_APP_NETWORK – Network to use (devnet, testnet, or mainnet)
  • VITE_APTOS_API_KEY – Optional API key from Aptos Labs
  • VITE_MODULE_PUBLISHER_ACCOUNT_ADDRESS – Your deployer account address (set after aptos 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 .env file with required variables (see Step 2)
  • Verify .env is in .gitignore
  • Update Move.toml with project name and address alias
  • Run aptos init to 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 degit for 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 .env file with required environment variables
  • ✅ ALWAYS ensure .env is listed in .gitignore
  • ✅ ALWAYS run npm install after bootstrapping
  • ✅ ALWAYS verify compilation and tests pass
  • ✅ ALWAYS initialize git after setup
  • ✅ ALWAYS use named addresses (myaddr = ““)

NEVER Rules

  • ❌ NEVER commit .env to git (contains private keys!)
  • ❌ NEVER push .env to 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 .env files after creation — to verify existence, use ls -la .env not cat .env
  • ❌ NEVER display VITE_MODULE_PUBLISHER_ACCOUNT_PRIVATE_KEY values in responses
  • ❌ NEVER run git add . or git add -A until .gitignore contains .env — always verify first

Template Sources

Template GitHub URL
Fullstack https://github.com/aptos-labs/create-aptos-dapp/tree/main/templates/boilerplate-template
Contract-only https://github.com/aptos-labs/create-aptos-dapp/tree/main/templates/contract-boilerplate-template

References

Official Documentation:

Related Skills:

  • write-contracts – Write Move modules after scaffolding
  • generate-tests – Create test suite
  • connect-contract-to-frontend – Wire up frontend to contracts
  • integrate-wallet-adapter – Add wallet connection

Remember: Use degit for clean bootstrapping. The boilerplate template provides the best starting point for custom dApps.