# lorkydey/prnext architecture

> Architecture diagram of the GitHub repository lorkydey/prnext, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/lorkydey/prnext
- Repository: https://github.com/lorkydey/prnext

## Overview

PRNext is an early-alpha React/npm framework focused on reducing runtime memory use while retaining partial Next.js compatibility. Its main workflow is a developer invoking the CLI to start the native server, which routes requests to rendering workers and returns rendered responses; app rendering also supports streaming, navigation, metadata, and server actions. The repository includes compatibility APIs, caching, and configurable runtime profiles. Some capability links are based on the README or SOURCE INDEX; unsampled implementations and their internal call paths are not assumed.

Main entry points: [`packages/prnext/runtime/rsc-worker.mjs`](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/rsc-worker.mjs) (App render worker), [`crates/prnext/src/server.rs`](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/server.rs) (HTTP server), [`packages/prnext/cli.mjs`](https://github.com/lorkydey/prnext/blob/main/packages/prnext/cli.mjs) (PRNext CLI), [`packages/prnext/runtime/app-routing.mjs`](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-routing.mjs) (App routing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry and server"]
  node_cli["PRNext CLI<br/>[cli.mjs]"]
  node_native["Native resolver<br/>[resolve.mjs]"]
  node_server["HTTP server<br/>[server.rs]"]
  node_pool["Worker pool<br/>[pool.rs]"]
end

subgraph group_routing["Routing and rendering"]
  node_manifest["Route manifest<br/>[manifest.rs]"]
  node_custom["Custom routes<br/>[custom_routes.rs]"]
  node_middleware["Middleware<br/>[middleware.rs]"]
  node_proxy["Proxy handling<br/>[proxy.rs]"]
  node_appworker["App render worker<br/>[rsc-worker.mjs]"]
  node_approute["App routing<br/>[app-routing.mjs]"]
  node_branch["Branch rendering"]
  node_metadata["App metadata<br/>[app-metadata.mjs]"]
  node_partial["Partial model"]
  node_actions["Server actions<br/>[action-server.mjs]"]
end

subgraph group_compat["Compatibility and cache"]
  node_compatheaders["Request APIs<br/>[headers.cjs]"]
  node_cache[("Data cache<br/>[data-cache.cjs]")]
  node_static["Static generation"]
  node_compatrouter["Router compatibility<br/>[router.cjs]"]
  node_compatpaths["Path compatibility<br/>[paths.cjs]"]
end

subgraph group_profiles["Runtime controls"]
  node_profile["Runtime profiles<br/>[profile.rs]"]
end

node_developer(("Developer"))

node_developer -->|"runs commands"| node_cli
node_cli -->|"resolves binary"| node_native
node_native -.->|"launches server"| node_server
node_server -->|"uses routes"| node_manifest
node_server -->|"dispatches requests"| node_pool
node_server -->|"matches routes"| node_custom
node_server -->|"applies middleware"| node_middleware
node_server -->|"handles proxying"| node_proxy
node_pool -.->|"requests rendering"| node_appworker
node_appworker -->|"loads routing"| node_approute
node_appworker -->|"loads metadata"| node_metadata
node_appworker -->|"handles actions"| node_actions
node_appworker -->|"flushes cache work"| node_cache
node_appworker -->|"tracks static work"| node_static
node_approute -->|"renders branches"| node_branch
node_approute -->|"uses metadata"| node_metadata
node_appworker -->|"sets request context"| node_compatheaders
node_compatheaders -->|"creates cache state"| node_cache
node_compatheaders -->|"creates static state"| node_static
node_appworker -.->|"uses partial model"| node_partial
node_appworker -.->|"supports router APIs"| node_compatrouter
node_appworker -->|"uses path APIs"| node_compatpaths
node_cli -.->|"selects profile"| node_profile
node_developer -->|"chooses profile"| node_profile

click node_cli "https://github.com/lorkydey/prnext/blob/main/packages/prnext/cli.mjs"
click node_native "https://github.com/lorkydey/prnext/blob/main/packages/prnext/native/resolve.mjs"
click node_server "https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/server.rs"
click node_pool "https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/pool.rs"
click node_manifest "https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/manifest.rs"
click node_custom "https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/custom_routes.rs"
click node_middleware "https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/middleware.rs"
click node_proxy "https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/proxy.rs"
click node_appworker "https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/rsc-worker.mjs"
click node_approute "https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-routing.mjs"
click node_branch "https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-routing-context.mjs"
click node_metadata "https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-metadata.mjs"
click node_partial "https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-partial-model.mjs"
click node_actions "https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/action-server.mjs"
click node_compatheaders "https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/headers.cjs"
click node_cache "https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/data-cache.cjs"
click node_static "https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/static-generation.cjs"
click node_compatrouter "https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/router.cjs"
click node_compatpaths "https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/paths.cjs"
click node_profile "https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/profile.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_native,node_server,node_pool toneBlue
class node_manifest,node_custom,node_middleware,node_proxy,node_appworker,node_approute,node_branch,node_metadata,node_partial,node_actions toneAmber
class node_compatheaders,node_cache,node_static,node_compatrouter,node_compatpaths toneMint
class node_profile toneRose
class node_developer toneIndigo
```

## Components

### Entry and server

- [PRNext CLI](https://github.com/lorkydey/prnext/blob/main/packages/prnext/cli.mjs): `packages/prnext/cli.mjs`
- [Native resolver](https://github.com/lorkydey/prnext/blob/main/packages/prnext/native/resolve.mjs): `packages/prnext/native/resolve.mjs`
- [HTTP server](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/server.rs): `crates/prnext/src/server.rs`
- [Worker pool](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/pool.rs): `crates/prnext/src/pool.rs`

### Routing and rendering

- [Route manifest](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/manifest.rs): `crates/prnext/src/manifest.rs`
- [Custom routes](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/custom_routes.rs): `crates/prnext/src/custom_routes.rs`
- [Middleware](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/middleware.rs): `crates/prnext/src/middleware.rs`
- [Proxy handling](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/proxy.rs): `crates/prnext/src/proxy.rs`
- [App render worker](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/rsc-worker.mjs): `packages/prnext/runtime/rsc-worker.mjs`
- [App routing](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-routing.mjs): `packages/prnext/runtime/app-routing.mjs`
- [Branch rendering](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-routing-context.mjs): `packages/prnext/runtime/app-routing-context.mjs`
- [App metadata](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-metadata.mjs): `packages/prnext/runtime/app-metadata.mjs`
- [Partial model](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/app-partial-model.mjs): `packages/prnext/runtime/app-partial-model.mjs`
- [Server actions](https://github.com/lorkydey/prnext/blob/main/packages/prnext/runtime/action-server.mjs): `packages/prnext/runtime/action-server.mjs`

### Compatibility and cache

- [Request APIs](https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/headers.cjs): `packages/prnext/compat/headers.cjs`
- [Data cache](https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/data-cache.cjs): `packages/prnext/compat/data-cache.cjs`
- [Static generation](https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/static-generation.cjs): `packages/prnext/compat/static-generation.cjs`
- [Router compatibility](https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/router.cjs): `packages/prnext/compat/router.cjs`
- [Path compatibility](https://github.com/lorkydey/prnext/blob/main/packages/prnext/compat/paths.cjs): `packages/prnext/compat/paths.cjs`

### Runtime controls

- [Runtime profiles](https://github.com/lorkydey/prnext/blob/main/crates/prnext/src/profile.rs): `crates/prnext/src/profile.rs`

### Other components

- **Developer**

## Connections

- Developer → PRNext CLI: runs commands (evidence: `README.md`)
- PRNext CLI → Native resolver: resolves binary (evidence: `packages/prnext/cli.mjs`)
- Native resolver → HTTP server: launches server
- HTTP server → Route manifest: uses routes (evidence: `crates/prnext/src/server.rs`)
- HTTP server → Worker pool: dispatches requests (evidence: `crates/prnext/src/server.rs`)
- HTTP server → Custom routes: matches routes (evidence: `crates/prnext/src/server.rs`)
- HTTP server → Middleware: applies middleware (evidence: `crates/prnext/src/server.rs`)
- HTTP server → Proxy handling: handles proxying (evidence: `crates/prnext/src/server.rs`)
- Worker pool → App render worker: requests rendering
- App render worker → App routing: loads routing (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- App render worker → App metadata: loads metadata (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- App render worker → Server actions: handles actions (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- App render worker → Data cache: flushes cache work (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- App render worker → Static generation: tracks static work (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- App routing → Branch rendering: renders branches (evidence: `packages/prnext/runtime/app-routing-context.mjs`)
- App routing → App metadata: uses metadata (evidence: `packages/prnext/runtime/app-routing.mjs`)
- App render worker → Request APIs: sets request context (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- Request APIs → Data cache: creates cache state (evidence: `packages/prnext/compat/headers.cjs`)
- Request APIs → Static generation: creates static state (evidence: `packages/prnext/compat/headers.cjs`)
- App render worker → Partial model: uses partial model (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- App render worker → Router compatibility: supports router APIs
- App render worker → Path compatibility: uses path APIs (evidence: `packages/prnext/runtime/rsc-worker.mjs`)
- PRNext CLI → Runtime profiles: selects profile
- Developer → Runtime profiles: chooses profile (evidence: `README.md`)
