Documentation Index
Fetch the complete documentation index at: https://kubo-47e69177.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Project Setup
Prerequisites
- Next.js App Router project.
- Node.js 20+.
- A package manager (
pnpm, npm, or yarn).
Install packages
pnpm add @zapaction/core @zapaction/react @zapaction/query @tanstack/react-query zod
npm install @zapaction/core @zapaction/react @zapaction/query @tanstack/react-query zod
Configure server context
import { setActionContext } from "@zapaction/core";
setActionContext(async () => {
const userId = "demo-user";
return { userId, roles: ["user"] };
});
Define one server action
"use server";
import { defineAction } from "@zapaction/core";
import { z } from "zod";
export const createTodo = defineAction({
name: "createTodo",
input: z.object({ title: z.string().min(1) }),
output: z.object({
id: z.string(),
title: z.string(),
done: z.boolean()
}),
tags: ["todos"],
handler: async ({ input, ctx }) => ({
id: crypto.randomUUID(),
title: `[${ctx.userId}] ${input.title}`,
done: false
})
});
"use client";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { setTagRegistry } from "@zapaction/query";
import { useState } from "react";
setTagRegistry({
todos: [["todos"]]
});
export function Providers({ children }: { children: React.ReactNode }) {
const [queryClient] = useState(() => new QueryClient());
return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;
}
Wire providers in layout
import { Providers } from "./providers";
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<Providers>{children}</Providers>
</body>
</html>
);
}
Verify setup
pnpm test
pnpm --filter @zapaction/example-next-app dev