Arbitrum dapp skill
Claude Code skill for building dApps on Arbitrum using Stylus (Rust) and/or Solidity
npx -y skills add hummusonrails/arbitrum-dapp-skillAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Opinionated guide for building dApps on Arbitrum using Stylus (Rust) and/or Solidity. Covers local devnode setup, contract development, testing, deployment, and React frontend integration with viem. Use when starting a new Arbitrum project, writing Stylus or Solidity contracts, deploying to Arbitrum, or building a frontend that interacts with Arbitrum contracts.
SKILL.md
4.7 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
Arbitrum dApp Development
Stack
| Layer | Tool | Notes |
|---|---|---|
| Smart contracts (Rust) | stylus-sdk v0.10+ | Compiled to WASM, runs on Stylus VM |
| Smart contracts (Solidity) | Solidity 0.8.x + Foundry | Standard EVM path on Arbitrum |
| Local node | nitro-devnode | Docker-based local Arbitrum chain |
| Contract CLI | cargo-stylus | Check, deploy, export-abi for Stylus |
| Contract toolchain | Foundry (forge, cast, anvil) | Build, test, deploy, interact for Solidity |
| Frontend | React / Next.js + viem + wagmi | viem for all chain interaction |
| Package manager | pnpm | Workspace-friendly, fast |
Decision Flow
When starting a new contract:
- Need max performance / lower gas? → Stylus Rust. See
references/stylus-rust-contracts.md. - Need broad tooling compatibility / rapid prototyping? → Solidity. See
references/solidity-contracts.md. - Hybrid? → Use both. Stylus and Solidity contracts are fully interoperable on Arbitrum.
Project Scaffolding
Monorepo layout (recommended)
my-arbitrum-dapp/
├── apps/
│ ├── frontend/ # React / Next.js app
│ ├── contracts-stylus/ # Rust Stylus contracts
│ ├── contracts-solidity/ # Foundry Solidity contracts
│ └── nitro-devnode/ # Local dev chain (git submodule)
├── pnpm-workspace.yaml
└── package.json
Bootstrap steps
# 1. Create workspace
mkdir my-arbitrum-dapp && cd my-arbitrum-dapp
pnpm init
printf "packages:\n - 'apps/*'\n" > pnpm-workspace.yaml
# 2. Local devnode
git clone https://github.com/OffchainLabs/nitro-devnode.git apps/nitro-devnode
cd apps/nitro-devnode && ./run-dev-node.sh && cd ../..
# 3a. Stylus contract
cargo stylus new apps/contracts-stylus
# 3b. Solidity contract
cd apps && forge init contracts-solidity && cd ..
# 4. Frontend
pnpm create next-app apps/frontend --typescript
cd apps/frontend
pnpm add viem wagmi @tanstack/react-query
Core Workflow
Stylus Rust
# Validate
cargo stylus check --endpoint http://localhost:8547
# Deploy (uses the nitro-devnode pre-funded deployer account)
cargo stylus deploy \
--endpoint http://localhost:8547 \
--private-key $PRIVATE_KEY
# Export ABI for frontend consumption
cargo stylus export-abi
Solidity (Foundry)
# Build
forge build
# Test
forge test
# Deploy locally (uses the nitro-devnode pre-funded deployer account)
forge script script/Deploy.s.sol --rpc-url http://localhost:8547 --broadcast \
--private-key $PRIVATE_KEY
Note: The nitro-devnode ships with a pre-funded deployer account. See
references/local-devnode.mdfor the default private key and address. For testnet/mainnet, use your own key via environment variables — never hardcode secrets.
Frontend (viem + wagmi)
import { createPublicClient, http } from "viem";
import { arbitrumSepolia } from "viem/chains";
const client = createPublicClient({
chain: arbitrumSepolia,
transport: http(),
});
// Read from contract
const result = await client.readContract({
address: "0x...",
abi: contractAbi,
functionName: "myFunction",
});
See references/frontend-integration.md for full patterns with wagmi hooks, wallet connection, and write transactions.
Principles
- Always use viem for chain interaction.
- Test locally first against nitro-devnode before deploying to testnet.
- Export ABIs from both Stylus (
cargo stylus export-abi) and Solidity (forge inspect) and keep them in a shared location the frontend can import. - Use environment variables for RPC URLs, contract addresses, and private keys. Never hardcode secrets.
- Stylus contracts are EVM-compatible — they share the same address space, storage model, and ABI encoding as Solidity contracts. Cross-contract calls work seamlessly.
References
Load these as needed for deeper guidance:
references/stylus-rust-contracts.md— Stylus SDK patterns, storage, macros, entrypointsreferences/solidity-contracts.md— Solidity on Arbitrum specifics and Foundry workflowreferences/frontend-integration.md— React + viem + wagmi patternsreferences/local-devnode.md— Nitro devnode setup, accounts, and debuggingreferences/deployment.md— Deploying to testnet and mainnetreferences/testing.md— Testing strategies for both Stylus and Solidity
What ships with it: 12 files
89.3 KB alongside SKILL.md, 1 of them executable
docs/
- assets/arbitrum-horizontal-white.svg5.4 KB
- assets/arbitrum-logomark.svg1.9 KB
- index.html33.3 KB
references/
- deployment.md4.3 KB
- frontend-integration.md13.1 KB
- local-devnode.md2.8 KB
- solidity-contracts.md4.0 KB
- stylus-rust-contracts.md9.7 KB
- testing.md6.5 KB
- install.shruns1.3 KB
- LICENSE1.0 KB
- README.md6.0 KB