Files
WRNexusJS/docs/PUBLISHING.md
T
2026-07-12 15:55:18 +05:30

3.5 KiB

Publishing WrNexus to npm

All 25 @wrnexus/* packages are built and published to the public npm registry (registry.npmjs.org), then installed on any machine with Bun.

Prerequisites

The @wrnexus/* packages are scoped, so the wrnexus npm organization must exist and you must be a member with publish rights (a username scope like @clintchiz would work without an org, but the packages are named @wrnexus/*).

  1. Create the org once at https://www.npmjs.com/org/create (name: wrnexus).
    • A free org can publish unlimited public packages.
    • To publish private (restricted) packages first and flip them public later, the org needs a paid Teams plan (private scoped packages require it).
  2. npm login (registry https://registry.npmjs.org/).

The repo .npmrc points the scope at public npm:

@wrnexus:registry=https://registry.npmjs.org/

Publish

The packages ship raw TypeScript in the repo (main/exportssrc/*.ts), so they are built for publishing. scripts/publish-packages.ts builds each package with tsup (bundled JS + a single .d.ts) and stages a publishable copy under .publish/<name>/ with a rewritten manifest:

  • main/module/types/exports/bin point at ./dist/*
  • workspace:* deps → ^<version>
  • private removed; licenseMIT; publishConfig{ registry, access }
  • runtime assets copied (@wrnexus/uicomponents/, ui.css)

The dev package.json (pointing at src/) is never modified, so in-repo dev and tests keep working.

1. Private-first (test before the world sees it)

By default the script stages packages as restricted (private). Requires the wrnexus org on a paid Teams plan.

# Build + stage all packages (access: restricted)
bun run scripts/publish-packages.ts

# Publish (deps first). The script prints the exact order + --access flag; e.g.
npm publish .publish/core --access restricted
npm publish .publish/compiler --access restricted
# … through …
npm publish .publish/cli --access restricted

Test the private packages (see below). When satisfied, flip every package to public (no republish needed):

npm access public @wrnexus/core
npm access public @wrnexus/compiler
# … the script prints the full list …

2. Public directly

To stage public manifests from the start (free org is enough):

WRNEXUS_NPM_ACCESS=public bun run scripts/publish-packages.ts
npm publish .publish/core --access public
# …

Bump version in each packages/*/package.json before republishing (npm rejects a duplicate version).

Consume on another machine (needs Bun)

mkdir my-wire-app && cd my-wire-app

# Scaffold via the CLI
npm i @wrnexus/cli
bunx wrnexus create app
cd app                       # scaffolds with @wrnexus/* deps declared
bun install                  # pulls @wrnexus/core, styles, validation, db, cli
bun run dev                  # or: bun run build && bun dist/server.js

While the packages are still private, the consuming machine must be logged in to npm (npm login) as a user with read access to the wrnexus org. Once public, no auth is needed.

wrnexus create scaffolds an app that already declares its @wrnexus/* runtime dependencies and a dev-dependency on @wrnexus/cli, so bun install + bun run dev works standalone.

Everything runs under Bun (the framework uses Bun.serve, bun:sqlite, Bun.password, Bun.build, …). Node is not a supported runtime.