[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sui-walrus-ts-sdk":3,"mdc-p76tl9-key":34,"related-org-sui-walrus-ts-sdk":2481,"related-repo-sui-walrus-ts-sdk":2655},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":25,"topics":29,"repo":30,"sourceUrl":32,"mdContent":33},"walrus-ts-sdk","build applications with Walrus TypeScript SDK","Walrus TypeScript SDK (@mysten\u002Fwalrus) for storing and reading blobs programmatically. Use when writing TypeScript\u002FJavaScript code that interacts with Walrus for blob storage, reading, or lifecycle management. Also use when configuring network settings (Testnet\u002FMainnet package and object IDs), wiring Walrus to a Sui wallet, or integrating Walrus into a web app. For CLI usage, see the `walrus-cli` skill. For HTTP API, see the `walrus-http-api` skill.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"sui","Sui (Mysten Labs)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fsui.png","MystenLabs",[13,16,19,22],{"name":14,"slug":8,"type":15},"Sui","tag",{"name":17,"slug":18,"type":15},"TypeScript","typescript",{"name":20,"slug":21,"type":15},"Storage","storage",{"name":23,"slug":24,"type":15},"SDK","sdk",1,"https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fwalrus-skills","2026-07-16T06:02:52.982285",null,[],{"repoUrl":26,"stars":25,"forks":25,"topics":31,"description":28},[],"https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fwalrus-skills\u002Ftree\u002FHEAD\u002Fwalrus-ts-sdk","---\nname: walrus-ts-sdk\ndescription: >\n  Walrus TypeScript SDK (@mysten\u002Fwalrus) for storing and reading blobs programmatically.\n  Use when writing TypeScript\u002FJavaScript code that interacts with Walrus for blob storage,\n  reading, or lifecycle management. Also use when configuring network settings (Testnet\u002FMainnet\n  package and object IDs), wiring Walrus to a Sui wallet, or integrating Walrus into a web app.\n  For CLI usage, see the `walrus-cli` skill. For HTTP API, see the `walrus-http-api` skill.\n---\n\n# Walrus TypeScript SDK\n\n> **Source constraint:** All information in this skill is sourced from the\n> [Walrus TypeScript SDK documentation](https:\u002F\u002Fsdk.mystenlabs.com\u002Fwalrus),\n> the [official examples](https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fts-sdks\u002Ftree\u002Fmain\u002Fpackages\u002Fwalrus\u002Fexamples),\n> and the [Walrus docs](https:\u002F\u002Fdocs.wal.app\u002Fdocs\u002Ftypescript-sdk\u002Fsdks).\n> When extending this skill, only pull from these sources.\n\nThe `@mysten\u002Fwalrus` package is the official TypeScript SDK for Walrus, maintained by Mysten Labs. It supports storing blobs, reading blobs, checking blob status, and managing blob lifecycle from TypeScript\u002FJavaScript. The SDK handles encoding, sliver distribution, and Sui transaction construction internally.\n\nFor data security (encryption before upload), use `@mysten\u002Fseal` alongside this SDK. All blobs stored on Walrus are public by default. See the `walrus-data-security` skill.\n\nAll patterns in this skill are derived from:\n- https:\u002F\u002Fsdk.mystenlabs.com\u002Fwalrus\n- https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fts-sdks\u002Ftree\u002Fmain\u002Fpackages\u002Fwalrus\u002Fexamples\n\nIf unsure about any SDK API, fetch the relevant page before answering.\n\n---\n\n## Related skills\n\n| Topic | Skill | Load when |\n|-------|-------|-----------|\n| CLI operations | `walrus-cli` | Using the `walrus` binary instead of the SDK |\n| HTTP API | `walrus-http-api` | Using REST endpoints from any language |\n| Encryption | `walrus-data-security` | Encrypting blobs with Seal before upload |\n| Blob management | `walrus-blob-lifecycle` | Extending, deleting, or sharing blobs |\n| Quilts | `walrus-quilts` | Batching many small blobs into one unit |\n| Move integration | `walrus-move-integration` | Wrapping Walrus blobs in Move contracts |\n\n---\n\n## Skill Content\n\n### Key concepts\n\n- **WalrusClient.** The main entry point. Create one with network configuration and an optional Sui wallet. The SDK bundles the correct Walrus system object IDs for each network (Testnet, Mainnet) so you do not need to look them up manually.\n\n- **Network configuration.** Pass `network: 'testnet'` or `network: 'mainnet'` when creating the client. The SDK resolves package IDs, system object IDs, and default aggregator\u002Fpublisher URLs automatically. Do not hardcode system object IDs.\n\n- **Wallet integration.** Write operations (store, extend, delete) require a Sui keypair or wallet for signing transactions. Read operations do not require a wallet. Use `Ed25519Keypair` for server-side or a wallet adapter for browser apps.\n\n- **Aggregator and publisher.** The SDK can interact with Walrus storage nodes directly (full encoding and sliver upload) or through publisher\u002Faggregator HTTP endpoints. For browser environments with limited bandwidth, use an upload relay.\n\n- **Store response types.** When storing a blob, the SDK returns either `newlyCreated` (blob stored for the first time, includes the Sui object details and cost) or `alreadyCertified` (identical content already exists with sufficient lifetime).\n\n- **Community SDKs.** For non-TypeScript languages, community SDKs exist for [Go](https:\u002F\u002Fgithub.com\u002Fnamihq\u002Fwalrus-go), [PHP](https:\u002F\u002Fgithub.com\u002Fsuicore\u002Fwalrus-sdk-php), and [Python](https:\u002F\u002Fgithub.com\u002Fstandard-crypto\u002Fwalrus-python). These interact with the HTTP API rather than storage nodes directly.\n\n### Installation and setup\n\n```bash\nnpm install @mysten\u002Fwalrus @mysten\u002Fsui\n```\n\n### Client initialization\n\nThe SDK uses the `$extend` pattern to add Walrus capabilities to a Sui client:\n\n```typescript\nimport { SuiClient, getFullnodeUrl } from '@mysten\u002Fsui\u002Fclient';\nimport { walrus } from '@mysten\u002Fwalrus';\nimport { Ed25519Keypair } from '@mysten\u002Fsui\u002Fkeypairs\u002Fed25519';\n\n\u002F\u002F Read-only client (no wallet needed)\nconst client = new SuiClient({ url: getFullnodeUrl('testnet') })\n  .$extend(walrus({ network: 'testnet' }));\n\n\u002F\u002F Read a blob\nconst blob = await client.walrus.readBlob({ blobId: '\u003CBLOB_ID>' });\n\n\u002F\u002F Client with wallet for write operations\nconst keypair = Ed25519Keypair.fromSecretKey('\u003CSECRET_KEY>');\nconst writeClient = new SuiClient({ url: getFullnodeUrl('testnet') })\n  .$extend(walrus({\n    network: 'testnet',\n    wallet: keypair,\n  }));\n\n\u002F\u002F Store a blob\nconst result = await writeClient.walrus.storeBlob({\n  blob: new Uint8Array([...]),  \u002F\u002F or a File, Blob, string\n  epochs: 5,\n  deletable: true,\n});\n```\n\n### Upload relay for browser apps\n\nBrowser environments cannot distribute slivers directly to storage nodes. Use an upload relay:\n\n```typescript\nconst client = new SuiClient({ url: getFullnodeUrl('mainnet') })\n  .$extend(walrus({\n    network: 'mainnet',\n    wallet: keypair,\n    uploadRelay: {\n      host: 'https:\u002F\u002Fupload-relay.mainnet.walrus.space',\n      sendTip: { max: 1_000_000 },  \u002F\u002F max tip in MIST to pay the relay\n    },\n  }));\n```\n\nUpload relay URLs:\n- **Mainnet:** `https:\u002F\u002Fupload-relay.mainnet.walrus.space`\n- **Testnet:** `https:\u002F\u002Fupload-relay.testnet.walrus.space`\n\nThe `sendTip.max` field caps the tip your client pays the relay operator. If the relay's required tip exceeds your max, the upload fails with `Tip amount exceeds the maximum allowed tip`. Increase `max` or find a cheaper relay.\n\n### Vite \u002F bundler configuration\n\nThe SDK uses gRPC and WASM internally. For Vite-based projects, exclude the package from dependency optimization:\n\n```typescript\n\u002F\u002F vite.config.ts\nexport default defineConfig({\n  optimizeDeps: {\n    exclude: ['@mysten\u002Fwalrus'],\n  },\n});\n```\n\nWithout this, Vite's pre-bundling can break gRPC\u002FWASM imports.\n\n### Querying network info\n\n```typescript\n\u002F\u002F Get current epoch, storage cost, and system info\nconst info = await fetch('https:\u002F\u002Faggregator.walrus-mainnet.walrus.space\u002Fv1\u002Finfo');\nconst { epoch, storageCostPerUnit } = await info.json();\n\n\u002F\u002F Estimate storage cost programmatically\nconst cost = await client.walrus.storageCost(fileSize, epochs);\n```\n\n### Blob ID formats\n\nWalrus blob IDs are URL-safe base64 strings (for example, `M4hsZGQ1oCktdzegB6HnI6Mi28S2nqOPHxK-W7_4BUk`). The same content always produces the same blob ID (content-addressed). Do not confuse with the Sui object ID of the `Blob` object (a `0x...` hex string), which is different for each upload even with identical content.\n\n### Rules\n\n1. **Always specify epochs when storing.** Blobs default to 1 epoch if you omit the duration. Always set an explicit `epochs` value appropriate for your use case.\n2. **Encrypt before uploading sensitive data.** All Walrus blobs are public and discoverable. Use `@mysten\u002Fseal` for threshold encryption with onchain access control, or any encryption library of your choice.\n3. **Do not hardcode system object IDs.** The SDK bundles the correct IDs per network. Use the `network` parameter instead.\n4. **Handle `alreadyCertified` responses.** When identical content already exists with sufficient lifetime, the SDK returns `alreadyCertified` instead of re-uploading. This is expected behavior, not an error.\n5. **Retry reads after immediate upload.** CDN-fronted aggregators might briefly cache a 404 for a blob that was just certified. Retry with backoff if reading immediately after storing.\n6. **No public Mainnet publisher.** On Mainnet, run your own authenticated publisher or use the TypeScript SDK directly. The public publisher endpoints are for Testnet only, where WAL has no monetary value.\n\n### Common mistakes\n\n- **Not providing a wallet for write operations.** Store, extend, and delete operations require a Sui keypair or wallet adapter to sign transactions. Read operations do not.\n- **Using the SDK in a browser without an upload relay.** Browser environments cannot distribute slivers to storage nodes. You must configure an `uploadRelay` with a `host` URL and `sendTip.max` value. Without it, store operations fail silently or throw `RetryableWalrusClientError: Too many failures while writing blob`.\n- **Confusing blob ID with Sui object ID.** A blob ID is a URL-safe base64 string identifying content. A Sui object ID is a `0x...` hex string identifying the on-chain `Blob` object. Use blob ID for reading content, object ID for on-chain operations (extend, delete, share).\n- **Ignoring deletable vs permanent.** Newly stored blobs are deletable by default. If you need guaranteed availability for the full storage period, explicitly set `permanent: true`. Deletable blobs can be removed by the object owner at any time.\n- **Hardcoding aggregator\u002Fpublisher URLs.** The SDK provides default endpoints per network. Only override them if you run your own infrastructure.\n- **Passing raw JSON strings instead of `Uint8Array` or `File`.** The `storeBlob` method expects binary data. Convert strings with `new TextEncoder().encode(jsonString)`. Passing a raw string or object can cause `file.bytes is not a function` errors.\n- **`Tip amount exceeds the maximum allowed tip` error.** The upload relay requires a tip. Set `sendTip: { max: N }` high enough in the `uploadRelay` config. Check the relay's required tip at `\u003Crelay-url>\u002Fv1\u002Ftip-config`.\n- **`ChainNotSupportedError: \"sui:undefined\"` in dApp Kit.** This occurs when the wallet adapter is not properly configured with the correct Sui network. Ensure the dApp Kit provider specifies the chain (`sui:testnet` or `sui:mainnet`).\n- **Missing Vite `optimizeDeps.exclude` for `@mysten\u002Fwalrus`.** The SDK's gRPC\u002FWASM internals break under Vite's default pre-bundling. Add `exclude: ['@mysten\u002Fwalrus']` to your Vite config.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,93,107,128,133,154,159,163,170,342,345,351,358,488,494,532,538,551,1397,1403,1408,1669,1674,1707,1735,1741,1746,1864,1869,1875,2075,2081,2110,2116,2217,2223,2475],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"walrus-typescript-sdk",[45],{"type":46,"value":47},"text","Walrus TypeScript SDK",{"type":40,"tag":49,"props":50,"children":51},"blockquote",{},[52],{"type":40,"tag":53,"props":54,"children":55},"p",{},[56,62,64,73,75,82,84,91],{"type":40,"tag":57,"props":58,"children":59},"strong",{},[60],{"type":46,"value":61},"Source constraint:",{"type":46,"value":63}," All information in this skill is sourced from the\n",{"type":40,"tag":65,"props":66,"children":70},"a",{"href":67,"rel":68},"https:\u002F\u002Fsdk.mystenlabs.com\u002Fwalrus",[69],"nofollow",[71],{"type":46,"value":72},"Walrus TypeScript SDK documentation",{"type":46,"value":74},",\nthe ",{"type":40,"tag":65,"props":76,"children":79},{"href":77,"rel":78},"https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fts-sdks\u002Ftree\u002Fmain\u002Fpackages\u002Fwalrus\u002Fexamples",[69],[80],{"type":46,"value":81},"official examples",{"type":46,"value":83},",\nand the ",{"type":40,"tag":65,"props":85,"children":88},{"href":86,"rel":87},"https:\u002F\u002Fdocs.wal.app\u002Fdocs\u002Ftypescript-sdk\u002Fsdks",[69],[89],{"type":46,"value":90},"Walrus docs",{"type":46,"value":92},".\nWhen extending this skill, only pull from these sources.",{"type":40,"tag":53,"props":94,"children":95},{},[96,98,105],{"type":46,"value":97},"The ",{"type":40,"tag":99,"props":100,"children":102},"code",{"className":101},[],[103],{"type":46,"value":104},"@mysten\u002Fwalrus",{"type":46,"value":106}," package is the official TypeScript SDK for Walrus, maintained by Mysten Labs. It supports storing blobs, reading blobs, checking blob status, and managing blob lifecycle from TypeScript\u002FJavaScript. The SDK handles encoding, sliver distribution, and Sui transaction construction internally.",{"type":40,"tag":53,"props":108,"children":109},{},[110,112,118,120,126],{"type":46,"value":111},"For data security (encryption before upload), use ",{"type":40,"tag":99,"props":113,"children":115},{"className":114},[],[116],{"type":46,"value":117},"@mysten\u002Fseal",{"type":46,"value":119}," alongside this SDK. All blobs stored on Walrus are public by default. See the ",{"type":40,"tag":99,"props":121,"children":123},{"className":122},[],[124],{"type":46,"value":125},"walrus-data-security",{"type":46,"value":127}," skill.",{"type":40,"tag":53,"props":129,"children":130},{},[131],{"type":46,"value":132},"All patterns in this skill are derived from:",{"type":40,"tag":134,"props":135,"children":136},"ul",{},[137,146],{"type":40,"tag":138,"props":139,"children":140},"li",{},[141],{"type":40,"tag":65,"props":142,"children":144},{"href":67,"rel":143},[69],[145],{"type":46,"value":67},{"type":40,"tag":138,"props":147,"children":148},{},[149],{"type":40,"tag":65,"props":150,"children":152},{"href":77,"rel":151},[69],[153],{"type":46,"value":77},{"type":40,"tag":53,"props":155,"children":156},{},[157],{"type":46,"value":158},"If unsure about any SDK API, fetch the relevant page before answering.",{"type":40,"tag":160,"props":161,"children":162},"hr",{},[],{"type":40,"tag":164,"props":165,"children":167},"h2",{"id":166},"related-skills",[168],{"type":46,"value":169},"Related skills",{"type":40,"tag":171,"props":172,"children":173},"table",{},[174,198],{"type":40,"tag":175,"props":176,"children":177},"thead",{},[178],{"type":40,"tag":179,"props":180,"children":181},"tr",{},[182,188,193],{"type":40,"tag":183,"props":184,"children":185},"th",{},[186],{"type":46,"value":187},"Topic",{"type":40,"tag":183,"props":189,"children":190},{},[191],{"type":46,"value":192},"Skill",{"type":40,"tag":183,"props":194,"children":195},{},[196],{"type":46,"value":197},"Load when",{"type":40,"tag":199,"props":200,"children":201},"tbody",{},[202,233,255,276,298,320],{"type":40,"tag":179,"props":203,"children":204},{},[205,211,220],{"type":40,"tag":206,"props":207,"children":208},"td",{},[209],{"type":46,"value":210},"CLI operations",{"type":40,"tag":206,"props":212,"children":213},{},[214],{"type":40,"tag":99,"props":215,"children":217},{"className":216},[],[218],{"type":46,"value":219},"walrus-cli",{"type":40,"tag":206,"props":221,"children":222},{},[223,225,231],{"type":46,"value":224},"Using the ",{"type":40,"tag":99,"props":226,"children":228},{"className":227},[],[229],{"type":46,"value":230},"walrus",{"type":46,"value":232}," binary instead of the SDK",{"type":40,"tag":179,"props":234,"children":235},{},[236,241,250],{"type":40,"tag":206,"props":237,"children":238},{},[239],{"type":46,"value":240},"HTTP API",{"type":40,"tag":206,"props":242,"children":243},{},[244],{"type":40,"tag":99,"props":245,"children":247},{"className":246},[],[248],{"type":46,"value":249},"walrus-http-api",{"type":40,"tag":206,"props":251,"children":252},{},[253],{"type":46,"value":254},"Using REST endpoints from any language",{"type":40,"tag":179,"props":256,"children":257},{},[258,263,271],{"type":40,"tag":206,"props":259,"children":260},{},[261],{"type":46,"value":262},"Encryption",{"type":40,"tag":206,"props":264,"children":265},{},[266],{"type":40,"tag":99,"props":267,"children":269},{"className":268},[],[270],{"type":46,"value":125},{"type":40,"tag":206,"props":272,"children":273},{},[274],{"type":46,"value":275},"Encrypting blobs with Seal before upload",{"type":40,"tag":179,"props":277,"children":278},{},[279,284,293],{"type":40,"tag":206,"props":280,"children":281},{},[282],{"type":46,"value":283},"Blob management",{"type":40,"tag":206,"props":285,"children":286},{},[287],{"type":40,"tag":99,"props":288,"children":290},{"className":289},[],[291],{"type":46,"value":292},"walrus-blob-lifecycle",{"type":40,"tag":206,"props":294,"children":295},{},[296],{"type":46,"value":297},"Extending, deleting, or sharing blobs",{"type":40,"tag":179,"props":299,"children":300},{},[301,306,315],{"type":40,"tag":206,"props":302,"children":303},{},[304],{"type":46,"value":305},"Quilts",{"type":40,"tag":206,"props":307,"children":308},{},[309],{"type":40,"tag":99,"props":310,"children":312},{"className":311},[],[313],{"type":46,"value":314},"walrus-quilts",{"type":40,"tag":206,"props":316,"children":317},{},[318],{"type":46,"value":319},"Batching many small blobs into one unit",{"type":40,"tag":179,"props":321,"children":322},{},[323,328,337],{"type":40,"tag":206,"props":324,"children":325},{},[326],{"type":46,"value":327},"Move integration",{"type":40,"tag":206,"props":329,"children":330},{},[331],{"type":40,"tag":99,"props":332,"children":334},{"className":333},[],[335],{"type":46,"value":336},"walrus-move-integration",{"type":40,"tag":206,"props":338,"children":339},{},[340],{"type":46,"value":341},"Wrapping Walrus blobs in Move contracts",{"type":40,"tag":160,"props":343,"children":344},{},[],{"type":40,"tag":164,"props":346,"children":348},{"id":347},"skill-content",[349],{"type":46,"value":350},"Skill Content",{"type":40,"tag":352,"props":353,"children":355},"h3",{"id":354},"key-concepts",[356],{"type":46,"value":357},"Key concepts",{"type":40,"tag":134,"props":359,"children":360},{},[361,371,397,415,425,451],{"type":40,"tag":138,"props":362,"children":363},{},[364,369],{"type":40,"tag":57,"props":365,"children":366},{},[367],{"type":46,"value":368},"WalrusClient.",{"type":46,"value":370}," The main entry point. Create one with network configuration and an optional Sui wallet. The SDK bundles the correct Walrus system object IDs for each network (Testnet, Mainnet) so you do not need to look them up manually.",{"type":40,"tag":138,"props":372,"children":373},{},[374,379,381,387,389,395],{"type":40,"tag":57,"props":375,"children":376},{},[377],{"type":46,"value":378},"Network configuration.",{"type":46,"value":380}," Pass ",{"type":40,"tag":99,"props":382,"children":384},{"className":383},[],[385],{"type":46,"value":386},"network: 'testnet'",{"type":46,"value":388}," or ",{"type":40,"tag":99,"props":390,"children":392},{"className":391},[],[393],{"type":46,"value":394},"network: 'mainnet'",{"type":46,"value":396}," when creating the client. The SDK resolves package IDs, system object IDs, and default aggregator\u002Fpublisher URLs automatically. Do not hardcode system object IDs.",{"type":40,"tag":138,"props":398,"children":399},{},[400,405,407,413],{"type":40,"tag":57,"props":401,"children":402},{},[403],{"type":46,"value":404},"Wallet integration.",{"type":46,"value":406}," Write operations (store, extend, delete) require a Sui keypair or wallet for signing transactions. Read operations do not require a wallet. Use ",{"type":40,"tag":99,"props":408,"children":410},{"className":409},[],[411],{"type":46,"value":412},"Ed25519Keypair",{"type":46,"value":414}," for server-side or a wallet adapter for browser apps.",{"type":40,"tag":138,"props":416,"children":417},{},[418,423],{"type":40,"tag":57,"props":419,"children":420},{},[421],{"type":46,"value":422},"Aggregator and publisher.",{"type":46,"value":424}," The SDK can interact with Walrus storage nodes directly (full encoding and sliver upload) or through publisher\u002Faggregator HTTP endpoints. For browser environments with limited bandwidth, use an upload relay.",{"type":40,"tag":138,"props":426,"children":427},{},[428,433,435,441,443,449],{"type":40,"tag":57,"props":429,"children":430},{},[431],{"type":46,"value":432},"Store response types.",{"type":46,"value":434}," When storing a blob, the SDK returns either ",{"type":40,"tag":99,"props":436,"children":438},{"className":437},[],[439],{"type":46,"value":440},"newlyCreated",{"type":46,"value":442}," (blob stored for the first time, includes the Sui object details and cost) or ",{"type":40,"tag":99,"props":444,"children":446},{"className":445},[],[447],{"type":46,"value":448},"alreadyCertified",{"type":46,"value":450}," (identical content already exists with sufficient lifetime).",{"type":40,"tag":138,"props":452,"children":453},{},[454,459,461,468,470,477,479,486],{"type":40,"tag":57,"props":455,"children":456},{},[457],{"type":46,"value":458},"Community SDKs.",{"type":46,"value":460}," For non-TypeScript languages, community SDKs exist for ",{"type":40,"tag":65,"props":462,"children":465},{"href":463,"rel":464},"https:\u002F\u002Fgithub.com\u002Fnamihq\u002Fwalrus-go",[69],[466],{"type":46,"value":467},"Go",{"type":46,"value":469},", ",{"type":40,"tag":65,"props":471,"children":474},{"href":472,"rel":473},"https:\u002F\u002Fgithub.com\u002Fsuicore\u002Fwalrus-sdk-php",[69],[475],{"type":46,"value":476},"PHP",{"type":46,"value":478},", and ",{"type":40,"tag":65,"props":480,"children":483},{"href":481,"rel":482},"https:\u002F\u002Fgithub.com\u002Fstandard-crypto\u002Fwalrus-python",[69],[484],{"type":46,"value":485},"Python",{"type":46,"value":487},". These interact with the HTTP API rather than storage nodes directly.",{"type":40,"tag":352,"props":489,"children":491},{"id":490},"installation-and-setup",[492],{"type":46,"value":493},"Installation and setup",{"type":40,"tag":495,"props":496,"children":501},"pre",{"className":497,"code":498,"language":499,"meta":500,"style":500},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install @mysten\u002Fwalrus @mysten\u002Fsui\n","bash","",[502],{"type":40,"tag":99,"props":503,"children":504},{"__ignoreMap":500},[505],{"type":40,"tag":506,"props":507,"children":509},"span",{"class":508,"line":25},"line",[510,516,522,527],{"type":40,"tag":506,"props":511,"children":513},{"style":512},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[514],{"type":46,"value":515},"npm",{"type":40,"tag":506,"props":517,"children":519},{"style":518},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[520],{"type":46,"value":521}," install",{"type":40,"tag":506,"props":523,"children":524},{"style":518},[525],{"type":46,"value":526}," @mysten\u002Fwalrus",{"type":40,"tag":506,"props":528,"children":529},{"style":518},[530],{"type":46,"value":531}," @mysten\u002Fsui\n",{"type":40,"tag":352,"props":533,"children":535},{"id":534},"client-initialization",[536],{"type":46,"value":537},"Client initialization",{"type":40,"tag":53,"props":539,"children":540},{},[541,543,549],{"type":46,"value":542},"The SDK uses the ",{"type":40,"tag":99,"props":544,"children":546},{"className":545},[],[547],{"type":46,"value":548},"$extend",{"type":46,"value":550}," pattern to add Walrus capabilities to a Sui client:",{"type":40,"tag":495,"props":552,"children":555},{"className":553,"code":554,"language":18,"meta":500,"style":500},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { SuiClient, getFullnodeUrl } from '@mysten\u002Fsui\u002Fclient';\nimport { walrus } from '@mysten\u002Fwalrus';\nimport { Ed25519Keypair } from '@mysten\u002Fsui\u002Fkeypairs\u002Fed25519';\n\n\u002F\u002F Read-only client (no wallet needed)\nconst client = new SuiClient({ url: getFullnodeUrl('testnet') })\n  .$extend(walrus({ network: 'testnet' }));\n\n\u002F\u002F Read a blob\nconst blob = await client.walrus.readBlob({ blobId: '\u003CBLOB_ID>' });\n\n\u002F\u002F Client with wallet for write operations\nconst keypair = Ed25519Keypair.fromSecretKey('\u003CSECRET_KEY>');\nconst writeClient = new SuiClient({ url: getFullnodeUrl('testnet') })\n  .$extend(walrus({\n    network: 'testnet',\n    wallet: keypair,\n  }));\n\n\u002F\u002F Store a blob\nconst result = await writeClient.walrus.storeBlob({\n  blob: new Uint8Array([...]),  \u002F\u002F or a File, Blob, string\n  epochs: 5,\n  deletable: true,\n});\n",[556],{"type":40,"tag":99,"props":557,"children":558},{"__ignoreMap":500},[559,620,661,703,713,723,810,873,881,890,978,986,995,1050,1123,1152,1182,1204,1221,1229,1238,1289,1335,1358,1381],{"type":40,"tag":506,"props":560,"children":561},{"class":508,"line":25},[562,568,574,580,585,590,595,600,605,610,615],{"type":40,"tag":506,"props":563,"children":565},{"style":564},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[566],{"type":46,"value":567},"import",{"type":40,"tag":506,"props":569,"children":571},{"style":570},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[572],{"type":46,"value":573}," {",{"type":40,"tag":506,"props":575,"children":577},{"style":576},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[578],{"type":46,"value":579}," SuiClient",{"type":40,"tag":506,"props":581,"children":582},{"style":570},[583],{"type":46,"value":584},",",{"type":40,"tag":506,"props":586,"children":587},{"style":576},[588],{"type":46,"value":589}," getFullnodeUrl",{"type":40,"tag":506,"props":591,"children":592},{"style":570},[593],{"type":46,"value":594}," }",{"type":40,"tag":506,"props":596,"children":597},{"style":564},[598],{"type":46,"value":599}," from",{"type":40,"tag":506,"props":601,"children":602},{"style":570},[603],{"type":46,"value":604}," '",{"type":40,"tag":506,"props":606,"children":607},{"style":518},[608],{"type":46,"value":609},"@mysten\u002Fsui\u002Fclient",{"type":40,"tag":506,"props":611,"children":612},{"style":570},[613],{"type":46,"value":614},"'",{"type":40,"tag":506,"props":616,"children":617},{"style":570},[618],{"type":46,"value":619},";\n",{"type":40,"tag":506,"props":621,"children":623},{"class":508,"line":622},2,[624,628,632,637,641,645,649,653,657],{"type":40,"tag":506,"props":625,"children":626},{"style":564},[627],{"type":46,"value":567},{"type":40,"tag":506,"props":629,"children":630},{"style":570},[631],{"type":46,"value":573},{"type":40,"tag":506,"props":633,"children":634},{"style":576},[635],{"type":46,"value":636}," walrus",{"type":40,"tag":506,"props":638,"children":639},{"style":570},[640],{"type":46,"value":594},{"type":40,"tag":506,"props":642,"children":643},{"style":564},[644],{"type":46,"value":599},{"type":40,"tag":506,"props":646,"children":647},{"style":570},[648],{"type":46,"value":604},{"type":40,"tag":506,"props":650,"children":651},{"style":518},[652],{"type":46,"value":104},{"type":40,"tag":506,"props":654,"children":655},{"style":570},[656],{"type":46,"value":614},{"type":40,"tag":506,"props":658,"children":659},{"style":570},[660],{"type":46,"value":619},{"type":40,"tag":506,"props":662,"children":664},{"class":508,"line":663},3,[665,669,673,678,682,686,690,695,699],{"type":40,"tag":506,"props":666,"children":667},{"style":564},[668],{"type":46,"value":567},{"type":40,"tag":506,"props":670,"children":671},{"style":570},[672],{"type":46,"value":573},{"type":40,"tag":506,"props":674,"children":675},{"style":576},[676],{"type":46,"value":677}," Ed25519Keypair",{"type":40,"tag":506,"props":679,"children":680},{"style":570},[681],{"type":46,"value":594},{"type":40,"tag":506,"props":683,"children":684},{"style":564},[685],{"type":46,"value":599},{"type":40,"tag":506,"props":687,"children":688},{"style":570},[689],{"type":46,"value":604},{"type":40,"tag":506,"props":691,"children":692},{"style":518},[693],{"type":46,"value":694},"@mysten\u002Fsui\u002Fkeypairs\u002Fed25519",{"type":40,"tag":506,"props":696,"children":697},{"style":570},[698],{"type":46,"value":614},{"type":40,"tag":506,"props":700,"children":701},{"style":570},[702],{"type":46,"value":619},{"type":40,"tag":506,"props":704,"children":706},{"class":508,"line":705},4,[707],{"type":40,"tag":506,"props":708,"children":710},{"emptyLinePlaceholder":709},true,[711],{"type":46,"value":712},"\n",{"type":40,"tag":506,"props":714,"children":716},{"class":508,"line":715},5,[717],{"type":40,"tag":506,"props":718,"children":720},{"style":719},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[721],{"type":46,"value":722},"\u002F\u002F Read-only client (no wallet needed)\n",{"type":40,"tag":506,"props":724,"children":726},{"class":508,"line":725},6,[727,733,738,743,748,753,758,763,769,774,778,782,786,791,795,800,805],{"type":40,"tag":506,"props":728,"children":730},{"style":729},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[731],{"type":46,"value":732},"const",{"type":40,"tag":506,"props":734,"children":735},{"style":576},[736],{"type":46,"value":737}," client ",{"type":40,"tag":506,"props":739,"children":740},{"style":570},[741],{"type":46,"value":742},"=",{"type":40,"tag":506,"props":744,"children":745},{"style":570},[746],{"type":46,"value":747}," new",{"type":40,"tag":506,"props":749,"children":751},{"style":750},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[752],{"type":46,"value":579},{"type":40,"tag":506,"props":754,"children":755},{"style":576},[756],{"type":46,"value":757},"(",{"type":40,"tag":506,"props":759,"children":760},{"style":570},[761],{"type":46,"value":762},"{",{"type":40,"tag":506,"props":764,"children":766},{"style":765},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[767],{"type":46,"value":768}," url",{"type":40,"tag":506,"props":770,"children":771},{"style":570},[772],{"type":46,"value":773},":",{"type":40,"tag":506,"props":775,"children":776},{"style":750},[777],{"type":46,"value":589},{"type":40,"tag":506,"props":779,"children":780},{"style":576},[781],{"type":46,"value":757},{"type":40,"tag":506,"props":783,"children":784},{"style":570},[785],{"type":46,"value":614},{"type":40,"tag":506,"props":787,"children":788},{"style":518},[789],{"type":46,"value":790},"testnet",{"type":40,"tag":506,"props":792,"children":793},{"style":570},[794],{"type":46,"value":614},{"type":40,"tag":506,"props":796,"children":797},{"style":576},[798],{"type":46,"value":799},") ",{"type":40,"tag":506,"props":801,"children":802},{"style":570},[803],{"type":46,"value":804},"}",{"type":40,"tag":506,"props":806,"children":807},{"style":576},[808],{"type":46,"value":809},")\n",{"type":40,"tag":506,"props":811,"children":813},{"class":508,"line":812},7,[814,819,823,827,831,835,839,844,848,852,856,860,864,869],{"type":40,"tag":506,"props":815,"children":816},{"style":570},[817],{"type":46,"value":818},"  .",{"type":40,"tag":506,"props":820,"children":821},{"style":750},[822],{"type":46,"value":548},{"type":40,"tag":506,"props":824,"children":825},{"style":576},[826],{"type":46,"value":757},{"type":40,"tag":506,"props":828,"children":829},{"style":750},[830],{"type":46,"value":230},{"type":40,"tag":506,"props":832,"children":833},{"style":576},[834],{"type":46,"value":757},{"type":40,"tag":506,"props":836,"children":837},{"style":570},[838],{"type":46,"value":762},{"type":40,"tag":506,"props":840,"children":841},{"style":765},[842],{"type":46,"value":843}," network",{"type":40,"tag":506,"props":845,"children":846},{"style":570},[847],{"type":46,"value":773},{"type":40,"tag":506,"props":849,"children":850},{"style":570},[851],{"type":46,"value":604},{"type":40,"tag":506,"props":853,"children":854},{"style":518},[855],{"type":46,"value":790},{"type":40,"tag":506,"props":857,"children":858},{"style":570},[859],{"type":46,"value":614},{"type":40,"tag":506,"props":861,"children":862},{"style":570},[863],{"type":46,"value":594},{"type":40,"tag":506,"props":865,"children":866},{"style":576},[867],{"type":46,"value":868},"))",{"type":40,"tag":506,"props":870,"children":871},{"style":570},[872],{"type":46,"value":619},{"type":40,"tag":506,"props":874,"children":876},{"class":508,"line":875},8,[877],{"type":40,"tag":506,"props":878,"children":879},{"emptyLinePlaceholder":709},[880],{"type":46,"value":712},{"type":40,"tag":506,"props":882,"children":884},{"class":508,"line":883},9,[885],{"type":40,"tag":506,"props":886,"children":887},{"style":719},[888],{"type":46,"value":889},"\u002F\u002F Read a blob\n",{"type":40,"tag":506,"props":891,"children":893},{"class":508,"line":892},10,[894,898,903,907,912,917,922,926,930,935,939,943,948,952,956,961,965,969,974],{"type":40,"tag":506,"props":895,"children":896},{"style":729},[897],{"type":46,"value":732},{"type":40,"tag":506,"props":899,"children":900},{"style":576},[901],{"type":46,"value":902}," blob ",{"type":40,"tag":506,"props":904,"children":905},{"style":570},[906],{"type":46,"value":742},{"type":40,"tag":506,"props":908,"children":909},{"style":564},[910],{"type":46,"value":911}," await",{"type":40,"tag":506,"props":913,"children":914},{"style":576},[915],{"type":46,"value":916}," client",{"type":40,"tag":506,"props":918,"children":919},{"style":570},[920],{"type":46,"value":921},".",{"type":40,"tag":506,"props":923,"children":924},{"style":576},[925],{"type":46,"value":230},{"type":40,"tag":506,"props":927,"children":928},{"style":570},[929],{"type":46,"value":921},{"type":40,"tag":506,"props":931,"children":932},{"style":750},[933],{"type":46,"value":934},"readBlob",{"type":40,"tag":506,"props":936,"children":937},{"style":576},[938],{"type":46,"value":757},{"type":40,"tag":506,"props":940,"children":941},{"style":570},[942],{"type":46,"value":762},{"type":40,"tag":506,"props":944,"children":945},{"style":765},[946],{"type":46,"value":947}," blobId",{"type":40,"tag":506,"props":949,"children":950},{"style":570},[951],{"type":46,"value":773},{"type":40,"tag":506,"props":953,"children":954},{"style":570},[955],{"type":46,"value":604},{"type":40,"tag":506,"props":957,"children":958},{"style":518},[959],{"type":46,"value":960},"\u003CBLOB_ID>",{"type":40,"tag":506,"props":962,"children":963},{"style":570},[964],{"type":46,"value":614},{"type":40,"tag":506,"props":966,"children":967},{"style":570},[968],{"type":46,"value":594},{"type":40,"tag":506,"props":970,"children":971},{"style":576},[972],{"type":46,"value":973},")",{"type":40,"tag":506,"props":975,"children":976},{"style":570},[977],{"type":46,"value":619},{"type":40,"tag":506,"props":979,"children":981},{"class":508,"line":980},11,[982],{"type":40,"tag":506,"props":983,"children":984},{"emptyLinePlaceholder":709},[985],{"type":46,"value":712},{"type":40,"tag":506,"props":987,"children":989},{"class":508,"line":988},12,[990],{"type":40,"tag":506,"props":991,"children":992},{"style":719},[993],{"type":46,"value":994},"\u002F\u002F Client with wallet for write operations\n",{"type":40,"tag":506,"props":996,"children":998},{"class":508,"line":997},13,[999,1003,1008,1012,1016,1020,1025,1029,1033,1038,1042,1046],{"type":40,"tag":506,"props":1000,"children":1001},{"style":729},[1002],{"type":46,"value":732},{"type":40,"tag":506,"props":1004,"children":1005},{"style":576},[1006],{"type":46,"value":1007}," keypair ",{"type":40,"tag":506,"props":1009,"children":1010},{"style":570},[1011],{"type":46,"value":742},{"type":40,"tag":506,"props":1013,"children":1014},{"style":576},[1015],{"type":46,"value":677},{"type":40,"tag":506,"props":1017,"children":1018},{"style":570},[1019],{"type":46,"value":921},{"type":40,"tag":506,"props":1021,"children":1022},{"style":750},[1023],{"type":46,"value":1024},"fromSecretKey",{"type":40,"tag":506,"props":1026,"children":1027},{"style":576},[1028],{"type":46,"value":757},{"type":40,"tag":506,"props":1030,"children":1031},{"style":570},[1032],{"type":46,"value":614},{"type":40,"tag":506,"props":1034,"children":1035},{"style":518},[1036],{"type":46,"value":1037},"\u003CSECRET_KEY>",{"type":40,"tag":506,"props":1039,"children":1040},{"style":570},[1041],{"type":46,"value":614},{"type":40,"tag":506,"props":1043,"children":1044},{"style":576},[1045],{"type":46,"value":973},{"type":40,"tag":506,"props":1047,"children":1048},{"style":570},[1049],{"type":46,"value":619},{"type":40,"tag":506,"props":1051,"children":1053},{"class":508,"line":1052},14,[1054,1058,1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107,1111,1115,1119],{"type":40,"tag":506,"props":1055,"children":1056},{"style":729},[1057],{"type":46,"value":732},{"type":40,"tag":506,"props":1059,"children":1060},{"style":576},[1061],{"type":46,"value":1062}," writeClient ",{"type":40,"tag":506,"props":1064,"children":1065},{"style":570},[1066],{"type":46,"value":742},{"type":40,"tag":506,"props":1068,"children":1069},{"style":570},[1070],{"type":46,"value":747},{"type":40,"tag":506,"props":1072,"children":1073},{"style":750},[1074],{"type":46,"value":579},{"type":40,"tag":506,"props":1076,"children":1077},{"style":576},[1078],{"type":46,"value":757},{"type":40,"tag":506,"props":1080,"children":1081},{"style":570},[1082],{"type":46,"value":762},{"type":40,"tag":506,"props":1084,"children":1085},{"style":765},[1086],{"type":46,"value":768},{"type":40,"tag":506,"props":1088,"children":1089},{"style":570},[1090],{"type":46,"value":773},{"type":40,"tag":506,"props":1092,"children":1093},{"style":750},[1094],{"type":46,"value":589},{"type":40,"tag":506,"props":1096,"children":1097},{"style":576},[1098],{"type":46,"value":757},{"type":40,"tag":506,"props":1100,"children":1101},{"style":570},[1102],{"type":46,"value":614},{"type":40,"tag":506,"props":1104,"children":1105},{"style":518},[1106],{"type":46,"value":790},{"type":40,"tag":506,"props":1108,"children":1109},{"style":570},[1110],{"type":46,"value":614},{"type":40,"tag":506,"props":1112,"children":1113},{"style":576},[1114],{"type":46,"value":799},{"type":40,"tag":506,"props":1116,"children":1117},{"style":570},[1118],{"type":46,"value":804},{"type":40,"tag":506,"props":1120,"children":1121},{"style":576},[1122],{"type":46,"value":809},{"type":40,"tag":506,"props":1124,"children":1126},{"class":508,"line":1125},15,[1127,1131,1135,1139,1143,1147],{"type":40,"tag":506,"props":1128,"children":1129},{"style":570},[1130],{"type":46,"value":818},{"type":40,"tag":506,"props":1132,"children":1133},{"style":750},[1134],{"type":46,"value":548},{"type":40,"tag":506,"props":1136,"children":1137},{"style":576},[1138],{"type":46,"value":757},{"type":40,"tag":506,"props":1140,"children":1141},{"style":750},[1142],{"type":46,"value":230},{"type":40,"tag":506,"props":1144,"children":1145},{"style":576},[1146],{"type":46,"value":757},{"type":40,"tag":506,"props":1148,"children":1149},{"style":570},[1150],{"type":46,"value":1151},"{\n",{"type":40,"tag":506,"props":1153,"children":1155},{"class":508,"line":1154},16,[1156,1161,1165,1169,1173,1177],{"type":40,"tag":506,"props":1157,"children":1158},{"style":765},[1159],{"type":46,"value":1160},"    network",{"type":40,"tag":506,"props":1162,"children":1163},{"style":570},[1164],{"type":46,"value":773},{"type":40,"tag":506,"props":1166,"children":1167},{"style":570},[1168],{"type":46,"value":604},{"type":40,"tag":506,"props":1170,"children":1171},{"style":518},[1172],{"type":46,"value":790},{"type":40,"tag":506,"props":1174,"children":1175},{"style":570},[1176],{"type":46,"value":614},{"type":40,"tag":506,"props":1178,"children":1179},{"style":570},[1180],{"type":46,"value":1181},",\n",{"type":40,"tag":506,"props":1183,"children":1185},{"class":508,"line":1184},17,[1186,1191,1195,1200],{"type":40,"tag":506,"props":1187,"children":1188},{"style":765},[1189],{"type":46,"value":1190},"    wallet",{"type":40,"tag":506,"props":1192,"children":1193},{"style":570},[1194],{"type":46,"value":773},{"type":40,"tag":506,"props":1196,"children":1197},{"style":576},[1198],{"type":46,"value":1199}," keypair",{"type":40,"tag":506,"props":1201,"children":1202},{"style":570},[1203],{"type":46,"value":1181},{"type":40,"tag":506,"props":1205,"children":1207},{"class":508,"line":1206},18,[1208,1213,1217],{"type":40,"tag":506,"props":1209,"children":1210},{"style":570},[1211],{"type":46,"value":1212},"  }",{"type":40,"tag":506,"props":1214,"children":1215},{"style":576},[1216],{"type":46,"value":868},{"type":40,"tag":506,"props":1218,"children":1219},{"style":570},[1220],{"type":46,"value":619},{"type":40,"tag":506,"props":1222,"children":1224},{"class":508,"line":1223},19,[1225],{"type":40,"tag":506,"props":1226,"children":1227},{"emptyLinePlaceholder":709},[1228],{"type":46,"value":712},{"type":40,"tag":506,"props":1230,"children":1232},{"class":508,"line":1231},20,[1233],{"type":40,"tag":506,"props":1234,"children":1235},{"style":719},[1236],{"type":46,"value":1237},"\u002F\u002F Store a blob\n",{"type":40,"tag":506,"props":1239,"children":1241},{"class":508,"line":1240},21,[1242,1246,1251,1255,1259,1264,1268,1272,1276,1281,1285],{"type":40,"tag":506,"props":1243,"children":1244},{"style":729},[1245],{"type":46,"value":732},{"type":40,"tag":506,"props":1247,"children":1248},{"style":576},[1249],{"type":46,"value":1250}," result ",{"type":40,"tag":506,"props":1252,"children":1253},{"style":570},[1254],{"type":46,"value":742},{"type":40,"tag":506,"props":1256,"children":1257},{"style":564},[1258],{"type":46,"value":911},{"type":40,"tag":506,"props":1260,"children":1261},{"style":576},[1262],{"type":46,"value":1263}," writeClient",{"type":40,"tag":506,"props":1265,"children":1266},{"style":570},[1267],{"type":46,"value":921},{"type":40,"tag":506,"props":1269,"children":1270},{"style":576},[1271],{"type":46,"value":230},{"type":40,"tag":506,"props":1273,"children":1274},{"style":570},[1275],{"type":46,"value":921},{"type":40,"tag":506,"props":1277,"children":1278},{"style":750},[1279],{"type":46,"value":1280},"storeBlob",{"type":40,"tag":506,"props":1282,"children":1283},{"style":576},[1284],{"type":46,"value":757},{"type":40,"tag":506,"props":1286,"children":1287},{"style":570},[1288],{"type":46,"value":1151},{"type":40,"tag":506,"props":1290,"children":1292},{"class":508,"line":1291},22,[1293,1298,1302,1306,1311,1316,1321,1326,1330],{"type":40,"tag":506,"props":1294,"children":1295},{"style":765},[1296],{"type":46,"value":1297},"  blob",{"type":40,"tag":506,"props":1299,"children":1300},{"style":570},[1301],{"type":46,"value":773},{"type":40,"tag":506,"props":1303,"children":1304},{"style":570},[1305],{"type":46,"value":747},{"type":40,"tag":506,"props":1307,"children":1308},{"style":750},[1309],{"type":46,"value":1310}," Uint8Array",{"type":40,"tag":506,"props":1312,"children":1313},{"style":576},[1314],{"type":46,"value":1315},"([",{"type":40,"tag":506,"props":1317,"children":1318},{"style":570},[1319],{"type":46,"value":1320},"...",{"type":40,"tag":506,"props":1322,"children":1323},{"style":576},[1324],{"type":46,"value":1325},"])",{"type":40,"tag":506,"props":1327,"children":1328},{"style":570},[1329],{"type":46,"value":584},{"type":40,"tag":506,"props":1331,"children":1332},{"style":719},[1333],{"type":46,"value":1334},"  \u002F\u002F or a File, Blob, string\n",{"type":40,"tag":506,"props":1336,"children":1338},{"class":508,"line":1337},23,[1339,1344,1348,1354],{"type":40,"tag":506,"props":1340,"children":1341},{"style":765},[1342],{"type":46,"value":1343},"  epochs",{"type":40,"tag":506,"props":1345,"children":1346},{"style":570},[1347],{"type":46,"value":773},{"type":40,"tag":506,"props":1349,"children":1351},{"style":1350},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1352],{"type":46,"value":1353}," 5",{"type":40,"tag":506,"props":1355,"children":1356},{"style":570},[1357],{"type":46,"value":1181},{"type":40,"tag":506,"props":1359,"children":1361},{"class":508,"line":1360},24,[1362,1367,1371,1377],{"type":40,"tag":506,"props":1363,"children":1364},{"style":765},[1365],{"type":46,"value":1366},"  deletable",{"type":40,"tag":506,"props":1368,"children":1369},{"style":570},[1370],{"type":46,"value":773},{"type":40,"tag":506,"props":1372,"children":1374},{"style":1373},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1375],{"type":46,"value":1376}," true",{"type":40,"tag":506,"props":1378,"children":1379},{"style":570},[1380],{"type":46,"value":1181},{"type":40,"tag":506,"props":1382,"children":1384},{"class":508,"line":1383},25,[1385,1389,1393],{"type":40,"tag":506,"props":1386,"children":1387},{"style":570},[1388],{"type":46,"value":804},{"type":40,"tag":506,"props":1390,"children":1391},{"style":576},[1392],{"type":46,"value":973},{"type":40,"tag":506,"props":1394,"children":1395},{"style":570},[1396],{"type":46,"value":619},{"type":40,"tag":352,"props":1398,"children":1400},{"id":1399},"upload-relay-for-browser-apps",[1401],{"type":46,"value":1402},"Upload relay for browser apps",{"type":40,"tag":53,"props":1404,"children":1405},{},[1406],{"type":46,"value":1407},"Browser environments cannot distribute slivers directly to storage nodes. Use an upload relay:",{"type":40,"tag":495,"props":1409,"children":1411},{"className":553,"code":1410,"language":18,"meta":500,"style":500},"const client = new SuiClient({ url: getFullnodeUrl('mainnet') })\n  .$extend(walrus({\n    network: 'mainnet',\n    wallet: keypair,\n    uploadRelay: {\n      host: 'https:\u002F\u002Fupload-relay.mainnet.walrus.space',\n      sendTip: { max: 1_000_000 },  \u002F\u002F max tip in MIST to pay the relay\n    },\n  }));\n",[1412],{"type":40,"tag":99,"props":1413,"children":1414},{"__ignoreMap":500},[1415,1487,1514,1541,1560,1577,1606,1646,1654],{"type":40,"tag":506,"props":1416,"children":1417},{"class":508,"line":25},[1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1471,1475,1479,1483],{"type":40,"tag":506,"props":1419,"children":1420},{"style":729},[1421],{"type":46,"value":732},{"type":40,"tag":506,"props":1423,"children":1424},{"style":576},[1425],{"type":46,"value":737},{"type":40,"tag":506,"props":1427,"children":1428},{"style":570},[1429],{"type":46,"value":742},{"type":40,"tag":506,"props":1431,"children":1432},{"style":570},[1433],{"type":46,"value":747},{"type":40,"tag":506,"props":1435,"children":1436},{"style":750},[1437],{"type":46,"value":579},{"type":40,"tag":506,"props":1439,"children":1440},{"style":576},[1441],{"type":46,"value":757},{"type":40,"tag":506,"props":1443,"children":1444},{"style":570},[1445],{"type":46,"value":762},{"type":40,"tag":506,"props":1447,"children":1448},{"style":765},[1449],{"type":46,"value":768},{"type":40,"tag":506,"props":1451,"children":1452},{"style":570},[1453],{"type":46,"value":773},{"type":40,"tag":506,"props":1455,"children":1456},{"style":750},[1457],{"type":46,"value":589},{"type":40,"tag":506,"props":1459,"children":1460},{"style":576},[1461],{"type":46,"value":757},{"type":40,"tag":506,"props":1463,"children":1464},{"style":570},[1465],{"type":46,"value":614},{"type":40,"tag":506,"props":1467,"children":1468},{"style":518},[1469],{"type":46,"value":1470},"mainnet",{"type":40,"tag":506,"props":1472,"children":1473},{"style":570},[1474],{"type":46,"value":614},{"type":40,"tag":506,"props":1476,"children":1477},{"style":576},[1478],{"type":46,"value":799},{"type":40,"tag":506,"props":1480,"children":1481},{"style":570},[1482],{"type":46,"value":804},{"type":40,"tag":506,"props":1484,"children":1485},{"style":576},[1486],{"type":46,"value":809},{"type":40,"tag":506,"props":1488,"children":1489},{"class":508,"line":622},[1490,1494,1498,1502,1506,1510],{"type":40,"tag":506,"props":1491,"children":1492},{"style":570},[1493],{"type":46,"value":818},{"type":40,"tag":506,"props":1495,"children":1496},{"style":750},[1497],{"type":46,"value":548},{"type":40,"tag":506,"props":1499,"children":1500},{"style":576},[1501],{"type":46,"value":757},{"type":40,"tag":506,"props":1503,"children":1504},{"style":750},[1505],{"type":46,"value":230},{"type":40,"tag":506,"props":1507,"children":1508},{"style":576},[1509],{"type":46,"value":757},{"type":40,"tag":506,"props":1511,"children":1512},{"style":570},[1513],{"type":46,"value":1151},{"type":40,"tag":506,"props":1515,"children":1516},{"class":508,"line":663},[1517,1521,1525,1529,1533,1537],{"type":40,"tag":506,"props":1518,"children":1519},{"style":765},[1520],{"type":46,"value":1160},{"type":40,"tag":506,"props":1522,"children":1523},{"style":570},[1524],{"type":46,"value":773},{"type":40,"tag":506,"props":1526,"children":1527},{"style":570},[1528],{"type":46,"value":604},{"type":40,"tag":506,"props":1530,"children":1531},{"style":518},[1532],{"type":46,"value":1470},{"type":40,"tag":506,"props":1534,"children":1535},{"style":570},[1536],{"type":46,"value":614},{"type":40,"tag":506,"props":1538,"children":1539},{"style":570},[1540],{"type":46,"value":1181},{"type":40,"tag":506,"props":1542,"children":1543},{"class":508,"line":705},[1544,1548,1552,1556],{"type":40,"tag":506,"props":1545,"children":1546},{"style":765},[1547],{"type":46,"value":1190},{"type":40,"tag":506,"props":1549,"children":1550},{"style":570},[1551],{"type":46,"value":773},{"type":40,"tag":506,"props":1553,"children":1554},{"style":576},[1555],{"type":46,"value":1199},{"type":40,"tag":506,"props":1557,"children":1558},{"style":570},[1559],{"type":46,"value":1181},{"type":40,"tag":506,"props":1561,"children":1562},{"class":508,"line":715},[1563,1568,1572],{"type":40,"tag":506,"props":1564,"children":1565},{"style":765},[1566],{"type":46,"value":1567},"    uploadRelay",{"type":40,"tag":506,"props":1569,"children":1570},{"style":570},[1571],{"type":46,"value":773},{"type":40,"tag":506,"props":1573,"children":1574},{"style":570},[1575],{"type":46,"value":1576}," {\n",{"type":40,"tag":506,"props":1578,"children":1579},{"class":508,"line":725},[1580,1585,1589,1593,1598,1602],{"type":40,"tag":506,"props":1581,"children":1582},{"style":765},[1583],{"type":46,"value":1584},"      host",{"type":40,"tag":506,"props":1586,"children":1587},{"style":570},[1588],{"type":46,"value":773},{"type":40,"tag":506,"props":1590,"children":1591},{"style":570},[1592],{"type":46,"value":604},{"type":40,"tag":506,"props":1594,"children":1595},{"style":518},[1596],{"type":46,"value":1597},"https:\u002F\u002Fupload-relay.mainnet.walrus.space",{"type":40,"tag":506,"props":1599,"children":1600},{"style":570},[1601],{"type":46,"value":614},{"type":40,"tag":506,"props":1603,"children":1604},{"style":570},[1605],{"type":46,"value":1181},{"type":40,"tag":506,"props":1607,"children":1608},{"class":508,"line":812},[1609,1614,1618,1622,1627,1631,1636,1641],{"type":40,"tag":506,"props":1610,"children":1611},{"style":765},[1612],{"type":46,"value":1613},"      sendTip",{"type":40,"tag":506,"props":1615,"children":1616},{"style":570},[1617],{"type":46,"value":773},{"type":40,"tag":506,"props":1619,"children":1620},{"style":570},[1621],{"type":46,"value":573},{"type":40,"tag":506,"props":1623,"children":1624},{"style":765},[1625],{"type":46,"value":1626}," max",{"type":40,"tag":506,"props":1628,"children":1629},{"style":570},[1630],{"type":46,"value":773},{"type":40,"tag":506,"props":1632,"children":1633},{"style":1350},[1634],{"type":46,"value":1635}," 1_000_000",{"type":40,"tag":506,"props":1637,"children":1638},{"style":570},[1639],{"type":46,"value":1640}," },",{"type":40,"tag":506,"props":1642,"children":1643},{"style":719},[1644],{"type":46,"value":1645},"  \u002F\u002F max tip in MIST to pay the relay\n",{"type":40,"tag":506,"props":1647,"children":1648},{"class":508,"line":875},[1649],{"type":40,"tag":506,"props":1650,"children":1651},{"style":570},[1652],{"type":46,"value":1653},"    },\n",{"type":40,"tag":506,"props":1655,"children":1656},{"class":508,"line":883},[1657,1661,1665],{"type":40,"tag":506,"props":1658,"children":1659},{"style":570},[1660],{"type":46,"value":1212},{"type":40,"tag":506,"props":1662,"children":1663},{"style":576},[1664],{"type":46,"value":868},{"type":40,"tag":506,"props":1666,"children":1667},{"style":570},[1668],{"type":46,"value":619},{"type":40,"tag":53,"props":1670,"children":1671},{},[1672],{"type":46,"value":1673},"Upload relay URLs:",{"type":40,"tag":134,"props":1675,"children":1676},{},[1677,1692],{"type":40,"tag":138,"props":1678,"children":1679},{},[1680,1685,1687],{"type":40,"tag":57,"props":1681,"children":1682},{},[1683],{"type":46,"value":1684},"Mainnet:",{"type":46,"value":1686}," ",{"type":40,"tag":99,"props":1688,"children":1690},{"className":1689},[],[1691],{"type":46,"value":1597},{"type":40,"tag":138,"props":1693,"children":1694},{},[1695,1700,1701],{"type":40,"tag":57,"props":1696,"children":1697},{},[1698],{"type":46,"value":1699},"Testnet:",{"type":46,"value":1686},{"type":40,"tag":99,"props":1702,"children":1704},{"className":1703},[],[1705],{"type":46,"value":1706},"https:\u002F\u002Fupload-relay.testnet.walrus.space",{"type":40,"tag":53,"props":1708,"children":1709},{},[1710,1711,1717,1719,1725,1727,1733],{"type":46,"value":97},{"type":40,"tag":99,"props":1712,"children":1714},{"className":1713},[],[1715],{"type":46,"value":1716},"sendTip.max",{"type":46,"value":1718}," field caps the tip your client pays the relay operator. If the relay's required tip exceeds your max, the upload fails with ",{"type":40,"tag":99,"props":1720,"children":1722},{"className":1721},[],[1723],{"type":46,"value":1724},"Tip amount exceeds the maximum allowed tip",{"type":46,"value":1726},". Increase ",{"type":40,"tag":99,"props":1728,"children":1730},{"className":1729},[],[1731],{"type":46,"value":1732},"max",{"type":46,"value":1734}," or find a cheaper relay.",{"type":40,"tag":352,"props":1736,"children":1738},{"id":1737},"vite-bundler-configuration",[1739],{"type":46,"value":1740},"Vite \u002F bundler configuration",{"type":40,"tag":53,"props":1742,"children":1743},{},[1744],{"type":46,"value":1745},"The SDK uses gRPC and WASM internally. For Vite-based projects, exclude the package from dependency optimization:",{"type":40,"tag":495,"props":1747,"children":1749},{"className":553,"code":1748,"language":18,"meta":500,"style":500},"\u002F\u002F vite.config.ts\nexport default defineConfig({\n  optimizeDeps: {\n    exclude: ['@mysten\u002Fwalrus'],\n  },\n});\n",[1750],{"type":40,"tag":99,"props":1751,"children":1752},{"__ignoreMap":500},[1753,1761,1787,1803,1841,1849],{"type":40,"tag":506,"props":1754,"children":1755},{"class":508,"line":25},[1756],{"type":40,"tag":506,"props":1757,"children":1758},{"style":719},[1759],{"type":46,"value":1760},"\u002F\u002F vite.config.ts\n",{"type":40,"tag":506,"props":1762,"children":1763},{"class":508,"line":622},[1764,1769,1774,1779,1783],{"type":40,"tag":506,"props":1765,"children":1766},{"style":564},[1767],{"type":46,"value":1768},"export",{"type":40,"tag":506,"props":1770,"children":1771},{"style":564},[1772],{"type":46,"value":1773}," default",{"type":40,"tag":506,"props":1775,"children":1776},{"style":750},[1777],{"type":46,"value":1778}," defineConfig",{"type":40,"tag":506,"props":1780,"children":1781},{"style":576},[1782],{"type":46,"value":757},{"type":40,"tag":506,"props":1784,"children":1785},{"style":570},[1786],{"type":46,"value":1151},{"type":40,"tag":506,"props":1788,"children":1789},{"class":508,"line":663},[1790,1795,1799],{"type":40,"tag":506,"props":1791,"children":1792},{"style":765},[1793],{"type":46,"value":1794},"  optimizeDeps",{"type":40,"tag":506,"props":1796,"children":1797},{"style":570},[1798],{"type":46,"value":773},{"type":40,"tag":506,"props":1800,"children":1801},{"style":570},[1802],{"type":46,"value":1576},{"type":40,"tag":506,"props":1804,"children":1805},{"class":508,"line":705},[1806,1811,1815,1820,1824,1828,1832,1837],{"type":40,"tag":506,"props":1807,"children":1808},{"style":765},[1809],{"type":46,"value":1810},"    exclude",{"type":40,"tag":506,"props":1812,"children":1813},{"style":570},[1814],{"type":46,"value":773},{"type":40,"tag":506,"props":1816,"children":1817},{"style":576},[1818],{"type":46,"value":1819}," [",{"type":40,"tag":506,"props":1821,"children":1822},{"style":570},[1823],{"type":46,"value":614},{"type":40,"tag":506,"props":1825,"children":1826},{"style":518},[1827],{"type":46,"value":104},{"type":40,"tag":506,"props":1829,"children":1830},{"style":570},[1831],{"type":46,"value":614},{"type":40,"tag":506,"props":1833,"children":1834},{"style":576},[1835],{"type":46,"value":1836},"]",{"type":40,"tag":506,"props":1838,"children":1839},{"style":570},[1840],{"type":46,"value":1181},{"type":40,"tag":506,"props":1842,"children":1843},{"class":508,"line":715},[1844],{"type":40,"tag":506,"props":1845,"children":1846},{"style":570},[1847],{"type":46,"value":1848},"  },\n",{"type":40,"tag":506,"props":1850,"children":1851},{"class":508,"line":725},[1852,1856,1860],{"type":40,"tag":506,"props":1853,"children":1854},{"style":570},[1855],{"type":46,"value":804},{"type":40,"tag":506,"props":1857,"children":1858},{"style":576},[1859],{"type":46,"value":973},{"type":40,"tag":506,"props":1861,"children":1862},{"style":570},[1863],{"type":46,"value":619},{"type":40,"tag":53,"props":1865,"children":1866},{},[1867],{"type":46,"value":1868},"Without this, Vite's pre-bundling can break gRPC\u002FWASM imports.",{"type":40,"tag":352,"props":1870,"children":1872},{"id":1871},"querying-network-info",[1873],{"type":46,"value":1874},"Querying network info",{"type":40,"tag":495,"props":1876,"children":1878},{"className":553,"code":1877,"language":18,"meta":500,"style":500},"\u002F\u002F Get current epoch, storage cost, and system info\nconst info = await fetch('https:\u002F\u002Faggregator.walrus-mainnet.walrus.space\u002Fv1\u002Finfo');\nconst { epoch, storageCostPerUnit } = await info.json();\n\n\u002F\u002F Estimate storage cost programmatically\nconst cost = await client.walrus.storageCost(fileSize, epochs);\n",[1879],{"type":40,"tag":99,"props":1880,"children":1881},{"__ignoreMap":500},[1882,1890,1940,2001,2008,2016],{"type":40,"tag":506,"props":1883,"children":1884},{"class":508,"line":25},[1885],{"type":40,"tag":506,"props":1886,"children":1887},{"style":719},[1888],{"type":46,"value":1889},"\u002F\u002F Get current epoch, storage cost, and system info\n",{"type":40,"tag":506,"props":1891,"children":1892},{"class":508,"line":622},[1893,1897,1902,1906,1910,1915,1919,1923,1928,1932,1936],{"type":40,"tag":506,"props":1894,"children":1895},{"style":729},[1896],{"type":46,"value":732},{"type":40,"tag":506,"props":1898,"children":1899},{"style":576},[1900],{"type":46,"value":1901}," info ",{"type":40,"tag":506,"props":1903,"children":1904},{"style":570},[1905],{"type":46,"value":742},{"type":40,"tag":506,"props":1907,"children":1908},{"style":564},[1909],{"type":46,"value":911},{"type":40,"tag":506,"props":1911,"children":1912},{"style":750},[1913],{"type":46,"value":1914}," fetch",{"type":40,"tag":506,"props":1916,"children":1917},{"style":576},[1918],{"type":46,"value":757},{"type":40,"tag":506,"props":1920,"children":1921},{"style":570},[1922],{"type":46,"value":614},{"type":40,"tag":506,"props":1924,"children":1925},{"style":518},[1926],{"type":46,"value":1927},"https:\u002F\u002Faggregator.walrus-mainnet.walrus.space\u002Fv1\u002Finfo",{"type":40,"tag":506,"props":1929,"children":1930},{"style":570},[1931],{"type":46,"value":614},{"type":40,"tag":506,"props":1933,"children":1934},{"style":576},[1935],{"type":46,"value":973},{"type":40,"tag":506,"props":1937,"children":1938},{"style":570},[1939],{"type":46,"value":619},{"type":40,"tag":506,"props":1941,"children":1942},{"class":508,"line":663},[1943,1947,1951,1956,1960,1965,1969,1974,1978,1983,1987,1992,1997],{"type":40,"tag":506,"props":1944,"children":1945},{"style":729},[1946],{"type":46,"value":732},{"type":40,"tag":506,"props":1948,"children":1949},{"style":570},[1950],{"type":46,"value":573},{"type":40,"tag":506,"props":1952,"children":1953},{"style":576},[1954],{"type":46,"value":1955}," epoch",{"type":40,"tag":506,"props":1957,"children":1958},{"style":570},[1959],{"type":46,"value":584},{"type":40,"tag":506,"props":1961,"children":1962},{"style":576},[1963],{"type":46,"value":1964}," storageCostPerUnit ",{"type":40,"tag":506,"props":1966,"children":1967},{"style":570},[1968],{"type":46,"value":804},{"type":40,"tag":506,"props":1970,"children":1971},{"style":570},[1972],{"type":46,"value":1973}," =",{"type":40,"tag":506,"props":1975,"children":1976},{"style":564},[1977],{"type":46,"value":911},{"type":40,"tag":506,"props":1979,"children":1980},{"style":576},[1981],{"type":46,"value":1982}," info",{"type":40,"tag":506,"props":1984,"children":1985},{"style":570},[1986],{"type":46,"value":921},{"type":40,"tag":506,"props":1988,"children":1989},{"style":750},[1990],{"type":46,"value":1991},"json",{"type":40,"tag":506,"props":1993,"children":1994},{"style":576},[1995],{"type":46,"value":1996},"()",{"type":40,"tag":506,"props":1998,"children":1999},{"style":570},[2000],{"type":46,"value":619},{"type":40,"tag":506,"props":2002,"children":2003},{"class":508,"line":705},[2004],{"type":40,"tag":506,"props":2005,"children":2006},{"emptyLinePlaceholder":709},[2007],{"type":46,"value":712},{"type":40,"tag":506,"props":2009,"children":2010},{"class":508,"line":715},[2011],{"type":40,"tag":506,"props":2012,"children":2013},{"style":719},[2014],{"type":46,"value":2015},"\u002F\u002F Estimate storage cost programmatically\n",{"type":40,"tag":506,"props":2017,"children":2018},{"class":508,"line":725},[2019,2023,2028,2032,2036,2040,2044,2048,2052,2057,2062,2066,2071],{"type":40,"tag":506,"props":2020,"children":2021},{"style":729},[2022],{"type":46,"value":732},{"type":40,"tag":506,"props":2024,"children":2025},{"style":576},[2026],{"type":46,"value":2027}," cost ",{"type":40,"tag":506,"props":2029,"children":2030},{"style":570},[2031],{"type":46,"value":742},{"type":40,"tag":506,"props":2033,"children":2034},{"style":564},[2035],{"type":46,"value":911},{"type":40,"tag":506,"props":2037,"children":2038},{"style":576},[2039],{"type":46,"value":916},{"type":40,"tag":506,"props":2041,"children":2042},{"style":570},[2043],{"type":46,"value":921},{"type":40,"tag":506,"props":2045,"children":2046},{"style":576},[2047],{"type":46,"value":230},{"type":40,"tag":506,"props":2049,"children":2050},{"style":570},[2051],{"type":46,"value":921},{"type":40,"tag":506,"props":2053,"children":2054},{"style":750},[2055],{"type":46,"value":2056},"storageCost",{"type":40,"tag":506,"props":2058,"children":2059},{"style":576},[2060],{"type":46,"value":2061},"(fileSize",{"type":40,"tag":506,"props":2063,"children":2064},{"style":570},[2065],{"type":46,"value":584},{"type":40,"tag":506,"props":2067,"children":2068},{"style":576},[2069],{"type":46,"value":2070}," epochs)",{"type":40,"tag":506,"props":2072,"children":2073},{"style":570},[2074],{"type":46,"value":619},{"type":40,"tag":352,"props":2076,"children":2078},{"id":2077},"blob-id-formats",[2079],{"type":46,"value":2080},"Blob ID formats",{"type":40,"tag":53,"props":2082,"children":2083},{},[2084,2086,2092,2094,2100,2102,2108],{"type":46,"value":2085},"Walrus blob IDs are URL-safe base64 strings (for example, ",{"type":40,"tag":99,"props":2087,"children":2089},{"className":2088},[],[2090],{"type":46,"value":2091},"M4hsZGQ1oCktdzegB6HnI6Mi28S2nqOPHxK-W7_4BUk",{"type":46,"value":2093},"). The same content always produces the same blob ID (content-addressed). Do not confuse with the Sui object ID of the ",{"type":40,"tag":99,"props":2095,"children":2097},{"className":2096},[],[2098],{"type":46,"value":2099},"Blob",{"type":46,"value":2101}," object (a ",{"type":40,"tag":99,"props":2103,"children":2105},{"className":2104},[],[2106],{"type":46,"value":2107},"0x...",{"type":46,"value":2109}," hex string), which is different for each upload even with identical content.",{"type":40,"tag":352,"props":2111,"children":2113},{"id":2112},"rules",[2114],{"type":46,"value":2115},"Rules",{"type":40,"tag":2117,"props":2118,"children":2119},"ol",{},[2120,2138,2155,2173,2197,2207],{"type":40,"tag":138,"props":2121,"children":2122},{},[2123,2128,2130,2136],{"type":40,"tag":57,"props":2124,"children":2125},{},[2126],{"type":46,"value":2127},"Always specify epochs when storing.",{"type":46,"value":2129}," Blobs default to 1 epoch if you omit the duration. Always set an explicit ",{"type":40,"tag":99,"props":2131,"children":2133},{"className":2132},[],[2134],{"type":46,"value":2135},"epochs",{"type":46,"value":2137}," value appropriate for your use case.",{"type":40,"tag":138,"props":2139,"children":2140},{},[2141,2146,2148,2153],{"type":40,"tag":57,"props":2142,"children":2143},{},[2144],{"type":46,"value":2145},"Encrypt before uploading sensitive data.",{"type":46,"value":2147}," All Walrus blobs are public and discoverable. Use ",{"type":40,"tag":99,"props":2149,"children":2151},{"className":2150},[],[2152],{"type":46,"value":117},{"type":46,"value":2154}," for threshold encryption with onchain access control, or any encryption library of your choice.",{"type":40,"tag":138,"props":2156,"children":2157},{},[2158,2163,2165,2171],{"type":40,"tag":57,"props":2159,"children":2160},{},[2161],{"type":46,"value":2162},"Do not hardcode system object IDs.",{"type":46,"value":2164}," The SDK bundles the correct IDs per network. Use the ",{"type":40,"tag":99,"props":2166,"children":2168},{"className":2167},[],[2169],{"type":46,"value":2170},"network",{"type":46,"value":2172}," parameter instead.",{"type":40,"tag":138,"props":2174,"children":2175},{},[2176,2188,2190,2195],{"type":40,"tag":57,"props":2177,"children":2178},{},[2179,2181,2186],{"type":46,"value":2180},"Handle ",{"type":40,"tag":99,"props":2182,"children":2184},{"className":2183},[],[2185],{"type":46,"value":448},{"type":46,"value":2187}," responses.",{"type":46,"value":2189}," When identical content already exists with sufficient lifetime, the SDK returns ",{"type":40,"tag":99,"props":2191,"children":2193},{"className":2192},[],[2194],{"type":46,"value":448},{"type":46,"value":2196}," instead of re-uploading. This is expected behavior, not an error.",{"type":40,"tag":138,"props":2198,"children":2199},{},[2200,2205],{"type":40,"tag":57,"props":2201,"children":2202},{},[2203],{"type":46,"value":2204},"Retry reads after immediate upload.",{"type":46,"value":2206}," CDN-fronted aggregators might briefly cache a 404 for a blob that was just certified. Retry with backoff if reading immediately after storing.",{"type":40,"tag":138,"props":2208,"children":2209},{},[2210,2215],{"type":40,"tag":57,"props":2211,"children":2212},{},[2213],{"type":46,"value":2214},"No public Mainnet publisher.",{"type":46,"value":2216}," On Mainnet, run your own authenticated publisher or use the TypeScript SDK directly. The public publisher endpoints are for Testnet only, where WAL has no monetary value.",{"type":40,"tag":352,"props":2218,"children":2220},{"id":2219},"common-mistakes",[2221],{"type":46,"value":2222},"Common mistakes",{"type":40,"tag":134,"props":2224,"children":2225},{},[2226,2236,2276,2300,2318,2328,2375,2412,2443],{"type":40,"tag":138,"props":2227,"children":2228},{},[2229,2234],{"type":40,"tag":57,"props":2230,"children":2231},{},[2232],{"type":46,"value":2233},"Not providing a wallet for write operations.",{"type":46,"value":2235}," Store, extend, and delete operations require a Sui keypair or wallet adapter to sign transactions. Read operations do not.",{"type":40,"tag":138,"props":2237,"children":2238},{},[2239,2244,2246,2252,2254,2260,2262,2267,2269,2275],{"type":40,"tag":57,"props":2240,"children":2241},{},[2242],{"type":46,"value":2243},"Using the SDK in a browser without an upload relay.",{"type":46,"value":2245}," Browser environments cannot distribute slivers to storage nodes. You must configure an ",{"type":40,"tag":99,"props":2247,"children":2249},{"className":2248},[],[2250],{"type":46,"value":2251},"uploadRelay",{"type":46,"value":2253}," with a ",{"type":40,"tag":99,"props":2255,"children":2257},{"className":2256},[],[2258],{"type":46,"value":2259},"host",{"type":46,"value":2261}," URL and ",{"type":40,"tag":99,"props":2263,"children":2265},{"className":2264},[],[2266],{"type":46,"value":1716},{"type":46,"value":2268}," value. Without it, store operations fail silently or throw ",{"type":40,"tag":99,"props":2270,"children":2272},{"className":2271},[],[2273],{"type":46,"value":2274},"RetryableWalrusClientError: Too many failures while writing blob",{"type":46,"value":921},{"type":40,"tag":138,"props":2277,"children":2278},{},[2279,2284,2286,2291,2293,2298],{"type":40,"tag":57,"props":2280,"children":2281},{},[2282],{"type":46,"value":2283},"Confusing blob ID with Sui object ID.",{"type":46,"value":2285}," A blob ID is a URL-safe base64 string identifying content. A Sui object ID is a ",{"type":40,"tag":99,"props":2287,"children":2289},{"className":2288},[],[2290],{"type":46,"value":2107},{"type":46,"value":2292}," hex string identifying the on-chain ",{"type":40,"tag":99,"props":2294,"children":2296},{"className":2295},[],[2297],{"type":46,"value":2099},{"type":46,"value":2299}," object. Use blob ID for reading content, object ID for on-chain operations (extend, delete, share).",{"type":40,"tag":138,"props":2301,"children":2302},{},[2303,2308,2310,2316],{"type":40,"tag":57,"props":2304,"children":2305},{},[2306],{"type":46,"value":2307},"Ignoring deletable vs permanent.",{"type":46,"value":2309}," Newly stored blobs are deletable by default. If you need guaranteed availability for the full storage period, explicitly set ",{"type":40,"tag":99,"props":2311,"children":2313},{"className":2312},[],[2314],{"type":46,"value":2315},"permanent: true",{"type":46,"value":2317},". Deletable blobs can be removed by the object owner at any time.",{"type":40,"tag":138,"props":2319,"children":2320},{},[2321,2326],{"type":40,"tag":57,"props":2322,"children":2323},{},[2324],{"type":46,"value":2325},"Hardcoding aggregator\u002Fpublisher URLs.",{"type":46,"value":2327}," The SDK provides default endpoints per network. Only override them if you run your own infrastructure.",{"type":40,"tag":138,"props":2329,"children":2330},{},[2331,2350,2352,2357,2359,2365,2367,2373],{"type":40,"tag":57,"props":2332,"children":2333},{},[2334,2336,2342,2343,2349],{"type":46,"value":2335},"Passing raw JSON strings instead of ",{"type":40,"tag":99,"props":2337,"children":2339},{"className":2338},[],[2340],{"type":46,"value":2341},"Uint8Array",{"type":46,"value":388},{"type":40,"tag":99,"props":2344,"children":2346},{"className":2345},[],[2347],{"type":46,"value":2348},"File",{"type":46,"value":921},{"type":46,"value":2351}," The ",{"type":40,"tag":99,"props":2353,"children":2355},{"className":2354},[],[2356],{"type":46,"value":1280},{"type":46,"value":2358}," method expects binary data. Convert strings with ",{"type":40,"tag":99,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":46,"value":2364},"new TextEncoder().encode(jsonString)",{"type":46,"value":2366},". Passing a raw string or object can cause ",{"type":40,"tag":99,"props":2368,"children":2370},{"className":2369},[],[2371],{"type":46,"value":2372},"file.bytes is not a function",{"type":46,"value":2374}," errors.",{"type":40,"tag":138,"props":2376,"children":2377},{},[2378,2388,2390,2396,2398,2403,2405,2411],{"type":40,"tag":57,"props":2379,"children":2380},{},[2381,2386],{"type":40,"tag":99,"props":2382,"children":2384},{"className":2383},[],[2385],{"type":46,"value":1724},{"type":46,"value":2387}," error.",{"type":46,"value":2389}," The upload relay requires a tip. Set ",{"type":40,"tag":99,"props":2391,"children":2393},{"className":2392},[],[2394],{"type":46,"value":2395},"sendTip: { max: N }",{"type":46,"value":2397}," high enough in the ",{"type":40,"tag":99,"props":2399,"children":2401},{"className":2400},[],[2402],{"type":46,"value":2251},{"type":46,"value":2404}," config. Check the relay's required tip at ",{"type":40,"tag":99,"props":2406,"children":2408},{"className":2407},[],[2409],{"type":46,"value":2410},"\u003Crelay-url>\u002Fv1\u002Ftip-config",{"type":46,"value":921},{"type":40,"tag":138,"props":2413,"children":2414},{},[2415,2426,2428,2434,2435,2441],{"type":40,"tag":57,"props":2416,"children":2417},{},[2418,2424],{"type":40,"tag":99,"props":2419,"children":2421},{"className":2420},[],[2422],{"type":46,"value":2423},"ChainNotSupportedError: \"sui:undefined\"",{"type":46,"value":2425}," in dApp Kit.",{"type":46,"value":2427}," This occurs when the wallet adapter is not properly configured with the correct Sui network. Ensure the dApp Kit provider specifies the chain (",{"type":40,"tag":99,"props":2429,"children":2431},{"className":2430},[],[2432],{"type":46,"value":2433},"sui:testnet",{"type":46,"value":388},{"type":40,"tag":99,"props":2436,"children":2438},{"className":2437},[],[2439],{"type":46,"value":2440},"sui:mainnet",{"type":46,"value":2442},").",{"type":40,"tag":138,"props":2444,"children":2445},{},[2446,2465,2467,2473],{"type":40,"tag":57,"props":2447,"children":2448},{},[2449,2451,2457,2459,2464],{"type":46,"value":2450},"Missing Vite ",{"type":40,"tag":99,"props":2452,"children":2454},{"className":2453},[],[2455],{"type":46,"value":2456},"optimizeDeps.exclude",{"type":46,"value":2458}," for ",{"type":40,"tag":99,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":46,"value":104},{"type":46,"value":921},{"type":46,"value":2466}," The SDK's gRPC\u002FWASM internals break under Vite's default pre-bundling. Add ",{"type":40,"tag":99,"props":2468,"children":2470},{"className":2469},[],[2471],{"type":46,"value":2472},"exclude: ['@mysten\u002Fwalrus']",{"type":46,"value":2474}," to your Vite config.",{"type":40,"tag":2476,"props":2477,"children":2478},"style",{},[2479],{"type":46,"value":2480},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2482,"total":2654},[2483,2499,2510,2520,2537,2553,2568,2581,2602,2614,2625,2641],{"slug":2484,"name":2484,"fn":2485,"description":2486,"org":2487,"tags":2488,"stars":2496,"repoUrl":2497,"updatedAt":2498},"move-bytecode-comprehension","analyze and disassemble Move bytecode","Use when reading or reasoning about compiled Move bytecode or `sui move disassemble` output. Mental model for the binary format, what survives compilation (and what's lost), and how to read disassembly soundly. Trigger on \"what does this package do?\", \"read this .mv module\", \"interpret this disassembly\", or whenever an analysis needs to interpret bytecode faithfully.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2489,2492,2495],{"name":2490,"slug":2491,"type":15},"Code Analysis","code-analysis",{"name":2493,"slug":2494,"type":15},"Engineering","engineering",{"name":14,"slug":8,"type":15},7724,"https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fsui","2026-07-16T05:59:32.904886",{"slug":2500,"name":2500,"fn":2501,"description":2502,"org":2503,"tags":2504,"stars":2496,"repoUrl":2497,"updatedAt":2509},"official-sui-skills","access official Sui development resources","Pointer to the official Mysten Labs skills for building on Sui — language fundamentals, object model, PTBs, SDKs, publishing, upgrades, frontend integration, accessing on-chain data. Maintained upstream at github.com\u002FMystenLabs\u002Fskills; pinned to the same ref the audit catalog derives from (see maintenance\u002FUPSTREAMS.md). Trigger on \"build a contract\", \"publish a package\", \"upgrade a module or package\", \"use the TypeScript SDK\", \"write a PTB\", \"set up a Sui client\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2505,2508],{"name":2506,"slug":2507,"type":15},"Documentation","documentation",{"name":14,"slug":8,"type":15},"2026-07-16T06:00:59.641382",{"slug":2511,"name":2511,"fn":2512,"description":2513,"org":2514,"tags":2515,"stars":2496,"repoUrl":2497,"updatedAt":2519},"sui-and-move-tools","disassemble Sui Move bytecode","Use to get bytecode for a deployed Sui package and produce a disassembled working view. One GraphQL call fetches every module's raw bytecode bytes; `sui move disassemble` (already on the system, running `sui prompt`) produces `.asm` files for analysis. Trigger on \"fetch this package's bytecode\", \"get me the .mv for package X\", \"disassemble this package\", or \"I need to read a deployed Sui package\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2516,2517,2518],{"name":2490,"slug":2491,"type":15},{"name":2493,"slug":2494,"type":15},{"name":14,"slug":8,"type":15},"2026-07-16T06:02:25.3633",{"slug":2521,"name":2521,"fn":2522,"description":2523,"org":2524,"tags":2525,"stars":2496,"repoUrl":2497,"updatedAt":2536},"sui-move-security-review","audit Sui Move smart contracts","Use when auditing, reviewing, or hunting for vulnerabilities in Move code on Sui. Applies equally to source code (.move files) and to disassembly of compiled bytecode (on-chain packages). A checklist of invariants whose VIOLATION causes exploitable bugs: access control & capabilities, struct abilities & type safety, object lifecycle & ownership, shared-object and PTB attack surface, dynamic fields & collections, arithmetic & coins, init\u002FOTW\u002Fpackage upgrades, hot-potato composability, time & on-chain randomness, and test-only code leakage. Trigger on \"audit this Move code\", \"find vulnerabilities in this Sui contract\", \"security review\", \"is this package safe?\", \"I suspect there's a bug in X\", \"something is wrong with this contract\", or when reasoning about whether a Move function can be abused.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2526,2529,2532,2535],{"name":2527,"slug":2528,"type":15},"Code Review","code-review",{"name":2530,"slug":2531,"type":15},"Security","security",{"name":2533,"slug":2534,"type":15},"Smart Contracts","smart-contracts",{"name":14,"slug":8,"type":15},"2026-07-16T06:02:55.691149",{"slug":2538,"name":2538,"fn":2539,"description":2540,"org":2541,"tags":2542,"stars":2550,"repoUrl":2551,"updatedAt":2552},"memwal","integrate Walrus Memory SDK","Walrus Memory SDK — portable agent memory that works across apps, sessions, and workflows.\n\nUse when users say:\n- \"add memory to my app\"\n- \"portable agent memory\"\n- \"integrate Walrus Memory\"\n- \"AI agent memory\"\n- \"memory across agents\"\n- \"Walrus memory storage\"\n- \"setup Walrus Memory\"\n- \"recall memories\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2543,2546,2549],{"name":2544,"slug":2545,"type":15},"Agents","agents",{"name":2547,"slug":2548,"type":15},"Memory","memory",{"name":23,"slug":24,"type":15},57,"https:\u002F\u002Fgithub.com\u002FMystenLabs\u002FMemWal","2026-07-16T06:02:39.838395",{"slug":2554,"name":2554,"fn":2555,"description":2556,"org":2557,"tags":2558,"stars":883,"repoUrl":2566,"updatedAt":2567},"accessing-data","read data from the Sui network","How to read data from the Sui network. Use when choosing or implementing a data access strategy — queries for on-chain state, indexing pipelines, historical lookups, event subscriptions, cross-chain reads, or off-chain blob storage. Covers the two live Sui APIs (gRPC and GraphQL RPC), the Archival Store, the General-Purpose Indexer, the `sui-indexer-alt` custom indexing framework, and Walrus for off-chain blobs.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2559,2562,2563],{"name":2560,"slug":2561,"type":15},"Data Analysis","data-analysis",{"name":14,"slug":8,"type":15},{"name":2564,"slug":2565,"type":15},"Web3","web3","https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fskills","2026-08-01T05:44:32.775598",{"slug":2569,"name":2569,"fn":2570,"description":2571,"org":2572,"tags":2573,"stars":883,"repoUrl":2566,"updatedAt":2580},"composable-move-functions","design composable Sui Move functions","Use when writing Move functions on Sui, especially public APIs. Applies to function visibility (public vs entry), parameter ordering, and return patterns. Use whenever designing function signatures or deciding whether functions should transfer objects or return them.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2574,2577,2578,2579],{"name":2575,"slug":2576,"type":15},"API Development","api-development",{"name":2533,"slug":2534,"type":15},{"name":14,"slug":8,"type":15},{"name":2564,"slug":2565,"type":15},"2026-07-16T06:02:49.198495",{"slug":2582,"name":2582,"fn":2583,"description":2584,"org":2585,"tags":2586,"stars":883,"repoUrl":2566,"updatedAt":2601},"frontend-apps","build Sui dApps with dapp-kit","Sui frontend \u002F dApp development with @mysten\u002Fdapp-kit-react (React) and @mysten\u002Fdapp-kit-core (Vue, vanilla JS, Svelte, Web Components, other frameworks). Use when building browser apps that connect Sui wallets, query on-chain state, or submit transactions. Covers wallet connection, network switching, transaction execution, query patterns with TanStack React Query, and the specific pitfalls of browser + wallet + async-indexer environments. Pair with the `sui-sdks` skill for @mysten\u002Fsui Transaction construction patterns and the `ptbs` skill for PTB semantics.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2587,2590,2593,2594,2597,2600],{"name":2588,"slug":2589,"type":15},"Frontend","frontend",{"name":2591,"slug":2592,"type":15},"React","react",{"name":14,"slug":8,"type":15},{"name":2595,"slug":2596,"type":15},"Svelte","svelte",{"name":2598,"slug":2599,"type":15},"Vue","vue",{"name":2564,"slug":2565,"type":15},"2026-08-01T05:44:28.958473",{"slug":2603,"name":2603,"fn":2604,"description":2605,"org":2606,"tags":2607,"stars":883,"repoUrl":2566,"updatedAt":2613},"generate-sui-agent-config","generate configuration files for Sui projects","Generate a CLAUDE.md or AGENT.md configuration file for Sui projects. Use when setting up a new Sui project, when user mentions \"CLAUDE.md\", \"AGENT.md\", \"agent config\", or when working on a Sui project that does not already have a CLAUDE.md or AGENT.md in the project root.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2608,2611,2612],{"name":2609,"slug":2610,"type":15},"Configuration","configuration",{"name":2506,"slug":2507,"type":15},{"name":14,"slug":8,"type":15},"2026-07-16T06:00:59.981056",{"slug":2615,"name":2615,"fn":2616,"description":2617,"org":2618,"tags":2619,"stars":883,"repoUrl":2566,"updatedAt":2624},"modern-move-syntax","write Move 2024 edition code for Sui","Use when writing Move code on Sui to ensure 2024 edition syntax is used. Applies to method calls, string literals, vector operations, option handling, loops, and struct unpacking. Use whenever writing Move code to avoid legacy function-call syntax patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2620,2621,2622,2623],{"name":2493,"slug":2494,"type":15},{"name":2533,"slug":2534,"type":15},{"name":14,"slug":8,"type":15},{"name":2564,"slug":2565,"type":15},"2026-07-16T06:02:43.277596",{"slug":2626,"name":2626,"fn":2627,"description":2628,"org":2629,"tags":2630,"stars":883,"repoUrl":2566,"updatedAt":2640},"move-unit-testing","write unit tests for Sui Move contracts","Use when writing unit tests for Move smart contracts on Sui. Applies to test function naming, assertions, test attributes, context usage, and cleanup patterns. Use whenever user asks to write tests, add tests, or test a Move module.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2631,2634,2635,2636,2639],{"name":2632,"slug":2633,"type":15},"QA","qa",{"name":2533,"slug":2534,"type":15},{"name":14,"slug":8,"type":15},{"name":2637,"slug":2638,"type":15},"Testing","testing",{"name":2564,"slug":2565,"type":15},"2026-08-01T05:44:30.788585",{"slug":2642,"name":2642,"fn":2643,"description":2644,"org":2645,"tags":2646,"stars":883,"repoUrl":2566,"updatedAt":2653},"naming-conventions","apply Sui Move naming conventions","Use when writing or reviewing Move smart contracts on Sui. Applies to naming structs, error constants, regular constants, events, getter functions, capability types, hot potato types, and dynamic field keys. Use whenever creating new types, functions, or constants in Move code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2647,2650,2651,2652],{"name":2648,"slug":2649,"type":15},"Best Practices","best-practices",{"name":2533,"slug":2534,"type":15},{"name":14,"slug":8,"type":15},{"name":2564,"slug":2565,"type":15},"2026-07-16T06:02:48.830052",37,{"items":2656,"total":980},[2657,2666,2677,2691,2703,2714,2723],{"slug":292,"name":292,"fn":2658,"description":2659,"org":2660,"tags":2661,"stars":25,"repoUrl":26,"updatedAt":2665},"manage Walrus blob lifecycles","Managing Walrus blob lifecycles: epochs, lifetimes, extending blobs, deleting blobs, burning blob objects, sharing blobs, setting blob attributes, and handling large uploads. Use when the user needs to extend a blob's lifetime, delete or burn blobs, create shared blobs, set\u002Fget\u002Fremove blob attributes, plan large data uploads (>1 GiB), estimate storage costs, manage concurrent upload memory, or understand epoch-based expiration. For basic store\u002Fread, see `walrus-cli`. For quilts, see `walrus-quilts`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2662,2663,2664],{"name":20,"slug":21,"type":15},{"name":14,"slug":8,"type":15},{"name":2564,"slug":2565,"type":15},"2026-07-16T06:01:49.056917",{"slug":219,"name":219,"fn":2667,"description":2668,"org":2669,"tags":2670,"stars":25,"repoUrl":26,"updatedAt":2676},"manage Walrus blobs via CLI","Walrus CLI client for storing, reading, and managing blobs from the command line. Use when the user needs to run walrus store, walrus read, walrus blob-status, walrus extend, walrus delete, walrus share, or any other walrus CLI command. Also use for CLI installation, configuration (client_config.yaml), JSON mode for scripting, gas budgets, wallet configuration, and logging. For blob lifecycle management details, see `walrus-blob-lifecycle`. For quilts, see `walrus-quilts`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2671,2674,2675],{"name":2672,"slug":2673,"type":15},"CLI","cli",{"name":20,"slug":21,"type":15},{"name":14,"slug":8,"type":15},"2026-07-16T06:02:52.586222",{"slug":125,"name":125,"fn":2678,"description":2679,"org":2680,"tags":2681,"stars":25,"repoUrl":26,"updatedAt":2690},"encrypt and store data on Walrus","Encrypting data before storing on Walrus using Seal (threshold encryption with onchain access control). Use when the user needs to store private or sensitive data on Walrus, implement access control for blob content, encrypt blobs before uploading, use @mysten\u002Fseal for threshold encryption, or understand Walrus data security guarantees (availability, integrity, confidentiality). Also use when the user asks about Nautilus (TEE-based off-chain computation) in the context of Walrus data. All blobs on Walrus are public by default.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2682,2685,2687,2688,2689],{"name":2683,"slug":2684,"type":15},"Access Control","access-control",{"name":262,"slug":2686,"type":15},"encryption",{"name":2530,"slug":2531,"type":15},{"name":20,"slug":21,"type":15},{"name":14,"slug":8,"type":15},"2026-07-16T06:01:48.700594",{"slug":249,"name":249,"fn":2692,"description":2693,"org":2694,"tags":2695,"stars":25,"repoUrl":26,"updatedAt":2702},"store and read Walrus blobs via HTTP","Walrus publisher and aggregator REST API for storing and reading blobs over HTTP. Use when the user needs to store or read Walrus blobs using HTTP PUT\u002FGET requests, integrate Walrus from any programming language, configure storage options (epochs, deletable, permanent, send_object_to), or parse store\u002Fread API responses. Also use when troubleshooting HTTP API errors or CDN caching issues after upload. For quilt HTTP endpoints, see the `walrus-quilts` skill. For CLI usage, see `walrus-cli`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2696,2699,2700,2701],{"name":2697,"slug":2698,"type":15},"REST API","rest-api",{"name":20,"slug":21,"type":15},{"name":14,"slug":8,"type":15},{"name":2564,"slug":2565,"type":15},"2026-07-16T06:01:48.340552",{"slug":2704,"name":2704,"fn":2705,"description":2706,"org":2707,"tags":2708,"stars":25,"repoUrl":26,"updatedAt":2713},"walrus-memory","integrate persistent memory with Walrus","Walrus Memory (MemWal) — persistent, portable, encrypted memory for AI agents. Use when the user needs to give an AI agent persistent memory across sessions and apps, integrate the @mysten-incubation\u002Fmemwal TypeScript SDK or Python memwal SDK, set up the Walrus Memory MCP server for Cursor\u002FClaude\u002FCodex, configure remember\u002Frecall\u002Fanalyze\u002Frestore operations, manage memory spaces and namespaces, set up delegate keys and accounts, self-host the relayer, or use withMemWal AI middleware (Vercel AI SDK, LangChain, OpenAI SDK). Also use when the user asks about MemWal, Walrus Memory, agent memory, memory spaces, or the memwal-mcp package.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2709,2710,2711,2712],{"name":2544,"slug":2545,"type":15},{"name":262,"slug":2686,"type":15},{"name":2547,"slug":2548,"type":15},{"name":14,"slug":8,"type":15},"2026-07-29T05:39:21.825246",{"slug":336,"name":336,"fn":2715,"description":2716,"org":2717,"tags":2718,"stars":25,"repoUrl":26,"updatedAt":2722},"integrate Walrus blobs in Sui Move","Referencing and wrapping Walrus blobs in Sui Move smart contracts. Use when the user needs to wrap a Walrus Blob object in a custom Move struct, add Walrus as a Move dependency, build a contract that depends on the Walrus package, or integrate on-chain logic with Walrus blob storage. Also use when the user asks about wrapped_blob.move, the Walrus Move package, or how to reference blobs from Move code.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2719,2720,2721],{"name":2533,"slug":2534,"type":15},{"name":20,"slug":21,"type":15},{"name":14,"slug":8,"type":15},"2026-07-16T06:02:53.633159",{"slug":2724,"name":2724,"fn":2725,"description":2726,"org":2727,"tags":2728,"stars":25,"repoUrl":26,"updatedAt":2732},"walrus-overview","provide overview of Walrus storage","High-level overview of Walrus: what it is, how it works, and which tool to use. Use when the user is new to Walrus, asks \"what is Walrus\", \"how does Walrus work\", \"what is a blob\", or needs to choose between CLI, HTTP API, TypeScript SDK, and Move integration. Also use when explaining Walrus architecture, comparing Walrus to AWS S3 or IPFS, explaining the publisher\u002Faggregator\u002Fupload relay distinction, or clarifying blob ID vs Sui object ID. This is the entry-point skill for Walrus newcomers.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2729,2730,2731],{"name":2506,"slug":2507,"type":15},{"name":20,"slug":21,"type":15},{"name":14,"slug":8,"type":15},"2026-07-16T06:02:52.247749"]