| name | web3-devkit-cli |
| description | Bootstrap dApps, generate smart contracts, manage wallets, test RPCs, deploy contracts, and monitor on-chain activity for EVM and Solana blockchains. |
| triggers | ["scaffold a new web3 project","generate an ERC20 token contract","check wallet balance on blockchain","test RPC connection for ethereum","deploy smart contract to base network","monitor on-chain events for wallet","create new blockchain wallet","add wagmi integration to frontend"] |
Web3 DevKit CLI
Skill by ara.so — Devtools Skills collection.
Web3 DevKit is an open-source CLI for EVM and Solana developers. It helps bootstrap projects, generate smart contracts, manage wallets, test RPCs, deploy contracts, and monitor on-chain activity across multiple blockchain networks.
Installation
npm install -g web3-devkit-cli
Or run locally in a cloned repository:
git clone https://github.com/jazzband/web3-devkit-cli.git
cd web3-devkit-cli
npm install
npm run build
npm link
Run without linking:
npm run web3 -- <command>
Core Commands
Project Bootstrap
Initialize new blockchain projects with curated templates:
web3 init
web3 init evm
web3 init solana
web3 init fullstack
Available templates:
evm-foundry - Foundry (Solidity, Forge, Cast)
evm-hardhat - Hardhat + TypeScript
solana-anchor - Anchor program workspace
nextjs-wagmi - Next.js + wagmi (EVM frontend)
nextjs-solana-wallet - Next.js + Solana wallet adapter
fullstack-evm - Foundry contracts + Next.js + API
fullstack-solana - Anchor + Next.js + API
Contract Generation
Generate smart contracts and programs from boilerplate:
web3 generate token -c evm -v erc20 -n MyToken -y
web3 generate nft -c evm -v erc721 -n MyNFT -o ./contracts -y
web3 generate vault -c solana -v escrow-anchor -n MyEscrow -y
Generation categories:
token - ERC20, SPL tokens
nft - ERC721, ERC1155, Metaplex NFTs
staking - Staking contracts/programs
vault - Escrow, vaults, safes
prediction-market - Prediction market logic
Flags:
-c, --chain - Chain type: evm or solana
-v, --variant - Template variant (e.g., erc20, erc721)
-n, --name - Contract/program name
-o, --output - Output directory (default: ./contracts)
-y, --yes - Skip confirmation prompts
Wallet Management
Create wallets, check balances, and inspect tokens:
web3 wallet create --chain evm
web3 wallet create --chain solana
web3 wallet balance -n base -a 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
web3 wallet tokens -n ethereum -a 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb
Supported networks:
- EVM: ethereum, base, arbitrum, polygon, bsc, avalanche
- Solana: mainnet-beta, devnet, testnet
RPC & Network Testing
Validate RPC connectivity and check network status:
web3 rpc test -n base
web3 rpc test -n arbitrum
web3 rpc test -n solana
web3 network check -n ethereum
Contract Deployment
Deploy contracts and programs with gas estimation:
web3 deploy evm -n base --estimate
web3 deploy evm -n base -y
web3 deploy solana -n devnet -y
web3 deploy history
web3 verify -n base -a 0xContractAddress -c MyToken
Deployments are stored in .web3-devkit/deployments/ with network, address, and timestamp.
Event Monitoring
Monitor on-chain activity in real-time:
web3 monitor contract -a 0xContractAddress -e Transfer -n base
web3 monitor wallet -a 0xYourWallet -n ethereum
web3 monitor token -a 0xTokenAddress -w 0xWalletAddress -n base
Frontend Integration
Add wallet providers and chain configurations to Next.js projects:
web3 add wagmi -y
web3 add rainbowkit -y
web3 add wallet-connect -y
web3 add viem -y
web3 add solana-wallet -y
Configuration Management
Persist project defaults to skip repetitive flags:
web3 config init
web3 config get defaultChain
web3 config set rpc.base https://mainnet.base.org
web3 config set defaultChain evm
web3 config set framework foundry
Configuration is stored in .web3-devkit/config.json:
{
"defaultChain": "evm",
"framework": "foundry",
"rpc": {
"base": "https://mainnet.base.org",
"ethereum": "https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}"
},
"walletType": "local"
}
Common Workflows
Start a New EVM Project
web3 init evm-foundry
cd my-project
web3 generate token -c evm -v erc20 -n MyToken -y
web3 config set defaultChain evm
web3 config set rpc.base ${BASE_RPC_URL}
web3 rpc test -n base
web3 deploy evm -n base -y
web3 monitor contract -a 0xDeployedTokenAddress -e Transfer -n base
Start a Solana Project
web3 init solana-anchor
cd my-solana-project
web3 generate vault -c solana -v escrow-anchor -n MyEscrow -y
web3 wallet create --chain solana
web3 wallet balance -n devnet -a <SOLANA_WALLET_ADDRESS>
web3 deploy solana -n devnet -y
Full-Stack dApp with Frontend
web3 init fullstack-evm
cd my-fullstack-dapp
web3 generate nft -c evm -v erc721 -n MyNFT -y
cd frontend
web3 add wagmi -y
web3 add rainbowkit -y
cd ..
web3 config set rpc.base ${BASE_RPC_URL}
web3 deploy evm -n base -y
web3 verify -n base -a 0xContractAddress -c MyNFT
Working with Environment Variables
Always use environment variables for sensitive data:
PRIVATE_KEY=${PRIVATE_KEY}
ALCHEMY_API_KEY=${ALCHEMY_API_KEY}
ETHERSCAN_API_KEY=${ETHERSCAN_API_KEY}
BASE_RPC_URL=https://mainnet.base.org
SOLANA_RPC_URL=https://api.devnet.solana.com
Load environment variables before running commands:
source .env
web3 deploy evm -n base -y
Or inline:
BASE_RPC_URL=${BASE_RPC_URL} web3 rpc test -n base
TypeScript Integration Examples
Using Generated ERC20 Contract
After generating an ERC20 token with web3 generate token -c evm -v erc20 -n MyToken -y:
import { createPublicClient, createWalletClient, http } from 'viem';
import { base } from 'viem/chains';
import { privateKeyToAccount } from 'viem/accounts';
const account = privateKeyToAccount(`0x${process.env.PRIVATE_KEY}`);
const publicClient = createPublicClient({
chain: base,
transport: http(process.env.BASE_RPC_URL),
});
const walletClient = createWalletClient({
chain: base,
transport: http(process.env.BASE_RPC_URL),
account,
});
const balance = await publicClient.readContract({
address: '0xTokenAddress',
abi: MyTokenABI,
functionName: 'balanceOf',
args: [account.address],
});
console.log('Balance:', balance);
const hash = await walletClient.writeContract({
: ,
: ,
: ,
: [, ],
});
.(, hash);
Monitoring Events Programmatically
import { createPublicClient, http, parseAbiItem } from 'viem';
import { base } from 'viem/chains';
const client = createPublicClient({
chain: base,
transport: http(process.env.BASE_RPC_URL),
});
const unwatch = client.watchEvent({
address: '0xTokenAddress',
event: parseAbiItem('event Transfer(address indexed from, address indexed to, uint256 value)'),
onLogs: (logs) => {
logs.forEach((log) => {
console.log('Transfer detected:', {
from: log.args.from,
to: log.args.to,
value: log.args.value,
});
});
},
});
setTimeout(() => unwatch(), 3600000);
Custom Deployment Script
import { execSync } from 'child_process';
import fs from 'fs';
import path from 'path';
interface DeploymentRecord {
network: string;
address: string;
timestamp: string;
deployer: string;
}
async function deployContract(network: string): Promise<void> {
console.log(`Deploying to ${network}...`);
const output = execSync(`web3 deploy evm -n ${network} -y`, {
encoding: 'utf-8',
});
console.log(output);
const addressMatch = output.match(/Deployed at: (0x[a-fA-F0-9]{40})/);
if (!addressMatch) {
throw new Error('Failed to parse deployment address');
}
const address = addressMatch[1];
deploymentDir = path.(, );
: = {
network,
address,
: ().(),
: process.. || ,
};
fs.(
path.(deploymentDir, ),
.(record, , )
);
.();
}
().(.);
Project Structure After Init
After running web3 init evm-foundry, you'll get:
my-project/
├── contracts/ # Solidity contracts
│ └── Counter.sol
├── script/ # Deployment scripts
│ └── Counter.s.sol
├── test/ # Forge tests
│ └── Counter.t.sol
├── .env.example
├── foundry.toml
├── README.md
└── .web3-devkit/ # DevKit metadata
├── config.json
└── deployments/
After running web3 init fullstack-evm:
my-fullstack-dapp/
├── contracts/ # Smart contracts
├── frontend/ # Next.js dApp
│ ├── components/
│ ├── pages/
│ └── public/
├── backend/
│ └── api/ # API routes
├── .env.example
└── README.md
Troubleshooting
RPC Connection Fails
Problem: web3 rpc test -n base times out or fails.
Solutions:
- Check your RPC URL in config:
web3 config get rpc.base
- Update RPC URL:
web3 config set rpc.base https://mainnet.base.org
- Verify network connectivity:
curl -X POST ${BASE_RPC_URL} -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
- Use environment variable:
BASE_RPC_URL=${ALCHEMY_BASE_URL} web3 rpc test -n base
Deployment Gas Estimation Error
Problem: web3 deploy evm -n base --estimate fails with "insufficient funds".
Solutions:
- Check wallet balance:
web3 wallet balance -n base -a ${YOUR_ADDRESS}
- Fund wallet with native token (ETH for Base)
- Verify private key is set:
echo $PRIVATE_KEY
- Use lower gas limits in deployment config
Generated Contract Won't Compile
Problem: web3 generate token -c evm -v erc20 -n MyToken -y creates contract that won't compile.
Solutions:
- Ensure Foundry or Hardhat is installed:
forge --version or npx hardhat --version
- Install dependencies:
forge install or npm install
- Check Solidity version compatibility in
foundry.toml or hardhat.config.ts
- Update imports in generated contract if needed
Monitor Command Shows No Events
Problem: web3 monitor wallet -a 0x... -n ethereum runs but shows no activity.
Solutions:
- Verify wallet has activity: check on block explorer
- Ensure correct network:
web3 config get defaultChain
- Check RPC connection:
web3 rpc test -n ethereum
- Increase polling interval or use WebSocket RPC if available
- Monitor specific events instead:
web3 monitor contract -a 0x... -e Transfer -n ethereum
Frontend Integration Not Working
Problem: web3 add wagmi -y completes but wallet doesn't connect.
Solutions:
- Ensure you're in a Next.js project directory
- Install peer dependencies:
npm install wagmi viem @tanstack/react-query
- Wrap your app with
WagmiConfig in _app.tsx
- Configure chains correctly in wagmi config
- Check browser console for errors
Command Not Found
Problem: web3 command not recognized after installation.
Solutions:
- Run
npm link in the cloned repository
- Use
npm run web3 -- <command> if not linked
- Check PATH includes npm global bin:
npm config get prefix
- Reinstall globally:
npm install -g web3-devkit-cli
Permission Denied on Wallet Creation
Problem: web3 wallet create --chain evm fails with permission error.
Solutions:
- Check directory permissions:
ls -la .web3-devkit/
- Create directory manually:
mkdir -p .web3-devkit/wallets
- Run with appropriate permissions
- Store wallet files in user home directory instead
Advanced Configuration
Custom RPC Endpoints per Network
web3 config set rpc.ethereum https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}
web3 config set rpc.base https://base-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}
web3 config set rpc.arbitrum https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}
web3 config set rpc.solana https://api.mainnet-beta.solana.com
Multi-Chain Deployment Strategy
for network in base arbitrum polygon; do
echo "Deploying to $network..."
web3 deploy evm -n $network -y
web3 verify -n $network -a $(web3 deploy history | grep $network | awk '{print $2}') -c MyToken
done
Monitoring Multiple Contracts
web3 monitor contract -a 0xToken1 -e Transfer -n base &
web3 monitor contract -a 0xToken2 -e Transfer -n base &
web3 monitor wallet -a 0xMyWallet -n base &
wait
Resources
- Documentation: Check
docs/ directory in repository
- Templates: Browse
templates/ for project scaffolds
- Generators: Review
generators/ for contract boilerplates
- Integrations: See
integrations/ for frontend wallet adapters
Requirements
- Node.js 18+
- npm or yarn
- For EVM: Foundry or Hardhat installed
- For Solana: Anchor CLI installed
- Valid RPC endpoints for target networks