# The next era of web interfaces\. Built in Rust\.

An [extremely performant](https://github.com/Proa-Labs/framework-benchmarks), batteries\-included Rust web framework built around a new programming model for composable, multi\-target rendering\.

- [Get started](/docs)
- [Watch intro](https://youtu.be/-CfCyvIKYyo)

## One object\. Every render target\.

HTML, Markdown, and other render targets, from one typed component\.

[Watch multi\-target rendering](https://youtu.be/pJx84jdBDKU)

```
ProductCard::new(product)
```

```
impl<L: DataLoader> MdRenderSync<L> for ProductCard {
    fn render_md(self, cx: &mut WebContext<L>) -> Result<(), WriteError> {
        md_sync! { r###"
            # {self.product.name}

            {Link::new("Buy now", self.product.url)}
            "###
        }
        .render_md(cx)
    }
}
```

```
md_sync! { r###"
    [{self.label}]({self.href})
    "###
}
```

```
impl<L: DataLoader> WebRenderSync<L> for ProductCard {
    fn render(self, cx: &mut WebContext<L>) -> Result<(), WriteError> {
        html_sync! {
            <article data-product-card>
                <h2>{self.product.name}</h2>
                {Link::new("Buy now", self.product.url)}
            </article>
        }
        .render(cx)
    }
}
```

```
html_sync! {
    <a href={self.href} data-link>
        {self.label}
    </a>
}
```

## Build fast, information\-dense apps\.

Explore re\-creations of GitHub, Sentry, and Airbnb, built in Proa with fast server rendering and selective interactivity\.

- [View Showcase](/ecosystem/apps#reference-showcases)
- [Benchmarks](https://github.com/Proa-Labs/framework-benchmarks)

| | Proa render p50 | React renderToString p50 | faster |
| --- | --- | --- | --- |
| GitHub | 23\.5 us | 5\.56 ms | 237x |
| Sentry | 155 us | 25\.4 ms | 163x |
| Airbnb | 11\.5 us | 598 us | 52x |

Warm production p50s measured on an 8\-vCPU AMD EPYC\-Milan VPS\.

Independent demos\. Not affiliated with or endorsed by GitHub, Sentry, or Airbnb\.

## The numbers behind the speed\.

### Render speed

![P50 render latency across 17 renderers and three workloads\. Proa uses a fresh owned RenderBuffer, with allocation included and String conversion excluded\. Proa was refreshed November 11; peers retain October 21 captures on the same Apple M4 Max\.](/static/images/benchmarks/01-canonical-scoreboard.svg)

### HTTP capacity

![HTTP throughput, CPU per response, and peak memory for Proa, React, Marko, Go, and SvelteKit\. The dated product\-grid capture measured Proa at 20,863 complete responses per second with 9\.6 MiB peak memory\.](/static/images/benchmarks/21-canonical-pages-http.svg)

### Suspense under load

![Proa and SvelteKit streaming under increasing load on Apple M4 Max, including throughput, memory, latency, and failures\. SvelteKit response end delivers promised data; Proa delivers resolved HTML\. See the methodology for completed\-browser comparisons\.](/static/images/benchmarks/20-suspense-load.svg)

Proa refreshed November 11, 2026 · Peers retain October 21 captures · Apple M4 Max

[View benchmarks](https://github.com/Proa-Labs/framework-benchmarks)

## Build your design system\.

Proa UI offers [Shadcn](https://ui.shadcn.com) style Proa components\. Source in your repo, in typed Rust\. Theme it, compose it, ship it\.

[Browse Components](https://ui.proa.so/components)

## Everything people want from a modern web app, without the render tax underneath it\.

A component system and a framework surface, not a templating engine\.

Framework

### Framework primitives beyond template glue\.

Proa keeps streaming, request data, routing, metadata, and response control inside the same typed WebContext as your components\.

#### Streaming SSR, in order or out of order

Flush HTML in document order when sequence matters, or let Suspense boundaries stream ready chunks out of order when slow data should not block the page\.

#### DataLoader\-backed WebContext

Every render has typed access to request\-scoped data, response metadata, route state, and loader caching through the same WebContext components already receive\.

#### Typed SSR framework semantics

Layouts, routing, metadata, static assets, forms, mutations, and progressive navigation compose through the same Rust component model instead of template glue\.

Interactivity

### Add interactivity without giving up native SSR\.

Keep the page as server\-rendered HTML, then opt specific controls into client behavior with typed signals and event handlers\. Proa compiles only the moving pieces into JavaScript\.

#### RSJS islands

Use signal\(\.\.\.\), bind\_value, typed events, and named handlers in Rust\. The compiler lowers the client behavior\.

#### Tiny per\-island JavaScript

Each hydrated RSJS island emits a small vanilla\-JS module plus seed state, served with a shared runtime around 1\.3 KB gzipped\.

Adoption

### Keep the stack you already have\. Move one route first\.

Go Axum\-native for Proa routing and responses, or call Proa over FFI from Node, Go, Python, Ruby, or Java\.

#### Run alongside your existing app

Proxy one route to Proa, leave the rest on Next\.js or Rails, then compare latency and cost in production\.

#### Security by default

Auto\-escaped output, cross\-origin request protection, security headers, and fixed\-upstream proxying are part of the framework surface\.

#### Accessibility at compile time

WCAG and WAI\-ARIA checks run during cargo build so common markup defects fail before deploy\.

## Frequently asked questions

### What is Proa?

Proa is a Rust web framework for composable, multi\-target rendering\. It compiles HTML templates during the application build and supports streaming server rendering, typed Markdown, and browser islands\.

### How does Proa add browser interactivity?

RSJS lets you author signals, typed event handlers, and interactive islands in Rust\. Proa compiles the client behavior into JavaScript while keeping the rest of the page server rendered\.

### Can Proa run alongside an existing application?

Yes\. Route part of an existing application to Proa and adopt it incrementally\. The framework also supports React interop when an existing client component needs to remain in use\.

### Can coding agents read Proa documentation?

Yes\. Proa provides Markdown pages, a public JSON documentation API, authoring skills, and a Streamable HTTP MCP server\. Documentation reads require no account or API key\.

## Start building with Proa\.

[Read the quickstart](/docs)

## Explore

- [Apps](/ecosystem/apps)
- [Ecosystem](/ecosystem)
- [Team](/team)
- [Contact](/contact)
- [LinkedIn](https://www.linkedin.com/company/proa-labs/)

## Resources

- [Docs](/docs)
- [API \& MCP](/docs/api)
- [Sitemap](/sitemap.xml)
- [For agents](/llms.txt)
- [Privacy](/privacy)

