Use when connecting Move contracts to frontend, generating TypeScript types from Move, handling blockchain events, or building E2E integration. Triggers on contract-frontend integration, type generation needs, or event listener implementation.
From sui-dev-agentsnpx claudepluginhub first-mover-tw/sui-dev-agents --plugin sui-dev-agentsThis skill uses the workspace's default tool permissions.
references/examples.mdSearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Scope: This skill covers Move ↔ TypeScript bridging: type generation, event handling, ABI wrappers. For dApp UI setup and wallet integration, use the
sui-frontendskill. For PTB construction and SDK client patterns, use thesui-ts-sdkskill.
Seamlessly integrate Move smart contracts with frontend applications.
This skill bridges Move contracts and frontend code through:
# Build Move package and generate TypeScript types
npx ts-node scripts/generate-types.ts
Output: frontend/src/types/contracts.ts
import { MarketplaceAPI } from './api/marketplace';
const api = new MarketplaceAPI(suiClient, packageId);
const txb = api.createListing({ nft_id: '0x...', price: 1000000000n });
useNFTPurchasedEvents((event) => {
console.log(`NFT ${event.nft_id} sold for ${event.price}`);
});
./scripts/dev.sh # Starts local node + deploys + frontend
| Pattern | Description |
|---|---|
| Type Generation | Auto-generate TS types from Move ABI |
| API Wrapper | Type-safe transaction builders |
| React Hooks | useMarketplaceAPI() for component integration |
| Event Subscriptions | Real-time updates via gRPC streaming (replaces WebSocket subscribeEvent) |
| Error Handling | Map Move abort codes to user messages |
| Move Type | TypeScript Type |
|---|---|
u8 | number |
u64 | number | bigint |
u128 | bigint |
bool | boolean |
address | string |
vector<u8> | Uint8Array |
String | string |
ID, UID | string |
project/
├── contracts/
│ └── sources/*.move
├── frontend/
│ ├── src/
│ │ ├── api/ # API wrappers
│ │ ├── hooks/ # React hooks
│ │ ├── types/ # Generated types
│ │ └── lib/ # Error handling
│ └── .env.local
└── scripts/
├── generate-types.ts
└── dev.sh
client.core.* namespace for core RPC methods"type": "module" in package.json or .mts files)coinWithBalance for non-SUI coin transfers (not just SUI)$extend() for ecosystem integration:import { SuiGrpcClient } from '@mysten/sui/grpc';
import { kiosk } from '@mysten/kiosk';
const client = new SuiGrpcClient({ network: 'mainnet', baseUrl: 'https://fullnode.mainnet.sui.io:443' })
.$extend(kiosk());
This skill is invoked by sui-full-stack after Phase 2 (contracts) and Phase 3 (frontend).
Query latest integration patterns:
const patterns = await sui_docs_query({
type: "github",
target: "dapp-kit",
query: "transaction building patterns"
});
❌ Manual type definitions instead of generating from Move ABI
generate-types.ts after Move contract changes❌ Not handling u64/u128 correctly in TypeScript
bigint for u64/u128, number | bigint for safety❌ Forgetting to update package ID after redeployment
❌ Not mapping Move abort codes to user messages
lib/errors.ts❌ Polling for updates instead of subscribing to events
subscribeEvent is deprecated)❌ Not testing integration locally
dev.sh to run local node + contracts + frontend together❌ Hardcoding transaction arguments
Bridge Move contracts and modern frontend - type-safe, real-time, production-ready integration!