Docs

Playground

Interactive demo with live editing, benchmarks, and three SSR engines side by side

Open Markdown

The Proa Playground is an interactive environment for exploring Proa's SSR engine. Edit JSON props, see renders update instantly, compare performance against React on Node.js and Bun, and run load tests, all from your browser.

Getting started

Download and run

Download the package for your platform from the Ecosystem Apps page, extract it, and run:

tar xzf proa-playground-*.tar.gz
cd proa-playground-*
./run.sh

The server starts at http://localhost:3001.

Docker

If you have Docker installed, you can build and run from inside the extracted package:

docker build -t proa/playground .
docker run -p 3001:3001 proa/playground

All dependencies (Node 22, Bun) are included in the image.

Pages

Playground (/playground)

The main interactive UI. It has three panels:

Use the breadcrumb at the top to switch between travel and footwear showcases and pages (Home, Search, Listing, Catalog, Product).

Reference showcases (/ecosystem/apps#reference-showcases)

The Apps page includes reference showcase links for every combination of showcase and engine:

ShowcasePagesEngines
AirbnbHome, Search, ListingProa, Node, Bun
NikeCatalog, ProductProa, Node, Bun

Each showcase page lives under /showcase/... and is a pixel-perfect recreation rendered with the selected SSR engine. Links within each page stay within the same engine, clicking the Airbnb logo on a Bun page navigates to the Bun home page, not the Proa one.

API Docs (/api/docs)

Interactive API documentation powered by Scalar. Covers all endpoints with full request/response schemas and per-page JSON examples you can send directly from the browser.

Engines

The playground runs three SSR engines for comparison:

EngineHow it works
Proa (Rust)Templates compiled to byte sequences at build time. No interpreter, no GC, no runtime.
React (Node)renderToString() served by Hono on Node.js 20+.
React (Bun)Same React/Hono code, served via Bun.serve() for native HTTP I/O.

Proa always works. Node and Bun are optional, if they're not installed, the playground runs with just Proa.

Requirements

DependencyRequiredMinimum version
Proa binaryYesIncluded in package
Node.jsOptional20+
BunOptional1.3+
npm or pnpmOptionalAny (for JS dep install)

The run.sh script checks versions and installs JS dependencies automatically on first launch.

Rendering

Single render

Click Render or press Ctrl/Cmd+Enter to render the current page with the JSON props in the editor. The stats bar updates with timing:

Engine switching

Use the engine toggle buttons (Proa, React Node, React Bun) to switch which engine renders the page. The preview updates on the next render. The Open full page link opens the showcase page in a new tab for the selected engine.

curl

Click Copy curl to copy a ready-to-use curl command for the current page and engine. Run it from your terminal for cleaner timing without browser overhead.

Load testing

Click Load Test to run a benchmark across all three engines. Choose a preset:

PresetRequestsConcurrency
Light50010
Medium2,00050
Heavy5,000100
Stress10,000200

The test runs each engine sequentially and reports:

Accuracy note

All timings in the playground are slower than isolated benchmarks. The server handles the benchmark while also serving requests, all three engines share the same CPU, and the browser competes for resources. Relative comparisons between engines are meaningful; for absolute numbers, use curl or the FFI library.

API endpoints

MethodPathDescription
POST/api/renderRender a page. Body: {"page": "listing", "props": {...}}
POST/api/loadtestRun load test. Body: {"page": "listing", "iterations": 2000, "concurrency": 50}
GET/api/propsDefault JSON props for all pages
GET/api/openapi.jsonOpenAPI 3.1 spec
GET/api/docsScalar API reference UI
GET/healthHealth check: {"status": "ok", "engine": "proa"}

Full schemas and examples are available at /api/docs.

Package contents

proa-playground-{target}/
proa-playground
run.sh
Dockerfile
README.md
LICENSE
showcase-props.json
ffi/
libproa_demo.dylib
proa.h
public/
images/
fonts/
assets/
hono-ssr/
server.ts
package.json
react-ssr-shared/
src/
package.json
FileDescription
proa-playgroundAxum HTTP server with embedded playground UI
run.sh / run.batLaunch script with version checks and dep install
DockerfileBuild a self-contained Docker image
ffi/Shared library + C header for calling renders from any language
public/Images, fonts, CSS, JS for the showcase pages
hono-ssr/Hono server for React SSR comparison engines
react-ssr-shared/React components (same pages rendered by Node/Bun)
showcase-props.jsonDefault props for all showcase pages

Search

Type at least 2 characters