mystenlabs/sui-dev-skills/stdlib

Claude Code and agent skill by mystenlabs/sui-dev-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Common Sui Move standard library patterns — strings, Coin/Balance, Option, addresses, UID, TxContext, vectors, and struct unpacking.

Install

npx vskill@latest install mystenlabs/sui-dev-skills/stdlib

SKILL.md

The same SKILL.md was published earlier as jiayaoqijia/cryptoskill/stdlib.

1. Common Standard Library Patterns

move
// Strings — use method syntax, don't import utf8
let s: String = b"hello".to_string();
let ascii: ascii::String = b"hello".to_ascii_string();
// Coin and Balance
use sui::coin::{Self, Coin};
use sui::balance::{Self, Balance};
let balance: Balance<SUI> = coin.into_balance();
let coin: Coin<SUI> = balance.into_coin(ctx); // ✅ method syntax
let amount: u64 = coin.value();
// Split a payment
let exact = payment.split(amount, ctx); // ✅
let exact = payment.balance_mut().split(amount); // ✅ avoids ctx
// Consuming values without `drop` — the @0x0 burn pattern
//
// Move's linear type system requires every non-`drop` value to be
// explicitly consumed. The `_` prefix only suppresses warnings for values
// that *do* have `drop` — it won't help for Balance<T>, Coin<T>, or your
// own structs that lack `drop`.
//
// To permanently destroy any `key + store` object, transfer it to @0x0
// (an address no one controls, equivalent to Solidity's address(0)):
transfer::public_transfer(my_obj, @0x0); // ✅ permanent burn
//
// Balance<T> has neither `drop` nor `key`, so it cannot be transferred
// directly, and `balance::destroy_zero` only works on empty balances.
// Wrap it in a Coin first:
//
// let _locked = supply.increase_supply(MINIMUM_LIQUIDITY); // ❌ compile error
//
let locked = supply.increase_supply(MINIMUM_LIQUIDITY).into_coin(ctx);
transfer::public_transfer(locked, @0x0); // ✅ burns the minimum liquidity
//
// Hot potatoes (structs with no abilities at all) cannot use this pattern —
// they must be destructured and each field consumed individually.
// Option
let opt: Option<u64> = option::some(42);
let val = opt.destroy_or!(default_value); // ✅ macro form
let val = opt.borrow();
// Address and IDs
let id: ID = object::id(&my_obj);
let addr: address = id.to_address();
// UID deletion
id.delete(); // ✅
// object::delete(id); // ❌ verbose
// TxContext sender
ctx.sender() // ✅
// tx_context::sender(ctx) // ❌ verbose
// Vector literals and index syntax
let mut v = vector[1, 2, 3]; // ✅ literal
let first = v[0]; // ✅ index syntax
assert!(v.length() == 3); // ✅ method syntax
// let mut v = vector::empty(); // ❌ verbose
// vector::push_back(&mut v, 1); // ❌ verbose
// Struct unpack — use .. to ignore fields you don't need
let MyStruct { id, .. } = value; // ✅
// let MyStruct { id, field_a: _, field_b: _ } = value; // ❌ verbose

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
5

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/mystenlabs/sui-dev-skills/stdlib/badge)](https://verified-skill.com/skills/mystenlabs/sui-dev-skills/stdlib)

Something wrong with this skill or its page? Tell us.