skills/nextjs/nextjs-server-actions/SKILL.md
Implement mutations, forms, and RPC-style calls with Next.js Server Actions. Use when implementing Server Actions, form mutations, or RPC-style data mutations in Next.js.
npx skillsauth add hoangnguyen0403/agent-skills-standard nextjs-server-actionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
[!WARNING] If project uses
pages/directory instead of App Router, ignore this skill entirely.
Handle form submissions and mutations without creating API endpoints.
Directive: Always start file or function with 'use server'. Access formData.get('title') for typed form fields. Export async functions for mutations.
Form Handling: Use action prop of <form> to trigger actions via action={createPost}. Use useFormStatus() for pending states — disabled={pending} on buttons. Use useActionState (React 19/Next.js 15) for action={action} form state with <form action={action}>.
Data Refresh: Trigger UI updates using revalidatePath('/') or revalidateTag('tag-name') after successful mutation.
Interactivity: For non-form triggers, invoke actions using useTransition hook to handle loading UI and prevent page from blocking.
Optimistic Updates: Use useOptimistic to show expected UI state immediately before server confirms mutation.
Security: Sanitize all inputs from FormData. Perform auth checks inside every action (await auth()). Limit file uploads by size and MIME type.
Form: <form action={createPost}> (Progressive enhancements work without JS).
Event Handler: onClick={() => createPost(data)}.
Pending State: Use useFormStatus hook (must inside component rendered within form).
Always validate inputs with z.object({ schema and safeParse before processing. Check authorization within action. See Secure Action Example.
Use useActionState (React 19/Next.js 15+) for state handling and useFormStatus for button loading states.
redirect() for success navigation; it throws error that Next.js catches to handle redirect.actions.ts to avoid closure bugs.redirect() in try/catch: redirect() throws; catching it suppresses redirect.development
Summarizes GitHub PR, GitLab MR, or Azure DevOps PR metadata, review threads, changed files, and template completeness. Use during review-ticket or code-review workflows when PR/MR context exists.
tools
Development tools, linting, and build config for TypeScript. Use when configuring ESLint, Prettier, Jest, Vitest, tsconfig, or any TS build tooling.
development
Validate input, secure auth tokens, and prevent injection attacks in TypeScript. Use when validating input, handling auth tokens, sanitizing data, or managing secrets and sensitive configuration.
development
Apply modern TypeScript standards for type safety and maintainability. Use when working with types, interfaces, generics, enums, unions, or tsconfig settings.