A streamlined CLI that bootstraps a full-stack Web3 dApp in seconds — powered by Next.js, TailwindCSS, Wagmi, Reown AppKit, Solidity, and Foundry.
📘 Contribute: Please read CONTRIBUTING.md before submitting issues or PRs.
- 🏗️ Single-command setup —
npx redapp-cli - ⚛️ Frontend: Next.js (app-router), TypeScript, TailwindCSS, WAGMI & Reown AppKit wallet integration
- 🔗 Includes Anvil, Sepolia, Arbitrum, Mainnet support out of the box
- 🔧 Backend: Foundry scaffold for Solidity contracts (
forge testincluded) - 🔒 Auto-generated
.env.local.exampleand post-install reminder to add yourNEXT_PUBLIC_REOWN_PROJECT_ID - 🔧 ESLint + Prettier integration for code quality
Some warnings or npm audit messages may appear during install — these are from dev tooling and do not affect the security or performance of your dApp. You can safely ignore them for development.
npx redapp-cli my-dapp
cd my-dapp/frontend
npm install
npm run dev
Create a .env.local in frontend/:
NEXT_PUBLIC_REOWN_PROJECT_ID=your_project_id_heremy-dapp/
├── frontend/ # Next.js + Wallet UI + Styling
│ ├── config/
│ ├── context/
│ ├── app/ # Routes, layout, globals.css
│ ├── .env.local* # Add this after cloning!
│ └── package.json
└── backend/ # Foundry + Solidity scaffold
├── contracts/
├── test/
└── forge.toml
cd frontend
npm run devcd backend
forge installgit clone <this-repo>
cd re-dapp
npm install
npm run lint
npm run format# For testing locally:
npm link
re-dapp test-app- ✅ Deploy your contract (e.g.,
forge deploy)
cd backend
forge build # compile contracts
forge deploy # deploy your contract (e.g., MyToken)After deployment, you’ll find the ABI JSON here:
backend/out/YourContract.sol/YourContract.jsonCopy that file into the frontend's ABI folder:
cp backend/out/YourContract.sol/YourContract.json frontend/abi/YourContract.jsonIn frontend/content/contract.ts, ensure it reads something like this:
import YourContract from '@/abi/YourContract.json'
export const CONTRACT_ADDRESS = '0xYourDeployedAddressHere'
export const contractAbi = YourContract.abiYou can import and initialize your contract anywhere:
import { contractAbi, CONTRACT_ADDRESS } from '@/content/contract'
import { ethers } from 'ethers'
const contract = new ethers.Contract(CONTRACT_ADDRESS, contractAbi, signer)-
CLI tooling: prompts, chalk, fs-extra
-
Linting: ESLint configured to support modern JS
-
Formatting: Prettier (.prettierrc)
-
Node engines: Supports Node >=18
-
Adheres to CLI best practices—POSIX args, error handling, colorized output, clean UX.
- MIT © Saber
Saber • @X Username • GitHub/Saber1Y • Portfolio