Use when adding new error messages to React, or seeing "unknown error code" warnings.
npx skills add near/agent-skills --skill "near-kit"
Install specific skill from multi-skill repository
# Description
TypeScript library for NEAR Protocol blockchain interaction. Use this skill when writing code that interacts with NEAR Protocol, including viewing contract data, calling contract methods, sending NEAR tokens, building transactions, creating type-safe contract wrappers, integrating wallets (Wallet Selector, HOT Connect), React hooks and providers (@near-kit/react), managing keys, testing with sandbox, meta-transactions (NEP-366), and message signing (NEP-413).
# SKILL.md
name: near-kit
description: TypeScript library for NEAR Protocol blockchain interaction. Use this skill when writing code that interacts with NEAR Protocol, including viewing contract data, calling contract methods, sending NEAR tokens, building transactions, creating type-safe contract wrappers, integrating wallets (Wallet Selector, HOT Connect), React hooks and providers (@near-kit/react), managing keys, testing with sandbox, meta-transactions (NEP-366), and message signing (NEP-413).
near-kit
A TypeScript library for NEAR Protocol with an intuitive, fetch-like API.
Quick Start
import { Near } from "near-kit"
// Read-only (no key needed)
const near = new Near({ network: "testnet" })
const data = await near.view("contract.near", "get_data", { key: "value" })
// With signing capability
const near = new Near({
network: "testnet",
privateKey: "ed25519:...",
defaultSignerId: "alice.testnet",
})
await near.call("contract.near", "method", { arg: "value" })
await near.send("bob.testnet", "1 NEAR")
Core Operations
View Methods (Read-Only, Free)
const result = await near.view("contract.near", "get_data", { key: "value" })
const balance = await near.getBalance("alice.near")
const exists = await near.accountExists("alice.near")
Call Methods (Requires Signing)
await near.call(
"contract.near",
"method",
{ arg: "value" },
{ gas: "30 Tgas", attachedDeposit: "1 NEAR" }
)
Send NEAR Tokens
await near.send("bob.near", "5 NEAR")
Type-Safe Contracts
import type { Contract } from "near-kit"
type MyContract = Contract<{
view: {
get_balance: (args: { account_id: string }) => Promise<string>
}
call: {
transfer: (args: { to: string; amount: string }) => Promise<void>
}
}>
const contract = near.contract<MyContract>("token.near")
await contract.view.get_balance({ account_id: "alice.near" })
await contract.call.transfer({ to: "bob.near", amount: "10" }, { attachedDeposit: "1 yocto" })
Transaction Builder
Chain multiple actions in a single atomic transaction:
await near
.transaction("alice.near")
.transfer("bob.near", "1 NEAR")
.functionCall("contract.near", "method", { arg: "value" }, { gas: "30 Tgas" })
.send()
For all transaction actions and meta-transactions, see references/transactions.md
Configuration
Backend/Scripts
// Direct private key
const near = new Near({
network: "testnet",
privateKey: "ed25519:...",
defaultSignerId: "alice.testnet",
})
// File-based keystore
import { FileKeyStore } from "near-kit/keys/file"
const near = new Near({
network: "testnet",
keyStore: new FileKeyStore("~/.near-credentials"),
})
// High-throughput with rotating keys
import { RotatingKeyStore } from "near-kit"
const near = new Near({
network: "mainnet",
keyStore: new RotatingKeyStore({
"bot.near": ["ed25519:key1...", "ed25519:key2...", "ed25519:key3..."],
}),
})
For all key stores and utilities, see references/keys-and-testing.md
Browser Wallets
import { NearConnector } from "@hot-labs/near-connect"
import { Near, fromHotConnect } from "near-kit"
const connector = new NearConnector({ network: "mainnet" })
connector.on("wallet:signIn", async (event) => {
const near = new Near({
network: "mainnet",
wallet: fromHotConnect(connector),
})
await near.call("contract.near", "method", { arg: "value" })
})
connector.connect()
For HOT Connect and Wallet Selector integration, see references/wallets.md
React Bindings (@near-kit/react)
import { NearProvider, useNear, useView, useCall } from "@near-kit/react"
function App() {
return (
<NearProvider config={{ network: "testnet" }}>
<Counter />
</NearProvider>
)
}
function Counter() {
const { data: count, isLoading } = useView<{}, number>({
contractId: "counter.testnet",
method: "get_count",
})
const { mutate: increment, isPending } = useCall({
contractId: "counter.testnet",
method: "increment",
})
if (isLoading) return <div>Loading...</div>
return <button onClick={() => increment({})} disabled={isPending}>Count: {count}</button>
}
For all React hooks, React Query/SWR integration, and SSR patterns, see references/react.md
Testing with Sandbox
import { Sandbox } from "near-kit/sandbox"
const sandbox = await Sandbox.start()
const near = new Near({ network: sandbox })
const testAccount = `test-${Date.now()}.${sandbox.rootAccount.id}`
await near
.transaction(sandbox.rootAccount.id)
.createAccount(testAccount)
.transfer(testAccount, "10 NEAR")
.send()
await sandbox.stop()
For sandbox patterns and Vitest integration, see references/keys-and-testing.md
Error Handling
import {
InsufficientBalanceError,
FunctionCallError,
NetworkError,
TimeoutError,
} from "near-kit"
try {
await near.call("contract.near", "method", {})
} catch (error) {
if (error instanceof InsufficientBalanceError) {
console.log(`Need ${error.required}, have ${error.available}`)
} else if (error instanceof FunctionCallError) {
console.log(`Panic: ${error.panic}`, `Logs: ${error.logs}`)
}
}
Unit Formatting
All amounts accept human-readable formats:
"10 NEAR" // 10 NEAR
"10" // 10 NEAR
10 // 10 NEAR
"30 Tgas" // 30 trillion gas units
Key Utilities
import {
generateKey,
parseKey,
generateSeedPhrase,
parseSeedPhrase,
isValidAccountId,
Amount,
Gas,
} from "near-kit"
const { publicKey, privateKey } = generateKey()
const { seedPhrase, publicKey, privateKey } = generateSeedPhrase()
const restored = parseSeedPhrase("word1 word2 ... word12")
isValidAccountId("alice.near") // true
Amount.parse("5 NEAR") // bigint in yoctoNEAR
Gas.parse("30 Tgas") // bigint in gas units
References
For detailed documentation on specific topics:
- React Bindings - Provider, hooks, React Query/SWR, SSR/Next.js
- Wallet Integration - HOT Connect, Wallet Selector, universal patterns
- Transaction Builder - All actions, meta-transactions (NEP-366)
- Keys and Testing - Key stores, utilities, sandbox, NEP-413 signing
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.