diff --git a/app/pages/404.wrn b/app/pages/404.wrn index 4b72f2b0..5fa53705 100644 --- a/app/pages/404.wrn +++ b/app/pages/404.wrn @@ -7,8 +7,8 @@ page Pagenotfound { view {
-
W WRNexusJSPrivate preview · v0.2.15
-
Browse documentation
+
W WRNexusJS
+
Browse documentation
diff --git a/app/pages/access.wrn b/app/pages/access.wrn index 8cee31ff..8ae3106a 100644 --- a/app/pages/access.wrn +++ b/app/pages/access.wrn @@ -7,8 +7,8 @@ page Access { view {
-
W WRNexusJSPrivate preview · v0.2.15
-
Browse documentation
+
W WRNexusJS
+
Browse documentation
Private Developer Preview

Request preview access

WRNexusJS 0.2.15 packages are not available from the public npm registry. Installation requires approval and private registry credentials supplied by WorkRoot. Never paste registry tokens into source control, issue reports, or support messages.

Request process

  1. Contact WorkRoot through the public contact path at workroot.in.
  2. Describe the application, team, expected deployment, and Bun environment.
  3. After approval, follow the registry instructions supplied privately.
  4. Use the canonical scaffold command below only after authentication.
bunx @wrnexus/cli@0.2.15 create my-app

Access approval, response time, licensing terms, and support level remain owner-controlled. This site does not collect access requests directly.

diff --git a/app/pages/architecture.wrn b/app/pages/architecture.wrn index 8b7ded7b..5846b727 100644 --- a/app/pages/architecture.wrn +++ b/app/pages/architecture.wrn @@ -7,8 +7,8 @@ page Architecture { view {
-
W WRNexusJSPrivate preview · v0.2.15
-
Browse documentation
+
W WRNexusJS
+
Browse documentation
Framework architecture · 0.2.15

Architecture

WRNexusJS is Bun-native and SSR-first. File discovery maps pages and API handlers; middleware enriches or short-circuits a request; the compiler turns .wrn declarations into server render functions and small feature runtimes.

Request and build lifecycle

  1. DiscoverPages, APIs, middleware, components, layouts, schemas, rooms
  2. CompileParse .wrn, validate grammar, generate server code
  3. RequestLimits, security, locale, session, middleware
  4. MatchStatic and dynamic file route
  5. RenderSSR data, escaped interpolation, components, metadata
  6. EnhanceOnly required reactive/directive runtimes

Package boundaries

core owns contexts, middleware, sessions and rooms; router discovers routes; compiler parses .wrn; ssr renders documents; csr supplies browser runtimes; dev-server and cli orchestrate development and builds.

Security and data flow

Validation happens at trust boundaries. Session authentication establishes identity; authorization makes resource decisions. CSP, Trusted Types, CSRF, upload checks, WebSocket origins, request limits, and output escaping are layered controls—not substitutes for application policy.

Realtime and scale

Rooms are process-local unless connected through pub/sub. Redis-backed pub/sub distributes events. Queue durability depends on the selected driver and must be evaluated explicitly.

Workspaces and gateways

The gateway can dispatch multiple applications while preserving route, component, asset, config, and session boundaries. Validate host routing and isolation before production.

Build and deployment

wrnexus build . produces dist/server.js and hashed/static assets. Run the server with Bun, apply migrations before traffic, terminate TLS at a trusted edge, and forward only expected proxy headers.

Mobile

Mobile compatibility bridges SSR-safe Capacitor capabilities; native route generation is experimental and is not general web portability. Test each target platform.

Generated files and limits

app/routes.gen.ts, .wrnexus/, and dist/ are generated. The runtime is Bun-only. Preview packages are private. Historical compatibility and long-term support policy are not yet published.

diff --git a/app/pages/benchmarks.wrn b/app/pages/benchmarks.wrn index 338ab8af..cee54f4e 100644 --- a/app/pages/benchmarks.wrn +++ b/app/pages/benchmarks.wrn @@ -7,8 +7,8 @@ page Benchmarks { view {
-
W WRNexusJSPrivate preview · v0.2.15
-
Browse documentation
+
W WRNexusJS
+
Browse documentation

Benchmarks

No publishable benchmark dataset yet

No comparative speed claims are published. A valid baseline must record scripts, commit, Bun/framework versions, hardware, OS, warmup, samples, workload, raw results, median, percentiles, memory, HTML size, browser JavaScript size, and run date.

The roadmap starts with WRNexusJS-only measurements before any maintained equivalent-workload comparison.

diff --git a/app/pages/changelog.wrn b/app/pages/changelog.wrn index ddd47e88..0102429f 100644 --- a/app/pages/changelog.wrn +++ b/app/pages/changelog.wrn @@ -7,8 +7,8 @@ page Changelog { view {
-
W WRNexusJSPrivate preview · v0.2.15
-
Browse documentation
+
W WRNexusJS
+
Browse documentation

Changelog

0.2.15 2026-07-12

Documentation application aligned to all 25 installed packages, with generated README and TypeScript declaration references. This portal release establishes truthful private-preview access messaging and expanded framework navigation.

Migration notes

Keep all @wrnexus/* packages on the same release and run the installed CLI update workflow. No older framework release history is present in this repository.

Versioning and support

The packages use semantic-looking versions, but a formal compatibility and old-release support policy has not been approved. Preview consumers should treat minor releases as potentially requiring migration review.

diff --git a/app/pages/examples.wrn b/app/pages/examples.wrn index 23a2f1b8..c03bbfe1 100644 --- a/app/pages/examples.wrn +++ b/app/pages/examples.wrn @@ -7,8 +7,8 @@ page Examples { view {
-
W WRNexusJSPrivate preview · v0.2.15
-
Browse documentation
+
W WRNexusJS
+
Browse documentation

Examples

Examples are tied to installed 0.2.15 package documentation. The focused snippets in guides are source-verified; standalone runnable projects and CI compilation are tracked as remaining work.

Minimal .wrn page

Documented

Database CRUD

Planned fixture

Authentication and protected route

Planned fixture

Permissions

Planned fixture

Forms and validation

Documented

Realtime dashboard

Planned fixture

File upload

Planned fixture

Background queue

Planned fixture

Redis pub/sub

Planned fixture

Workspace gateway

Planned fixture

Deployment

Planned fixture

Experimental mobile mode

Planned fixture
diff --git a/app/pages/getting-started.wrn b/app/pages/getting-started.wrn index d6e26fc1..c66a7624 100644 --- a/app/pages/getting-started.wrn +++ b/app/pages/getting-started.wrn @@ -7,8 +7,8 @@ page Gettingstarted { view {
-
W WRNexusJSPrivate preview · v0.2.15
-
Browse documentation
+
W WRNexusJS
+
Browse documentation
Preview guide · v0.2.15

Build a contact inbox

This path creates a server-rendered page, validated API route, middleware, and realtime next step. It requires approved registry access and Bun 1.3.x; this site was verified with Bun 1.3.14.

1. Create the project

bunx @wrnexus/cli@0.2.15 create my-app
 cd my-app
 bun install
diff --git a/app/pages/guides/api-routes.wrn b/app/pages/guides/api-routes.wrn
index ac100a24..72c1ee13 100644
--- a/app/pages/guides/api-routes.wrn
+++ b/app/pages/guides/api-routes.wrn
@@ -7,8 +7,8 @@ page APIroutes {
   view {
     
     
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

API routes

Export GET, POST, PUT, PATCH, or DELETE from app/api files. Validate request bodies, enforce authentication and authorization, cap request sizes, and return Web Responses.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/authentication.wrn b/app/pages/guides/authentication.wrn index 66c238b8..5b2060b2 100644 --- a/app/pages/guides/authentication.wrn +++ b/app/pages/guides/authentication.wrn @@ -7,8 +7,8 @@ page Authentication { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Authentication

Configure session authentication, log users in through supported auth helpers, and read identity from context. Cookie flags, rotation, expiry, and secret storage remain deployment responsibilities.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/authorization.wrn b/app/pages/guides/authorization.wrn index 12cbdcbd..3e5d3d07 100644 --- a/app/pages/guides/authorization.wrn +++ b/app/pages/guides/authorization.wrn @@ -7,8 +7,8 @@ page Authorization { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Authorization

Authentication identifies; authorization decides. Enforce permissions in server routes and policies, including object ownership. UI hiding is never an authorization boundary.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/configuration-and-profiles.wrn b/app/pages/guides/configuration-and-profiles.wrn index 9c7f17ad..d3f54838 100644 --- a/app/pages/guides/configuration-and-profiles.wrn +++ b/app/pages/guides/configuration-and-profiles.wrn @@ -7,8 +7,8 @@ page Configurationandprofiles { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Configuration and profiles

wrnexus.config.ts owns styles, SEO, security, data, mobile, fonts, and profiles. Keep secrets in validated environment variables and review merged production configuration.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/database.wrn b/app/pages/guides/database.wrn index 30ea11f1..5dec5fef 100644 --- a/app/pages/guides/database.wrn +++ b/app/pages/guides/database.wrn @@ -7,8 +7,8 @@ page Database { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Database

Configure SQLite or the installed supported driver, keep queries in named SQL blocks, generate typed functions, and apply migrations before traffic. Back up data and test rollback independently.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/deployment.wrn b/app/pages/guides/deployment.wrn index 4b223e39..4c9e728f 100644 --- a/app/pages/guides/deployment.wrn +++ b/app/pages/guides/deployment.wrn @@ -7,8 +7,8 @@ page Deployment { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Deployment

Run bun run build, apply migrations, and start dist/server.js with Bun. Configure TLS, proxy trust, environment validation, health checks, graceful restarts, logs, backups, and restrictive security headers.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/forms-and-validation.wrn b/app/pages/guides/forms-and-validation.wrn index 21d2f4ff..b4d94ddf 100644 --- a/app/pages/guides/forms-and-validation.wrn +++ b/app/pages/guides/forms-and-validation.wrn @@ -7,8 +7,8 @@ page Formsandvalidation { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Forms and validation

Define a v.object schema, use data-schema on the form, show field errors with data-error, and always call parseBody on the server. refine is server-only.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/i18n-and-themes.wrn b/app/pages/guides/i18n-and-themes.wrn index ec24d5f9..c56eace1 100644 --- a/app/pages/guides/i18n-and-themes.wrn +++ b/app/pages/guides/i18n-and-themes.wrn @@ -7,8 +7,8 @@ page Internationalizationandthemes { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Internationalization and themes

Store locale JSON under app/locales and use translation directives. Themes resolve CSS tokens; ensure contrast, system preference behavior, persistence, and non-color cues.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/middleware.wrn b/app/pages/guides/middleware.wrn index db947b32..5bf6c387 100644 --- a/app/pages/guides/middleware.wrn +++ b/app/pages/guides/middleware.wrn @@ -7,8 +7,8 @@ page Middleware { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Middleware

Middleware receives context and next. Return next() to continue or return a Response to stop. Put request limits and trust-boundary controls before business logic.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/mobile.wrn b/app/pages/guides/mobile.wrn index 6ccceb47..e0a8e6e5 100644 --- a/app/pages/guides/mobile.wrn +++ b/app/pages/guides/mobile.wrn @@ -7,8 +7,8 @@ page Mobile { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Mobile

Mobile capabilities are experimental in this preview. Test Capacitor permissions and lifecycle on each platform; do not assume every .wrn or browser API converts to native.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/observability.wrn b/app/pages/guides/observability.wrn index 49d34b4d..0ab1a72c 100644 --- a/app/pages/guides/observability.wrn +++ b/app/pages/guides/observability.wrn @@ -7,8 +7,8 @@ page Observability { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Observability

Use tracking middleware and sinks with redaction, sampling, stable request identifiers, alert ownership, and retention limits. Never capture registry tokens or session secrets.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/pages-and-components.wrn b/app/pages/guides/pages-and-components.wrn index 4dff433c..290069ac 100644 --- a/app/pages/guides/pages-and-components.wrn +++ b/app/pages/guides/pages-and-components.wrn @@ -7,8 +7,8 @@ page Pagesandcomponents { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Pages and components

Pages are routable, components are reusable, and layouts provide shared slots. Mount a component with data-component and keep browser state scoped and minimal.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/project-structure.wrn b/app/pages/guides/project-structure.wrn index f6c61334..7e786c84 100644 --- a/app/pages/guides/project-structure.wrn +++ b/app/pages/guides/project-structure.wrn @@ -7,8 +7,8 @@ page Projectstructure { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Project structure

Pages, components, layouts, APIs, middleware, schemas, database files, locales, realtime rooms, and styles live under app. Never edit app/routes.gen.ts, .wrnexus, or dist by hand.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/pubsub.wrn b/app/pages/guides/pubsub.wrn index b12eac71..0d31f0b6 100644 --- a/app/pages/guides/pubsub.wrn +++ b/app/pages/guides/pubsub.wrn @@ -7,8 +7,8 @@ page Pubsub { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Pub/sub

The in-process driver cannot cross processes. Use Redis where instances must share events, define channel ownership, and design for reconnects and duplicate delivery.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/queues.wrn b/app/pages/guides/queues.wrn index 74ab4101..ed6f54e9 100644 --- a/app/pages/guides/queues.wrn +++ b/app/pages/guides/queues.wrn @@ -7,8 +7,8 @@ page Queues { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Queues

Queue behavior is preview-level. Treat in-process work as non-durable, make handlers idempotent, cap retries, record failures, and choose a production persistence strategy.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/realtime.wrn b/app/pages/guides/realtime.wrn index b6f67823..b869c4e2 100644 --- a/app/pages/guides/realtime.wrn +++ b/app/pages/guides/realtime.wrn @@ -7,8 +7,8 @@ page Realtime { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Realtime

defineRoom handles connection and messages. Validate message shapes, authorize subscriptions, restrict origins, bound payloads, and use pub/sub to scale across processes.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/routing.wrn b/app/pages/guides/routing.wrn index d2986ecd..4f532c0d 100644 --- a/app/pages/guides/routing.wrn +++ b/app/pages/guides/routing.wrn @@ -7,8 +7,8 @@ page Routing { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Routing

A page filename defines its URL; index maps to the directory root and bracket segments are dynamic parameters. API files under app/api expose HTTP method functions and receive a Context.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/security.wrn b/app/pages/guides/security.wrn index 0e16572f..b11e1b4a 100644 --- a/app/pages/guides/security.wrn +++ b/app/pages/guides/security.wrn @@ -7,8 +7,8 @@ page Applicationsecurity { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Application security

Use CSP, CSRF, Trusted Types, session hardening, validation, origin checks, upload restrictions, encryption, request limits, and explicit CORS. See the security policy for reporting.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/server-data.wrn b/app/pages/guides/server-data.wrn index 826bc4e9..f176e8d9 100644 --- a/app/pages/guides/server-data.wrn +++ b/app/pages/guides/server-data.wrn @@ -7,8 +7,8 @@ page Serverdata { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Server data

Use an ssr API binding, return the desired response field, and render it with a server #each block. Values are escaped. Avoid fetching private data through a route that lacks authorization.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/testing.wrn b/app/pages/guides/testing.wrn index cf237fd7..a08f331a 100644 --- a/app/pages/guides/testing.wrn +++ b/app/pages/guides/testing.wrn @@ -7,8 +7,8 @@ page Testing { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Testing

Use Bun tests and @wrnexus/test helpers. Cover server HTML, API status and validation, authorization failures, reactive behavior, and a production startup smoke test.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/troubleshooting.wrn b/app/pages/guides/troubleshooting.wrn index 39138b45..5c2db77b 100644 --- a/app/pages/guides/troubleshooting.wrn +++ b/app/pages/guides/troubleshooting.wrn @@ -7,8 +7,8 @@ page Troubleshooting { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Troubleshooting

Confirm Bun and package versions, regenerate docs/routes through supported commands, read the first compiler diagnostic, check file naming, validate config, and reproduce under a production build.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/upgrading.wrn b/app/pages/guides/upgrading.wrn index dd8bc0e3..ce07716e 100644 --- a/app/pages/guides/upgrading.wrn +++ b/app/pages/guides/upgrading.wrn @@ -7,8 +7,8 @@ page Upgrading { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Upgrading

Back up and commit first, then use wrnexus update --latest as documented by the installed CLI. Review migrations and keep every @wrnexus package aligned. Current release: 0.2.15.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/uploads.wrn b/app/pages/guides/uploads.wrn index edffbfeb..5d387816 100644 --- a/app/pages/guides/uploads.wrn +++ b/app/pages/guides/uploads.wrn @@ -7,8 +7,8 @@ page Uploads { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Uploads

Configure named stores, accepted MIME/extensions, and maxBytes. Random keys avoid path traversal. Private files require an authenticated serving route; v1 buffers each file in memory.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/guides/workspaces-and-gateway.wrn b/app/pages/guides/workspaces-and-gateway.wrn index 84dcd152..922d39d0 100644 --- a/app/pages/guides/workspaces-and-gateway.wrn +++ b/app/pages/guides/workspaces-and-gateway.wrn @@ -7,8 +7,8 @@ page Workspacesandgateway { view {
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Preview guide · 0.2.15

Workspaces and gateway

The workspace gateway dispatches apps by configured boundaries. Test host matching, asset namespaces, cookies, sessions, errors, and cross-app authorization before deployment.

Release scope

This guide describes installed 0.2.15 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

diff --git a/app/pages/index.wrn b/app/pages/index.wrn index 2339c4b2..8de6082c 100644 --- a/app/pages/index.wrn +++ b/app/pages/index.wrn @@ -7,9 +7,9 @@ page Home { view {
-
W WRNexusJSPrivate preview · v0.2.15
- -
Private Developer Preview

WRNexusJS v0.2.15

Build from the server.
Ship only what matters.

WRNexusJS is an SSR-first, Bun-native full-stack framework. Build typed pages, APIs, validated forms, realtime rooms, secure sessions, workspaces, and optional mobile experiences with the .wrn component language.

Packages require approved private-registry access. No public installation command is currently available.

+
W WRNexusJS
+ +
Private Developer Preview

WRNexusJS v0.2.15

Build from the server.
Ship only what matters.

WRNexusJS is an SSR-first, Bun-native full-stack framework. Build typed pages, APIs, validated forms, realtime rooms, secure sessions, workspaces, and optional mobile experiences with the .wrn component language.

Packages require approved private-registry access. No public installation command is currently available.

Why WRNexusJS

Server-first rendering

Useful HTML is rendered first; reactive scopes hydrate only where declared.

.wrn components

Pages, layouts, props, state, events, server loops, and directives live in a focused language.

Bun-native runtime

The runtime is Bun. Node compatibility is not claimed.

Typed data and validation

Database queries and shared validation connect server routes to forms.

Integrated security

CSP, CSRF, sessions, authorization, encryption, and safe output are framework primitives.

Realtime and workspaces

Rooms, Redis pub/sub, and multi-app gateways support live and isolated applications.

A small full-stack flow

// app/schemas/contact.ts
 import { v } from "@wrnexus/validation";
diff --git a/app/pages/language.wrn b/app/pages/language.wrn
index 71905e0d..9830c61c 100644
--- a/app/pages/language.wrn
+++ b/app/pages/language.wrn
@@ -7,8 +7,8 @@ page Thewrnlanguage {
   view {
     
     
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+
Language reference · 0.2.15

The .wrn language

File anatomy

page Account {
   layout = "public"
   seo { title = "Account" description = "Manage your account." }
diff --git a/app/pages/license.wrn b/app/pages/license.wrn
index 1169e277..7f400fe7 100644
--- a/app/pages/license.wrn
+++ b/app/pages/license.wrn
@@ -7,8 +7,8 @@ page License {
   view {
     
     
-
W WRNexusJSPrivate preview · v0.2.15
- +
W WRNexusJS
+

License

Owner decision required

This documentation repository contains no public license file, and the packages are unavailable from the public npm registry. No open-source license or redistribution right should be inferred.

Approved preview users must follow the private/commercial terms supplied by WorkRoot. Contact WorkRoot before copying, redistributing, or using WRNexusJS in production.

diff --git a/app/pages/packages.wrn b/app/pages/packages.wrn index a8a63db1..85a5045a 100644 --- a/app/pages/packages.wrn +++ b/app/pages/packages.wrn @@ -11,9 +11,8 @@ page Packages {
W WRNexusJS - - Private preview · v0.2.15 - + +
25 focused packages

Package reference

Everything in the framework, organized by responsibility and documented from the published 0.2.15 APIs.

Showing {category} packages

AI

@wrnexus/ai

Server-side Anthropic client with generation and streaming.

Open documentation → diff --git a/app/pages/packages/ai.wrn b/app/pages/packages/ai.wrn index 1913d13e..2b9abc05 100644 --- a/app/pages/packages/ai.wrn +++ b/app/pages/packages/ai.wrn @@ -9,9 +9,8 @@ page wrnexusai {
W WRNexusJS - - Private preview · v0.2.15 - + +
@@ -19,7 +18,6 @@ page wrnexusai {

Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

Overview

@wrnexus/ai is a thin, dependency-free wrapper over the Anthropic Messages API, built on fetch (Bun-native, no SDK). Use it in API routes, jobs, or middleware to call Claude. It defaults to the most capable model, claude-opus-4-8, reads your key from ANTHROPIC_API_KEY, and supports both one-shot generation and streaming.

-

Installation

bun add @wrnexus/ai
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
@@ -175,7 +173,7 @@ const reply = await ai.generate( ], { system: "You are concise." }, );
- +
diff --git a/app/pages/packages/authz.wrn b/app/pages/packages/authz.wrn index 074fafcd..58ea7c54 100644 --- a/app/pages/packages/authz.wrn +++ b/app/pages/packages/authz.wrn @@ -9,9 +9,8 @@ page wrnexusauthz {
W WRNexusJS - - Private preview · v0.2.15 - + +
@@ -19,7 +18,6 @@ page wrnexusauthz {

Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

Overview

@wrnexus/authz is a small, server-side authorization toolkit. It gives you three interchangeable models — RBAC (roles → permissions), PBAC (policy predicates), and ABAC (attribute matchers) — that all collapse to a boolean | Promise<boolean> decision. Wrap any decision in a Middleware guard (authorize, requireRole, requirePermission) to protect WRNexusJS routes. Reach for it whenever a route or action needs to be gated on who the user is, what roles they hold, or attributes of the user and the resource. It plugs into @wrnexus/core by reading ctx.user as the authorization subject.

-

Installation

bun add @wrnexus/authz
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
@@ -226,7 +224,7 @@ app.put( authorize((ctx) => canEdit(ctx.user as User, loadPost(ctx))), handler, );
- +
diff --git a/app/pages/packages/cli.wrn b/app/pages/packages/cli.wrn index 41733258..306f1ed2 100644 --- a/app/pages/packages/cli.wrn +++ b/app/pages/packages/cli.wrn @@ -9,9 +9,8 @@ page wrnexuscli {
W WRNexusJS - - Private preview · v0.2.15 - + +
Preview · v0.2.15
@@ -19,7 +18,6 @@ page wrnexuscli {

Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

Overview

@wrnexus/cli provides the wrnexus executable — the single entry point for developing a WRNexusJS app. It runs the HMR dev server, produces a self-contained production build, scaffolds apps/pages/components, drives database migrations, regenerates typed routes and queries, runs tests, and manages configuration profiles. It also scaffolds multi-app monorepos and serves them behind a domain-routing gateway. This is a CLI/build-time package (it shells out to the Bun binary for the dev child and tests) and it also exports the workspace config types via a subpath.

-

Installation

bun add @wrnexus/cli
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
@@ -115,7 +113,7 @@ export default config; # or add scripts: "dev": "wrnexus dev .", "build": "wrnexus build ."

Example 3

wrnexus dev . --port=8080

Example 4

bun dist/server.js   # PORT env var optional
 # Generated apps also provide: npm start
 # Build and start together: npm run production
- +
diff --git a/app/pages/packages/compiler.wrn b/app/pages/packages/compiler.wrn index 687e8839..30d8792f 100644 --- a/app/pages/packages/compiler.wrn +++ b/app/pages/packages/compiler.wrn @@ -9,9 +9,8 @@ page wrnexuscompiler {
W WRNexusJS - - Private preview · v0.2.15 - + +
Preview · v0.2.15
@@ -19,7 +18,6 @@ page wrnexuscompiler {

Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

Overview

@wrnexus/compiler turns .wrn source into TypeScript that targets the framework's runtime primitives. A .wrn file declares either a page (a route) or a component (a reusable, prop-driven fragment) with blocks for state, view (plain HTML), seo, style, functions, api, ssr/client data bindings, and realtime websocket handlers. The pipeline is source → Lexer → parse() → PageAst → generate() → TypeScript. It is a build/server-side library — the WRNexusJS dev loader calls it to compile .wrn files on the fly, surfacing ParseError as a readable error page.

-

Installation

bun add @wrnexus/compiler
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
@@ -355,7 +353,7 @@ page Home { `); // ts is a TypeScript module: exports `meta`, and a default page component // returning an HTML string, wrapped in a data-scope for the reactive runtime. - +
diff --git a/app/pages/packages/core.wrn b/app/pages/packages/core.wrn index caced228..0ae8f816 100644 --- a/app/pages/packages/core.wrn +++ b/app/pages/packages/core.wrn @@ -9,9 +9,8 @@ page wrnexuscore {
W WRNexusJS - - Private preview · v0.2.15 - + +
Preview · v0.2.15
@@ -19,7 +18,6 @@ page wrnexuscore {

Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

Overview

@wrnexus/core is the shared foundation of WRNexusJS. It defines the Context object that flows through every middleware, page, and API route, plus the Middleware/Next contract they implement. On top of that it ships the building blocks a real app needs: cookie-backed sessions, password auth, CSRF protection, rate limiting, request logging, HTTP + in-memory caching, file uploads, streaming/SSE responses, WebSocket "rooms", security headers/CORS, and a server-side JSX runtime that renders to HTML strings. Everything here is server-side and Bun-native (it uses Bun.password, Bun.write, the web-standard Request/Response, and crypto). You depend on it directly and transitively through the rest of the framework.

-

Installation

bun add @wrnexus/core
Private package — the machine must be authenticated to the wrnexus npm org
(a read token in ~/.npmrc). Requires Bun (Node is not supported).
@@ -962,7 +960,7 @@ if (await verifyPassword(form.password, user.passwordHash)) { } const current = getUser<{ id: string }>(ctx); // or null - +
diff --git a/app/pages/packages/csr.wrn b/app/pages/packages/csr.wrn index 2a35eb3b..798459b7 100644 --- a/app/pages/packages/csr.wrn +++ b/app/pages/packages/csr.wrn @@ -9,9 +9,8 @@ page wrnexuscsr {
W WRNexusJS - - Private preview · v0.2.15 - + +
Preview · v0.2.15
@@ -25,7 +24,6 @@ page wrnexuscsr {
  • realtime at /__wrnexus/realtime.js — WebSocket "rooms", declarative or programmatic
  • The package itself runs on the server (it just returns strings); the strings it returns run in the browser. A dev/prod server (see @wrnexus/core) is responsible for actually serving them.

    -

    Installation

    bun add @wrnexus/csr
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -228,7 +226,7 @@ Bun.serve({ return new Response("Not found", { status: 404 }); }, }); - +
    diff --git a/app/pages/packages/db.wrn b/app/pages/packages/db.wrn index 59691dbe..fcd77db4 100644 --- a/app/pages/packages/db.wrn +++ b/app/pages/packages/db.wrn @@ -9,9 +9,8 @@ page wrnexusdb {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    Preview · v0.2.15
    @@ -19,7 +18,6 @@ page wrnexusdb {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/db is the server-side data layer. You describe tables as TypeScript models (the v column builder + table()); those models drive migrations, coerce raw DB rows into typed objects, and feed the query generator. A thin Driver interface is implemented by adapters for SQLite (bun:sqlite), Postgres/MySQL (Bun.SQL), and MongoDB. The Db client adds ergonomics — model-mapped all/one, transactions, createTable, pagination, and batched relation loading. A process-wide registry (getDb/setDb) exposes configured connections to pages and API routes. Reach for it whenever a WRNexusJS app needs persistence.

    -

    Installation

    bun add @wrnexus/db
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -315,7 +313,7 @@ const users = table("users", { createdAt: v.timestamp().default("now"), // CURRENT_TIMESTAMP });

    Example 3

    createDb(driver: Driver): Db

    Example 4

    const users = await getDb().all("SELECT * FROM users");
     const events = await getDb("analytics").all("SELECT * FROM hits");
    - +
    diff --git a/app/pages/packages/dev-server.wrn b/app/pages/packages/dev-server.wrn index 940fa3f3..7d0ce07a 100644 --- a/app/pages/packages/dev-server.wrn +++ b/app/pages/packages/dev-server.wrn @@ -9,9 +9,8 @@ page wrnexusdevserver {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    Preview · v0.2.15
    @@ -19,7 +18,6 @@ page wrnexusdevserver {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    This package is the server runtime that powers a WRNexusJS app in both development and production. A single request runtime (createHandlers) owns HTTP/WebSocket dispatch and SSR document assembly; it knows nothing about _how_ modules and assets are produced, so the dev and prod entry points wire in different backends: dev uses dynamic module loading plus on-the-fly bundling and injects a live-reload client; prod uses a static, pre-built manifest with cache-immutable assets. The package also ships a multi-app gateway (route several apps by Host header behind one port) and a portable node:http adapter for WinterCG hosts. It is entirely server-side and Bun-native (Bun.serve, Bun.file, Bun.gzipSync).

    -

    Installation

    bun add @wrnexus/dev-server
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported for the full server; the node:http adapter is for WinterCG embedding only).
    @@ -729,7 +727,7 @@ interface ProdOptions { hostname?: string; maxBodyBytes?: number; } - +
    diff --git a/app/pages/packages/encryption.wrn b/app/pages/packages/encryption.wrn index 4126d2bf..f50ff112 100644 --- a/app/pages/packages/encryption.wrn +++ b/app/pages/packages/encryption.wrn @@ -9,9 +9,8 @@ page wrnexusencryption {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    Preview · v0.2.15
    @@ -19,7 +18,6 @@ page wrnexusencryption {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    This package provides small, focused cryptographic primitives for server-side use: encrypting secrets/tokens/database fields at rest with AES-256-GCM, deriving keys from passwords via PBKDF2, computing SHA-256 digests, and signing/verifying payloads with HMAC-SHA256. It is built entirely on the standard Web Crypto API (crypto.subtle) plus btoa/atob and TextEncoder/TextDecoder — no third-party dependencies. Reach for it whenever you need to protect sensitive values or verify webhook signatures. All functions are async (Web Crypto is promise-based).

    -

    Installation

    bun add @wrnexus/encryption
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -107,7 +105,7 @@ const digest = await sha256("some content"); // 64-char hex string const signature = await hmacSign(rawBody, webhookSecret); const ok = await hmacVerify(rawBody, webhookSecret, incomingSignatureHeader); if (!ok) throw new Error("Invalid webhook signature"); - +
    diff --git a/app/pages/packages/i18n.wrn b/app/pages/packages/i18n.wrn index e2e68f95..fbb659c9 100644 --- a/app/pages/packages/i18n.wrn +++ b/app/pages/packages/i18n.wrn @@ -9,9 +9,8 @@ page wrnexusi18n {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    Preview · v0.2.15
    @@ -19,7 +18,6 @@ page wrnexusi18n {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/i18n loads locale files from app/locales/<lang>.json, resolves the active language for each request (cookie → Accept-Language → default), and builds a t(key, params) translator used both in server code and in .wrn views. It also ships Intl-based formatting helpers and a tiny client runtime that wires up a language switcher. Translation lookup, language resolution, and HTML marker rewriting run server-side; only the small I18N_RUNTIME snippet runs in the browser.

    -

    Installation

    bun add @wrnexus/i18n
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -209,7 +207,7 @@ const finalHtml = translateHtml(renderedHtml, t);

    Example 4

    <h1 data-t="nav.home">Home</h1>
     <input t:placeholder="search.placeholder" />
    - +
    diff --git a/app/pages/packages/jwt.wrn b/app/pages/packages/jwt.wrn index 8cbd94a4..c605ca6d 100644 --- a/app/pages/packages/jwt.wrn +++ b/app/pages/packages/jwt.wrn @@ -9,9 +9,8 @@ page wrnexusjwt {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    Preview · v0.2.15
    @@ -19,7 +18,6 @@ page wrnexusjwt {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/jwt signs and verifies stateless JSON Web Tokens using the HS256 (HMAC-SHA-256) algorithm. It has no runtime dependencies — signing and verification are implemented directly on the standard Web Crypto API (crypto.subtle), which Bun provides natively. It runs server-side and pairs with the session-based auth in @wrnexus/core, giving you a stateless option for API and mobile clients. Reach for it when you need bearer-token auth rather than cookie sessions.

    -

    Installation

    bun add @wrnexus/jwt
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -145,7 +143,7 @@ export { type JwtAuthOptions, type JwtClaims, JwtError, type SignOptions, j secret: string, options?: { now?: number }, ): Promise<T>;

    Example 4

    function jwtAuth(options: JwtAuthOptions): Middleware;
    - +
    diff --git a/app/pages/packages/mobile.wrn b/app/pages/packages/mobile.wrn index afed8f29..8c025392 100644 --- a/app/pages/packages/mobile.wrn +++ b/app/pages/packages/mobile.wrn @@ -9,9 +9,8 @@ page wrnexusmobile {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    Preview · v0.2.15
    diff --git a/app/pages/packages/native.wrn b/app/pages/packages/native.wrn index f2dbada5..4644654e 100644 --- a/app/pages/packages/native.wrn +++ b/app/pages/packages/native.wrn @@ -9,9 +9,8 @@ page wrnexusnative {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    diff --git a/app/pages/packages/oauth.wrn b/app/pages/packages/oauth.wrn index 37ca886e..5f7f705d 100644 --- a/app/pages/packages/oauth.wrn +++ b/app/pages/packages/oauth.wrn @@ -9,9 +9,8 @@ page wrnexusoauth {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexusoauth {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/oauth implements the OAuth 2.0 Authorization Code flow (with PKCE) for server-side sign-in. It ships ready-made provider presets and a defineProvider helper for custom providers, then gives you two flow functions — startAuth (build the redirect) and completeAuth (exchange the code and fetch the user's profile). It has no runtime dependencies: it uses the platform fetch and WebCrypto only. Pairs naturally with @wrnexus/core's logIn to establish a session once you have a normalized profile.

    -

    Installation

    bun add @wrnexus/oauth
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -263,7 +261,7 @@ interface StartAuthResult { state: string; // CSRF state — verify on callback verifier: string; // PKCE code verifier — pass to completeAuth } - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/pubsub.wrn b/app/pages/packages/pubsub.wrn index 7764e5de..ac93b99a 100644 --- a/app/pages/packages/pubsub.wrn +++ b/app/pages/packages/pubsub.wrn @@ -9,9 +9,8 @@ page wrnexuspubsub {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexuspubsub {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/pubsub is a small server-side pub/sub bus. You publish messages to a topic and subscribe with topic patterns; handlers fire for matching topics. The default driver keeps everything in-process, and you can swap in the Redis driver (@wrnexus/pubsub/redis) to fan messages out across processes or hosts. It also backs @wrnexus/core's realtime bridge for horizontal scaling.

    -

    Installation

    bun add @wrnexus/pubsub
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -131,7 +129,7 @@ type Handler<T = unknown> = (message: T, topic: string) => void | Promi publish(topic: string, message: unknown): void | Promise<void>; subscribe(pattern: string, handler: Handler): () => void; }

    Example 4

    function redisDriver(url?: string): PubSubDriver & { close(): void };
    - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/queue.wrn b/app/pages/packages/queue.wrn index c3c48060..8f2c39d5 100644 --- a/app/pages/packages/queue.wrn +++ b/app/pages/packages/queue.wrn @@ -9,9 +9,8 @@ page wrnexusqueue {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexusqueue {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/queue is a server-side in-process job queue. You register named workers, enqueue jobs (optionally delayed or recurring), and let the queue poll and run them on a timer — with per-job retry limits and doubling backoff between attempts. The default store lives in memory; the design allows a pluggable driver to back it with Redis/SQL for durability across restarts. Reach for it when you need to defer work (emails, webhooks, cleanup) off the request path without a heavyweight external broker. Tests can drive it deterministically via drain().

    -

    Installation

    bun add @wrnexus/queue
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -171,7 +169,7 @@ export { type AddOptions, type Job, type JobHandler, type Queue, type Queue runAt: number; // epoch ms; job runs when now ≥ runAt repeat?: number; // if set, re-enqueue this many ms after each success } - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/reactive.wrn b/app/pages/packages/reactive.wrn index b81918ef..4c8e846d 100644 --- a/app/pages/packages/reactive.wrn +++ b/app/pages/packages/reactive.wrn @@ -9,9 +9,8 @@ page wrnexusreactive {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexusreactive {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/reactive is the seed of WRNexusJS's reactivity layer: a minimal signal primitive that holds a value, notifies subscribers when it changes, and hands back an unsubscribe function. It is deliberately small and framework-agnostic — it powers nothing on its own, but is shaped so client islands (and later the .wrn compiler's state blocks) can build reactive bindings on top of it. Reach for it when you need observable state without pulling in a full reactivity library.

    -

    Installation

    bun add @wrnexus/reactive
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -133,7 +131,7 @@ count.set(3); // nothing logged
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/router.wrn b/app/pages/packages/router.wrn index 6ee6868c..ea092047 100644 --- a/app/pages/packages/router.wrn +++ b/app/pages/packages/router.wrn @@ -9,9 +9,8 @@ page wrnexusrouter {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexusrouter {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/router scans an application's app/ directory once at startup and builds route tables for pages, API endpoints, realtime channels, middleware, server-rendered .wrn components, layouts, and validation schemas. It also compiles URL patterns (/users/[id]) into RegExps and matches request paths against them. Request input is never turned into a file path, which makes the router immune to path traversal. This is a server-side package used by the WRNexusJS runtime to resolve incoming requests, plus a codegen helper for compile-time typed links.

    -

    Installation

    bun add @wrnexus/router
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -260,7 +258,7 @@ interface ComponentRef { /** Absolute path to the component's `.wrn` module. */ file: string; } - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/ssr.wrn b/app/pages/packages/ssr.wrn index 9bfcfb72..1f4c5ae3 100644 --- a/app/pages/packages/ssr.wrn +++ b/app/pages/packages/ssr.wrn @@ -9,9 +9,8 @@ page wrnexusssr {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexusssr {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    Pages in WRNexusJS return an HTML string for the body. @wrnexus/ssr takes that body and produces a full HTML document — building the <head> from page metadata and global SEO defaults, resolving canonical/Open Graph/Twitter tags, and injecting module preloads and <script type="module"> tags. It is deliberately server-only: nothing in this package touches the DOM or ships to the browser, keeping server code genuinely server-only. Reach for it on the server when turning a rendered page body into a response document.

    -

    Installation

    bun add @wrnexus/ssr
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -165,7 +163,7 @@ const html = renderDocument({ return new Response(html, { headers: { "content-type": "text/html; charset=utf-8" }, }); - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/styles.wrn b/app/pages/packages/styles.wrn index 02436eca..f9c345a6 100644 --- a/app/pages/packages/styles.wrn +++ b/app/pages/packages/styles.wrn @@ -9,9 +9,8 @@ page wrnexusstyles {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -21,7 +20,6 @@ page wrnexusstyles {

    This package owns three server-side concerns that shape every page a WRNexusJS app renders:

    1. Global stylesheet pipeline — finds app/styles/global.css (or aggregates app/styles/*.css), bundles it with Bun's CSS bundler (which resolves @import, including from node_modules), and produces one stylesheet that is <link>ed into every page's <head>. Because it is a plain global sheet, it styles server-rendered markup and hydrated client islands identically. A custom process hook lets you swap in Tailwind / PostCSS / Sass. 2. Theme system — design tokens exposed as CSS custom properties (--wire-<key>), with built-in light/dark sets, deep-merged user overrides, an SSR <html data-theme> render (no flash), and a tiny client runtime to toggle/persist the choice. 3. App config — loads wrnexus.config.ts (the AppConfig type), applies named profile overrides, and loads the .env cascade.

    It runs server-side / at build time. Reach for it when configuring an app, defining themes, or customising how global CSS is produced.

    -

    Installation

    bun add @wrnexus/styles
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -562,7 +560,7 @@ export default { }, }, } satisfies AppConfig; - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/test.wrn b/app/pages/packages/test.wrn index b121c244..d3b664e9 100644 --- a/app/pages/packages/test.wrn +++ b/app/pages/packages/test.wrn @@ -9,9 +9,8 @@ page wrnexustest {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexustest {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/test is the server-side test toolkit you reach for when writing tests for a WRNexusJS app. It runs under bun test (invoked via wrnexus test) and gives you a single import surface: the bun:test primitives (test, expect, mock, …) re-exported alongside WRNexusJS-aware helpers that compile .wrn components, hydrate server HTML in a DOM, invoke API route handlers, and boot the real app on an ephemeral port for integration tests.

    -

    Installation

    bun add @wrnexus/test
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -170,7 +168,7 @@ export { type Harness, type HarnessOptions, callRoute, createHarness, mount handler: (ctx: Context) => Response | Promise<Response>, request: Request, ): Promise<Response>; - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/tracking.wrn b/app/pages/packages/tracking.wrn index a00369b0..77c0cd64 100644 --- a/app/pages/packages/tracking.wrn +++ b/app/pages/packages/tracking.wrn @@ -9,9 +9,8 @@ page wrnexustracking {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexustracking {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/tracking is a small, server-side error-capture layer. You create a tracker with one or more sinks, then feed it errors — either manually with tracker.capture(err, context) or automatically by mounting tracker.middleware() in your request pipeline. A consoleSink is included; forwarding to Sentry, Datadog, or any other backend is just a matter of writing a tiny sink. Reach for it when you want a single, sink-agnostic place to route application errors. Sinks run best-effort — a throwing sink never breaks the request.

    -

    Installation

    bun add @wrnexus/tracking
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -151,7 +149,7 @@ try { await tracker.capture(err, { userId: 42, op: "doWork" }); throw err; } - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/ui.wrn b/app/pages/packages/ui.wrn index f95279f7..24f08ec9 100644 --- a/app/pages/packages/ui.wrn +++ b/app/pages/packages/ui.wrn @@ -9,9 +9,8 @@ page wrnexusui {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexusui {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    @wrnexus/ui ships a library of server-rendered .wrn components (layout, form controls, and feedback UI) together with one themeable stylesheet, ui.css. The components are auto-discovered by the framework router — you don't import them in code. Once the package's component directory is on the router's scan path, you mount any component in a page with data-component="<name>". Every visual is driven by var(--wire-*) theme tokens, so components restyle instantly when the theme changes. The tiny JS surface (src/index.ts) exists only so the toolchain (CLI build + dev server) can locate the component directory and stylesheet.

    -

    Installation

    bun add @wrnexus/ui
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -111,7 +109,7 @@ const router = buildRouter(appDir, { componentDirs: [uiComponentsDir()]  <button data-component="button" label="Save" variant="primary" size="lg"></button> <div data-component="alert" variant="success" title="Done" message="Saved."></div> </div> - +
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/packages/uploader.wrn b/app/pages/packages/uploader.wrn index d11d0baf..54e32306 100644 --- a/app/pages/packages/uploader.wrn +++ b/app/pages/packages/uploader.wrn @@ -9,9 +9,8 @@ page wrnexusuploader {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    diff --git a/app/pages/packages/validation.wrn b/app/pages/packages/validation.wrn index 12d714f8..85856d7f 100644 --- a/app/pages/packages/validation.wrn +++ b/app/pages/packages/validation.wrn @@ -9,9 +9,8 @@ page wrnexusvalidation {
    W WRNexusJS - - Private preview · v0.2.15 - + +
    @@ -19,7 +18,6 @@ page wrnexusvalidation {

    Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.

    Overview

    Define a schema once with the fluent v builder, then reuse it in three places: .parse() runs server-side and returns coerced values plus per-field errors; .describe() emits a plain-JSON SchemaDescriptor that the browser runtime interprets (no eval, no bundled validator); and helpers like parseBody and parseEnv wire schemas straight into API routes and startup config. The server rule logic (applyRule/checkField) and the client runtime (VALIDATE_RUNTIME) mirror each other exactly, so a form validates identically in both places. Schemas are conventionally kept in app/schemas/.

    -

    Installation

    bun add @wrnexus/validation
    Private package — the machine must be authenticated to the wrnexus npm org
    (a read token in ~/.npmrc). Requires Bun (Node is not supported).
    @@ -310,7 +308,7 @@ schema.describe(): SchemaDescriptor
    WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    diff --git a/app/pages/releases/0.2.15.wrn b/app/pages/releases/0.2.15.wrn index 296185ea..4189a3c3 100644 --- a/app/pages/releases/0.2.15.wrn +++ b/app/pages/releases/0.2.15.wrn @@ -7,8 +7,8 @@ page Release0215 { view {
    -
    W WRNexusJSPrivate preview · v0.2.15
    - +
    W WRNexusJS
    +

    WRNexusJS 0.2.15

    Released 2026-07-12 in this documentation repository. Twenty-five installed packages are aligned to this version. See the changelog, upgrade guide, and package references.

    diff --git a/app/pages/roadmap.wrn b/app/pages/roadmap.wrn index bf3dd245..2ffd85b6 100644 --- a/app/pages/roadmap.wrn +++ b/app/pages/roadmap.wrn @@ -7,8 +7,8 @@ page Roadmap { view {
    -
    W WRNexusJSPrivate preview · v0.2.15
    - +
    W WRNexusJS
    +

    Roadmap

    Roadmap items are direction, not delivery commitments. Dates require explicit owner approval.

    Now

    • Private preview onboarding and accurate package references
    • Runnable documentation fixtures and link/accessibility checks
    • License, support, and disclosure owner decisions

    Next

    • Durable queue driver guidance
    • Expanded database/auth/realtime examples
    • Versioned release notes and migration fixtures

    Later / exploration

    • Historical documentation selector
    • Maintained reproducible benchmarks
    • Broader mobile/native coverage
    diff --git a/app/pages/search.wrn b/app/pages/search.wrn index 279bb4af..e0e23745 100644 --- a/app/pages/search.wrn +++ b/app/pages/search.wrn @@ -7,9 +7,9 @@ page Search { view {
    -
    W WRNexusJSPrivate preview · v0.2.15
    - -

    Search documentation

    This build-time index is local and sends no query to a third party. Use your browser’s find command to filter this compact index.

    Core documentation

    Get started · Tutorial · Architecture · .wrn language · Packages · Examples · Roadmap · Changelog · Security · Support · Search

    Guides

    Project structure · Routing · Pages and components · Server data · API routes · Middleware · Forms and validation · Authentication · Authorization · Application security · Database · Uploads · Realtime · Pub/sub · Queues · Testing · Workspaces and gateway · Deployment · Configuration and profiles · Internationalization and themes · Mobile · Observability · Upgrading · Troubleshooting

    Package APIs

    @wrnexus/ai · @wrnexus/authz · @wrnexus/compiler · @wrnexus/core · @wrnexus/csr · @wrnexus/db · @wrnexus/dev-server · @wrnexus/encryption · @wrnexus/i18n · @wrnexus/jwt · @wrnexus/mobile · @wrnexus/native · @wrnexus/oauth · @wrnexus/pubsub · @wrnexus/queue · @wrnexus/reactive · @wrnexus/router · @wrnexus/ssr · @wrnexus/styles · @wrnexus/test · @wrnexus/tracking · @wrnexus/ui · @wrnexus/uploader · @wrnexus/validation · @wrnexus/cli

    +
    W WRNexusJS
    + +

    Search documentation

    This build-time index is local and sends no query to a third party. Use your browser’s find command to filter this compact index.

    Core documentation

    Get started · Tutorial · Packages · Guides · .wrn language · Examples · Search

    Guides

    Project structure · Routing · Pages and components · Server data · API routes · Middleware · Forms and validation · Authentication · Authorization · Application security · Database · Uploads · Realtime · Pub/sub · Queues · Testing · Workspaces and gateway · Deployment · Configuration and profiles · Internationalization and themes · Mobile · Observability · Upgrading · Troubleshooting

    Package APIs

    @wrnexus/ai · @wrnexus/authz · @wrnexus/compiler · @wrnexus/core · @wrnexus/csr · @wrnexus/db · @wrnexus/dev-server · @wrnexus/encryption · @wrnexus/i18n · @wrnexus/jwt · @wrnexus/mobile · @wrnexus/native · @wrnexus/oauth · @wrnexus/pubsub · @wrnexus/queue · @wrnexus/reactive · @wrnexus/router · @wrnexus/ssr · @wrnexus/styles · @wrnexus/test · @wrnexus/tracking · @wrnexus/ui · @wrnexus/uploader · @wrnexus/validation · @wrnexus/cli

    } diff --git a/app/pages/security.wrn b/app/pages/security.wrn index 1512d528..116d01b0 100644 --- a/app/pages/security.wrn +++ b/app/pages/security.wrn @@ -7,8 +7,8 @@ page Security { view {
    -
    W WRNexusJSPrivate preview · v0.2.15
    - +
    W WRNexusJS
    +

    Security

    WRNexusJS provides primitives for CSP, CSRF, Trusted Types, sessions, validation, authorization, encryption, upload restrictions, request limits, and WebSocket-origin checks. Applications remain responsible for correct configuration, business authorization, secrets, dependencies, data protection, and operations.

    Supported releases

    Only the current private-preview release 0.2.15 is documented here. A formal old-release support window is not yet published.

    Report a vulnerability

    Use WorkRoot’s approved private contact path at workroot.in. Do not publish exploit details or secrets. Include affected version, impact, reproduction, and a safe contact method. Response targets, encryption key, bounty, audit, and certification are not currently claimed.

    Deployment controls

    Use restrictive CSP and permissions policies, HSTS only on HTTPS production origins, MIME sniffing protection, restrictive referrers, explicit CORS, secure cookies, CSRF validation, request limits, and origin checks. See application security.

    diff --git a/app/pages/showcase.wrn b/app/pages/showcase.wrn index c8f05d14..2c6cf11e 100644 --- a/app/pages/showcase.wrn +++ b/app/pages/showcase.wrn @@ -7,8 +7,8 @@ page Showcase { view {
    -
    W WRNexusJSPrivate preview · v0.2.15
    - +
    W WRNexusJS
    +

    Showcase

    Only confirmed public properties are listed; no customer or traffic claims are made.

    WorkRoot

    Creator/company site demonstrating a public WRNexusJS deployment. Exact deployed version and infrastructure notes await owner confirmation.

    WRNexusJS docs

    This documentation portal, built and verified against WRNexusJS 0.2.15 on Bun.

    Screenshots are intentionally deferred until approved assets and alt text are available.

    diff --git a/app/pages/support.wrn b/app/pages/support.wrn index d4cba304..a65e360a 100644 --- a/app/pages/support.wrn +++ b/app/pages/support.wrn @@ -7,8 +7,8 @@ page Support { view {
    -
    W WRNexusJSPrivate preview · v0.2.15
    - +
    W WRNexusJS
    +

    Support

    WRNexusJS has no public Discord, public issue tracker, or guaranteed community support channel listed by this repository. Preview access and support begin through WorkRoot’s public contact path.

    Include WRNexusJS version, Bun version, OS, a minimal reproduction, expected and actual behavior, and sanitized logs. Never include registry tokens, credentials, session cookies, or private data.

    Support scope, service levels, and commercial terms require owner confirmation.

    diff --git a/app/pages/tutorial.wrn b/app/pages/tutorial.wrn index c3f6ccf2..c5f6ea0c 100644 --- a/app/pages/tutorial.wrn +++ b/app/pages/tutorial.wrn @@ -7,8 +7,8 @@ page Tutorial { view {
    -
    W WRNexusJSPrivate preview · v0.2.15
    - +
    W WRNexusJS
    +
    Preview · runnable-project extraction pending

    Secure task board

    This tutorial connects the installed 0.2.15 APIs into one design. Snippets are limited to declarations and README patterns verified in the installed packages; a CI-compiled standalone fixture remains on the roadmap.

    Application shape

    A .wrn page renders tasks from an SSR API binding. A shared validation schema protects mutations. Session middleware identifies users, authorization policies gate updates, and a realtime room broadcasts changes.

    Schema and create route

    import { v, parseBody } from "@wrnexus/validation";
     const task = v.object({ title: v.string().trim().min(3).max(120) });
     export const POST = async (ctx) => {
    diff --git a/app/styles/global.css b/app/styles/global.css
    index 049cfddd..9c7aaf83 100644
    --- a/app/styles/global.css
    +++ b/app/styles/global.css
    @@ -100,7 +100,7 @@ a {
       top: 0;
       z-index: 20;
       display: grid;
    -  grid-template-columns: 1fr auto 1fr;
    +  grid-template-columns: minmax(180px, 1fr) auto minmax(180px, 1fr);
       align-items: center;
       gap: 2rem;
       height: 74px;
    @@ -131,7 +131,8 @@ a {
     }
     .topbar nav {
       display: flex;
    -  gap: 1.5rem;
    +  gap: clamp(0.8rem, 1.35vw, 1.5rem);
    +  align-items: center;
     }
     .topbar nav a {
       position: relative;
    @@ -159,10 +160,13 @@ a {
       color: var(--text);
     }
     .theme-button {
    -  justify-self: end;
    +  display: inline-grid;
    +  place-items: center;
    +  width: 40px;
    +  height: 40px;
       border: 1px solid var(--border);
       border-radius: 9px;
    -  padding: 0.5rem 0.8rem;
    +  padding: 0;
       color: var(--muted);
       background: var(--surface);
       cursor: pointer;
    @@ -172,12 +176,23 @@ a {
         box-shadow 0.18s ease;
     }
     .preview-pill {
    -  justify-self: end;
    +  display: inline-flex;
    +  align-items: center;
    +  min-height: 36px;
    +  padding: 0.35rem 0.65rem;
    +  border: 1px solid color-mix(in srgb, var(--brand) 35%, var(--border));
    +  border-radius: 999px;
       color: var(--brand-strong);
       font-size: 0.78rem;
       font-weight: 800;
       text-decoration: none;
     }
    +.topbar-actions {
    +  display: flex;
    +  justify-self: end;
    +  align-items: center;
    +  gap: 0.65rem;
    +}
     .mobile-doc-nav {
       display: none;
       padding: 0.75rem 20px;
    @@ -194,9 +209,10 @@ a {
       padding: 1rem 0 0.25rem;
     }
     .portal-main {
    +  min-width: 0;
       width: min(1240px, 100%);
       margin: 0 auto;
    -  padding: 1rem clamp(20px, 4vw, 72px) 6rem;
    +  padding: 0 clamp(20px, 4vw, 72px) 6rem;
     }
     .breadcrumbs {
       display: flex;
    @@ -207,7 +223,9 @@ a {
       font-size: 0.8rem;
     }
     .portal-hero {
    -  min-height: 650px;
    +  min-height: min(720px, calc(100vh - 74px));
    +  margin-inline: calc(clamp(20px, 4vw, 72px) * -1);
    +  padding-inline: clamp(20px, 4vw, 72px);
     }
     .status {
       display: inline-flex;
    @@ -231,6 +249,36 @@ a {
     .access-note {
       font-size: 0.86rem !important;
     }
    +.portal-main > section:not(.hero) {
    +  padding-block: clamp(3rem, 7vw, 6rem);
    +  border-top: 1px solid var(--border);
    +}
    +.portal-main > section:not(.hero) > h2 {
    +  max-width: 760px;
    +  margin: 0 0 1.75rem;
    +  font-size: clamp(1.8rem, 3.4vw, 3rem);
    +  line-height: 1.08;
    +  letter-spacing: -0.045em;
    +}
    +.portal-main > section:not(.hero) > p {
    +  max-width: 760px;
    +  color: var(--muted);
    +  line-height: 1.75;
    +}
    +.portal-main .feature-grid {
    +  padding: 0;
    +}
    +.feature-grid h3 {
    +  margin: 0.65rem 0;
    +  color: var(--text);
    +  font-size: 1.05rem;
    +}
    +.feature-grid article > :first-child {
    +  margin-top: 0;
    +}
    +.feature-grid article > :last-child {
    +  margin-bottom: 0;
    +}
     .access-callout {
       margin: 2rem 0;
       border: 1px solid var(--brand);
    @@ -238,6 +286,14 @@ a {
       padding: 1.25rem;
       background: color-mix(in srgb, var(--brand) 7%, var(--surface));
     }
    +.access-callout pre {
    +  padding-right: 5.5rem;
    +}
    +.access-callout .copy-button {
    +  position: absolute;
    +  top: 0.65rem;
    +  right: 0.65rem;
    +}
     .access-callout h2 {
       margin-top: 0;
       font-size: 1.2rem;
    @@ -287,6 +343,10 @@ a {
       border-radius: 8px;
       color: white;
       background: #334155;
    +  cursor: pointer;
    +}
    +.copy-button:hover {
    +  background: #475569;
     }
     footer nav {
       display: flex;
    @@ -306,6 +366,7 @@ footer nav {
     }
     .hero {
       display: grid;
    +  grid-template-columns: minmax(0, 1fr);
       place-items: center;
       min-height: 670px;
       padding: 100px 0;
    @@ -331,12 +392,15 @@ footer nav {
       text-transform: uppercase;
     }
     .hero h1 {
    +  width: 100%;
       max-width: 920px;
       margin: 1rem 0;
       font-size: clamp(3rem, 7vw, 6.6rem);
       line-height: 0.96;
       letter-spacing: -0.065em;
    -  animation: reveal-up 0.72s cubic-bezier(0.16, 1, 0.3, 1) both;
    +}
    +.hero > * {
    +  min-width: 0;
     }
     .hero.compact h1 {
       font-size: clamp(2.8rem, 5vw, 4.8rem);
    @@ -350,19 +414,18 @@ footer nav {
       animation: gradient-shift 7s linear infinite;
     }
     .hero > p {
    -  max-width: 720px;
    +  width: min(720px, 100%);
    +  max-width: 100%;
       margin: 0.75rem auto 0;
       color: var(--muted);
       font-size: 1.15rem;
       line-height: 1.75;
    -  animation: reveal-up 0.72s 0.1s cubic-bezier(0.16, 1, 0.3, 1) both;
     }
     .actions {
       display: flex;
       flex-wrap: wrap;
       gap: 0.8rem;
       margin-top: 2rem;
    -  animation: reveal-up 0.72s 0.18s cubic-bezier(0.16, 1, 0.3, 1) both;
     }
     .actions a {
       padding: 0.8rem 1.15rem;
    @@ -395,7 +458,6 @@ footer nav {
       text-align: left;
       background: var(--code);
       box-shadow: var(--shadow);
    -  animation: reveal-up 0.8s 0.28s cubic-bezier(0.16, 1, 0.3, 1) both;
     }
     .code-window > span {
       display: block;
    @@ -461,15 +523,6 @@ pre code,
         color-mix(in srgb, var(--surface-soft) 42%, var(--surface))
       );
       box-shadow: var(--shadow);
    -  animation: reveal-up 0.62s cubic-bezier(0.16, 1, 0.3, 1) both;
    -}
    -.feature-grid article:nth-child(2),
    -.package-card:nth-child(3n + 2) {
    -  animation-delay: 0.06s;
    -}
    -.feature-grid article:nth-child(3),
    -.package-card:nth-child(3n) {
    -  animation-delay: 0.12s;
     }
     .feature-grid h2,
     .package-card h2 {
    @@ -668,17 +721,17 @@ pre code,
     }
     .documentation {
       min-width: 0;
    -  animation: reveal-up 0.65s 0.08s cubic-bezier(0.16, 1, 0.3, 1) both;
     }
     .documentation.standalone,
     .standalone {
    -  width: 100%;
    -  max-width: none;
    -  margin: 0;
    -  padding: 90px clamp(0px, 5vw, 90px) 120px;
    +  width: min(960px, 100%);
    +  max-width: 960px;
    +  margin: 0 auto;
    +  padding: clamp(3.5rem, 7vw, 6rem) 0 clamp(5rem, 9vw, 8rem);
     }
     .standalone > * {
    -  max-width: 1000px;
    +  width: 100%;
    +  max-width: 850px;
     }
     .doc-intro {
       padding-bottom: 2rem;
    @@ -699,6 +752,15 @@ pre code,
       font-size: 1rem;
       line-height: 1.8;
     }
    +.prose p,
    +.prose li,
    +.prose td,
    +.prose th {
    +  overflow-wrap: anywhere;
    +}
    +.prose pre {
    +  max-width: 100%;
    +}
     .prose > * {
       max-width: 850px;
     }
    @@ -737,26 +799,32 @@ pre code,
       border: 1px solid var(--border);
       border-radius: 12px;
     }
    -.prose table {
    +.prose table,
    +.portal-main table {
       width: 100%;
       border-collapse: collapse;
       background: var(--surface);
       font-size: 0.9rem;
     }
     .prose th,
    -.prose td {
    +.prose td,
    +.portal-main th,
    +.portal-main td {
       min-width: 130px;
       padding: 0.75rem 0.9rem;
       border-bottom: 1px solid var(--border);
       text-align: left;
       vertical-align: top;
    +  line-height: 1.5;
     }
    -.prose th {
    +.prose th,
    +.portal-main th {
       color: var(--text);
       background: var(--surface-soft);
       font-weight: 700;
     }
    -.prose tr:last-child td {
    +.prose tr:last-child td,
    +.portal-main tr:last-child td {
       border-bottom: 0;
     }
     .prose a {
    @@ -799,6 +867,13 @@ footer {
       font-size: 0.82rem;
       text-align: center;
     }
    +footer p {
    +  margin: 0.5rem auto;
    +}
    +footer a {
    +  color: var(--brand-strong);
    +  text-underline-offset: 3px;
    +}
     
     @keyframes reveal-up {
       from {
    @@ -857,6 +932,9 @@ footer {
       .preview-pill {
         display: none;
       }
    +  .topbar-actions {
    +    display: none;
    +  }
       .mobile-doc-nav {
         display: block;
       }
    @@ -891,8 +969,68 @@ footer {
         padding-inline: 14px;
       }
       .hero {
    -    min-height: 580px;
    -    padding: 70px 0;
    +    min-height: auto;
    +    padding-top: 72px;
    +    padding-bottom: 72px;
    +  }
    +  .hero h1 {
    +    width: calc(100vw - 60px);
    +    max-width: calc(100vw - 60px);
    +    font-size: clamp(1.75rem, 8vw, 2.2rem);
    +    line-height: 1.02;
    +    letter-spacing: -0.055em;
    +    overflow-wrap: anywhere;
    +  }
    +  .hero > p {
    +    width: calc(100vw - 60px);
    +    max-width: calc(100vw - 60px);
    +    font-size: 1rem;
    +    overflow-wrap: anywhere;
    +  }
    +  .portal-hero {
    +    margin-inline: -14px;
    +    padding-inline: 14px;
    +  }
    +  .portal-hero br {
    +    display: block;
    +  }
    +  .portal-hero h1 em {
    +    display: block;
    +  }
    +  .portal-hero > p {
    +    padding-inline: 0.25rem;
    +  }
    +  .actions {
    +    width: calc(100vw - 60px);
    +    max-width: calc(100vw - 60px);
    +  }
    +  .actions a {
    +    max-width: 100%;
    +    text-align: center;
    +  }
    +  .portal-main > section:not(.hero) {
    +    padding-block: 3.5rem;
    +  }
    +  .breadcrumbs {
    +    overflow-x: auto;
    +    flex-wrap: nowrap;
    +    white-space: nowrap;
    +  }
    +  .documentation.standalone,
    +  .standalone {
    +    width: calc(100vw - 40px);
    +    max-width: calc(100vw - 40px);
    +  }
    +  .standalone > * {
    +    max-width: calc(100vw - 40px);
    +  }
    +  .standalone > .status {
    +    width: fit-content;
    +  }
    +  .coverage-list article {
    +    align-items: flex-start;
    +    flex-direction: column;
    +    padding-bottom: 1rem;
       }
       .feature-grid,
       .package-grid {
    diff --git a/docs/documentation-coverage-matrix.md b/docs/documentation-coverage-matrix.md
    index 0c604411..5311ac2d 100644
    --- a/docs/documentation-coverage-matrix.md
    +++ b/docs/documentation-coverage-matrix.md
    @@ -1,29 +1,29 @@
     # Documentation coverage matrix
     
    -| Area | Package reference | Concept guide | Runnable fixture | Tests | Stability | Limitation |
    -|---|---|---|---|---|---|---|
    -| @wrnexus/ai | /packages/ai | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/authz | /packages/authz | /guides/authorization | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/cli | /packages/cli | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/compiler | /packages/compiler | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/core | /packages/core | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/csr | /packages/csr | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/db | /packages/db | /guides/db | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/dev-server | /packages/dev-server | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/encryption | /packages/encryption | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/i18n | /packages/i18n | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/jwt | /packages/jwt | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/mobile | /packages/mobile | /guides/mobile | Planned | Generator coverage | Experimental | No standalone CI fixture |
    -| @wrnexus/native | /packages/native | Architecture/package guide | Planned | Generator coverage | Experimental | No standalone CI fixture |
    -| @wrnexus/oauth | /packages/oauth | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/pubsub | /packages/pubsub | /guides/pubsub | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/queue | /packages/queue | /guides/queues | Planned | Generator coverage | Experimental | No standalone CI fixture |
    -| @wrnexus/reactive | /packages/reactive | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/router | /packages/router | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/ssr | /packages/ssr | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/styles | /packages/styles | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/test | /packages/test | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/tracking | /packages/tracking | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/ui | /packages/ui | Architecture/package guide | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/uploader | /packages/uploader | /guides/uploads | Planned | Generator coverage | Preview | No standalone CI fixture |
    -| @wrnexus/validation | /packages/validation | /guides/forms-and-validation | Planned | Generator coverage | Preview | No standalone CI fixture |
    +| Area                | Package reference    | Concept guide                | Runnable fixture | Tests              | Stability    | Limitation               |
    +| ------------------- | -------------------- | ---------------------------- | ---------------- | ------------------ | ------------ | ------------------------ |
    +| @wrnexus/ai         | /packages/ai         | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/authz      | /packages/authz      | /guides/authorization        | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/cli        | /packages/cli        | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/compiler   | /packages/compiler   | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/core       | /packages/core       | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/csr        | /packages/csr        | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/db         | /packages/db         | /guides/db                   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/dev-server | /packages/dev-server | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/encryption | /packages/encryption | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/i18n       | /packages/i18n       | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/jwt        | /packages/jwt        | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/mobile     | /packages/mobile     | /guides/mobile               | Planned          | Generator coverage | Experimental | No standalone CI fixture |
    +| @wrnexus/native     | /packages/native     | Architecture/package guide   | Planned          | Generator coverage | Experimental | No standalone CI fixture |
    +| @wrnexus/oauth      | /packages/oauth      | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/pubsub     | /packages/pubsub     | /guides/pubsub               | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/queue      | /packages/queue      | /guides/queues               | Planned          | Generator coverage | Experimental | No standalone CI fixture |
    +| @wrnexus/reactive   | /packages/reactive   | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/router     | /packages/router     | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/ssr        | /packages/ssr        | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/styles     | /packages/styles     | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/test       | /packages/test       | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/tracking   | /packages/tracking   | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/ui         | /packages/ui         | Architecture/package guide   | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/uploader   | /packages/uploader   | /guides/uploads              | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    +| @wrnexus/validation | /packages/validation | /guides/forms-and-validation | Planned          | Generator coverage | Preview      | No standalone CI fixture |
    diff --git a/public/docs-index.json b/public/docs-index.json
    index 0ca52a7a..b9b6c86f 100644
    --- a/public/docs-index.json
    +++ b/public/docs-index.json
    @@ -473,4 +473,4 @@
           "stability": "preview"
         }
       ]
    -}
    \ No newline at end of file
    +}
    diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts
    index 815c2a63..429ad801 100644
    --- a/scripts/generate-docs.ts
    +++ b/scripts/generate-docs.ts
    @@ -203,9 +203,8 @@ ${state}
           
           
    W WRNexusJS - - Private preview · v${frameworkVersion} - + +
    ${content}
    WRNexusJS ${frameworkVersion} · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
    @@ -255,7 +254,10 @@ for (const [name, category, summary] of catalog) { const typesPath = join(packageRoot, "dist", "index.d.ts"); if (!existsSync(readmePath) || !existsSync(typesPath)) throw new Error(`Install @wrnexus/${name} before generating docs`); - const readme = readFileSync(readmePath, "utf8").replace(/^#\s+[^\n]+\n?/, ""); + const readme = readFileSync(readmePath, "utf8") + .replace(/^#\s+[^\n]+\n?/, "") + .replace(/^## Installation\s*$[\s\S]*?(?=^##\s|\s*$)/m, "") + .replace(/\bWrNexus\b/g, "WRNexusJS"); const types = readFileSync(typesPath, "utf8"); const guide = markdown(readme); const toc = [ diff --git a/scripts/generate-portal.ts b/scripts/generate-portal.ts index 2b95ad63..b6aac56a 100644 --- a/scripts/generate-portal.ts +++ b/scripts/generate-portal.ts @@ -16,19 +16,19 @@ const code = (s: string) => const navigation = [ ["/getting-started", "Get started"], ["/tutorial", "Tutorial"], - ["/architecture", "Architecture"], - ["/language", ".wrn language"], ["/packages", "Packages"], + ["/guides/project-structure", "Guides"], + ["/language", ".wrn language"], ["/examples", "Examples"], - ["/roadmap", "Roadmap"], - ["/changelog", "Changelog"], - ["/security", "Security"], - ["/support", "Support"], ["/search", "Search"], ] as const; function shell(title: string, description: string, body: string, section = "Documentation") { const nav = navigation.map(([href, label]) => `${label}`).join(""); + const breadcrumbs = + title === "Home" + ? "" + : ``; return `page ${title.replace(/[^A-Za-z0-9]/g, "") || "Guide"} { seo { title = "${title.replaceAll('"', "'")}" @@ -38,9 +38,9 @@ function shell(title: string, description: string, body: string, section = "Docu view {
    -
    W WRNexusJSPrivate preview · v${version}
    +
    W WRNexusJS
    Browse documentation
    -
    ${body}
    +
    ${breadcrumbs}${body}
    }