# server/routes

> 

Each file in `server/routes/` becomes a raw HTTP route.

Paths come from the file system. Methods live on the route module's default export object.

```ts
import type { InvocationContext } from "vuloom/server";

export default {
  middleware: ["server-trace-route"],
  async GET() {
    return Response.json({ ok: true });
  },
  async POST(ctx: InvocationContext) {
    return Response.json({
      body: await ctx.request.text(),
    });
  },
};
```

Route files can also export:

- route-local middleware with `middleware: ['auth']` or middleware functions
- route metadata with `meta`
- a fallback `handler()` for methods you do not define explicitly

Route ownership is strict: if a `server/routes` pattern overlaps with an `app/pages` pattern, Vuloom throws.
