Public routes are accessible without authentication and are perfect for endpoints that need to be available to all users.
import { router, publicProcedure } from '../lib/trpc'; import { z } from 'zod'; export const publicRouter = router({ // Simple health check healthCheck: publicProcedure.query(() => { return { status: 'ok' }; }), // Public data with input validation getPublicData: publicProcedure .input(z.object({ id: z.string() })) .query(async ({ input }) => { return { data: 'public data' }; }), // Public mutation createPublicItem: publicProcedure .input(z.object({ name: z.string() })) .mutation(async ({ input }) => { return { success: true, item: input }; }), });
// apps/server/src/routers/health.ts import { router, publicProcedure } from '../lib/trpc'; export const healthRouter = router({ check: publicProcedure.query(() => { return { status: 'ok', timestamp: new Date().toISOString(), version: process.env.VERSION, }; }), });
// apps/server/src/routers/search.ts import { router, publicProcedure } from '../lib/trpc'; import { z } from 'zod'; export const searchRouter = router({ search: publicProcedure .input(z.object({ query: z.string(), limit: z.number().optional(), })) .query(async ({ input }) => { // Implement your search logic here return { results: [], total: 0, }; }), });
// In your React component function PublicDataComponent() { const { data, isLoading } = trpc.getPublicData.useQuery({ id: '123' }); return ( <div> {isLoading ? 'Loading...' : JSON.stringify(data)} </div> ); }