Skip to main content
Veryfront uses file-system based routing. Folders and files under app/ (or pages/) define routes; layouts compose down the tree; brackets in path segments mark dynamic params. Examples below use the default app router. Set router: "pages" in veryfront.config.ts to switch to the pages router.

Prerequisites

  • A project created with veryfront init (see Create project).
  • The dev server is the easiest way to test routes: veryfront dev.

Router equivalents

Veryfront supports both router styles. The main difference is file shape: Use the app router when you want the newer directory-per-route shape. Use the pages router when you want the flatter file-per-route layout.

Basic pages

A page exports a default React component:
Run veryfront dev and open http://localhost:3000. The page should render Welcome.

Layouts

Layouts wrap pages and persist across navigation. Create layout.tsx at any level:
Nested layouts compose automatically:
/dashboard/settings renders inside both the root layout and the dashboard layout. layout.tsx and the other supported layout.* extensions are reserved layout metadata at every directory level in both routers. They wrap descendant pages and never create a /layout route.

Dynamic routes

Use brackets for dynamic segments:
Access params via the usePageContext hook:
Open http://localhost:3000/blog/hello. The page should render Post: hello.

Catch-all routes

Use [...segments] to match multiple path segments:

MDX pages

Rename any page to .mdx to write content in Markdown with JSX:
MDX pages support frontmatter:
Access frontmatter from components using usePageContext() from veryfront/context:

Override rendered MDX elements

Wrap an MDX page or layout with MDXProvider to replace generated elements:
Nested providers inherit entries from outer providers. A nearer provider wins for duplicate keys. Call useMDXComponents(localOverrides) when a component needs the effective map; local entries take final precedence. MDXProvider supplies application-owned React components to already compiled MDX. It does not compile or sanitize arbitrary strings. Render runtime Markdown strings with veryfront/markdown.

Reading server data from a layout or nested component

A page’s getServerData props are passed to the page component. To read them from a layout or a deeply-nested component without prop-drilling, use usePageContext().data:
data is the object your page returned as getServerData’s props. It is populated identically on the server render, in the hydration markup, and after client-side navigation. A page without getServerData sees an empty object.

Client components

By default, components render on the server. Add 'use client' to make a component interactive:
Use the Link component for client-side navigation:
Veryfront can prefetch eligible internal links before navigation. Use prefetch={false} when a link must not prefetch. Programmatic navigation:

Reading the live location

useRouter() is the single hook for location and navigation. Its pathname, query, and params update reactively on client-side navigation:
By default a query-only navigation refetches the page so server data that depends on the query is never shown stale. If a page’s query is purely client-side state (tabs, filters), opt into the soft fast path, updating the URL and re-rendering without a refetch, with the router’s shouldRevalidate option.

Verify it worked

Start the dev server and request each page you added:
Each request should return HTTP/1.1 200 OK. Visit the same URLs in a browser to confirm the React component renders without console errors.