GSAP in Vue, Nuxt and Svelte
greensock/gsap-skills
Shows how to use GSAP in Vue, Nuxt, Svelte and other lifecycle-based frameworks: create after mount, scope selectors to the component, and revert on unmount.
Pinia Colada data fetching for Vue/Nuxt with useQuery, useMutation.
$ npx skills add secondsky/claude-skills --skill pinia-colada -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install secondsky/claude-skills pinia-colada --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/pinia-colada/skills/pinia-colada .claude/skills/pinia-colada && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pinia-colada" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/pinia-colada/skills/pinia-colada into .claude/skills/pinia-colada/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinia-colada", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/secondsky/claude-skills/tree/main/plugins/pinia-colada/skills/pinia-coladaType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add secondsky/claude-skills --skill pinia-colada -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install secondsky/claude-skills pinia-colada --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/pinia-colada/skills/pinia-colada .agents/skills/pinia-colada && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pinia-colada" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/pinia-colada/skills/pinia-colada into .agents/skills/pinia-colada/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinia-colada", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add secondsky/claude-skills --skill pinia-colada -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install secondsky/claude-skills pinia-colada --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/pinia-colada/skills/pinia-colada .cursor/skills/pinia-colada && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pinia-colada" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/pinia-colada/skills/pinia-colada into .cursor/skills/pinia-colada/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinia-colada", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/secondsky/claude-skills.git --path plugins/pinia-colada/skills/pinia-colada--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add secondsky/claude-skills --skill pinia-colada -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install secondsky/claude-skills pinia-colada --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/pinia-colada/skills/pinia-colada .gemini/skills/pinia-colada && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pinia-colada" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/pinia-colada/skills/pinia-colada into .gemini/skills/pinia-colada/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinia-colada", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install secondsky/claude-skills pinia-coladaInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add secondsky/claude-skills --skill pinia-colada -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/pinia-colada/skills/pinia-colada .github/skills/pinia-colada && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pinia-colada" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/pinia-colada/skills/pinia-colada into .github/skills/pinia-colada/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinia-colada", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add secondsky/claude-skills --skill pinia-colada -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install secondsky/claude-skills pinia-colada --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/pinia-colada/skills/pinia-colada .opencode/skills/pinia-colada && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pinia-colada" agent skill from https://github.com/secondsky/claude-skills/tree/main/plugins/pinia-colada/skills/pinia-colada into .opencode/skills/pinia-colada/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pinia-colada", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pinia-coladaPinia Colada data fetching for Vue/Nuxt with useQuery, useMutation.
Pinia Colada is an agent skill from secondsky/claude-skills. Pinia Colada data fetching for Vue/Nuxt with useQuery, useMutation. Use for async state, query cache, SSR, or encountering invalidation, hydration, TanStack Vue Query migration errors.
Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/common-patterns.md`, `references/configuration.md` and `references/error-catalog.md`).
It works with Vue.js, Nuxt and TanStack. The repository describes itself as: Production-ready skills for Claude Code CLI - Cloudflare, React, Tailwind v4, and AI integrations. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8837836. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bunFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
pinia-colada.esm.devgithub.compinia.vuejs.orgnuxt.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pinia Colada loads about 3.9k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 49 tokens; SKILL.md has 1,173 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from secondsky/claude-skills at commit 8837836, republished under its MIT licence (© secondsky). 1,173 words, ~3,858 tokens.
.claude/skills/pinia-colada/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Status: Production Ready ✅ | Last Updated: 2025-11-28 Latest Version: @pinia/colada@0.17.9 | Dependencies: Vue 3.5.17+, Pinia 2.2.6+ or 3.0+
For Vue Projects:
bun add @pinia/colada pinia # preferred
# or: bun add @pinia/colada piniaFor Nuxt Projects:
bun add @pinia/nuxt @pinia/colada-nuxt # install both Pinia and Pinia Colada modules
# or: bun add @pinia/nuxt @pinia/colada-nuxtWhy this matters:
For Vue Projects:
// src/main.ts
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { PiniaColada } from '@pinia/colada'
import App from './App.vue'
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.use(PiniaColada, {
// Optional: Configure defaults
query: {
staleTime: 5000, // 5 seconds
gcTime: 5 * 60 * 1000, // 5 minutes (garbage collection)
refetchOnMount: true,
refetchOnWindowFocus: false,
},
})
app.mount('#app')For Nuxt Projects:
// nuxt.config.ts
export default defineNuxtConfig({
modules: [
'@pinia/nuxt', // Must be before @pinia/colada-nuxt
'@pinia/colada-nuxt',
],
// Optional: Configure Pinia Colada
piniaColada: {
query: {
staleTime: 5000,
gcTime: 5 * 60 * 1000,
},
},
})CRITICAL:
@pinia/nuxt must be listed before @pinia/colada-nuxt<script setup lang="ts">
import { useQuery } from '@pinia/colada'
interface Todo {
id: number
title: string
completed: boolean
}
async function fetchTodos(): Promise<Todo[]> {
const response = await fetch('/api/todos')
if (!response.ok) {
throw new Error('Failed to fetch todos')
}
return response.json()
}
const {
data, // Ref<Todo[] | undefined>
isPending, // Ref<boolean> - initial loading
isLoading, // Ref<boolean> - any loading (including refetch)
error, // Ref<Error | null>
refresh, // () => Promise<void> - manual refetch
} = useQuery({
key: ['todos'],
query: fetchTodos,
})
</script>
<template>
<div>
<div v-if="isPending">Loading todos...</div>
<div v-else-if="error">Error: {{ error.message }}</div>
<ul v-else-if="data">
<li v-for="todo in data" :key="todo.id">
{{ todo.title }}
</li>
</ul>
</div>
</template>CRITICAL:
key must be an array (or getter returning array) for consistent cachingquery is the async function that fetches dataisPending is true only on initial load, isLoading includes refetches<script setup lang="ts">
import { useMutation, useQueryCache } from '@pinia/colada'
interface NewTodo {
title: string
}
async function createTodo(newTodo: NewTodo) {
const response = await fetch('/api/todos', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(newTodo),
})
if (!response.ok) throw new Error('Failed to create todo')
return response.json()
}
const queryCache = useQueryCache()
const {
mutate, // (variables: NewTodo) => Promise<void>
mutateAsync, // (variables: NewTodo) => Promise<Result>
isPending, // Ref<boolean>
error, // Ref<Error | null>
data, // Ref<Result | undefined>
} = useMutation({
mutation: createTodo,
// Invalidate todos query after mutation succeeds
async onSettled({ id }) {
await queryCache.invalidateQueries({ key: ['todos'] })
},
})
function handleAddTodo(title: string) {
mutate({ title })
}
</script>
<template>
<form @submit.prevent="handleAddTodo(newTitle)">
<input v-model="newTitle" required />
<button type="submit" :disabled="isPending">
{{ isPending ? 'Adding...' : 'Add Todo' }}
</button>
<div v-if="error">Error: {{ error.message }}</div>
</form>
</template>Why this works:
onSettled runs after success or error, perfect for invalidationinvalidateQueries marks matching queries as stale and refetches active onesmutate is fire-and-forget, mutateAsync returns Promise for await✅ Include all variables used in query function in the key
✅ Throw errors in query/mutation functions for proper error handling
✅ Use useQueryCache() for invalidation in mutations
✅ Use isPending for initial load, isLoading for any loading state
✅ Await invalidateQueries() in onSettled when you need data fresh before continuing
✅ Use placeholderData for paginated queries to avoid flashing
✅ Snapshot cache with getQueryData before optimistic updates
✅ Return context from onMutate for rollback in onError
✅ Configure staleTime and gcTime at plugin level for app-wide defaults
✅ Use reusable composables for queries instead of inline useQuery
❌ Never use plain strings as keys - always use arrays
❌ Never return undefined from query function - throw errors instead
❌ Never mutate data.value directly - it's readonly
❌ Never forget to invalidate related queries after mutations
❌ Never use onSuccess in queries (not available, use watch instead)
❌ Never forget to await mutateAsync() - it returns a Promise
❌ Never skip cancelQueries before optimistic updates (causes race conditions)
❌ Never use getQueryData without checking for undefined
❌ Never invalidate queries in onMutate (do it in onSettled)
❌ Never hardcode URLs - use environment variables for API base URLs
This skill prevents 12 documented errors. Here are the top 5:
Error: Data doesn't update in UI after successful mutation
Prevention: Always use invalidateQueries in onSettled:
useMutation({
mutation: createTodo,
async onSettled() {
await queryCache.invalidateQueries({ key: ['todos'] })
},
})See: references/error-catalog.md #1
Error: Optimistic update gets overwritten by in-flight request
Prevention: Always call cancelQueries in onMutate:
onMutate(id) {
cache.cancelQueries({ key: ['todos'] })
// Then do optimistic update
}See: references/error-catalog.md #2
Error: Hydration completed but contains mismatches
Prevention: Set refetchOnMount: false for SSR queries
useQuery({
key: ['todos'],
query: fetchTodos,
refetchOnMount: false, // Prevents SSR hydration mismatch
})See: references/error-catalog.md #3
Error: Query doesn't refetch when variable changes Prevention: Use function for reactive keys:
// ❌ Wrong - static key
key: ['todos', id.value]
// ✅ Correct - reactive key
key: () => ['todos', id.value]See: references/error-catalog.md #4
Error: PiniaColada plugin not found or SSR errors
Prevention: Always put @pinia/nuxt first:
export default defineNuxtConfig({
modules: [
'@pinia/nuxt', // MUST be first
'@pinia/colada-nuxt', // Then Colada
],
})See: references/error-catalog.md #10
For complete error catalog (all 12 errors): See references/error-catalog.md
Detailed guides loaded when needed:
references/setup-guide.md - Complete 8-step setup process
references/common-patterns.md - 12 common patterns
references/error-catalog.md - All 12 documented errors
references/configuration.md - Full configuration reference
references/migration-from-tanstack-vue-query.md - Migration guide
references/setup-guide.md Steps 2-4references/setup-guide.md Step 7references/setup-guide.md Step 5references/setup-guide.md Step 8references/common-patterns.md Pattern 4For complete code examples of all 5 use cases, see references/setup-guide.md and references/common-patterns.md.
Load references/setup-guide.md when:
Load references/common-patterns.md when:
Load references/error-catalog.md when:
Load references/configuration.md when:
Load references/migration-from-tanstack-vue-query.md when:
Required:
Optional:
{
"dependencies": {
"@pinia/colada": "^0.17.9",
"pinia": "^3.0.4",
"vue": "^3.5.25"
},
"devDependencies": {
"@pinia/colada-nuxt": "^0.17.9"
}
}Version Notes:
This skill is based on production usage in multiple Vue 3 and Nuxt applications:
Use this checklist to verify your setup:
@pinia/colada and pinia (or @pinia/colada-nuxt for Nuxt)PiniaColada plugin after createPinia() (Vue) or added to modules (Nuxt)useQueryuseMutationinvalidateQueries in mutation onSettled hookisPending for initial load statestaleTime and gcTime at plugin level (optional)Questions? Issues? Check: Official docs | references/setup-guide.md (8-step process) | references/error-catalog.md (all 12 errors) | references/migration-from-tanstack-vue-query.md (migration) | GitHub
This skill provides production-ready Pinia Colada setup with zero configuration errors. All 12 common issues are documented and prevented.
© secondsky, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references) in plugins/pinia-colada/skills/pinia-colada of secondsky/claude-skills.
Open the folder on GitHubat commit 8837836
Pinia Colada next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pinia Colada this skillsecondsky/claude-skills | 227 | — | ~3.9k | Automated safety check: Pass | MIT | |
| GSAP in Vue, Nuxt and Sveltegreensock/gsap-skills | 16k | 4 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Wagmi Feature Developmentwevm/wagmi | 6.8k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Create Docsvictorgarciaesgi/nuxt-typed-router | 413 | 2 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Formkitformkit/formkit | 4.8k | — | ~1.7k | Automated safety check: Pass | MIT | |
| UithingBayBreezy/ui-thing | 729 | — | ~1.3k | Automated safety check: Pass | Custom licence |
greensock/gsap-skills
Shows how to use GSAP in Vue, Nuxt, Svelte and other lifecycle-based frameworks: create after mount, scope selectors to the component, and revert on unmount.
wevm/wagmi
Walks through adding a Wagmi feature across its layers: a Viem-based core action, TanStack Query options, and React and Vue bindings.
victorgarciaesgi/nuxt-typed-router
Create complete documentation sites for projects. An agent skill from victorgarciaesgi/nuxt-typed-router.
formkit/formkit
A skill your agent uses when working with FormKit forms, validation, schema, or custom inputs in React, Vue, or Nuxt projects.
BayBreezy/ui-thing
Manages UI Thing components, prose, blocks, themes, shortcuts, docs, and MCP-driven workflows in Nuxt projects and in the UI Thing source repo.
megaarmos/vue-spring-bottom-sheet
Build UIs with @nuxt/ui v4 — 125+ accessible Vue components with Tailwind CSS theming.
secondsky/claude-skills
AutoAnimate (@formkit/auto-animate) zero-config animations for React.
secondsky/claude-skills
MUI Base UI unstyled React components with Floating UI. An agent skill from secondsky/claude-skills.
secondsky/claude-skills
This skill should be used when the user asks to "upload images to Cloudflare", "implement direct creator upload", "configure image transformations", "optimize WebP/AVIF", "create image variants"…
secondsky/claude-skills
Deploy Next.js to Cloudflare Workers via the OpenNext adapter (@opennextjs/cloudflare).
secondsky/claude-skills
Cloudflare Sandboxes SDK for secure code execution in Linux containers at edge.
secondsky/claude-skills
GitHub repository automation (CI/CD, issue templates, Dependabot, CodeQL).
Pinia Colada data fetching for Vue/Nuxt with useQuery, useMutation. Pinia Colada is an agent skill from secondsky/claude-skills. Pinia Colada data fetching for Vue/Nuxt with useQuery, useMutation.
Pinia Colada fits situations like: encountering invalidation; tanStack Vue Query migration errors.
Run `npx skills add secondsky/claude-skills --skill pinia-colada -a claude-code`. Or copy the skill folder (plugins/pinia-colada/skills/pinia-colada in secondsky/claude-skills) into .claude/skills/pinia-colada in your project. Claude Code loads it when a task matches its description.
Run `npx skills add secondsky/claude-skills --skill pinia-colada -a codex`. Or copy the skill folder (plugins/pinia-colada/skills/pinia-colada in secondsky/claude-skills) into .agents/skills/pinia-colada in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add secondsky/claude-skills --skill pinia-colada -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pinia-colada, .gemini/skills/pinia-colada, .github/skills/pinia-colada and .opencode/skills/pinia-colada in your project.
Going by SKILL.md and its folder, Pinia Colada needs the command-line tools its instructions call (bun).
SKILL.md names 4 domains. As links in the text: pinia-colada.esm.dev, github.com, pinia.vuejs.org and nuxt.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pinia Colada is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 12k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Pinia Colada: GSAP in Vue, Nuxt and Svelte (greensock/gsap-skills, 16k stars), Wagmi Feature Development (wevm/wagmi, 6.8k stars), Create Docs (victorgarciaesgi/nuxt-typed-router, 413 stars) and Formkit (formkit/formkit, 4.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
secondsky (a GitHub user) maintains it in secondsky/claude-skills, which has 227 GitHub stars. The repository holds 168 skills in this directory. The repository was last updated on September 28, 2026.
Source: secondsky/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.