📈 GH Trending Explorer 🎲 Surprise me

← all repos

Proa-Labs / proa

git clone https://github.com/Proa-Labs/proa.git proa-cli-v0.1.3 · 9d ago

—

+26
stars, 24h · #570
+~182
stars, 7 days · #707
+~780
stars, 30 days · #692
304
★ total · +182% this week
14
forks · 0 open issues

Star history (as recorded here)

2026-10-20 · 229 ★ 2026-10-22 · 304 ★
LanguageRust
LicenseApache-2.0
Created2026-09-12 (1mo ago)
Last push1d ago
Watchers0
OwnerOrganization

Links

README excerpt
# Proa
**The next era of web interfaces. Built in Rust.**
Proa is building the next generation of interface infrastructure for the web.
It enables you to create extremely fast, scalable applications and services in
Rust by bringing compiled components, streaming, data
loading, and fine-grained interactive islands into one framework.
**Get started** ·
**Explore apps** ·
See the benchmarks
---
## A programming model for multiple interfaces
Proa's larger vision is one typed, compiled interface layer that produces the
right representation for whoever asks: complete HTML for people, targeted
behavior for browsers, and dense machine-readable output for agents.
This repository provides the compiled renderer, built-in render traits for
HTML and Markdown, browser interactivity, streaming, data loading, and framework
tooling. Other render targets can define their own rendering implementations,
whether for a format such as JSON or for a native rendering backend.
## Start in five minutes
Install the latest stable CLI through Cargo using a current Rust toolchain:
 [code] 
Follow the quickstart to install the styling tools,
create a site, edit its first route, and run Proa's checks.
## Your first page is a typed Rust component
Use `WebRenderSync` and `html_sync!` for the normal fast path:
 [code] 
The macro validates the template at compile time, consolidates adjacent static
markup, and preserves the correct escaping behavior for dynamic slots.
When a component genuinely needs to await work, switch to `WebRender` and
`html!`. Markdown follows the same split with `MdRenderSync` / `md_sync!` and
`MdRender` / `md!`.
## Add interactivity where it belongs
An RSJS island is still a normal server component. Add signals and event
handlers, and Proa emits the server-rendered HTML plus the JavaScript required
for that island:
 [code] 
The browser starts from the HTML the server already rendered. It does not
re-run the server component tree to make the page interactive. See the
RSJS guide for composition, queries, shared state, forms, and
current limitations.
## Markdown interfaces with MdRender
A component can expose both an HTML page and a Markdown document from the
same data. Give the `Greeting` component above a Markdown implementation:
 [code] 
`MdRenderSync` and `md_sync!` are the synchronous path. Use `MdRender` and
`md!` when a Markdown component needs to await work. Interpolated values are
escaped, and typed children compose into larger documents. Both renderers
use the same component data and define their own output.
For an existing synchronous HTML component, enable the core crate's
`html-to-markdown` feature and delegate with
`proa_core::to_markdown(self).render_md(cx)`. The adapter captures its HTML and
converts semantic elements to Markdown. It allocates during conversion;
handwritten Markdown remains the fast path and controls custom representations.
See the HTML-to-Markdown example.
See the Markdown rendering guide for
composition, async rendering, and se