scaffold-project

SKILL.md

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.

Weekly Installs
15
GitHub Stars
10
First Seen
Feb 5, 2026
Installed on
opencode13
gemini-cli13
github-copilot13
codex13
amp13
kimi-cli13