The Streaming Framework
Server-rendered applications with standards.
Async Generator JSX
Stream HTML with familiar JSX components, no client-side JS required.
Performance First
Run operations in parallel and stream results on the fly.
Type-Safe Forms
Generate forms, validate input, and stream uploads.
Lightweight
Essential features, zero dependencies.
Streaming Uploads
Low memory multipart form data streaming.
Web Standards
Built on the Fetch API, ovr runs everywhere.
Introduction
Designed to optimize Time-To-First-Byte, ovr evaluates components in parallel and streams HTML in order by producing an AsyncGenerator of HTML that feeds directly into the streamed response.
For example, for the following component, ovr generates three chunks of HTML:
function Component() {
return <p>hello world</p>;
}
"<p>"; // 1. streamed immediately
"hello world"; // 2. next
"</p>"; // 3. last
Asynchronous streaming
While this streaming is trivial for a paragraph, consider when a component is asynchronous. Instead of waiting for Username to resolve before sending the entire Component, ovr will send what it has immediately and stream the rest as it becomes available.
function Component() {
return (
<p>
hello <Username />
</p>
);
}
async function Username() {
// slow async work...
const user = await getUser();
return <span>{user.name}</span>;
}
"<p>";
"hello ";
// streamed immediately
// as soon as getUser() resolves
"<span>";
"username";
"</span>";
"</p>";
Render how browsers read
Web browsers are built for streaming, they parse and paint HTML as it arrives. Most critically, the head of the document can be sent immediately to start the requests for linked assets (JavaScript, CSS, etc.) and start parsing before the HTML has finished streaming.
ovr’s architecture gives you streaming server-side rendering out of the box. No hydration bundle, no buffering—just HTML delivered in order, as soon as it’s ready.
Constraints
ovr is intentionally constrained. These rules keep the framework small and shape the API.
- No client JS required. Everything should work when no client-side JavaScript runs.
- Streaming first. Responses and request parsing should start immediately, without buffering whole documents or uploads in memory.
- Stateless by default. Core APIs should not require server-side state to work correctly.