# Hyper Elements
> The content engine for agents: React components your agent writes, rendered to emails, pages, PDFs and images, checked in every client, with the fix for what's wrong.
Install: `npm i @hyper-elements/react`. Import components from `@hyper-elements/react`. A template has one root (Email, Page, Document or Canvas); styles go in style={{ }}; space between blocks is the parent's gap (no margins); render() returns { html, text, diagnostics }; validate() checks without rendering; outline() prints the laid-out template as text.
---
# Introduction
Source: https://hyperelements.dev/docs
Hyper Elements is a set of React components for emails, web pages, printed documents and images. You write a template once in JSX, and `render()` gives you the HTML its root asks for, with a plain-text version beside it, on your own server and with no network calls.
```tsx
import { Button, Column, Email, Heading, Text, render } from "@hyper-elements/react";
const welcome = (
Welcome aboardYour account is ready.
);
const { html, text } = await render(welcome);
```
## One template, four outputs
The root decides the output. Change the root and the same content renders somewhere else.
| Root | Output | Written by |
|------|--------|------------|
| `` | Email-safe HTML: tables, px widths, Outlook's markup in conditional comments | `render()` |
| `` | A responsive web page: semantic HTML and flexbox, no client-side JavaScript | `render()` |
| `` | Print-ready HTML on pages of its size, and a PDF | `render()`, and `renderPdf()` from `@hyper-elements/react/pdf` |
| `