Walrus sites
Publish a Walrus Site (decentralized website hosted on Walrus). Use when the user mentions Walrus Sites or wants to host a site on Walrus.From its SKILL.md
npx -y skills add pivyme/suiperpower --skill walrus-sitesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.1 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
Preamble (run first)
# Suiperpower telemetry. Routes through the CLI so projects.json + Convex stay in sync.
# Silent on failure so the skill never blocks. Opt out: SUIPERPOWER_TELEMETRY=off.
#
# AGENT NOTE: when this skill finishes, run the matching completion command:
# suiperpower track walrus-sites build completed
# Or use "failed" / "aborted" if it ended that way.
command -v suiperpower >/dev/null 2>&1 && suiperpower track walrus-sites build started >/dev/null 2>&1 &
true
If TEL_PROMPTED is no, before doing real work, ask the user:
Help suiperpower get better. We track which skills get used and how long they take. No code, no file paths, no PII. Change anytime in
~/.suiperpower/config.json.A) Sure, anonymous B) No thanks
Write the answer to ~/.suiperpower/config.json telemetryTier field and create ~/.suiperpower/.telemetry-prompted. Then continue.
What this skill does
Deploys a static frontend (SPA or static-site-generator output) to Walrus Sites so the app is served from decentralized storage at a *.wal.app URL. Handles the site-builder CLI setup, build output preparation, ws-resources.json configuration, deploy command, and optional SuiNS custom subdomain.
When to use it
- The user wants to host a frontend on Walrus Sites instead of Vercel, Netlify, or similar.
- The user wants a decentralized URL (
*.wal.app) for their Sui dApp. - The user already has a static build output (React, Next.js export, Vite, plain HTML) and wants to deploy it.
- The user is targeting the Walrus track at Sui Overflow 2026 and needs decentralized hosting.
When NOT to use it
- If the user has not picked a project yet, use
find-next-sui-ideafirst. - If the user has not scaffolded a project, use
scaffold-projectfirst. - If the user wants to store individual files or blobs on Walrus (not host a site), use
walrus-storageinstead. - If the user needs server-side rendering (Next.js SSR, API routes, server actions), Walrus Sites cannot do that. Help them pick a hybrid: SSR on a traditional host, static shell on Walrus Sites, or restructure as a pure SPA.
- If the user wants to encrypt stored data, use
seal-access-controlwithwalrus-storage. Walrus Sites content is public.
If you activated this and the user actually wants something else, consult skills/SKILL_ROUTER.md and hand off.
Inputs
- A project with a static build output directory (
dist/,build/,out/, or similar). - Optional:
.suiperpower/build-context.mdfromscaffold-project. Read it if present. - A funded Sui wallet with SUI for gas and WAL tokens for storage.
If unclear, interview the user for:
- What framework produces the build? (React/Vite, Next.js static export, plain HTML)
- Where is the build output directory?
- Does the app use client-side routing (SPA)? If yes, a catch-all route is needed.
- How long should the site stay live? (epoch count, 14 days per epoch on mainnet, max ~2 years)
- Do they want a custom SuiNS name (
<name>.wal.app) or the default Base36 subdomain?
Outputs
-
site-builderinstalled viasuiup. -
A production build of the frontend pointing at the correct output directory.
-
ws-resources.jsonat the project root (or build root) with routes, headers, and optional redirects. -
A deployed Walrus Sites Object with a live
*.wal.appURL. -
Append to
.suiperpower/build-context.md:## walrus-sites session, <timestamp> - site object id: <0x...> - url: <base36>.wal.app - suins name: <name>.wal.app or none - epochs: <n> - build dir: <path> - framework: <vite | next-export | plain-html | other> - spa routing: <yes, catch-all configured | no> - open issues: <list>
Workflow
-
Context gathering
- Read
.suiperpower/build-context.mdif it exists. - Confirm the framework, the build command, and the output directory.
- Confirm the app is static-only (no SSR, no API routes). If it is not, explain the constraint and help restructure or pick an alternative.
- Read
-
Install site-builder
- Install via
suiup install site-builder@mainnet(or@testnetfor testnet deploys). - Verify the binary is on
$PATH:site-builder --help. - If the user does not have
suiup, install it first:curl -sSfL https://raw.githubusercontent.com/MystenLabs/suiup/main/install.sh | shthen restart shell.
- Install via
-
Prepare the build
- Run the project's build command (
npm run build,pnpm build, etc.). - Verify
index.htmlexists in the output directory. Walrus Sites requires it. - If the project uses client-side routing (React Router, Vue Router, TanStack Router), create
ws-resources.jsonwith a catch-all route:"/*": "/index.html".
- Run the project's build command (
-
Configure ws-resources.json
- Place
ws-resources.jsonin the build output directory (same level asindex.html). - Add
routesfor SPA catch-all if needed. - Add
headersfor cache control on static assets (JS, CSS, images). - Add
redirectsfor any legacy paths. - See
references/walrus-sites-quickstart.mdfor the full config shape.
- Place
-
Deploy
- First deploy:
site-builder deploy --epochs <N> <BUILD_DIR>. - Update existing site: same command if
ws-resources.jsonhasobject_idset from a prior deploy. - Capture the site Object ID from the output.
- First deploy:
-
Get the URL
- Run
site-builder convert <OBJECT_ID>to get the Base36 subdomain. - The live URL is
https://<base36>.wal.app. - Open it in a browser and verify the site loads.
- Run
-
Optional: SuiNS custom name
- If the user owns a SuiNS name, they can point it at the site Object for
<name>.wal.app. - This is a convenience step. The Base36 URL always works.
- If the user owns a SuiNS name, they can point it at the site Object for
-
Writeback
- Append session details to
.suiperpower/build-context.md.
- Append session details to
-
Closing handoff
- If
.suiperpower/intent.mdexists and the session was non-trivial (new module, new sponsor integration, or material changes to public functions), recommendverify-against-intentas the next step so drift is caught before shipping. - If no
intent.mdexists and the session was non-trivial, surface that gap once: offerclarify-intentto backfill, do not force it.
- If
Quality gate (anti-slop)
Before reporting done, the skill asks itself the following and refuses to declare success if any answer is no:
- Does the deployed URL actually load in a browser and render the expected content?
- Is the build output directory correct (not the project root, not
src/)? - Does
index.htmlexist in the deployed directory? - If the app uses client-side routing, is the catch-all route (
/*to/index.html) configured inws-resources.json? - Was the epoch count explicitly chosen by the user, not silently defaulted?
- Is the site Object ID recorded in
build-context.mdso the user can update or destroy later? - If the framework uses SSR or API routes, was the user warned and the build adjusted to static export?
If any answer is no, the skill reports the gap and works through it before claiming the deploy is complete.
References
On-demand references (load when relevant to the user's question):
references/walrus-sites-quickstart.md: site-builder CLI commands, ws-resources.json config shape, deploy flow, SuiNS setup.references/walrus-sites-pitfalls.md: Common mistakes with Walrus Sites deploys and how to avoid them.
External docs (fetch at runtime for the latest CLI flags and config):
- Walrus Sites docs: https://docs.wal.app/walrus-sites/overview.html
- site-builder CLI: https://docs.wal.app/walrus-sites/tutorial.html
Use in your agent
- Claude Code:
claude "/suiper:walrus-sites <your message>" - Codex:
codex "/walrus-sites <your message>" - Grok Build: run
grok, then/walrus-sites <your message>in the session - Cursor: paste a chat message that includes a phrase like "host on Walrus" or "deploy to wal.app", or load
~/.cursor/rules/walrus-sites.mdcand reference it.
If you activated this and the user actually wants something else, consult skills/SKILL_ROUTER.md and hand off.
What ships with it: 3 files
5.9 KB alongside SKILL.md
agents/
- openai.yaml320 B