# Views

> 

Horn supports three page authoring styles out of the box:

- Vue single-file components
- JSX / TSX
- render functions with `h()`

## Document shell

`app/app.vue` is always the document shell. It must render:

- `html`
- `head`
- `body`

That shell is what Horn server-renders and hydrates.

## Route views

Route views live under `app/pages/**`:

- `layout.*` for nested layout nodes
- `page.*` for page components
- `error.*` for route-local error boundaries
- `loading.*` for client navigation loading UI

## Mixed view styles

You can mix styles in one app:

- `/` can be a render-function page
- `/jsx` can be a TSX page
- `/sfc` can be a Vue SFC page

Horn treats them the same at routing and SSR time.
