About Routers

A router in Shapeless is a collection of procedures (API endpoints) grouped by feature or resource. For example:

  • userRouter for user management
  • postRouter for blog posts
  • paymentRouter for payments
resources/
  ├── shapeless.ts       # Initialize Shapeless
  ├── index.ts           # Main appRouter
  └── routers/           # Router directory
    ├── user-router.ts
    ├── post-router.ts
    └── payment-router.ts

Creating a Router

  1. Create a new router file in resources/routers:
// resources/routers/post-router.ts
import { app } from "../shapeless"
 
export const postRouter = app.router({
  // Add procedures here
})
  1. Add procedures to your router:
// resources/routers/post-router.ts
import { app, publicProcedure } from "../shapeless"
 
export const postRouter = app.router({
  list: publicProcedure.get(({ c }) => {
    return c.json({ posts: [] })
  }),
 
  create: publicProcedure.post(({ c }) => {
    return c.json({ success: true })
  }),
})
  1. Register your router in the main appRouter:
// resources/index.ts
import { app } from "./shapeless"
import { postRouter } from "./routers/post-router"
 
const api = app
  .router()
  .basePath("/api")
  .use(app.defaults.cors)
  .onError(app.defaults.errorHandler)
 
const appRouter = app.mergeRouters(api, {
  post: postRouter,
})
 
export type AppRouter = typeof appRouter
export default appRouter

Route URLs

Each procedure maps to an HTTP endpoint combining:

  • Your API base path (/api)
  • The router name (post)
  • The procedure name (list)

For example, the list procedure is available at: