---
title: Common hooks
---

The optional `src/common-hooks.js` (or `.ts`, `.jsx`, `.tsx`) file can be used to implement customizations that are common to the server and the client:

```tsx
import type { CommonHooks } from "rakkasjs";

const hooks: CommonHooks = {
  extendPageContext(ctx) {
    // Add properties to the page context,
    // especially to ctx.locals.
    // Extensions added here will be
    // available both on the server and the client.
    // Client and server `extendPageContext` hooks
    // will be called _before_ this.
  },
  wrapApp(app) {
    // Wrap the Rakkas application in some provider
    // component.
    return <SomeProvider>{app}</SomeProvider>;
  },
  beforePageLookup(ctx) {
    // This will be called before the page route
    // lookup is performed.
    // - Return `false` to prevent the page from rendering.
    // - Return `{ redirect: "/some/url" }` to redirect.
    // - Return `{ rewrite: "/new/url" }` to render as if the URL was `/new/url`.
    // - Return true to continue as normal.
  },
};

export default hooks;
```
