From 9fc364ea41fcf01710a742b4ea4b4c8ce2488b1e Mon Sep 17 00:00:00 2001 From: Ajay Ghanwat Date: Mon, 13 Jul 2026 14:07:37 +0530 Subject: [PATCH] docs: update portal for WRNexusJS 0.2.17 --- app/docs.test.ts | 21 +- app/pages/404.wrn | 4 +- app/pages/access.wrn | 6 +- app/pages/architecture.wrn | 6 +- app/pages/benchmarks.wrn | 4 +- app/pages/changelog.wrn | 6 +- app/pages/examples.wrn | 6 +- app/pages/getting-started.wrn | 6 +- app/pages/guides/api-routes.wrn | 6 +- app/pages/guides/authentication.wrn | 6 +- app/pages/guides/authorization.wrn | 6 +- .../guides/configuration-and-profiles.wrn | 6 +- app/pages/guides/database.wrn | 6 +- app/pages/guides/deployment.wrn | 6 +- app/pages/guides/forms-and-validation.wrn | 6 +- app/pages/guides/i18n-and-themes.wrn | 6 +- app/pages/guides/middleware.wrn | 6 +- app/pages/guides/mobile.wrn | 6 +- app/pages/guides/observability.wrn | 6 +- app/pages/guides/pages-and-components.wrn | 6 +- app/pages/guides/project-structure.wrn | 6 +- app/pages/guides/pubsub.wrn | 6 +- app/pages/guides/queues.wrn | 6 +- app/pages/guides/realtime.wrn | 6 +- app/pages/guides/routing.wrn | 6 +- app/pages/guides/security.wrn | 6 +- app/pages/guides/server-data.wrn | 6 +- app/pages/guides/testing.wrn | 6 +- app/pages/guides/troubleshooting.wrn | 6 +- app/pages/guides/upgrading.wrn | 6 +- app/pages/guides/uploads.wrn | 6 +- app/pages/guides/workspaces-and-gateway.wrn | 27 +- app/pages/index.wrn | 12 +- app/pages/language.wrn | 6 +- app/pages/license.wrn | 4 +- app/pages/packages.wrn | 9 +- app/pages/packages/ai.wrn | 8 +- app/pages/packages/authz.wrn | 8 +- app/pages/packages/cli.wrn | 14 +- app/pages/packages/compiler.wrn | 8 +- app/pages/packages/core.wrn | 8 +- app/pages/packages/csr.wrn | 8 +- app/pages/packages/db.wrn | 8 +- app/pages/packages/dev-server.wrn | 14 +- app/pages/packages/encryption.wrn | 8 +- app/pages/packages/helpers.wrn | 109 + app/pages/packages/i18n.wrn | 8 +- app/pages/packages/jwt.wrn | 8 +- app/pages/packages/mobile.wrn | 8 +- app/pages/packages/native.wrn | 8 +- app/pages/packages/oauth.wrn | 8 +- app/pages/packages/pubsub.wrn | 8 +- app/pages/packages/queue.wrn | 8 +- app/pages/packages/reactive.wrn | 8 +- app/pages/packages/router.wrn | 8 +- app/pages/packages/ssr.wrn | 8 +- app/pages/packages/styles.wrn | 8 +- app/pages/packages/test.wrn | 8 +- app/pages/packages/tracking.wrn | 8 +- app/pages/packages/ui.wrn | 8 +- app/pages/packages/uploader.wrn | 8 +- app/pages/packages/validation.wrn | 8 +- app/pages/releases/0.2.17.wrn | 16 + app/pages/roadmap.wrn | 4 +- app/pages/search.wrn | 6 +- app/pages/security.wrn | 6 +- app/pages/showcase.wrn | 6 +- app/pages/support.wrn | 4 +- app/pages/tutorial.wrn | 6 +- bun.lock | 103 +- docs/documentation-coverage-matrix.md | 1 + docs/release-access-status.md | 4 +- docs/site-audit.md | 16 +- package-lock.json | 293 +- package.json | 53 +- public/docs-index.json | 149 +- public/llms-full.txt | 5 +- public/llms.txt | 3644 ++++++++++++++++- public/sitemap.xml | 2 +- scripts/generate-docs.ts | 5 +- scripts/generate-portal.ts | 83 +- 81 files changed, 4388 insertions(+), 594 deletions(-) create mode 100644 app/pages/packages/helpers.wrn create mode 100644 app/pages/releases/0.2.17.wrn diff --git a/app/docs.test.ts b/app/docs.test.ts index 8f1b7ea9..a32dcf48 100644 --- a/app/docs.test.ts +++ b/app/docs.test.ts @@ -20,6 +20,7 @@ const expected = [ "db", "dev-server", "encryption", + "helpers", "i18n", "jwt", "mobile", @@ -107,6 +108,24 @@ test("portal exposes truthful access and machine discovery", () => { ]) { expect(existsSync(join(root, "public", asset))).toBe(true); } + + const llms = readFileSync(join(root, "public", "llms.txt"), "utf8"); + expect(llms).toContain(`# WRNexusJS documentation ${frameworkVersion}`); + expect(llms).toContain("# Installed package documentation"); + expect(llms).toContain("## @wrnexus/helpers"); + expect(llms).toContain("redirectToLogin"); +}); + +test("workspace guide documents app addition and safe forward-auth redirects", () => { + const source = readFileSync( + join(root, "app", "pages", "guides", "workspaces-and-gateway.wrn"), + "utf8", + ); + expect(source).toContain("wrnexus workspace add reports --domain=reports.localhost"); + expect(source).toContain("@wrnexus/helpers"); + expect(source).toContain("redirectToLogin"); + expect(source).toContain("allowedHosts"); + expect(source).toContain("/api/verify"); }); test("package index includes searchable category filters", () => { @@ -117,7 +136,7 @@ test("package index includes searchable category filters", () => { expect(source).toContain("category === 'All'"); expect(source).not.toContain("category === 'All' ||"); expect(source).not.toContain(") && (query"); - expect(source.match(/class="package-card"/g)).toHaveLength(25); + expect(source.match(/class="package-card"/g)).toHaveLength(expected.length); }); test("clicking a category hides packages from other categories", async () => { diff --git a/app/pages/404.wrn b/app/pages/404.wrn index d5c116ff..813eaaa0 100644 --- a/app/pages/404.wrn +++ b/app/pages/404.wrn @@ -7,10 +7,10 @@ page Pagenotfound { view {
-
W WRNexusJS
+
W WRNexusJS
- +
} } \ No newline at end of file diff --git a/app/pages/access.wrn b/app/pages/access.wrn index 00265213..0afef480 100644 --- a/app/pages/access.wrn +++ b/app/pages/access.wrn @@ -7,10 +7,10 @@ page Access { view {
-
W WRNexusJS
+
W WRNexusJS
-
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.

- +
Private Developer Preview

Request preview access

WRNexusJS 0.2.17 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.17 create my-app

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

+
} } \ No newline at end of file diff --git a/app/pages/architecture.wrn b/app/pages/architecture.wrn index 03a234f1..2d0bd4c5 100644 --- a/app/pages/architecture.wrn +++ b/app/pages/architecture.wrn @@ -7,10 +7,10 @@ page Architecture { view {
-
W WRNexusJS
+
W WRNexusJS
-
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.

- +
Framework architecture · 0.2.17

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.

+
} } \ No newline at end of file diff --git a/app/pages/benchmarks.wrn b/app/pages/benchmarks.wrn index f4994186..14b6bfb0 100644 --- a/app/pages/benchmarks.wrn +++ b/app/pages/benchmarks.wrn @@ -7,10 +7,10 @@ page Benchmarks { view {
-
W WRNexusJS
+
W WRNexusJS

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.

- +
} } \ No newline at end of file diff --git a/app/pages/changelog.wrn b/app/pages/changelog.wrn index 2e6a0765..9824e67b 100644 --- a/app/pages/changelog.wrn +++ b/app/pages/changelog.wrn @@ -7,10 +7,10 @@ page Changelog { view {
-
W WRNexusJS
+
W WRNexusJS
-

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.

- +

Changelog

0.2.17 2026-07-13

Documentation is aligned to all 26 installed packages. This release adds @wrnexus/helpers, original-request URL helpers, safe login redirects, working wrnexus workspace add, and forward-auth redirect propagation.

Migration notes

Run wrnexus update --latest and keep every @wrnexus/* package on 0.2.17. Existing applications must explicitly add @wrnexus/helpers before importing it; newly scaffolded applications include it automatically.

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.

+
} } \ No newline at end of file diff --git a/app/pages/examples.wrn b/app/pages/examples.wrn index c0727a6a..ae4cb262 100644 --- a/app/pages/examples.wrn +++ b/app/pages/examples.wrn @@ -7,10 +7,10 @@ page Examples { view {
-
W WRNexusJS
+
W WRNexusJS
-

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
- +

Examples

Examples are tied to installed 0.2.17 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
+
} } \ No newline at end of file diff --git a/app/pages/getting-started.wrn b/app/pages/getting-started.wrn index eabcc23d..8feed87b 100644 --- a/app/pages/getting-started.wrn +++ b/app/pages/getting-started.wrn @@ -7,9 +7,9 @@ page Gettingstarted { view {
-
W WRNexusJS
+
W WRNexusJS
-
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
+      
Preview guide · v0.2.17

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.17 create my-app
 cd my-app
 bun install
 bun run dev

2. Know the structure

app/pages/       # file-based .wrn routes
@@ -39,7 +39,7 @@ export const POST = async (ctx) => {
 }

7. Test and ship

bun run test
 bun run build
 bun dist/server.js

Next: deployment, database, authentication, and workspaces.

- +
} } \ No newline at end of file diff --git a/app/pages/guides/api-routes.wrn b/app/pages/guides/api-routes.wrn index eb848ccb..3b283518 100644 --- a/app/pages/guides/api-routes.wrn +++ b/app/pages/guides/api-routes.wrn @@ -7,10 +7,10 @@ page APIroutes { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/authentication.wrn b/app/pages/guides/authentication.wrn index 1bc28e18..98a01554 100644 --- a/app/pages/guides/authentication.wrn +++ b/app/pages/guides/authentication.wrn @@ -7,10 +7,10 @@ page Authentication { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/authorization.wrn b/app/pages/guides/authorization.wrn index 9de5512e..b64c1224 100644 --- a/app/pages/guides/authorization.wrn +++ b/app/pages/guides/authorization.wrn @@ -7,10 +7,10 @@ page Authorization { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/configuration-and-profiles.wrn b/app/pages/guides/configuration-and-profiles.wrn index 0592dfa2..b27445de 100644 --- a/app/pages/guides/configuration-and-profiles.wrn +++ b/app/pages/guides/configuration-and-profiles.wrn @@ -7,10 +7,10 @@ page Configurationandprofiles { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/database.wrn b/app/pages/guides/database.wrn index 2e193311..e1703f46 100644 --- a/app/pages/guides/database.wrn +++ b/app/pages/guides/database.wrn @@ -7,10 +7,10 @@ page Database { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/deployment.wrn b/app/pages/guides/deployment.wrn index 15841022..fff5e270 100644 --- a/app/pages/guides/deployment.wrn +++ b/app/pages/guides/deployment.wrn @@ -7,10 +7,10 @@ page Deployment { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/forms-and-validation.wrn b/app/pages/guides/forms-and-validation.wrn index 5b6a1f3e..8928e767 100644 --- a/app/pages/guides/forms-and-validation.wrn +++ b/app/pages/guides/forms-and-validation.wrn @@ -7,10 +7,10 @@ page Formsandvalidation { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/i18n-and-themes.wrn b/app/pages/guides/i18n-and-themes.wrn index f2895620..ab340268 100644 --- a/app/pages/guides/i18n-and-themes.wrn +++ b/app/pages/guides/i18n-and-themes.wrn @@ -7,10 +7,10 @@ page Internationalizationandthemes { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/middleware.wrn b/app/pages/guides/middleware.wrn index 8de8d173..e7b51a11 100644 --- a/app/pages/guides/middleware.wrn +++ b/app/pages/guides/middleware.wrn @@ -7,10 +7,10 @@ page Middleware { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/mobile.wrn b/app/pages/guides/mobile.wrn index 8684710a..6b04ee4d 100644 --- a/app/pages/guides/mobile.wrn +++ b/app/pages/guides/mobile.wrn @@ -7,10 +7,10 @@ page Mobile { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/observability.wrn b/app/pages/guides/observability.wrn index 7d918974..da11f150 100644 --- a/app/pages/guides/observability.wrn +++ b/app/pages/guides/observability.wrn @@ -7,10 +7,10 @@ page Observability { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/pages-and-components.wrn b/app/pages/guides/pages-and-components.wrn index c6fac3b7..d5c8559c 100644 --- a/app/pages/guides/pages-and-components.wrn +++ b/app/pages/guides/pages-and-components.wrn @@ -7,10 +7,10 @@ page Pagesandcomponents { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/project-structure.wrn b/app/pages/guides/project-structure.wrn index 7c755220..477351c0 100644 --- a/app/pages/guides/project-structure.wrn +++ b/app/pages/guides/project-structure.wrn @@ -7,10 +7,10 @@ page Projectstructure { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/pubsub.wrn b/app/pages/guides/pubsub.wrn index cc220ba3..1e93d5e4 100644 --- a/app/pages/guides/pubsub.wrn +++ b/app/pages/guides/pubsub.wrn @@ -7,10 +7,10 @@ page Pubsub { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/queues.wrn b/app/pages/guides/queues.wrn index 2b497cc0..1b5f71c0 100644 --- a/app/pages/guides/queues.wrn +++ b/app/pages/guides/queues.wrn @@ -7,10 +7,10 @@ page Queues { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/realtime.wrn b/app/pages/guides/realtime.wrn index a22f6a65..15c1e1d2 100644 --- a/app/pages/guides/realtime.wrn +++ b/app/pages/guides/realtime.wrn @@ -7,10 +7,10 @@ page Realtime { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/routing.wrn b/app/pages/guides/routing.wrn index a8e4fa6a..91d9992a 100644 --- a/app/pages/guides/routing.wrn +++ b/app/pages/guides/routing.wrn @@ -7,10 +7,10 @@ page Routing { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/security.wrn b/app/pages/guides/security.wrn index 8a8ae359..9ac43fbb 100644 --- a/app/pages/guides/security.wrn +++ b/app/pages/guides/security.wrn @@ -7,10 +7,10 @@ page Applicationsecurity { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/server-data.wrn b/app/pages/guides/server-data.wrn index 63ea7bc7..f6030d5d 100644 --- a/app/pages/guides/server-data.wrn +++ b/app/pages/guides/server-data.wrn @@ -7,10 +7,10 @@ page Serverdata { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/testing.wrn b/app/pages/guides/testing.wrn index 9c5d29ce..f154a844 100644 --- a/app/pages/guides/testing.wrn +++ b/app/pages/guides/testing.wrn @@ -7,10 +7,10 @@ page Testing { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/troubleshooting.wrn b/app/pages/guides/troubleshooting.wrn index 70c03138..cf4890c4 100644 --- a/app/pages/guides/troubleshooting.wrn +++ b/app/pages/guides/troubleshooting.wrn @@ -7,10 +7,10 @@ page Troubleshooting { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/upgrading.wrn b/app/pages/guides/upgrading.wrn index c5730559..589a1b27 100644 --- a/app/pages/guides/upgrading.wrn +++ b/app/pages/guides/upgrading.wrn @@ -7,10 +7,10 @@ page Upgrading { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17.

Release scope

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

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/uploads.wrn b/app/pages/guides/uploads.wrn index d4453afa..8c3825ed 100644 --- a/app/pages/guides/uploads.wrn +++ b/app/pages/guides/uploads.wrn @@ -7,10 +7,10 @@ page Uploads { view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

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.17 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/guides/workspaces-and-gateway.wrn b/app/pages/guides/workspaces-and-gateway.wrn index dd5eed5e..bebc4ab1 100644 --- a/app/pages/guides/workspaces-and-gateway.wrn +++ b/app/pages/guides/workspaces-and-gateway.wrn @@ -1,16 +1,35 @@ page Workspacesandgateway { seo { title = "Workspaces and gateway" - description = "Host isolated applications behind a gateway." + description = "Add applications, route domains, and implement safe SSO forward authentication." canonical = "https://wrnexusjs.dev/guides/workspaces-and-gateway" } view {
-
W WRNexusJS
+
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

- +
Preview guide · 0.2.17

Workspaces and gateway

A workspace runs isolated applications behind one domain-routing gateway. Add an application from the workspace root; the CLI scaffolds apps/reports and registers it in wrnexus.workspace.ts:

wrnexus workspace add reports --domain=reports.localhost
+bun install
+bun run dev

Forward authentication

Point protected applications at a dedicated verifier endpoint. The verifier must return 2xx for an authenticated session, 401/403 to deny access, or an HTTP redirect to begin browser login.

// wrnexus.workspace.ts
+{
+  name: "admin",
+  dir: "apps/admin",
+  domains: ["admin.localhost"],
+  auth: { forward: { url: "http://sso.localhost:3000/api/verify" } },
+}

The gateway forwards cookies, authorization, original host, protocol, method, path, and query. Inside the verifier, ctx.url identifies the SSO verifier request—not the original admin URL. Use @wrnexus/helpers to reconstruct and validate the original destination:

import type { Context } from "@wrnexus/core";
+import { redirectToLogin } from "@wrnexus/helpers";
+
+export const GET = async (ctx: Context) => {
+  if (await hasValidSession(ctx)) {
+    return new Response(null, { status: 204 });
+  }
+
+  return redirectToLogin(ctx, "/login", {
+    allowedHosts: ["admin.localhost:3000", "reports.localhost:3000"],
+  });
+};

Always allowlist redirect hosts. After login, validate or sign the returnTo value before redirecting. Keep internal app ports private and open applications through the gateway port.

Release scope

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

Browse package APIs · Troubleshooting · Support

+
} } \ No newline at end of file diff --git a/app/pages/index.wrn b/app/pages/index.wrn index c7dd59d6..a0a11fd3 100644 --- a/app/pages/index.wrn +++ b/app/pages/index.wrn @@ -7,9 +7,9 @@ page Home { view {
-
W WRNexusJS
+
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.

Private developer preview. Request access to the package registry.

app/pages/dashboard.wrn
page Dashboard {
+      
Private Developer Preview

WRNexusJS v0.2.17

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.

Private developer preview. Request access to the package registry.

app/pages/dashboard.wrn
page Dashboard {
   ssr { api tasks GET /api/tasks { return tasks } }
   view {
     <main>
@@ -35,10 +35,10 @@ export const POST = async (ctx) => {
   return result.ok ? Response.json({ ok: true }, { status: 201 }) : result.response;
 };

Request lifecycle

  1. RequestSecurity headers and request limits
  2. MiddlewareAuthentication, policy, and context
  3. File routePage or API handler
  4. Compiler + SSRSafe HTML and scoped runtime
  5. ResponseHTML, JSON, stream, or realtime upgrade
-

Production proof

WorkRoot

Public creator/company site and approved WRNexusJS production showcase.

wrnexusjs.dev

This documentation application runs WRNexusJS 0.2.15.

View deployment notes and showcase status →

-

Capability status

CapabilityStatusDetails
SSR, routing, compiler, APIsPreviewInstalled in 0.2.15; public support policy pending.
Mobile/nativeExperimentalCapacitor compatibility and native generation have platform limitations.
Durable queuesExperimentalProduction durability requires an appropriate driver strategy.
-

Continue exploring

- +

Production proof

WorkRoot

Public creator/company site and approved WRNexusJS production showcase.

wrnexusjs.dev

This documentation application runs WRNexusJS 0.2.17.

View deployment notes and showcase status →

+

Capability status

CapabilityStatusDetails
SSR, routing, compiler, APIsPreviewInstalled in 0.2.17; public support policy pending.
Mobile/nativeExperimentalCapacitor compatibility and native generation have platform limitations.
Durable queuesExperimentalProduction durability requires an appropriate driver strategy.
+

Continue exploring

+
} } \ No newline at end of file diff --git a/app/pages/language.wrn b/app/pages/language.wrn index 2984dce0..6ed1ef7c 100644 --- a/app/pages/language.wrn +++ b/app/pages/language.wrn @@ -7,15 +7,15 @@ page Thewrnlanguage { view {
-
W WRNexusJS
+
W WRNexusJS
-
Language reference · 0.2.15

The .wrn language

File anatomy

page Account {
+      
Language reference · 0.2.17

The .wrn language

File anatomy

page Account {
   layout = "public"
   seo { title = "Account" description = "Manage your account." }
   state count = 0
   view { <button @click="count++">Count {count}</button> }
 }

Pages, components, layouts, props, and state

Pages are routes. Components declare default-valued props and may hold state. Layouts provide shared slots. Mount components with data-component; fill default or named slots with data-slot.

Interpolation, conditionals, and loops

Interpolation is HTML-escaped. Use server {#if} and {#each} for SSR data. Use data-show for reactive client visibility.

Events and directives

@click and other events execute in the reactive scope. Data attributes opt into forms, i18n, themes, realtime, uploader, browser, and mobile behavior. Consult the exact package page because availability varies.

Forms, i18n, themes, and realtime

form[data-schema] connects descriptors to client and server validation. Translation keys use {t:key}. Theme toggles use data-wire-theme-toggle. Realtime pages opt into a named room.

Escaping and security

Text interpolation is escaped by default. Do not construct trusted HTML from user input. Server-only refinements must be repeated at the authoritative mutation boundary.

Common compiler errors

  • Use balanced braces; a literal brace must be escaped.
  • Declare UI in view, not JSX or hooks.
  • Use a valid page, component, or layout declaration matching the file role.
  • Keep server loops tied to available SSR bindings.
  • Check troubleshooting and compiler API for this release.
- +
} } \ No newline at end of file diff --git a/app/pages/license.wrn b/app/pages/license.wrn index 1f158fd8..ee3a917f 100644 --- a/app/pages/license.wrn +++ b/app/pages/license.wrn @@ -7,10 +7,10 @@ page License { view {
-
W WRNexusJS
+
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.

- +
} } \ No newline at end of file diff --git a/app/pages/packages.wrn b/app/pages/packages.wrn index 094e09dd..be87f1be 100644 --- a/app/pages/packages.wrn +++ b/app/pages/packages.wrn @@ -12,10 +12,10 @@ page Packages {
W WRNexusJS - +
-
25 focused packages

Package reference

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

Showing {category} packages

+
26 focused packages

Package reference

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

Showing {category} packages

AI

@wrnexus/ai

Server-side Anthropic client with generation and streaming.

Open documentation →
@@ -42,6 +42,9 @@ page Packages { Security

@wrnexus/encryption

Hashing, HMAC, authenticated encryption, and key derivation.

Open documentation →
+ + Tooling

@wrnexus/helpers

Safe Context URL helpers and forward-auth login redirects.

Open documentation → +
Frontend

@wrnexus/i18n

Translation loading, locale resolution, and Intl formatting.

Open documentation →
@@ -90,7 +93,7 @@ page Packages { Security

@wrnexus/validation

Typed schemas, coercion, validation, and browser descriptors.

Open documentation →
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/ai.wrn b/app/pages/packages/ai.wrn index 05fc9a9c..50df20af 100644 --- a/app/pages/packages/ai.wrn +++ b/app/pages/packages/ai.wrn @@ -10,12 +10,12 @@ page wrnexusai {
W WRNexusJS - +
- -
AI · Preview

@wrnexus/ai

Server-side Anthropic client with generation and streaming.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/ai@0.2.15

Request preview access. Never put registry tokens in source control.

A tiny, zero-dependency Claude (Anthropic) client for WRNexusJS apps — generate and stream text with Claude from any server-side code.
+ +
AI · Preview

@wrnexus/ai

Server-side Anthropic client with generation and streaming.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/ai@0.2.17

Request preview access. Never put registry tokens in source control.

A tiny, zero-dependency Claude (Anthropic) client for WRNexusJS apps — generate and stream text with Claude from any server-side code.

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.

@@ -176,7 +176,7 @@ const reply = await ai.generate( );
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/authz.wrn b/app/pages/packages/authz.wrn index 50b5f1f0..2cc67cbf 100644 --- a/app/pages/packages/authz.wrn +++ b/app/pages/packages/authz.wrn @@ -10,12 +10,12 @@ page wrnexusauthz {
W WRNexusJS - +
- -
Security · Preview

@wrnexus/authz

Role, permission, policy, and authorization guards.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/authz@0.2.15

Request preview access. Never put registry tokens in source control.

Composable authorization for WRNexusJS — role-based (RBAC), policy-based (PBAC), and attribute-based (ABAC) access control that reduces to a boolean check plus an authorize() guard.
+ +
Security · Preview

@wrnexus/authz

Role, permission, policy, and authorization guards.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/authz@0.2.17

Request preview access. Never put registry tokens in source control.

Composable authorization for WRNexusJS — role-based (RBAC), policy-based (PBAC), and attribute-based (ABAC) access control that reduces to a boolean check plus an authorize() guard.

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.

@@ -227,7 +227,7 @@ app.put( );
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/cli.wrn b/app/pages/packages/cli.wrn index 1af02f6e..8a1fcfe8 100644 --- a/app/pages/packages/cli.wrn +++ b/app/pages/packages/cli.wrn @@ -10,12 +10,12 @@ page wrnexuscli {
W WRNexusJS - +
- -
Tooling · Preview

@wrnexus/cli

Create, develop, build, generate, test, and maintain WRNexusJS apps.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/cli@0.2.15

Request preview access. Never put registry tokens in source control.

The wrnexus command-line tool that scaffolds, runs, builds, tests, and manages WRNexusJS apps.
+ +
Tooling · Preview

@wrnexus/cli

Create, develop, build, generate, test, and maintain WRNexusJS apps.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/cli@0.2.17

Request preview access. Never put registry tokens in source control.

The wrnexus command-line tool that scaffolds, runs, builds, tests, and manages WRNexusJS apps.

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.

@@ -29,7 +29,7 @@ page wrnexuscli {

Every command accepts an optional [app-dir] (defaults to .). Commands that read config or .env also accept --profile=<name> (see [Profiles](#profiles)).

-
CommandPurpose
wrnexus dev [app-dir] [--port=3000]Start the development server with live reload / HMR.
wrnexus build [app-dir]Build a self-contained production server bundle + assets into dist/.
wrnexus create <app-name>Scaffold a new single app from an inline template.
wrnexus workspace <name>Scaffold a monorepo (apps/* + shared packages/*).
wrnexus gateway [--port=3000]Serve every workspace app behind one port, routed by domain.
wrnexus generate <type> <name>Scaffold a page \component \api \schema.
wrnexus generate routesRegenerate the typed routes file (app/routes.gen.ts).
wrnexus generate dockerScaffold Dockerfile, .dockerignore, and docker-compose.yml.
wrnexus generate mobileScaffold a Capacitor shell for iOS and Android.
wrnexus mobile add <package...>Install Capacitor plugins and sync native projects.
wrnexus eject <name...>Copy Wire UI component .wrn sources into app/components/.
wrnexus db <cmd>Database migrations and tooling (see [db](#wrnexus-db)).
wrnexus test [app-dir] [--watch]Run the app's tests via bun test (defaults to the test profile).
wrnexus profiles [app-dir]List config profiles and their .env files, marking the active one.
wrnexus helpPrint usage.
+wrnexus dev [app-dir] [--port=3000]Start the development server with live reload / HMR.wrnexus build [app-dir]Build a self-contained production server bundle + assets into dist/.wrnexus create <app-name>Scaffold a new single app from an inline template.wrnexus workspace <name>Scaffold a monorepo (apps/* + shared packages/*).wrnexus workspace add <name>Add and register an app in the current workspace.wrnexus gateway [--port=3000]Serve every workspace app behind one port, routed by domain.wrnexus generate <type> <name>Scaffold a page \component \api \schema.wrnexus generate routesRegenerate the typed routes file (app/routes.gen.ts).wrnexus generate dockerScaffold Dockerfile, .dockerignore, and docker-compose.yml.wrnexus generate mobileScaffold a Capacitor shell for iOS and Android.wrnexus mobile add <package...>Install Capacitor plugins and sync native projects.wrnexus eject <name...>Copy Wire UI component .wrn sources into app/components/.wrnexus db <cmd>Database migrations and tooling (see [db](#wrnexus-db)).wrnexus test [app-dir] [--watch]Run the app's tests via bun test (defaults to the test profile).wrnexus profiles [app-dir]List config profiles and their .env files, marking the active one.wrnexus helpPrint usage.

wrnexus g is an alias for wrnexus generate.

wrnexus dev

Supervises a child dev-server process (from @wrnexus/dev-server). The child owns file watching and HMR: CSS and client-island edits update the live page over a WebSocket with no restart; when a server module changes, the child exits with a restart code and the supervisor respawns it (the browser reconnects and morphs in the new HTML). On startup it regenerates typed DB queries and typed routes (best effort). Use --port= to change the port (default 3000).

@@ -85,6 +85,10 @@ wrnexus db status --db=analytics

workspace <name> scaffolds a monorepo: several WRNexusJS apps under apps/* and shared libraries under packages/*, plus a wrnexus.workspace.ts that maps each app to the domains it serves. gateway runs every app behind one port and routes by Host header, with optional per-app auth and gateway-wide security (trusted hosts, rate limit, security headers, access log).

wrnexus workspace acme
 wrnexus gateway --port=3000
+

From a workspace root, add and register another app in one command:

+
wrnexus workspace add reports --domain=reports.localhost
+bun install
+

Development gateways bind to 127.0.0.1 by default for reliable access on Windows, macOS, and Linux. Open the configured app domain on the gateway port (for example http://localhost:3000 or http://admin.localhost:3000), not the internal child ports printed while apps start. Pass --host=0.0.0.0 to accept connections from other devices.

wrnexus test

Runs the app's tests with bun test. Defaults to the test profile (config + .env.test). Pass --watch to re-run on change; extra flags pass straight through to bun test.

wrnexus test . --watch
@@ -116,7 +120,7 @@ export default config; # Build and start together: npm run production
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/compiler.wrn b/app/pages/packages/compiler.wrn index 3bbd8ca9..7fc5a0fb 100644 --- a/app/pages/packages/compiler.wrn +++ b/app/pages/packages/compiler.wrn @@ -10,12 +10,12 @@ page wrnexuscompiler {
W WRNexusJS - +
- -
Core · Preview

@wrnexus/compiler

Parser and code generators for the .wrn language.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/compiler@0.2.15

Request preview access. Never put registry tokens in source control.

Compiler for the .wrn language — tokenizes, parses, and lowers .wrn page and component files to TypeScript.
+ +
Core · Preview

@wrnexus/compiler

Parser and code generators for the .wrn language.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/compiler@0.2.17

Request preview access. Never put registry tokens in source control.

Compiler for the .wrn language — tokenizes, parses, and lowers .wrn page and component files to TypeScript.

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.

@@ -356,7 +356,7 @@ page Home { // returning an HTML string, wrapped in a data-scope for the reactive runtime.
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/core.wrn b/app/pages/packages/core.wrn index d7c48c1f..512ff4b7 100644 --- a/app/pages/packages/core.wrn +++ b/app/pages/packages/core.wrn @@ -10,12 +10,12 @@ page wrnexuscore {
W WRNexusJS - +
- -
Core · Preview

@wrnexus/core

Contexts, middleware, security, sessions, caching, JSX, and realtime.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/core@0.2.15

Request preview access. Never put registry tokens in source control.

The framework core: the request Context, middleware contract, and the security, session, caching, streaming, realtime, and JSX primitives every other WRNexusJS package builds on.
+ +
Core · Preview

@wrnexus/core

Contexts, middleware, security, sessions, caching, JSX, and realtime.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/core@0.2.17

Request preview access. Never put registry tokens in source control.

The framework core: the request Context, middleware contract, and the security, session, caching, streaming, realtime, and JSX primitives every other WRNexusJS package builds on.

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.

@@ -963,7 +963,7 @@ if (await verifyPassword(form.password, user.passwordHash)) { const current = getUser<{ id: string }>(ctx); // or null
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/csr.wrn b/app/pages/packages/csr.wrn index 5ab23957..bdc93590 100644 --- a/app/pages/packages/csr.wrn +++ b/app/pages/packages/csr.wrn @@ -10,12 +10,12 @@ page wrnexuscsr {
W WRNexusJS - +
- -
Frontend · Preview

@wrnexus/csr

Reactive, navigation, and realtime browser runtimes.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/csr@0.2.15

Request preview access. Never put registry tokens in source control.

The browser-side client runtime for WRNexusJS — generic, self-contained JS that hydrates server-rendered pages with reactivity, client-side navigation, and realtime rooms.
+ +
Frontend · Preview

@wrnexus/csr

Reactive, navigation, and realtime browser runtimes.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/csr@0.2.17

Request preview access. Never put registry tokens in source control.

The browser-side client runtime for WRNexusJS — generic, self-contained JS that hydrates server-rendered pages with reactivity, client-side navigation, and realtime rooms.

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

Overview

@wrnexus/csr holds the three client runtimes that WRNexusJS serves to the browser. Components are authored as .wrn files and rendered on the server; this package provides the single, generic runtime that hydrates that HTML in the browser — there are no per-component browser bundles. Each runtime is exported as a plain-JS string (no build step, no imports) intended to be served verbatim from a well-known URL:

@@ -229,7 +229,7 @@ Bun.serve({ });
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/db.wrn b/app/pages/packages/db.wrn index e2c577f0..010a54c1 100644 --- a/app/pages/packages/db.wrn +++ b/app/pages/packages/db.wrn @@ -10,12 +10,12 @@ page wrnexusdb {
W WRNexusJS - +
- -
Data · Preview

@wrnexus/db

Database adapters, typed queries, models, migrations, and sessions.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/db@0.2.15

Request preview access. Never put registry tokens in source control.

The database layer for WRNexusJS: TS models as the single source of truth for DDL, validation, and result typing, plus a driver-based Db client, migrations, and a sqlc-style query generator.
+ +
Data · Preview

@wrnexus/db

Database adapters, typed queries, models, migrations, and sessions.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/db@0.2.17

Request preview access. Never put registry tokens in source control.

The database layer for WRNexusJS: TS models as the single source of truth for DDL, validation, and result typing, plus a driver-based Db client, migrations, and a sqlc-style query generator.

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.

@@ -316,7 +316,7 @@ const users = table("users", { const events = await getDb("analytics").all("SELECT * FROM hits");
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/dev-server.wrn b/app/pages/packages/dev-server.wrn index 1e29e2b6..9d1519cf 100644 --- a/app/pages/packages/dev-server.wrn +++ b/app/pages/packages/dev-server.wrn @@ -10,12 +10,12 @@ page wrnexusdevserver {
W WRNexusJS - +
- -
Runtime · Preview

@wrnexus/dev-server

Development and production servers, HMR, assets, and gateways.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/dev-server@0.2.15

Request preview access. Never put registry tokens in source control.

The WRNexusJS HTTP + WebSocket server runtime — request dispatch, SSR document assembly, live-reload (HMR), and the portable production handler.
+ +
Runtime · Preview

@wrnexus/dev-server

Development and production servers, HMR, assets, and gateways.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/dev-server@0.2.17

Request preview access. Never put registry tokens in source control.

The WRNexusJS HTTP + WebSocket server runtime — request dispatch, SSR document assembly, live-reload (HMR), and the portable production handler.

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).

@@ -121,7 +121,7 @@ interface ProdOptions {

Serves several apps behind one port and routes each request to the right app by its Host header. Each app runs as its own child process (full isolation); the gateway is a thin host-based reverse proxy for HTTP and WebSocket. Apps communicate at runtime via @wrnexus/pubsub (use the Redis driver so messages cross processes).

interface GatewayOptions {
   port?: number; // default 3000
-  hostname?: string; // default "localhost"
+  hostname?: string; // dev: "127.0.0.1"; production: "0.0.0.0"
   mode?: "development" | "production";
   apps: GatewayApp[];
   security?: GatewaySecurity;
@@ -148,7 +148,9 @@ interface GatewaySecurity {
   forwardedHeaders?: boolean; // set X-Forwarded-* (default true)
   accessLog?: boolean;
 }
-

The gateway exposes /__gateway/health (JSON list of routed apps) and returns a RunningGateway ({ port, url, stop() }).

+

Forward auth is a verification hook, not a login page. Configure forward.url with a dedicated endpoint such as http://sso.localhost:3000/api/verify. The gateway forwards the request's Cookie and Authorization headers plus X-Forwarded-Host, X-Forwarded-Proto, X-Original-Method, and X-Original-Uri (including its query string). The verifier must return 2xx only for an authenticated session and 401/403 otherwise. Pointing forward auth at an SSO home page that always returns 200 allows every request and does not implement SSO.

+

For browser SSO, the verifier may return a 302/303/307/308 with a Location header pointing to its login page. The gateway passes that redirect to the browser. The login flow should validate a signed returnTo value before redirecting back; API clients should receive 401/403 instead of an HTML login redirect.

+

Open the gateway URL (normally http://127.0.0.1:3000), not an app's internal port. The gateway exposes /__gateway/health (JSON list of routed apps) and returns a RunningGateway ({ port, url, stop() }). Use --host=0.0.0.0 when other devices need to reach a development gateway.

node:http adapter (from ./adapters/node.ts)

For embedding the WinterCG handler behind an existing Node server or a WinterCG host. Note the full app still needs Bun-compatible globals (Bun.file, bun:sqlite, etc.); only the Request/Response conversion is fully portable.

type FetchHandler = (req: Request) => Response | undefined | Promise<Response | undefined>;
@@ -730,7 +732,7 @@ interface ProdOptions {
 }
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/encryption.wrn b/app/pages/packages/encryption.wrn index eae481ed..e6d2e785 100644 --- a/app/pages/packages/encryption.wrn +++ b/app/pages/packages/encryption.wrn @@ -10,12 +10,12 @@ page wrnexusencryption {
W WRNexusJS - +
- -
Security · Preview

@wrnexus/encryption

Hashing, HMAC, authenticated encryption, and key derivation.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/encryption@0.2.15

Request preview access. Never put registry tokens in source control.

Dependency-free crypto helpers for WRNexusJS: authenticated symmetric encryption (AES-256-GCM), hashing, and HMAC signing.
+ +
Security · Preview

@wrnexus/encryption

Hashing, HMAC, authenticated encryption, and key derivation.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/encryption@0.2.17

Request preview access. Never put registry tokens in source control.

Dependency-free crypto helpers for WRNexusJS: authenticated symmetric encryption (AES-256-GCM), hashing, and HMAC signing.

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).

@@ -108,7 +108,7 @@ const ok = await hmacVerify(rawBody, webhookSecret, incomingSignatureHeader); if (!ok) throw new Error("Invalid webhook signature");
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/helpers.wrn b/app/pages/packages/helpers.wrn new file mode 100644 index 00000000..4c1e4eb2 --- /dev/null +++ b/app/pages/packages/helpers.wrn @@ -0,0 +1,109 @@ +page wrnexushelpers { + seo { + title = "@wrnexus/helpers" + description = "Safe Context URL helpers and forward-auth login redirects." + } + + view { +
+ +
+ W WRNexusJS + + +
+ +
+ +
Tooling · Preview

@wrnexus/helpers

Safe Context URL helpers and forward-auth login redirects.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/helpers@0.2.17

Request preview access. Never put registry tokens in source control.

Safe convenience helpers for common WRNexusJS application flows. The package uses standard Context, URL, and Response values and has no runtime dependency beyond @wrnexus/core.

+
bun add @wrnexus/helpers
+

The package is private, so the machine must be authenticated to the wrnexus npm organization.

+

Forward-auth login redirects

+

The gateway calls an SSO verifier on a different URL from the original application. These helpers reconstruct the original URL from the gateway headers and safely place it in the login redirect:

+
import type { Context } from "@wrnexus/core";
+import { redirectToLogin } from "@wrnexus/helpers";
+
+export const GET = async (ctx: Context) => {
+  if (await hasValidSession(ctx)) {
+    return new Response(null, { status: 204 });
+  }
+
+  return redirectToLogin(ctx, "/login", {
+    allowedHosts: ["admin.localhost:3000", "reports.localhost:3000"],
+  });
+};
+

This creates a response such as:

+
Location: http://sso.localhost:3000/login?returnTo=http%3A%2F%2Fadmin.localhost%3A3000%2F
+

Always list the application hosts that are valid redirect destinations. Forwarded host headers are rejected when allowedHosts is absent or does not match, preventing an open redirect. A callback can support dynamic tenant domains:

+
allowedHosts: (host) => host.endsWith(".example.test");
+

API

+
    +
  • getOriginalRequestUrl(ctx, options): URL — reconstruct the gateway URL.
  • +
  • getOriginalRequestOrigin(ctx, options): string — return only its origin.
  • +
  • getOriginalRequestPath(ctx): string — return its path and query string.
  • +
  • getOriginalRequestMethod(ctx): string — return its HTTP method.
  • +
  • redirectToLogin(ctx, loginUrl, options): Response — create a login redirect with an
  • +

    encoded returnTo parameter.

    +
+

For direct requests without gateway headers, URL helpers use ctx.url.

Complete TypeScript API

This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.

import { Context } from '@wrnexus/core';
+
+/**
+ * @wrnexus/helpers — safe conveniences for common WRNexusJS application flows.
+ *
+ * Helpers stay small and composable. They accept the standard WRNexusJS Context
+ * and return web-platform values such as URL and Response.
+ */
+
+type RequestContext = Pick<Context, "req" | "url">;
+type AllowedHosts = readonly string[] | ReadonlySet<string> | ((host: string, ctx: RequestContext) => boolean);
+interface OriginalRequestOptions {
+    /**
+     * Hosts that the application permits as redirect destinations. This is
+     * required when a proxy supplied X-Forwarded-Host is present.
+     */
+    allowedHosts?: AllowedHosts;
+}
+interface LoginRedirectOptions extends OriginalRequestOptions {
+    /** Query parameter that receives the original absolute URL. */
+    returnToParam?: string;
+    /** Browser redirect status. Defaults to 302. */
+    status?: 301 | 302 | 303 | 307 | 308;
+}
+/** Get the original path and query string seen by the gateway. */
+declare function getOriginalRequestPath(ctx: RequestContext): string;
+/** Get the original HTTP method seen by the gateway. */
+declare function getOriginalRequestMethod(ctx: RequestContext): string;
+/**
+ * Reconstruct the absolute URL that reached the gateway.
+ *
+ * Forwarded hosts are never trusted implicitly: pass allowedHosts when this is
+ * used behind the WRNexusJS gateway. Direct requests fall back to ctx.url.
+ */
+declare function getOriginalRequestUrl(ctx: RequestContext, options?: OriginalRequestOptions): URL;
+/** Get the original request origin, for example http://admin.localhost:3000. */
+declare function getOriginalRequestOrigin(ctx: RequestContext, options?: OriginalRequestOptions): string;
+/**
+ * Redirect to a login page with the original absolute URL encoded as returnTo.
+ * Relative login URLs resolve against the current app (normally the SSO app).
+ */
+declare function redirectToLogin(ctx: RequestContext, loginUrl: string | URL, options?: LoginRedirectOptions): Response;
+
+export { type AllowedHosts, type LoginRedirectOptions, type OriginalRequestOptions, type RequestContext, getOriginalRequestMethod, getOriginalRequestOrigin, getOriginalRequestPath, getOriginalRequestUrl, redirectToLogin };
+

Examples

Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.

Example 1

bun add @wrnexus/helpers

Example 2

import type { Context } from "@wrnexus/core";
+import { redirectToLogin } from "@wrnexus/helpers";
+
+export const GET = async (ctx: Context) => {
+  if (await hasValidSession(ctx)) {
+    return new Response(null, { status: 204 });
+  }
+
+  return redirectToLogin(ctx, "/login", {
+    allowedHosts: ["admin.localhost:3000", "reports.localhost:3000"],
+  });
+};

Example 3

Location: http://sso.localhost:3000/login?returnTo=http%3A%2F%2Fadmin.localhost%3A3000%2F

Example 4

allowedHosts: (host) => host.endsWith(".example.test");
+ +
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
+ } +} diff --git a/app/pages/packages/i18n.wrn b/app/pages/packages/i18n.wrn index a33d49fb..cbf86453 100644 --- a/app/pages/packages/i18n.wrn +++ b/app/pages/packages/i18n.wrn @@ -10,12 +10,12 @@ page wrnexusi18n {
W WRNexusJS - +
- -
Frontend · Preview

@wrnexus/i18n

Translation loading, locale resolution, and Intl formatting.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/i18n@0.2.15

Request preview access. Never put registry tokens in source control.

Per-request translations plus locale-aware number, date, and currency formatting for WRNexusJS apps.
+ +
Frontend · Preview

@wrnexus/i18n

Translation loading, locale resolution, and Intl formatting.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/i18n@0.2.17

Request preview access. Never put registry tokens in source control.

Per-request translations plus locale-aware number, date, and currency formatting for WRNexusJS apps.

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.

@@ -210,7 +210,7 @@ const finalHtml = translateHtml(renderedHtml, t);
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/jwt.wrn b/app/pages/packages/jwt.wrn index 25047bba..dd8b079d 100644 --- a/app/pages/packages/jwt.wrn +++ b/app/pages/packages/jwt.wrn @@ -10,12 +10,12 @@ page wrnexusjwt {
W WRNexusJS - +
- -
Security · Preview

@wrnexus/jwt

HS256 JWT signing, verification, and bearer authentication.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/jwt@0.2.15

Request preview access. Never put registry tokens in source control.

Dependency-free JSON Web Tokens (HS256) via Web Crypto, plus a bearer-token auth middleware for WRNexusJS.
+ +
Security · Preview

@wrnexus/jwt

HS256 JWT signing, verification, and bearer authentication.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/jwt@0.2.17

Request preview access. Never put registry tokens in source control.

Dependency-free JSON Web Tokens (HS256) via Web Crypto, plus a bearer-token auth middleware for WRNexusJS.

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.

@@ -146,7 +146,7 @@ export { type JwtAuthOptions, type JwtClaims, JwtError, type SignOptions, j ): Promise<T>;

Example 4

function jwtAuth(options: JwtAuthOptions): Middleware;
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/mobile.wrn b/app/pages/packages/mobile.wrn index 7dbffbee..4ff5db05 100644 --- a/app/pages/packages/mobile.wrn +++ b/app/pages/packages/mobile.wrn @@ -10,12 +10,12 @@ page wrnexusmobile {
W WRNexusJS - +
- -
Native · Preview

@wrnexus/mobile

SSR-safe compatibility access to Capacitor plugins.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/mobile@0.2.15

Request preview access. Never put registry tokens in source control.

SSR-safe access to Capacitor plugins from WRNexusJS browser code.

+ +
Native · Preview

@wrnexus/mobile

SSR-safe compatibility access to Capacitor plugins.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/mobile@0.2.17

Request preview access. Never put registry tokens in source control.

SSR-safe access to Capacitor plugins from WRNexusJS browser code.

wrnexus mobile add @capacitor/camera
import { Camera } from "@capacitor/camera";
 import { mobile } from "@wrnexus/mobile";
@@ -72,7 +72,7 @@ if (mobile.isNative()) {
 }
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/native.wrn b/app/pages/packages/native.wrn index 2dd6aa2e..ef98d59c 100644 --- a/app/pages/packages/native.wrn +++ b/app/pages/packages/native.wrn @@ -10,12 +10,12 @@ page wrnexusnative {
W WRNexusJS - +
- -
Native · Preview

@wrnexus/native

Cross-platform browser and Capacitor capability registry.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/native@0.2.15

Request preview access. Never put registry tokens in source control.

Cross-platform capabilities for browsers, Capacitor WebViews, and compiled native apps.

+ +
Native · Preview

@wrnexus/native

Cross-platform browser and Capacitor capability registry.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/native@0.2.17

Request preview access. Never put registry tokens in source control.

Cross-platform capabilities for browsers, Capacitor WebViews, and compiled native apps.

import { native } from "@wrnexus/native";
 
 if (native.supports("share")) await native.run("share", { title: "WRNexusJS", url: location.href });
@@ -51,7 +51,7 @@ export { NativeCapability, NativePlatform, NativeRunOptions, NativeTarget, if (native.supports("share")) await native.run("share", { title: "WRNexusJS", url: location.href });
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/oauth.wrn b/app/pages/packages/oauth.wrn index 03fea2d1..e1eb28fb 100644 --- a/app/pages/packages/oauth.wrn +++ b/app/pages/packages/oauth.wrn @@ -10,12 +10,12 @@ page wrnexusoauth {
W WRNexusJS - +
- -
Security · Preview

@wrnexus/oauth

OAuth 2.0, PKCE, provider presets, and profile mapping.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/oauth@0.2.15

Request preview access. Never put registry tokens in source control.

Dependency-free OAuth 2.0 sign-in for any provider, with PKCE and presets for Google, GitHub, and Discord.
+ +
Security · Preview

@wrnexus/oauth

OAuth 2.0, PKCE, provider presets, and profile mapping.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/oauth@0.2.17

Request preview access. Never put registry tokens in source control.

Dependency-free OAuth 2.0 sign-in for any provider, with PKCE and presets for Google, GitHub, and Discord.

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.

@@ -264,7 +264,7 @@ interface StartAuthResult { }
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 0c25cf5e..033c7f97 100644 --- a/app/pages/packages/pubsub.wrn +++ b/app/pages/packages/pubsub.wrn @@ -10,12 +10,12 @@ page wrnexuspubsub {
W WRNexusJS - +
- -
Realtime · Preview

@wrnexus/pubsub

In-process and Redis-backed publish/subscribe.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/pubsub@0.2.15

Request preview access. Never put registry tokens in source control.

Topic-based publish/subscribe with a pluggable driver — in-process by default, Redis for cross-process messaging.
+ +
Realtime · Preview

@wrnexus/pubsub

In-process and Redis-backed publish/subscribe.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/pubsub@0.2.17

Request preview access. Never put registry tokens in source control.

Topic-based publish/subscribe with a pluggable driver — in-process by default, Redis for cross-process messaging.

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.

@@ -132,7 +132,7 @@ type Handler<T = unknown> = (message: T, topic: string) => void | Promi }

Example 4

function redisDriver(url?: string): PubSubDriver & { close(): void };
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 8b9e42f2..b6e0bf4d 100644 --- a/app/pages/packages/queue.wrn +++ b/app/pages/packages/queue.wrn @@ -10,12 +10,12 @@ page wrnexusqueue {
W WRNexusJS - +
- -
Data · Preview

@wrnexus/queue

Background jobs with delay, concurrency, retry, and repetition.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/queue@0.2.15

Request preview access. Never put registry tokens in source control.

A background job queue with delays, retries + exponential backoff, recurring jobs, and concurrent workers.
+ +
Data · Preview

@wrnexus/queue

Background jobs with delay, concurrency, retry, and repetition.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/queue@0.2.17

Request preview access. Never put registry tokens in source control.

A background job queue with delays, retries + exponential backoff, recurring jobs, and concurrent workers.

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().

@@ -172,7 +172,7 @@ export { type AddOptions, type Job, type JobHandler, type Queue, type Queue }
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 72cf99d3..fa9e578e 100644 --- a/app/pages/packages/reactive.wrn +++ b/app/pages/packages/reactive.wrn @@ -10,12 +10,12 @@ page wrnexusreactive {
W WRNexusJS - +
- -
Frontend · Preview

@wrnexus/reactive

Small type-safe reactive signal primitives.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/reactive@0.2.15

Request preview access. Never put registry tokens in source control.

Tiny, type-safe reactive primitives (signals) with zero dependencies.
+ +
Frontend · Preview

@wrnexus/reactive

Small type-safe reactive signal primitives.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/reactive@0.2.17

Request preview access. Never put registry tokens in source control.

Tiny, type-safe reactive primitives (signals) with zero dependencies.

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.

@@ -134,7 +134,7 @@ const user: Signal<{ name: string } | null> = signal(null); user.set({ name: "Ada" });
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 f5c47c6a..25e36a15 100644 --- a/app/pages/packages/router.wrn +++ b/app/pages/packages/router.wrn @@ -10,12 +10,12 @@ page wrnexusrouter {
W WRNexusJS - +
- -
Core · Preview

@wrnexus/router

Filesystem discovery, route matching, and typed route generation.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/router@0.2.15

Request preview access. Never put registry tokens in source control.

File-based router that maps an app/ directory onto route tables and matches request paths against them.
+ +
Core · Preview

@wrnexus/router

Filesystem discovery, route matching, and typed route generation.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/router@0.2.17

Request preview access. Never put registry tokens in source control.

File-based router that maps an app/ directory onto route tables and matches request paths against them.

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.

@@ -261,7 +261,7 @@ interface ComponentRef { }
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 091ea3e5..45308155 100644 --- a/app/pages/packages/ssr.wrn +++ b/app/pages/packages/ssr.wrn @@ -10,12 +10,12 @@ page wrnexusssr {
W WRNexusJS - +
- -
Runtime · Preview

@wrnexus/ssr

Secure HTML document rendering and SEO metadata.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/ssr@0.2.15

Request preview access. Never put registry tokens in source control.

Server-side rendering: wraps a page's HTML body in a complete HTML document with a metadata-driven <head>.
+ +
Runtime · Preview

@wrnexus/ssr

Secure HTML document rendering and SEO metadata.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/ssr@0.2.17

Request preview access. Never put registry tokens in source control.

Server-side rendering: wraps a page's HTML body in a complete HTML document with a metadata-driven <head>.

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.

@@ -166,7 +166,7 @@ return new Response(html, { });
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 ce3eb22b..791433b0 100644 --- a/app/pages/packages/styles.wrn +++ b/app/pages/packages/styles.wrn @@ -10,12 +10,12 @@ page wrnexusstyles {
W WRNexusJS - +
- -
Frontend · Preview

@wrnexus/styles

CSS pipeline, themes, fonts, profiles, and application config.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/styles@0.2.15

Request preview access. Never put registry tokens in source control.

Global CSS bundling, the --wire-* design-token theme system, and the wrnexus.config.ts app-config loader for WRNexusJS apps.
+ +
Frontend · Preview

@wrnexus/styles

CSS pipeline, themes, fonts, profiles, and application config.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/styles@0.2.17

Request preview access. Never put registry tokens in source control.

Global CSS bundling, the --wire-* design-token theme system, and the wrnexus.config.ts app-config loader for WRNexusJS apps.

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

Overview

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

@@ -563,7 +563,7 @@ export default { } satisfies AppConfig;
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 b6d03dfa..093176e0 100644 --- a/app/pages/packages/test.wrn +++ b/app/pages/packages/test.wrn @@ -10,12 +10,12 @@ page wrnexustest {
W WRNexusJS - +
- -
Tooling · Preview

@wrnexus/test

WRNexusJS-aware component, route, and browser testing utilities.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/test@0.2.15

Request preview access. Never put registry tokens in source control.

Testing utilities for WRNexusJS apps — component rendering, reactive-DOM mounting, route handler calls, and a full in-process app harness, plus a one-import re-export of bun:test.
+ +
Tooling · Preview

@wrnexus/test

WRNexusJS-aware component, route, and browser testing utilities.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/test@0.2.17

Request preview access. Never put registry tokens in source control.

Testing utilities for WRNexusJS apps — component rendering, reactive-DOM mounting, route handler calls, and a full in-process app harness, plus a one-import re-export of bun:test.

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.

@@ -171,7 +171,7 @@ export { type Harness, type HarnessOptions, callRoute, createHarness, mount ): Promise<Response>;
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 61cc3440..3aad5dd8 100644 --- a/app/pages/packages/tracking.wrn +++ b/app/pages/packages/tracking.wrn @@ -10,12 +10,12 @@ page wrnexustracking {
W WRNexusJS - +
- -
Runtime · Preview

@wrnexus/tracking

Error/event capture, middleware, filtering, and sinks.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/tracking@0.2.15

Request preview access. Never put registry tokens in source control.

Error tracking for WRNexusJS apps: capture exceptions manually or via middleware and fan them out to pluggable sinks.
+ +
Runtime · Preview

@wrnexus/tracking

Error/event capture, middleware, filtering, and sinks.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/tracking@0.2.17

Request preview access. Never put registry tokens in source control.

Error tracking for WRNexusJS apps: capture exceptions manually or via middleware and fan them out to pluggable sinks.

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.

@@ -152,7 +152,7 @@ try { }
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 c84b78c1..4708e00a 100644 --- a/app/pages/packages/ui.wrn +++ b/app/pages/packages/ui.wrn @@ -10,12 +10,12 @@ page wrnexusui {
W WRNexusJS - +
- -
Frontend · Preview

@wrnexus/ui

Themeable server-rendered UI components and CSS.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/ui@0.2.15

Request preview access. Never put registry tokens in source control.

First-party Wire UI component library — a set of themeable .wrn components plus a single tokenized stylesheet.
+ +
Frontend · Preview

@wrnexus/ui

Themeable server-rendered UI components and CSS.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/ui@0.2.17

Request preview access. Never put registry tokens in source control.

First-party Wire UI component library — a set of themeable .wrn components plus a single tokenized stylesheet.

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.

@@ -112,7 +112,7 @@ const router = buildRouter(appDir, { componentDirs: [uiComponentsDir()]  </div>
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · 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 ea8cf651..f702ab2f 100644 --- a/app/pages/packages/uploader.wrn +++ b/app/pages/packages/uploader.wrn @@ -10,12 +10,12 @@ page wrnexusuploader {
W WRNexusJS - +
- -
Data · Preview

@wrnexus/uploader

Validated local/S3 uploads and secure file serving.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/uploader@0.2.15

Request preview access. Never put registry tokens in source control.

Config-driven file uploads + serving for WRNexusJS. Declare named storage stores (local disk or any S3-compatible backend) in wrnexus.config.ts, upload with one function call, drop a drag-and-drop widget on a page, and serve files back — public or private. Zero external dependencies (S3 is signed with a built-in AWS SigV4 implementation, like the rest of the framework).

+ +
Data · Preview

@wrnexus/uploader

Validated local/S3 uploads and secure file serving.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/uploader@0.2.17

Request preview access. Never put registry tokens in source control.

Config-driven file uploads + serving for WRNexusJS. Declare named storage stores (local disk or any S3-compatible backend) in wrnexus.config.ts, upload with one function call, drop a drag-and-drop widget on a page, and serve files back — public or private. Zero external dependencies (S3 is signed with a built-in AWS SigV4 implementation, like the rest of the framework).

Configure

// wrnexus.config.ts
 import type { AppConfig } from "@wrnexus/styles";
@@ -415,7 +415,7 @@ await getStore("docs").driver.delete(files[0].key);
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/packages/validation.wrn b/app/pages/packages/validation.wrn index e567b297..80fe662e 100644 --- a/app/pages/packages/validation.wrn +++ b/app/pages/packages/validation.wrn @@ -10,12 +10,12 @@ page wrnexusvalidation {
W WRNexusJS - +
- -
Security · Preview

@wrnexus/validation

Typed schemas, coercion, validation, and browser descriptors.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/validation@0.2.15

Request preview access. Never put registry tokens in source control.

One fluent schema, validated on the server (API bodies, env vars) and mirrored to an eval-free browser validator for forms.
+ +
Security · Preview

@wrnexus/validation

Typed schemas, coercion, validation, and browser descriptors.

Private registry access required

This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:

bun add @wrnexus/validation@0.2.17

Request preview access. Never put registry tokens in source control.

One fluent schema, validated on the server (API bodies, env vars) and mirrored to an eval-free browser validator for forms.

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/.

@@ -311,7 +311,7 @@ schema.describe(): SchemaDescriptor
-
WRNexusJS 0.2.15 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
+
WRNexusJS 0.2.17 · Private Developer Preview · Bun-native · Documentation generated from installed package APIs.
} } diff --git a/app/pages/releases/0.2.17.wrn b/app/pages/releases/0.2.17.wrn new file mode 100644 index 00000000..80f1ca2f --- /dev/null +++ b/app/pages/releases/0.2.17.wrn @@ -0,0 +1,16 @@ +page Release0217 { + seo { + title = "Release 0.2.17" + description = "WRNexusJS 0.2.17 release notes." + canonical = "https://wrnexusjs.dev/releases/0.2.17" + } + view { + +
+
W WRNexusJS
+ +

WRNexusJS 0.2.17

Released 2026-07-13. All 26 installed packages are aligned to this version. Highlights include the new helpers package, reliable workspace app addition, and browser SSO redirects through forward authentication. See the changelog, upgrade guide, and package references.

+ +
+ } +} \ No newline at end of file diff --git a/app/pages/roadmap.wrn b/app/pages/roadmap.wrn index 80e99b00..a1b8c4b8 100644 --- a/app/pages/roadmap.wrn +++ b/app/pages/roadmap.wrn @@ -7,10 +7,10 @@ page Roadmap { view {
-
W WRNexusJS
+
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
- +
} } \ No newline at end of file diff --git a/app/pages/search.wrn b/app/pages/search.wrn index 62fa4199..45f6fed1 100644 --- a/app/pages/search.wrn +++ b/app/pages/search.wrn @@ -7,10 +7,10 @@ page Search { view {
-
W WRNexusJS
+
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 · Packages · Language · Architecture

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

- +

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 · Packages · Language · Architecture

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/helpers · @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

+
} } \ No newline at end of file diff --git a/app/pages/security.wrn b/app/pages/security.wrn index 8e8766f3..759c3a69 100644 --- a/app/pages/security.wrn +++ b/app/pages/security.wrn @@ -7,10 +7,10 @@ page Security { view {
-
W WRNexusJS
+
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.

- +

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.17 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.

+
} } \ No newline at end of file diff --git a/app/pages/showcase.wrn b/app/pages/showcase.wrn index 9b17e150..ba8ccebf 100644 --- a/app/pages/showcase.wrn +++ b/app/pages/showcase.wrn @@ -7,10 +7,10 @@ page Showcase { view {
-
W WRNexusJS
+
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.

- +

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.17 on Bun.

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

+
} } \ No newline at end of file diff --git a/app/pages/support.wrn b/app/pages/support.wrn index a746707b..5e655a72 100644 --- a/app/pages/support.wrn +++ b/app/pages/support.wrn @@ -7,10 +7,10 @@ page Support { view {
-
W WRNexusJS
+
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.

- +
} } \ No newline at end of file diff --git a/app/pages/tutorial.wrn b/app/pages/tutorial.wrn index 425edacf..fe6af38a 100644 --- a/app/pages/tutorial.wrn +++ b/app/pages/tutorial.wrn @@ -7,9 +7,9 @@ page Tutorial { view {
-
W WRNexusJS
+
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";
+      
Preview · runnable-project extraction pending

Secure task board

This tutorial connects the installed 0.2.17 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) => {
   const parsed = await parseBody(task, ctx.req);
@@ -23,7 +23,7 @@ export const POST = async (ctx) => {
     </ul></main>
   }
 }

Production checklist

  • Choose SQLite for local development or configure the supported PostgreSQL driver.
  • Run migrations before accepting traffic.
  • Enable session authentication and enforce authorization on every mutation.
  • Validate upload types and sizes; keep private objects behind authenticated routes.
  • Use Redis pub/sub when realtime rooms span processes.
  • Treat the default queue as non-durable until a production driver is selected.

Follow the focused database, authentication, authorization, realtime, and upload guides.

- +
} } \ No newline at end of file diff --git a/bun.lock b/bun.lock index b6660f89..c3c06c13 100644 --- a/bun.lock +++ b/bun.lock @@ -5,37 +5,38 @@ "": { "name": "wrnexusjs", "dependencies": { - "@wrnexus/ai": "^0.2.15", - "@wrnexus/authz": "^0.2.15", - "@wrnexus/compiler": "^0.2.15", - "@wrnexus/core": "^0.2.15", - "@wrnexus/csr": "^0.2.15", - "@wrnexus/db": "^0.2.15", - "@wrnexus/dev-server": "^0.2.15", - "@wrnexus/encryption": "^0.2.15", - "@wrnexus/i18n": "^0.2.15", - "@wrnexus/jwt": "^0.2.15", - "@wrnexus/mobile": "^0.2.15", - "@wrnexus/native": "^0.2.15", - "@wrnexus/oauth": "^0.2.15", - "@wrnexus/pubsub": "^0.2.15", - "@wrnexus/queue": "^0.2.15", - "@wrnexus/reactive": "^0.2.15", - "@wrnexus/router": "^0.2.15", - "@wrnexus/ssr": "^0.2.15", - "@wrnexus/styles": "^0.2.15", - "@wrnexus/test": "^0.2.15", - "@wrnexus/tracking": "^0.2.15", - "@wrnexus/ui": "^0.2.15", - "@wrnexus/uploader": "^0.2.15", - "@wrnexus/validation": "^0.2.15", + "@wrnexus/ai": "^0.2.17", + "@wrnexus/authz": "^0.2.17", + "@wrnexus/compiler": "^0.2.17", + "@wrnexus/core": "^0.2.17", + "@wrnexus/csr": "^0.2.17", + "@wrnexus/db": "^0.2.17", + "@wrnexus/dev-server": "^0.2.17", + "@wrnexus/encryption": "^0.2.17", + "@wrnexus/helpers": "^0.2.17", + "@wrnexus/i18n": "^0.2.17", + "@wrnexus/jwt": "^0.2.17", + "@wrnexus/mobile": "^0.2.17", + "@wrnexus/native": "^0.2.17", + "@wrnexus/oauth": "^0.2.17", + "@wrnexus/pubsub": "^0.2.17", + "@wrnexus/queue": "^0.2.17", + "@wrnexus/reactive": "^0.2.17", + "@wrnexus/router": "^0.2.17", + "@wrnexus/ssr": "^0.2.17", + "@wrnexus/styles": "^0.2.17", + "@wrnexus/test": "^0.2.17", + "@wrnexus/tracking": "^0.2.17", + "@wrnexus/ui": "^0.2.17", + "@wrnexus/uploader": "^0.2.17", + "@wrnexus/validation": "^0.2.17", }, "devDependencies": { "@eslint/js": "^9.0.0", "@tailwindcss/cli": "^4.0.0", "@types/bun": "latest", "@types/node": "^26.1.1", - "@wrnexus/cli": "^0.2.15", + "@wrnexus/cli": "^0.2.17", "eslint": "^9.0.0", "prettier": "latest", "tailwindcss": "^4.0.0", @@ -169,55 +170,57 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.63.0", "", { "dependencies": { "@typescript-eslint/types": "8.63.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw=="], - "@wrnexus/ai": ["@wrnexus/ai@0.2.15", "", {}, "sha512-XLcrSPMAMRDMhxGjDtbOEKK77eAxhkIgpNLbDuWewM6MJgclL4hTsQNZOSVwOCoO7ooD043oh74BruAwVUtmUQ=="], + "@wrnexus/ai": ["@wrnexus/ai@0.2.17", "", {}, "sha512-8kTVVbTK9g1tDKd07aFCAHFkl6xnLmXKM+mcxN+QzVw6JSLSGSIuNpkW1cFvOuvFuXZtaITmewyO1x46dtzG9w=="], - "@wrnexus/authz": ["@wrnexus/authz@0.2.15", "", {}, "sha512-z7QkODGerwaK2txFsHs4zWV07FHOoJms+WuhKOo9cfCTaYEKHbUAMDX4YvasmymH9Xo4J+XABsg3f3+1blgWBQ=="], + "@wrnexus/authz": ["@wrnexus/authz@0.2.17", "", {}, "sha512-C6A6ILfOJtEhz6VWYwk3JZ+VsdsNz00qZwj/Emvfh3pFMYcmv98gT71zKuHQruK2ouJqaKPUpvfUlUuyxk4wdw=="], - "@wrnexus/cli": ["@wrnexus/cli@0.2.15", "", { "dependencies": { "@wrnexus/compiler": "^0.2.15", "@wrnexus/core": "^0.2.15", "@wrnexus/csr": "^0.2.15", "@wrnexus/db": "^0.2.15", "@wrnexus/dev-server": "^0.2.15", "@wrnexus/i18n": "^0.2.15", "@wrnexus/router": "^0.2.15", "@wrnexus/styles": "^0.2.15", "@wrnexus/ui": "^0.2.15", "@wrnexus/validation": "^0.2.15" }, "bin": { "wrnexus": "dist/index.js" } }, "sha512-K4Vd7MKNPl1c4hKyqcvOUNF+dmS3Jm0CTo764rlX20AGfuvbvsGloBSkHPELOC5cdQiJIHeNYYdwUcEZXxt/2Q=="], + "@wrnexus/cli": ["@wrnexus/cli@0.2.17", "", { "dependencies": { "@wrnexus/compiler": "^0.2.17", "@wrnexus/core": "^0.2.17", "@wrnexus/csr": "^0.2.17", "@wrnexus/db": "^0.2.17", "@wrnexus/dev-server": "^0.2.17", "@wrnexus/i18n": "^0.2.17", "@wrnexus/router": "^0.2.17", "@wrnexus/styles": "^0.2.17", "@wrnexus/ui": "^0.2.17", "@wrnexus/validation": "^0.2.17" }, "bin": { "wrnexus": "dist/index.js" } }, "sha512-nsnXkK9FbCOtcdTbrUYn0w2/QFuaOwM13KHUbc+veswe8vI62ZjGI91LKENRLm40xQaNJiKUj5g1ashF1Rj8ag=="], - "@wrnexus/compiler": ["@wrnexus/compiler@0.2.15", "", {}, "sha512-xFS757A2EDQ5kXKd/SSniME8UVksynl/eu3+o6caXGekmBqJ8V0faCq4cR0nSmIdgyXyjHJXIBFfR+ziVbz0jQ=="], + "@wrnexus/compiler": ["@wrnexus/compiler@0.2.17", "", {}, "sha512-dYiOGxgum9KG0sTEvk47JdLKRz9V2+dj7MeiWR5CYp0Ivwu5PpgoqRVHdmL7LloiEAFl1sDVvDciidjD4ECyYQ=="], - "@wrnexus/core": ["@wrnexus/core@0.2.15", "", {}, "sha512-AmPwH9T/gX9yhUUvDAXlbgnlFoaQCQ1k/Yx/VJAY8roTc4DBh/gnz9GDNnwMwl9SlyDNkdnRgbONPpSOgy0iqQ=="], + "@wrnexus/core": ["@wrnexus/core@0.2.17", "", {}, "sha512-lcHUlWNtTPmh0xYBulwygGKalEUH48GlyOv25GxwIC9g60ngvm09H5zIqzdjsTZ9Vcm+S0rsYxajyrQyUQd0tQ=="], - "@wrnexus/csr": ["@wrnexus/csr@0.2.15", "", { "dependencies": { "@wrnexus/core": "^0.2.15" } }, "sha512-K12rz1VmG8UJfJJjo1B/FS7dPVeR0foEEi1u2dCu87+Znf1b124SA9M6gjG/tc73gATB0aMP8kx6evNKIvOehA=="], + "@wrnexus/csr": ["@wrnexus/csr@0.2.17", "", { "dependencies": { "@wrnexus/core": "^0.2.17" } }, "sha512-tgKJTfeUna4fawvitwjLYDMgIlF8jBz5kSKkp/F0V10fhvANprUXLi1FeaE6y5q7Bsv/mI2cdckH9CrI3Np0xg=="], - "@wrnexus/db": ["@wrnexus/db@0.2.15", "", {}, "sha512-tw/Zjv+27npp1zZhRmLOfG+EXzo4P8K/GAYDLycns2yhyTohA+HB/+ztWz4rcQlb0bTndztNlOBEd9BNvvbYTg=="], + "@wrnexus/db": ["@wrnexus/db@0.2.17", "", {}, "sha512-k83db0HqxyZY+HA4D3uLYyQSZOlYKMlpMtm+xnE1mdNEYKztidRmWgftvToZdPpXUmkmTri2+1feAkdrJOdhkg=="], - "@wrnexus/dev-server": ["@wrnexus/dev-server@0.2.15", "", { "dependencies": { "@wrnexus/compiler": "^0.2.15", "@wrnexus/core": "^0.2.15", "@wrnexus/csr": "^0.2.15", "@wrnexus/db": "^0.2.15", "@wrnexus/i18n": "^0.2.15", "@wrnexus/pubsub": "^0.2.15", "@wrnexus/router": "^0.2.15", "@wrnexus/ssr": "^0.2.15", "@wrnexus/styles": "^0.2.15", "@wrnexus/ui": "^0.2.15", "@wrnexus/uploader": "^0.2.15", "@wrnexus/validation": "^0.2.15" } }, "sha512-ZQvOtoNK/yPWZa/Lg64MGMM3RvqMg8+vIoVb33YyIYaWBMkwShqX7QPxxOwytsOLwvlA+W6ZC33oEGFi+fN00g=="], + "@wrnexus/dev-server": ["@wrnexus/dev-server@0.2.17", "", { "dependencies": { "@wrnexus/compiler": "^0.2.17", "@wrnexus/core": "^0.2.17", "@wrnexus/csr": "^0.2.17", "@wrnexus/db": "^0.2.17", "@wrnexus/i18n": "^0.2.17", "@wrnexus/pubsub": "^0.2.17", "@wrnexus/router": "^0.2.17", "@wrnexus/ssr": "^0.2.17", "@wrnexus/styles": "^0.2.17", "@wrnexus/ui": "^0.2.17", "@wrnexus/uploader": "^0.2.17", "@wrnexus/validation": "^0.2.17" } }, "sha512-gef+bEV/cAirazPRJeoWikPksJqU0Zz98JDkk2cUQHBFwgDD4a8NjNhRdVC94MDHLauqoCNyt83XYq+wpWxlkw=="], - "@wrnexus/encryption": ["@wrnexus/encryption@0.2.15", "", {}, "sha512-RB71OzYNGDdHPP/yq07p83t9lb0+G3Lg1ETihse4yyGLQUsK9VmR9tIqHGZ0t5DB7kfr3Tvb5QR/JqNg0ZokTQ=="], + "@wrnexus/encryption": ["@wrnexus/encryption@0.2.17", "", {}, "sha512-2y/Jyuykq7foVdzQTN3FLJllYhLYo4ftk7CfobKRbvCqZ7FbQe/eyFQe/hxZg0UwAOA0w5NEwAtR+N3gqTCdbg=="], - "@wrnexus/i18n": ["@wrnexus/i18n@0.2.15", "", { "dependencies": { "@wrnexus/core": "^0.2.15" } }, "sha512-qUKXLVRnCa1HcIJuZlP+pzRPly++86c8mA7sb4GqqF53DzmiS0mxhywcKkrWVMD0J9/zPtPtqHzjI/+KQK9Ceg=="], + "@wrnexus/helpers": ["@wrnexus/helpers@0.2.17", "", { "dependencies": { "@wrnexus/core": "^0.2.17" } }, "sha512-TV8FUiMbVm1j8HtPKDbKcsKnWzpIG063avqZKxcQyb3dFBqd4pj9HNSwxFKs4c6iKhEqwJN7qL0DpI4pGSA6+Q=="], - "@wrnexus/jwt": ["@wrnexus/jwt@0.2.15", "", {}, "sha512-kSO2OYV7KUSHT7F9k2PHhfriq0ndVCxYLzwykVkB6twCydrmMMJNtBKzmoBHz8iR50AGQUAZBx+/Z89Rt7F6Mg=="], + "@wrnexus/i18n": ["@wrnexus/i18n@0.2.17", "", { "dependencies": { "@wrnexus/core": "^0.2.17" } }, "sha512-6h8uIzkjQXuM8/m0U28iPX9o2SkwySjRPYjwt5XV2csae3T+jLNwHIVCBXsj9OLhJ9aPk1o0aUoTpPkDuuCadA=="], - "@wrnexus/mobile": ["@wrnexus/mobile@0.2.15", "", { "dependencies": { "@wrnexus/native": "^0.2.15" } }, "sha512-fESUY4hu+6DkYh/lj7W7edpT49c1j14AhK7k1+wDHTx0MhrVQkDbCA9Vt3lU2+ctWaEmXQHkIW0YdN4P5Mx5IQ=="], + "@wrnexus/jwt": ["@wrnexus/jwt@0.2.17", "", {}, "sha512-cYOkseaZFAm9fjx30TslUv47Y1Okh1NrhjkYAWaax0gyxhNpi7fiTstuBDmt86wtUQB/jIPJEeCqkg0QlSNJRg=="], - "@wrnexus/native": ["@wrnexus/native@0.2.15", "", {}, "sha512-6ev7mBGLwmo1/CPoqZkLRk3UKjUfukL49+c/fwD2/T991CmpW0MMVOVZmnC/RKHmmFIewQX1G4NIrgIjkRSa/g=="], + "@wrnexus/mobile": ["@wrnexus/mobile@0.2.17", "", { "dependencies": { "@wrnexus/native": "^0.2.17" } }, "sha512-rq7NBM9FwwEiJXcEF7zfu1JwKs3xTTPANoDaees3nRM0ptk6ohz9gD5g8Lx4BdHR5zXJOeYi9elLcX9jnKwT+A=="], - "@wrnexus/oauth": ["@wrnexus/oauth@0.2.15", "", {}, "sha512-0EC91McfgjRPuhhtE/8r0Lc+/3nsR8n20uiukfInqLcxFyKqMnL6wNfCJ+WuhNW6E+OOUqrM10u6W6h3yi5skg=="], + "@wrnexus/native": ["@wrnexus/native@0.2.17", "", {}, "sha512-t1qSdN3Ik5qPa4l4tOcliGLJhu7YAsLgbHXBE6t/7HJ0YvHM+fTN/jQEFftPmUBkXYLFM5nhVtTRxeGVyNs8dw=="], - "@wrnexus/pubsub": ["@wrnexus/pubsub@0.2.15", "", {}, "sha512-STabEFZlu+YBaA+7+ffLy98xeCXvVAHmAY8OuKgeqOk5QgVwTzDx7ZBcg0umn0oKPn1r2q8pzey5YQt7C4unhA=="], + "@wrnexus/oauth": ["@wrnexus/oauth@0.2.17", "", {}, "sha512-Kr75DB4P37xvTP6fNDV44+f4KNXIcHGZy/Z0GzXqXhnGrbH2Od4b/DIXarvCGYRnXtR33PCfgNzBH/SOq1r/5g=="], - "@wrnexus/queue": ["@wrnexus/queue@0.2.15", "", {}, "sha512-um0pTcCWGhAIRJXXY8sFMkf+NCfJCP34Qhw8J8PC8bvsAxJWOSvKDhQBSGfbD6vhAc06nWwmAfF6SEhMLAu1yA=="], + "@wrnexus/pubsub": ["@wrnexus/pubsub@0.2.17", "", {}, "sha512-RhweJUBt2nI2IDs7TE3JYJD4RW2Cs2S+ld14SNxJAVdFkdEKu0u+nu7XH2bXU0VoQQ465M3DeHF7O1mhTkzyzg=="], - "@wrnexus/reactive": ["@wrnexus/reactive@0.2.15", "", {}, "sha512-ZsMCP25PTQx4e6MI2cdsDBNSuE+HKEqxxX5gJxYax6c0fsnFUtzhxMm1+5BloMyQgJa0r5VKL6gO9brU0T2i/g=="], + "@wrnexus/queue": ["@wrnexus/queue@0.2.17", "", {}, "sha512-W3Fjs6tSX3m9750uGuY5KFHiyW/kTjoWZ7uvsOBQmiaYxn9iwdbStY1Z5YRqkAUNEo6ZEtFqdikxhgtqlg/xfw=="], - "@wrnexus/router": ["@wrnexus/router@0.2.15", "", { "dependencies": { "@wrnexus/compiler": "^0.2.15", "@wrnexus/core": "^0.2.15" } }, "sha512-LrcR6H9eHEzMWeE8LADeYBxzQ5HtL5IPa9E9Wr4Exk2XXw7jGbzmug56ts2GaYNwBF4AfNAOxc+qtaJyhKn1Sw=="], + "@wrnexus/reactive": ["@wrnexus/reactive@0.2.17", "", {}, "sha512-NhKykbEp4N2nKJ7Iu4dC7kAE1THIM0ipy0lYMoLNvfXtiJuoKCLCPCKbfFUOn3RJONuWT8eDLAraK+JcWUTfiA=="], - "@wrnexus/ssr": ["@wrnexus/ssr@0.2.15", "", { "dependencies": { "@wrnexus/core": "^0.2.15" } }, "sha512-ob74ncbYFaYs4yEn4i15Qysjd6bjxo/NbkXVA9WFeZkj0UEGH3pyaZD0AX0oSBogJq84Dp29x7B3lfTZRapQ5Q=="], + "@wrnexus/router": ["@wrnexus/router@0.2.17", "", { "dependencies": { "@wrnexus/compiler": "^0.2.17", "@wrnexus/core": "^0.2.17" } }, "sha512-pJc9HGjlwcZ9p1rTJJsKygnbqeGh4jap4eyCBM/P6aoZTt5qQnsy/DazJfVDZAUzkgc+CwTpdhev2AaSHJdRLg=="], - "@wrnexus/styles": ["@wrnexus/styles@0.2.15", "", { "dependencies": { "@wrnexus/uploader": "^0.2.15" } }, "sha512-hoZsVL/14elWac5ak6xzgS8uYR8fb28sbuFjGuzxhCCo4VM0BmkTBUPNenIjOgMun5rsoRh/TCNzI7Qz05VEJw=="], + "@wrnexus/ssr": ["@wrnexus/ssr@0.2.17", "", { "dependencies": { "@wrnexus/core": "^0.2.17" } }, "sha512-tplktmP6/IeIEjH1d49CH/ltp/IMoqIItjleuZhHxmtonz48ubB8r0oOR6U0mwWYUUGKh4v7rJglHbW4SYOpKg=="], - "@wrnexus/test": ["@wrnexus/test@0.2.15", "", {}, "sha512-B3p07RbmOuujl+jqZ8cmC46Q+nWUJW4xmF+i9hcECJYMtG/Wq/GwANzXsCX+/FRbXVvYaQ6b1Tq07sEW8OEwfg=="], + "@wrnexus/styles": ["@wrnexus/styles@0.2.17", "", { "dependencies": { "@wrnexus/uploader": "^0.2.17" } }, "sha512-Z77BY11PtVXH2gdvPFW+rKSJxI/aqRP3JLQPA7Y31Si0VEE6Z5z/67hcpCIdIYHVux0aR+IivzbXbDOkRl1RXQ=="], - "@wrnexus/tracking": ["@wrnexus/tracking@0.2.15", "", {}, "sha512-stW1B+CmDPswdRbM6wDQfHRzN+ofkfFlvg7z5ThVOUpQKF8MawTnWpALo/1RmQd6KHaUe8HNX6/zBvcaCYWA+w=="], + "@wrnexus/test": ["@wrnexus/test@0.2.17", "", {}, "sha512-EhYOCOXCfeL0SnpJSmwrocVJ0dcHmaIHY2vHjmD+anZkBRK1wErLmJWhAooNUPrkOjaWGeeVhu2/05eQlm9V0A=="], - "@wrnexus/ui": ["@wrnexus/ui@0.2.15", "", { "dependencies": { "@wrnexus/core": "^0.2.15" } }, "sha512-gSi5xFg8KnM9HMOBoEqeF4OI9Wr6xqTLmk7R0jXQXlKCcgHsxDZ3fZHkVnDp7PrmE4nh3pjGtyAg1lwOcOLFxQ=="], + "@wrnexus/tracking": ["@wrnexus/tracking@0.2.17", "", {}, "sha512-fin3KBC607caP14ogFseoW2cHSFTc4jual0SHEcHP01A8VV3U2qCFkozKTpAXGl6n9ObOoUaQHFb75eSkr8JlQ=="], - "@wrnexus/uploader": ["@wrnexus/uploader@0.2.15", "", { "dependencies": { "@wrnexus/core": "^0.2.15" } }, "sha512-BUUPWs5tZsgtQT+DiNvkKwmtuLm4abOfPizikt6Xvh3+zmPWOTOLrOnsT4sqzPLXFTr06alamdNHAMWMvJxY+g=="], + "@wrnexus/ui": ["@wrnexus/ui@0.2.17", "", { "dependencies": { "@wrnexus/core": "^0.2.17" } }, "sha512-HRVCnu+OUI2+dHoBw5s1M7UIYtjDCMzj3fO8Xc4kanLCvf1mx581ykr7c+1FH5hpD4CWDV9hwP6mDBfWDN71ag=="], - "@wrnexus/validation": ["@wrnexus/validation@0.2.15", "", {}, "sha512-+T+9YgQbxzBOFUoa8aWMNTd+BWw9+HMXdCmtAi0AOeUMgonFI6dPfFvHf1u4/IspOS4lw3qdmrm4C5KiTsciWw=="], + "@wrnexus/uploader": ["@wrnexus/uploader@0.2.17", "", { "dependencies": { "@wrnexus/core": "^0.2.17" } }, "sha512-9EJjozt10CMOaTp4kMLhmauP5FzfEe/LZIroSz/CYsTmCTUFCF/T4iFcQJu8HcdN2mn7Tx69IBe5x7FnA3Xi4w=="], + + "@wrnexus/validation": ["@wrnexus/validation@0.2.17", "", {}, "sha512-SrqUlZ3G5+QpNPlCxeJfnChASEbSCrVRciFdYKlKQ9GjJdUIYdkhpHjWkPbkjlq3dv5XTLEzC1KNx/lB1YC6nA=="], "acorn": ["acorn@8.17.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg=="], diff --git a/docs/documentation-coverage-matrix.md b/docs/documentation-coverage-matrix.md index 5311ac2d..c4841a1d 100644 --- a/docs/documentation-coverage-matrix.md +++ b/docs/documentation-coverage-matrix.md @@ -11,6 +11,7 @@ | @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/helpers | /packages/helpers | 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 | diff --git a/docs/release-access-status.md b/docs/release-access-status.md index 3c551d93..48767816 100644 --- a/docs/release-access-status.md +++ b/docs/release-access-status.md @@ -2,6 +2,6 @@ ## Decision: Mode B — Private Developer Preview -Active version: 0.2.15, derived from package.json#wrnexus.version. All 25 installed @wrnexus packages resolve to 0.2.15. On 2026-07-12, npm view using a clean empty user config returned E404 for @wrnexus/cli@0.2.15 and @wrnexus/core@0.2.15. The repository remote is a private WorkRoot Git service and no public license file exists. +Active version: 0.2.17, derived from package.json#wrnexus.version. All 26 installed @wrnexus packages resolve to 0.2.17 and npm reports restricted access. The repository remote is a private WorkRoot Git service and no public license file exists. -External users cannot execute an installation without approved private registry credentials. The truthful CTA is Request preview access. After approval, the canonical command is bunx @wrnexus/cli@0.2.15 create my-app. Tokens must never appear in documentation or source. +External users cannot execute an installation without approved private registry credentials. The truthful CTA is Request preview access. After approval, the canonical command is bunx @wrnexus/cli@0.2.17 create my-app. Tokens must never appear in documentation or source. diff --git a/docs/site-audit.md b/docs/site-audit.md index 204c48a1..521818cd 100644 --- a/docs/site-audit.md +++ b/docs/site-audit.md @@ -1,19 +1,19 @@ # WRNexusJS site audit -Date: 2026-07-12. Baseline: Bun 1.3.14, framework 0.2.15. +Date: 2026-07-13. Baseline: Bun 1.3.14, framework 0.2.17. ## Baseline results -- bun install: pass (169 installs / 209 packages, unchanged). -- docs generation: pass (25 package pages and 5 prior site pages). -- tests: 6 pass. Check: pass. Production build: pass, 30 routes. -- Access test with an empty npm config: @wrnexus/cli and @wrnexus/core returned npm E404. -- Repository: private WorkRoot Git remote; no public LICENSE, SECURITY, or CHANGELOG file found. +- authenticated private-registry installation: pass. +- docs generation: pass (26 package pages plus portal and guide pages). +- tests, lint, formatting, and production build are required by the release check. +- package access remains restricted/private. +- repository: private WorkRoot Git remote; no public license file exists. ## Findings -The prior generator duplicated package H1s, descriptions, install blocks, and dumped full declarations. It also rewrote hand-authored core pages, used four desktop-only nav links, hid navigation on mobile, branded inconsistently, and presented an unusable public create command. Metadata lacked explicit canonicals and route coverage. No sitemap, robots file, docs index, release/access route, security/support/license policy, showcase evidence notes, benchmarks methodology page, or 404 source existed. +Package documentation, discovery assets, and AI-readable references are generated from the installed release. The 0.2.17 portal includes the helpers package, workspace app addition, and safe forward-auth login redirect guidance. ## Audit limitations -Browser tooling, Lighthouse, axe, screenshots, and an authenticated clean scaffold were unavailable. Scores are therefore not fabricated; post-deploy measurements remain required under docs/audits/. +Browser tooling, Lighthouse, axe, screenshots, and authenticated production deployment checks are separate post-deploy work. Scores are not fabricated; reports belong under docs/audits/. diff --git a/package-lock.json b/package-lock.json index 54e504dd..0ddbb314 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,37 +8,38 @@ "name": "wrnexusjs", "version": "0.1.0", "dependencies": { - "@wrnexus/ai": "0.2.12", - "@wrnexus/authz": "0.2.12", - "@wrnexus/compiler": "0.2.12", - "@wrnexus/core": "0.2.12", - "@wrnexus/csr": "0.2.12", - "@wrnexus/db": "0.2.12", - "@wrnexus/dev-server": "0.2.12", - "@wrnexus/encryption": "0.2.12", - "@wrnexus/i18n": "0.2.12", - "@wrnexus/jwt": "0.2.12", - "@wrnexus/mobile": "0.2.12", - "@wrnexus/native": "0.2.12", - "@wrnexus/oauth": "0.2.12", - "@wrnexus/pubsub": "0.2.12", - "@wrnexus/queue": "0.2.12", - "@wrnexus/reactive": "0.2.12", - "@wrnexus/router": "0.2.12", - "@wrnexus/ssr": "0.2.12", - "@wrnexus/styles": "0.2.12", - "@wrnexus/test": "0.2.12", - "@wrnexus/tracking": "0.2.12", - "@wrnexus/ui": "0.2.12", - "@wrnexus/uploader": "0.2.12", - "@wrnexus/validation": "0.2.12" + "@wrnexus/ai": "^0.2.17", + "@wrnexus/authz": "^0.2.17", + "@wrnexus/compiler": "^0.2.17", + "@wrnexus/core": "^0.2.17", + "@wrnexus/csr": "^0.2.17", + "@wrnexus/db": "^0.2.17", + "@wrnexus/dev-server": "^0.2.17", + "@wrnexus/encryption": "^0.2.17", + "@wrnexus/helpers": "^0.2.17", + "@wrnexus/i18n": "^0.2.17", + "@wrnexus/jwt": "^0.2.17", + "@wrnexus/mobile": "^0.2.17", + "@wrnexus/native": "^0.2.17", + "@wrnexus/oauth": "^0.2.17", + "@wrnexus/pubsub": "^0.2.17", + "@wrnexus/queue": "^0.2.17", + "@wrnexus/reactive": "^0.2.17", + "@wrnexus/router": "^0.2.17", + "@wrnexus/ssr": "^0.2.17", + "@wrnexus/styles": "^0.2.17", + "@wrnexus/test": "^0.2.17", + "@wrnexus/tracking": "^0.2.17", + "@wrnexus/ui": "^0.2.17", + "@wrnexus/uploader": "^0.2.17", + "@wrnexus/validation": "^0.2.17" }, "devDependencies": { "@eslint/js": "^9.0.0", "@tailwindcss/cli": "^4.0.0", "@types/bun": "latest", "@types/node": "^26.1.1", - "@wrnexus/cli": "0.2.12", + "@wrnexus/cli": "^0.2.17", "eslint": "^9.0.0", "prettier": "latest", "tailwindcss": "^4.0.0", @@ -837,6 +838,72 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.2.tgz", @@ -1152,34 +1219,40 @@ } }, "node_modules/@wrnexus/ai": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/ai/-/ai-0.2.17.tgz", + "integrity": "sha512-8kTVVbTK9g1tDKd07aFCAHFkl6xnLmXKM+mcxN+QzVw6JSLSGSIuNpkW1cFvOuvFuXZtaITmewyO1x46dtzG9w==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/authz": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/authz/-/authz-0.2.17.tgz", + "integrity": "sha512-C6A6ILfOJtEhz6VWYwk3JZ+VsdsNz00qZwj/Emvfh3pFMYcmv98gT71zKuHQruK2ouJqaKPUpvfUlUuyxk4wdw==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/cli": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/cli/-/cli-0.2.17.tgz", + "integrity": "sha512-nsnXkK9FbCOtcdTbrUYn0w2/QFuaOwM13KHUbc+veswe8vI62ZjGI91LKENRLm40xQaNJiKUj5g1ashF1Rj8ag==", "dev": true, "license": "MIT", "dependencies": { - "@wrnexus/compiler": "^0.2.12", - "@wrnexus/core": "^0.2.12", - "@wrnexus/csr": "^0.2.12", - "@wrnexus/db": "^0.2.12", - "@wrnexus/dev-server": "^0.2.12", - "@wrnexus/i18n": "^0.2.12", - "@wrnexus/router": "^0.2.12", - "@wrnexus/styles": "^0.2.12", - "@wrnexus/ui": "^0.2.12", - "@wrnexus/validation": "^0.2.12" + "@wrnexus/compiler": "^0.2.17", + "@wrnexus/core": "^0.2.17", + "@wrnexus/csr": "^0.2.17", + "@wrnexus/db": "^0.2.17", + "@wrnexus/dev-server": "^0.2.17", + "@wrnexus/i18n": "^0.2.17", + "@wrnexus/router": "^0.2.17", + "@wrnexus/styles": "^0.2.17", + "@wrnexus/ui": "^0.2.17", + "@wrnexus/validation": "^0.2.17" }, "bin": { "wrnexus": "dist/index.js" @@ -1189,193 +1262,249 @@ } }, "node_modules/@wrnexus/compiler": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/compiler/-/compiler-0.2.17.tgz", + "integrity": "sha512-dYiOGxgum9KG0sTEvk47JdLKRz9V2+dj7MeiWR5CYp0Ivwu5PpgoqRVHdmL7LloiEAFl1sDVvDciidjD4ECyYQ==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/core": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/core/-/core-0.2.17.tgz", + "integrity": "sha512-lcHUlWNtTPmh0xYBulwygGKalEUH48GlyOv25GxwIC9g60ngvm09H5zIqzdjsTZ9Vcm+S0rsYxajyrQyUQd0tQ==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/csr": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/csr/-/csr-0.2.17.tgz", + "integrity": "sha512-tgKJTfeUna4fawvitwjLYDMgIlF8jBz5kSKkp/F0V10fhvANprUXLi1FeaE6y5q7Bsv/mI2cdckH9CrI3Np0xg==", "license": "MIT", "dependencies": { - "@wrnexus/core": "^0.2.12" + "@wrnexus/core": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/db": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/db/-/db-0.2.17.tgz", + "integrity": "sha512-k83db0HqxyZY+HA4D3uLYyQSZOlYKMlpMtm+xnE1mdNEYKztidRmWgftvToZdPpXUmkmTri2+1feAkdrJOdhkg==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/dev-server": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/dev-server/-/dev-server-0.2.17.tgz", + "integrity": "sha512-gef+bEV/cAirazPRJeoWikPksJqU0Zz98JDkk2cUQHBFwgDD4a8NjNhRdVC94MDHLauqoCNyt83XYq+wpWxlkw==", "license": "MIT", "dependencies": { - "@wrnexus/compiler": "^0.2.12", - "@wrnexus/core": "^0.2.12", - "@wrnexus/csr": "^0.2.12", - "@wrnexus/db": "^0.2.12", - "@wrnexus/i18n": "^0.2.12", - "@wrnexus/pubsub": "^0.2.12", - "@wrnexus/router": "^0.2.12", - "@wrnexus/ssr": "^0.2.12", - "@wrnexus/styles": "^0.2.12", - "@wrnexus/ui": "^0.2.12", - "@wrnexus/uploader": "^0.2.12", - "@wrnexus/validation": "^0.2.12" + "@wrnexus/compiler": "^0.2.17", + "@wrnexus/core": "^0.2.17", + "@wrnexus/csr": "^0.2.17", + "@wrnexus/db": "^0.2.17", + "@wrnexus/i18n": "^0.2.17", + "@wrnexus/pubsub": "^0.2.17", + "@wrnexus/router": "^0.2.17", + "@wrnexus/ssr": "^0.2.17", + "@wrnexus/styles": "^0.2.17", + "@wrnexus/ui": "^0.2.17", + "@wrnexus/uploader": "^0.2.17", + "@wrnexus/validation": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/encryption": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/encryption/-/encryption-0.2.17.tgz", + "integrity": "sha512-2y/Jyuykq7foVdzQTN3FLJllYhLYo4ftk7CfobKRbvCqZ7FbQe/eyFQe/hxZg0UwAOA0w5NEwAtR+N3gqTCdbg==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, - "node_modules/@wrnexus/i18n": { - "version": "0.2.12", + "node_modules/@wrnexus/helpers": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/helpers/-/helpers-0.2.17.tgz", + "integrity": "sha512-TV8FUiMbVm1j8HtPKDbKcsKnWzpIG063avqZKxcQyb3dFBqd4pj9HNSwxFKs4c6iKhEqwJN7qL0DpI4pGSA6+Q==", "license": "MIT", "dependencies": { - "@wrnexus/core": "^0.2.12" + "@wrnexus/core": "^0.2.17" + }, + "engines": { + "bun": ">=1.1.0" + } + }, + "node_modules/@wrnexus/i18n": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/i18n/-/i18n-0.2.17.tgz", + "integrity": "sha512-6h8uIzkjQXuM8/m0U28iPX9o2SkwySjRPYjwt5XV2csae3T+jLNwHIVCBXsj9OLhJ9aPk1o0aUoTpPkDuuCadA==", + "license": "MIT", + "dependencies": { + "@wrnexus/core": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/jwt": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/jwt/-/jwt-0.2.17.tgz", + "integrity": "sha512-cYOkseaZFAm9fjx30TslUv47Y1Okh1NrhjkYAWaax0gyxhNpi7fiTstuBDmt86wtUQB/jIPJEeCqkg0QlSNJRg==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/mobile": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/mobile/-/mobile-0.2.17.tgz", + "integrity": "sha512-rq7NBM9FwwEiJXcEF7zfu1JwKs3xTTPANoDaees3nRM0ptk6ohz9gD5g8Lx4BdHR5zXJOeYi9elLcX9jnKwT+A==", "license": "MIT", "dependencies": { - "@wrnexus/native": "^0.2.12" + "@wrnexus/native": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/native": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/native/-/native-0.2.17.tgz", + "integrity": "sha512-t1qSdN3Ik5qPa4l4tOcliGLJhu7YAsLgbHXBE6t/7HJ0YvHM+fTN/jQEFftPmUBkXYLFM5nhVtTRxeGVyNs8dw==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/oauth": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/oauth/-/oauth-0.2.17.tgz", + "integrity": "sha512-Kr75DB4P37xvTP6fNDV44+f4KNXIcHGZy/Z0GzXqXhnGrbH2Od4b/DIXarvCGYRnXtR33PCfgNzBH/SOq1r/5g==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/pubsub": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/pubsub/-/pubsub-0.2.17.tgz", + "integrity": "sha512-RhweJUBt2nI2IDs7TE3JYJD4RW2Cs2S+ld14SNxJAVdFkdEKu0u+nu7XH2bXU0VoQQ465M3DeHF7O1mhTkzyzg==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/queue": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/queue/-/queue-0.2.17.tgz", + "integrity": "sha512-W3Fjs6tSX3m9750uGuY5KFHiyW/kTjoWZ7uvsOBQmiaYxn9iwdbStY1Z5YRqkAUNEo6ZEtFqdikxhgtqlg/xfw==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/reactive": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/reactive/-/reactive-0.2.17.tgz", + "integrity": "sha512-NhKykbEp4N2nKJ7Iu4dC7kAE1THIM0ipy0lYMoLNvfXtiJuoKCLCPCKbfFUOn3RJONuWT8eDLAraK+JcWUTfiA==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/router": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/router/-/router-0.2.17.tgz", + "integrity": "sha512-pJc9HGjlwcZ9p1rTJJsKygnbqeGh4jap4eyCBM/P6aoZTt5qQnsy/DazJfVDZAUzkgc+CwTpdhev2AaSHJdRLg==", "license": "MIT", "dependencies": { - "@wrnexus/compiler": "^0.2.12", - "@wrnexus/core": "^0.2.12" + "@wrnexus/compiler": "^0.2.17", + "@wrnexus/core": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/ssr": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/ssr/-/ssr-0.2.17.tgz", + "integrity": "sha512-tplktmP6/IeIEjH1d49CH/ltp/IMoqIItjleuZhHxmtonz48ubB8r0oOR6U0mwWYUUGKh4v7rJglHbW4SYOpKg==", "license": "MIT", "dependencies": { - "@wrnexus/core": "^0.2.12" + "@wrnexus/core": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/styles": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/styles/-/styles-0.2.17.tgz", + "integrity": "sha512-Z77BY11PtVXH2gdvPFW+rKSJxI/aqRP3JLQPA7Y31Si0VEE6Z5z/67hcpCIdIYHVux0aR+IivzbXbDOkRl1RXQ==", "license": "MIT", "dependencies": { - "@wrnexus/uploader": "^0.2.12" + "@wrnexus/uploader": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/test": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/test/-/test-0.2.17.tgz", + "integrity": "sha512-EhYOCOXCfeL0SnpJSmwrocVJ0dcHmaIHY2vHjmD+anZkBRK1wErLmJWhAooNUPrkOjaWGeeVhu2/05eQlm9V0A==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/tracking": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/tracking/-/tracking-0.2.17.tgz", + "integrity": "sha512-fin3KBC607caP14ogFseoW2cHSFTc4jual0SHEcHP01A8VV3U2qCFkozKTpAXGl6n9ObOoUaQHFb75eSkr8JlQ==", "license": "MIT", "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/ui": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/ui/-/ui-0.2.17.tgz", + "integrity": "sha512-HRVCnu+OUI2+dHoBw5s1M7UIYtjDCMzj3fO8Xc4kanLCvf1mx581ykr7c+1FH5hpD4CWDV9hwP6mDBfWDN71ag==", "license": "MIT", "dependencies": { - "@wrnexus/core": "^0.2.12" + "@wrnexus/core": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/uploader": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/uploader/-/uploader-0.2.17.tgz", + "integrity": "sha512-9EJjozt10CMOaTp4kMLhmauP5FzfEe/LZIroSz/CYsTmCTUFCF/T4iFcQJu8HcdN2mn7Tx69IBe5x7FnA3Xi4w==", "license": "MIT", "dependencies": { - "@wrnexus/core": "^0.2.12" + "@wrnexus/core": "^0.2.17" }, "engines": { "bun": ">=1.1.0" } }, "node_modules/@wrnexus/validation": { - "version": "0.2.12", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@wrnexus/validation/-/validation-0.2.17.tgz", + "integrity": "sha512-SrqUlZ3G5+QpNPlCxeJfnChASEbSCrVRciFdYKlKQ9GjJdUIYdkhpHjWkPbkjlq3dv5XTLEzC1KNx/lB1YC6nA==", "license": "MIT", "engines": { "bun": ">=1.1.0" diff --git a/package.json b/package.json index bc5c4d6c..3c03f5a3 100644 --- a/package.json +++ b/package.json @@ -17,37 +17,38 @@ "production": "bun run build && bun run start" }, "dependencies": { - "@wrnexus/ai": "^0.2.15", - "@wrnexus/authz": "^0.2.15", - "@wrnexus/compiler": "^0.2.15", - "@wrnexus/core": "^0.2.15", - "@wrnexus/csr": "^0.2.15", - "@wrnexus/db": "^0.2.15", - "@wrnexus/dev-server": "^0.2.15", - "@wrnexus/encryption": "^0.2.15", - "@wrnexus/i18n": "^0.2.15", - "@wrnexus/jwt": "^0.2.15", - "@wrnexus/mobile": "^0.2.15", - "@wrnexus/native": "^0.2.15", - "@wrnexus/oauth": "^0.2.15", - "@wrnexus/pubsub": "^0.2.15", - "@wrnexus/queue": "^0.2.15", - "@wrnexus/reactive": "^0.2.15", - "@wrnexus/router": "^0.2.15", - "@wrnexus/ssr": "^0.2.15", - "@wrnexus/styles": "^0.2.15", - "@wrnexus/test": "^0.2.15", - "@wrnexus/tracking": "^0.2.15", - "@wrnexus/ui": "^0.2.15", - "@wrnexus/uploader": "^0.2.15", - "@wrnexus/validation": "^0.2.15" + "@wrnexus/ai": "^0.2.17", + "@wrnexus/authz": "^0.2.17", + "@wrnexus/compiler": "^0.2.17", + "@wrnexus/core": "^0.2.17", + "@wrnexus/csr": "^0.2.17", + "@wrnexus/db": "^0.2.17", + "@wrnexus/dev-server": "^0.2.17", + "@wrnexus/encryption": "^0.2.17", + "@wrnexus/helpers": "^0.2.17", + "@wrnexus/i18n": "^0.2.17", + "@wrnexus/jwt": "^0.2.17", + "@wrnexus/mobile": "^0.2.17", + "@wrnexus/native": "^0.2.17", + "@wrnexus/oauth": "^0.2.17", + "@wrnexus/pubsub": "^0.2.17", + "@wrnexus/queue": "^0.2.17", + "@wrnexus/reactive": "^0.2.17", + "@wrnexus/router": "^0.2.17", + "@wrnexus/ssr": "^0.2.17", + "@wrnexus/styles": "^0.2.17", + "@wrnexus/test": "^0.2.17", + "@wrnexus/tracking": "^0.2.17", + "@wrnexus/ui": "^0.2.17", + "@wrnexus/uploader": "^0.2.17", + "@wrnexus/validation": "^0.2.17" }, "devDependencies": { "@eslint/js": "^9.0.0", "@tailwindcss/cli": "^4.0.0", "@types/bun": "latest", "@types/node": "^26.1.1", - "@wrnexus/cli": "^0.2.15", + "@wrnexus/cli": "^0.2.17", "eslint": "^9.0.0", "prettier": "latest", "tailwindcss": "^4.0.0", @@ -55,6 +56,6 @@ "typescript-eslint": "latest" }, "wrnexus": { - "version": "0.2.15" + "version": "0.2.17" } } diff --git a/public/docs-index.json b/public/docs-index.json index b9b6c86f..3bde2ef8 100644 --- a/public/docs-index.json +++ b/public/docs-index.json @@ -1,475 +1,482 @@ { - "version": "0.2.15", + "version": "0.2.17", "status": "private-developer-preview", - "generatedAt": "2026-07-12", + "generatedAt": "2026-07-13", "documents": [ { "url": "/", "title": "WRNexusJS", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/access", "title": "access", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/getting-started", "title": "getting started", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/tutorial", "title": "tutorial", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/architecture", "title": "architecture", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/language", "title": "language", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages", "title": "packages", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/project-structure", "title": "project structure", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/routing", "title": "routing", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/pages-and-components", "title": "pages and components", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/server-data", "title": "server data", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/api-routes", "title": "api routes", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/middleware", "title": "middleware", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/forms-and-validation", "title": "forms and validation", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/authentication", "title": "authentication", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/authorization", "title": "authorization", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/security", "title": "security", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/database", "title": "database", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/uploads", "title": "uploads", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/realtime", "title": "realtime", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/pubsub", "title": "pubsub", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/queues", "title": "queues", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "experimental" }, { "url": "/guides/testing", "title": "testing", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/workspaces-and-gateway", "title": "workspaces and gateway", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/deployment", "title": "deployment", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/configuration-and-profiles", "title": "configuration and profiles", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/i18n-and-themes", "title": "i18n and themes", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/mobile", "title": "mobile", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "experimental" }, { "url": "/guides/observability", "title": "observability", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/upgrading", "title": "upgrading", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/guides/troubleshooting", "title": "troubleshooting", "section": "guide", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/examples", "title": "examples", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/showcase", "title": "showcase", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/benchmarks", "title": "benchmarks", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/roadmap", "title": "roadmap", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/changelog", "title": "changelog", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { - "url": "/releases/0.2.15", - "title": "0.2.15", + "url": "/releases/0.2.17", + "title": "0.2.17", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/security", "title": "security", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/support", "title": "support", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/license", "title": "license", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/search", "title": "search", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/404", "title": "404", "section": "portal", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/ai", "title": "ai", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/authz", "title": "authz", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/cli", "title": "cli", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/compiler", "title": "compiler", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/core", "title": "core", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/csr", "title": "csr", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/db", "title": "db", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/dev-server", "title": "dev server", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/encryption", "title": "encryption", "section": "package", - "version": "0.2.15", + "version": "0.2.17", + "stability": "preview" + }, + { + "url": "/packages/helpers", + "title": "helpers", + "section": "package", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/i18n", "title": "i18n", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/jwt", "title": "jwt", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/mobile", "title": "mobile", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "experimental" }, { "url": "/packages/native", "title": "native", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/oauth", "title": "oauth", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/pubsub", "title": "pubsub", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/queue", "title": "queue", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/reactive", "title": "reactive", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/router", "title": "router", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/ssr", "title": "ssr", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/styles", "title": "styles", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/test", "title": "test", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/tracking", "title": "tracking", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/ui", "title": "ui", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/uploader", "title": "uploader", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" }, { "url": "/packages/validation", "title": "validation", "section": "package", - "version": "0.2.15", + "version": "0.2.17", "stability": "preview" } ] diff --git a/public/llms-full.txt b/public/llms-full.txt index b0ffce5b..ed991a49 100644 --- a/public/llms-full.txt +++ b/public/llms-full.txt @@ -1,4 +1,4 @@ -# WRNexusJS 0.2.15 comprehensive documentation index +# WRNexusJS 0.2.17 comprehensive documentation index Status: Private Developer Preview. Runtime: Bun. UI language: .wrn. This is the documentation application, not the framework monorepo. @@ -39,7 +39,7 @@ This is the documentation application, not the framework monorepo. - https://wrnexusjs.dev/benchmarks - https://wrnexusjs.dev/roadmap - https://wrnexusjs.dev/changelog -- https://wrnexusjs.dev/releases/0.2.15 +- https://wrnexusjs.dev/releases/0.2.17 - https://wrnexusjs.dev/security - https://wrnexusjs.dev/support - https://wrnexusjs.dev/license @@ -54,6 +54,7 @@ This is the documentation application, not the framework monorepo. - https://wrnexusjs.dev/packages/db - https://wrnexusjs.dev/packages/dev-server - https://wrnexusjs.dev/packages/encryption +- https://wrnexusjs.dev/packages/helpers - https://wrnexusjs.dev/packages/i18n - https://wrnexusjs.dev/packages/jwt - https://wrnexusjs.dev/packages/mobile diff --git a/public/llms.txt b/public/llms.txt index f1bfa373..5cfb6cb3 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,60 +1,15 @@ -# WRNexusJS 0.2.15 +# WRNexusJS documentation 0.2.17 -> WRNexusJS is an SSR-first, **Bun-native** full-stack web framework. UI is written in +Status: Private Developer Preview. This site documents 26 release-aligned packages. + +# WrNexus + +> WrNexus is an SSR-first, **Bun-native** full-stack web framework. UI is written in > `.wrn` files (its own component language — NOT React/JSX/Vue). Routing is file-based. -> This document teaches an AI how to write correct WRNexusJS code. The framework packages are in -> Private Developer Preview and +> This document teaches an AI how to write correct WrNexus code. It is private and > post-dates model training data, so rely on THIS document, not prior web-framework > assumptions. -## This repository - -This is the **WRNexusJS documentation application**, not the framework monorepo. It is a -standalone WRNexusJS `0.2.15` site that documents all 25 installed `@wrnexus/*` packages. - -The active version is `package.json#wrnexus.version`; never duplicate a different version in -hand-written guidance. Exact APIs follow installed package READMEs, exported declarations, this -guide, then generated package pages, in that order. - -- `app/pages/index.wrn` is the documentation home page. -- `app/pages/getting-started.wrn`, `architecture.wrn`, `language.wrn`, and - `packages.wrn` are the main guides. -- `app/pages/packages/.wrn` is the generated documentation page for - `@wrnexus/`. -- `scripts/generate-docs.ts` regenerates package pages from each installed package's - README and TypeScript declarations. Run `bun run docs:generate` after dependency or - documentation changes; do not hand-edit generated package pages unless intentionally - changing the generator's output. -- `wrnexus.config.ts` owns PWA/mobile metadata, SEO, fonts, and Tailwind v4 processing. -- `app/styles/global.css` owns the documentation site's global presentation. -- `app/routes.gen.ts`, `.wrnexus/`, and `dist/` are generated output. Do not treat them - as source files or edit them by hand. - -For framework API questions, use the installed package as the authoritative source: - -1. `node_modules/@wrnexus//README.md` for concepts and examples. -2. The package's exported `.d.ts` declarations for the exact public API used by this - release. -3. This file for framework-wide conventions and common patterns. -4. Generated `app/pages/packages/.wrn` only as the website representation of - the first two sources. - -Do not assume APIs from a newer or older WrNexus release. The active release is recorded -in `package.json` under `wrnexus.version`, and all `@wrnexus/*` dependencies should stay -aligned to that version. - -## Project commands - -```bash -bun install # install dependencies -bun run docs:generate # regenerate all package documentation pages -bun run dev # start the WrNexus development server -bun run test # run application tests -bun run check # lint, test, and verify formatting -bun run build # production build to dist/ -bun run start # run dist/server.js -``` - ## Golden rules - **Pages, components, and layouts are `.wrn` files.** Do NOT write `.tsx`/`.jsx`/React @@ -209,6 +164,21 @@ export const POST = async (ctx) => { `req: Request`, `url: URL`, `params: Record` (dynamic route params, e.g. `/users/[id]` → `ctx.params.id`), `lang: string`, `t(key, params?)` (i18n), `cookies` (get/set), `session` (get/set). Auth: `getUser(ctx)` after `sessionAuth`/`logIn`. +When an SSO forward-auth verifier needs the URL that originally reached the gateway, use +`@wrnexus/helpers` instead of constructing it from untrusted headers: + +```ts +import { redirectToLogin } from "@wrnexus/helpers"; + +return redirectToLogin(ctx, "/login", { + allowedHosts: ["admin.localhost:3000", "reports.localhost:3000"], +}); +``` + +The package also exports `getOriginalRequestUrl`, `getOriginalRequestOrigin`, +`getOriginalRequestPath`, and `getOriginalRequestMethod`. Always pass `allowedHosts` when +using forwarded gateway URLs; the helper rejects untrusted redirect destinations. + ## Middleware & realtime ```ts @@ -308,40 +278,14 @@ wrnexus eject # copy a Wire UI component's .wrn into app/compone 3. For data, add an `app/api/*.ts` route and `getDb()`; for forms, add an `app/schemas/*.ts` and `data-schema`. 4. Style with Tailwind utility classes in the view, or theme tokens (`var(--wire-*)`), or `style { }`. 5. Never emit React/JSX, a manual router, or client-side island JS — the framework handles hydration. -# Complete package documentation -The sections below contain the complete manuals shipped with the installed WrNexus release. Each package heading links to its rendered documentation page on this site. Package source README files are embedded verbatim so coding models can work without fetching additional pages. +# Installed package documentation -## Package index -- [`@wrnexus/ai`](https://wrnexusjs.dev/packages/ai) -- [`@wrnexus/authz`](https://wrnexusjs.dev/packages/authz) -- [`@wrnexus/cli`](https://wrnexusjs.dev/packages/cli) -- [`@wrnexus/compiler`](https://wrnexusjs.dev/packages/compiler) -- [`@wrnexus/core`](https://wrnexusjs.dev/packages/core) -- [`@wrnexus/csr`](https://wrnexusjs.dev/packages/csr) -- [`@wrnexus/db`](https://wrnexusjs.dev/packages/db) -- [`@wrnexus/dev-server`](https://wrnexusjs.dev/packages/dev-server) -- [`@wrnexus/encryption`](https://wrnexusjs.dev/packages/encryption) -- [`@wrnexus/i18n`](https://wrnexusjs.dev/packages/i18n) -- [`@wrnexus/jwt`](https://wrnexusjs.dev/packages/jwt) -- [`@wrnexus/mobile`](https://wrnexusjs.dev/packages/mobile) -- [`@wrnexus/native`](https://wrnexusjs.dev/packages/native) -- [`@wrnexus/oauth`](https://wrnexusjs.dev/packages/oauth) -- [`@wrnexus/pubsub`](https://wrnexusjs.dev/packages/pubsub) -- [`@wrnexus/queue`](https://wrnexusjs.dev/packages/queue) -- [`@wrnexus/reactive`](https://wrnexusjs.dev/packages/reactive) -- [`@wrnexus/router`](https://wrnexusjs.dev/packages/router) -- [`@wrnexus/ssr`](https://wrnexusjs.dev/packages/ssr) -- [`@wrnexus/styles`](https://wrnexusjs.dev/packages/styles) -- [`@wrnexus/test`](https://wrnexusjs.dev/packages/test) -- [`@wrnexus/tracking`](https://wrnexusjs.dev/packages/tracking) -- [`@wrnexus/ui`](https://wrnexusjs.dev/packages/ui) -- [`@wrnexus/uploader`](https://wrnexusjs.dev/packages/uploader) -- [`@wrnexus/validation`](https://wrnexusjs.dev/packages/validation) +The following README files and declarations come from the installed private 0.2.17 release. ---- +## @wrnexus/ai -## Package manual: [`@wrnexus/ai`](https://wrnexusjs.dev/packages/ai) +Documentation URL: https://wrnexusjs.dev/packages/ai # @wrnexus/ai @@ -490,9 +434,83 @@ export const POST = async (ctx) => { - Defaults to `claude-opus-4-8`. Pass `{ model }` for a different model (e.g. `"claude-sonnet-5"` for speed/cost, `"claude-haiku-4-5"` for the fastest). +### Exported TypeScript declarations + +```ts +/** + * @wrnexus/ai — a tiny, zero-dependency Claude (Anthropic) client for WrNexus apps. + * + * Use it in API routes, jobs, or anywhere server-side to generate text with Claude. + * It talks to the Anthropic Messages API over `fetch` (no SDK dependency, Bun-native), + * and defaults to the most capable model, `claude-opus-4-8`. + * + * import { createAI } from "@wrnexus/ai"; + * const ai = createAI(); // reads ANTHROPIC_API_KEY + * const text = await ai.generate("Write a haiku about Bun."); + * + * Streaming (great for API routes): + * export const POST = async (ctx) => ai.streamResponse(await ctx.req.text()); + */ +type Role = "user" | "assistant"; +interface Message { + role: Role; + content: string; +} +/** Reasoning effort — higher means deeper thinking + more tokens. */ +type Effort = "low" | "medium" | "high" | "xhigh" | "max"; +interface AIConfig { + /** Anthropic API key. Default: `ANTHROPIC_API_KEY` from the environment. */ + apiKey?: string; + /** Model id. Default: `claude-opus-4-8` (the most capable Claude model). */ + model?: string; + /** Default max output tokens. Default: 4096. */ + maxTokens?: number; + /** API base URL. Default: `https://api.anthropic.com`. */ + baseURL?: string; + /** `anthropic-version` header. Default: `2023-06-01`. */ + version?: string; +} +interface GenerateOptions { + /** System prompt — sets the assistant's role/behavior. */ + system?: string; + /** Override the model for this call. */ + model?: string; + /** Override max output tokens for this call. */ + maxTokens?: number; + /** Enable adaptive extended thinking (slower, deeper reasoning). */ + thinking?: boolean; + /** Reasoning effort / token spend (`output_config.effort`). */ + effort?: Effort; + /** Full message history — supersedes the `prompt` argument when provided. */ + messages?: Message[]; + /** Abort the request. */ + signal?: AbortSignal; +} +/** Thrown when the API returns a non-2xx response or refuses the request. */ +declare class AIError extends Error { + readonly status: number; + readonly type: string; + constructor(message: string, status?: number, type?: string); +} +interface AI { + /** Generate a full text response (non-streaming). */ + generate(prompt: string | Message[], opts?: GenerateOptions): Promise; + /** Stream the response as text deltas, as they arrive. */ + stream(prompt: string | Message[], opts?: GenerateOptions): AsyncGenerator; + /** Stream straight to a `Response` (text/plain) — drop-in for an API route return. */ + streamResponse(prompt: string | Message[], opts?: GenerateOptions): Response; +} +/** Create a Claude client. Reads `ANTHROPIC_API_KEY` from the environment by default. */ +declare function createAI(config?: AIConfig): AI; + +export { type AI, type AIConfig, AIError, type Effort, type GenerateOptions, type Message, type Role, createAI }; +``` + --- -## Package manual: [`@wrnexus/authz`](https://wrnexusjs.dev/packages/authz) +## @wrnexus/authz + +Documentation URL: https://wrnexusjs.dev/packages/authz # @wrnexus/authz @@ -646,9 +664,62 @@ app.put( - Works with [`@wrnexus/core`](../core) — the guards return `Middleware` and read the subject from `ctx.user` on the request `Context`. Both types are imported from `@wrnexus/core`. - Policy combinators (`any`, `all`) and `authorize` are async-aware, so policies may return a `Promise` (e.g. for a database ownership check). +### Exported TypeScript declarations + +```ts +import { Context, Middleware } from '@wrnexus/core'; + +/** + * @wrnexus/authz — authorization: role-based (RBAC), policy-based (PBAC), and + * attribute-based (ABAC). Compose freely; all three reduce to a boolean check + * plus an `authorize()` guard middleware. + * + * const rbac = defineRbac({ admin: ["*"], editor: ["post:read", "post:write"] }); + * rbac.can(user, "post:write"); + * + * // PBAC/ABAC: a policy is a predicate over subject + resource + attributes + * const ownsPost: Policy = (u, post) => u.id === post.authorId; + * authorize((ctx) => ownsPost(ctx.user, resource)) // middleware + */ + +interface Subject { + id?: string; + roles?: string[]; + [attribute: string]: unknown; +} +interface Rbac { + /** True if any of the subject's roles grants `permission` (supports "*" and "ns:*"). */ + can(subject: Subject | undefined, permission: string): boolean; + /** All permissions granted to a set of roles. */ + permissionsFor(roles: string[]): Set; +} +/** Build an RBAC checker from a role → permissions map. */ +declare function defineRbac(roles: Record): Rbac; +/** True if the subject has ALL of the given roles. */ +declare function hasRole(subject: Subject | undefined, ...required: string[]): boolean; +/** A policy predicate: subject (+ optional resource/attributes) → allowed. */ +type Policy = (subject: S, resource?: R) => boolean | Promise; +/** Combine policies: allow if ANY passes (OR). */ +declare function any(...policies: Policy[]): Policy; +/** Combine policies: allow only if ALL pass (AND). */ +declare function all(...policies: Policy[]): Policy; +/** ABAC helper: allow when an attribute matches (equality or predicate). */ +declare function attr(name: string, match: unknown | ((value: unknown) => boolean)): Policy; +/** Guard a route with a policy over `ctx` (reads `ctx.user` as the subject). */ +declare function authorize(policy: (ctx: Context) => boolean | Promise): Middleware; +/** Guard requiring one of the given roles. */ +declare function requireRole(...roles: string[]): Middleware; +/** Guard requiring an RBAC permission. */ +declare function requirePermission(rbac: Rbac, permission: string): Middleware; + +export { type Policy, type Rbac, type Subject, all, any, attr, authorize, defineRbac, hasRole, requirePermission, requireRole }; +``` + --- -## Package manual: [`@wrnexus/cli`](https://wrnexusjs.dev/packages/cli) +## @wrnexus/cli + +Documentation URL: https://wrnexusjs.dev/packages/cli # @wrnexus/cli @@ -686,6 +757,7 @@ Every command accepts an optional `[app-dir]` (defaults to `.`). Commands that r | `wrnexus build [app-dir]` | Build a self-contained production server bundle + assets into `dist/`. | | `wrnexus create ` | Scaffold a new single app from an inline template. | | `wrnexus workspace ` | Scaffold a monorepo (`apps/*` + shared `packages/*`). | +| `wrnexus workspace add ` | Add and register an app in the current workspace. | | `wrnexus gateway [--port=3000]` | Serve every workspace app behind one port, routed by domain. | | `wrnexus generate ` | Scaffold a `page` \| `component` \| `api` \| `schema`. | | `wrnexus generate routes` | Regenerate the typed routes file (`app/routes.gen.ts`). | @@ -819,6 +891,18 @@ wrnexus workspace acme wrnexus gateway --port=3000 ``` +From a workspace root, add and register another app in one command: + +```bash +wrnexus workspace add reports --domain=reports.localhost +bun install +``` + +Development gateways bind to `127.0.0.1` by default for reliable access on Windows, +macOS, and Linux. Open the configured app domain on the gateway port (for example +`http://localhost:3000` or `http://admin.localhost:3000`), not the internal child ports +printed while apps start. Pass `--host=0.0.0.0` to accept connections from other devices. + ### `wrnexus test` Runs the app's tests with `bun test`. Defaults to the `test` profile (config + `.env.test`). Pass `--watch` to re-run on change; extra flags pass straight through to `bun test`. @@ -859,9 +943,17 @@ export default config; - Orchestrates the rest of the framework: `@wrnexus/dev-server` (dev/prod server + gateway), `@wrnexus/router` (route + typed-routes codegen), `@wrnexus/compiler` (`.wrn` → `.ts`), `@wrnexus/db` (migrations, typed queries), `@wrnexus/styles` (config, profiles, `.env`, themes, styles), `@wrnexus/ui` (ejectable Wire UI components), `@wrnexus/validation`, `@wrnexus/csr`, and `@wrnexus/i18n`. - Reads `wrnexus.config.ts` for `db` / `databases`, `theme`, `styles`, `seo`, `security`, `i18n`, and `profiles`, and `wrnexus.workspace.ts` for the gateway. +### Exported TypeScript declarations + +```ts +#!/usr/bin/env bun +``` + --- -## Package manual: [`@wrnexus/compiler`](https://wrnexusjs.dev/packages/compiler) +## @wrnexus/compiler + +Documentation URL: https://wrnexusjs.dev/packages/compiler # @wrnexus/compiler @@ -1029,9 +1121,231 @@ A file opens with `page ` or `component ` followed by a `{ ... }` bo - Pure TypeScript with no runtime dependencies; runs under **Bun** as part of the WrNexus toolchain (Node is not supported). - Generated modules target WrNexus runtime primitives (`data-scope`, `data-text`, `data-on-*`, `data-for`, `data-component`, `__wrnexus*`/`__wire*` helpers) — consume the output within a WrNexus app, e.g. via `@wrnexus/core`'s dev loader. +### Exported TypeScript declarations + +```ts +/** + * Recursive-descent parser for `.wrn`, producing a small AST. + * + * Grammar (subset of the vision, but real): + * + * page { + * state = // zero or more + * view { } // plain HTML (see parseHtmlView) + * seo { title = "Home" description = "..." } + * ssr { api { } functions { } } + * client { api { } functions { } } + * style { } // zero or more, inlined with the page + * functions { } // zero or more, shared helpers + * api { } // zero or more + * realtime { on () { } * } // zero or more + * } + * + * The `view` block is written as ordinary HTML — nothing new to learn. Text may + * contain `{expr}` interpolation, attributes may be hyphenated (`data-*`), and + * `@event="..."` declares a client event binding. See `parseHtmlView`. + */ +interface StateDecl { + name: string; + /** Raw JS initializer expression, e.g. `0` or `'x'`. */ + expr: string; +} +interface Attr { + name: string; + value: string; + /** True for `@event` bindings (vs. plain HTML attributes). */ + event: boolean; + /** True for a valueless boolean attribute, e.g. `