Skip to Content

Quick Start

This quick start guide will show you how to set up CrudKit with a simple example. We’ll create a basic users CRUD API using Drizzle ORM, tRPC, and React Query.

Setting Up Your Schema

First, define your database schema using Drizzle:

// schema.ts import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core'; export const users = pgTable('users', { id: serial('id').primaryKey(), name: text('name').notNull(), email: text('email').notNull().unique(), createdAt: timestamp('created_at').defaultNow(), });

Create the tRPC Router

Next, use CrudKit to generate a tRPC router for your schema:

// api/routers/users.ts import { createTRPCRouter, publicProcedure, protectedProcedure } from '../trpc'; import { generateRouter } from 'crudkit'; import { db } from '../db'; import { users } from '../schema'; export const usersRouter = generateRouter( { table: users, }, { createTRPCRouter, publicProcedure, protectedProcedure, } ); // Merge with your main router // api/root.ts import { createTRPCRouter } from './trpc'; import { usersRouter } from './routers/users'; export const appRouter = createTRPCRouter({ users: usersRouter, }); export type AppRouter = typeof appRouter;

Generate React Query Hooks

Now you can generate React Query hooks to use in your frontend components:

// hooks/use-users.ts import { generateReactQueryHooks } from 'crudkit'; import { trpc } from '../utils/trpc'; import { users } from '../schema'; export const useUsers = generateReactQueryHooks( { routerPath: 'users', }, trpc );

Using the Hooks in a Component

Finally, use the generated hooks in your React components:

// components/UsersList.tsx import { useUsers } from '../hooks/use-users'; export function UsersList() { const { data, isLoading } = useUsers.useGetAll(); const { create, isLoading: isCreating } = useUsers.useCreate(); const handleCreateUser = () => { create({ name: 'John Doe', email: 'john@example.com', }); }; if (isLoading) return <div>Loading...</div>; return ( <div> <h1>Users</h1> <button onClick={handleCreateUser} disabled={isCreating}> Add User </button> <ul> {data?.map((user) => ( <li key={user.id}>{user.name} - {user.email}</li> ))} </ul> </div> ); }

Next Steps

Congratulations! You’ve set up a basic CRUD application with CrudKit. Check out the Basic Usage guide for more detailed examples and best practices.

Last updated on