# 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 aboard Your 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` | | `` | A PNG or SVG image of a fixed size | `renderImage()` from `@hyper-elements/react/image` | ## What you stop doing - **Nesting tables by hand.** A `Row` of `Column`s becomes the tables Outlook needs, with every width worked out in px before anything is written. - **Writing Outlook conditional comments.** Outlook-only markup goes inside `