v0.4.2
Current release of the opendweb CLI and the dweb application-level networking stack. This is the first GitHub Release on this repository — it documents the published state of all npm packages; automated release notes (.github/workflows/release.yml) take over from the next tag.
npm packages (published versions)
| npm package | version | role |
|---|---|---|
opendweb |
0.4.2 | Server CLI — npx opendweb server starts the self-hosted gateway (8787) + relay (3340); plugin marketplace host |
@jixo/opendweb-server-binary |
0.3.2 | Server binary wrapper used by the CLI; also exposes a programmatic startServer() |
@jixo/opendweb-client-sdk |
0.3.2 | Node SDK for embedding fabrics in your own app (napi-rs; darwin-arm64 / win32-x64) |
@jixo/opendweb-example |
0.3.2 | Reference two-process client CLI (init / invite / join / chat) |
@jixo/opendweb-config |
0.1.0 | definePlugin helper for local plugin files (runtime-agnostic: deno / bun / node) |
@jixo/opendweb-ext-cf |
1.0.3 | Cloudflare Tunnel plugin: ingress push via API, DNS routing, end-to-end verification, optional cloudflared co-spawn |
Windows artifacts (dweb-server exe + napi dll) are built fresh by the tag workflow (mingw cross-compilation) and ship inside the npm tarballs — no separate download needed.
What this stack does
Multi-device applications form logical networks — like game rooms, not a system-level VPN:
- Identity — Ed25519 EndpointId: stable identity decoupled from network addresses (z-base-32 display form)
- Roster — signed facts (Genesis/Grant/Join/Revoke), content-addressed (BLAKE3), union-merge convergence; controlled, invite-based joins (issuer-online single redemption: challenge-response PoP +
invite_idCAS consumption) - Session — iroh 1.1: QUIC direct + NAT traversal, self-hostable relay fallback; dual ALPN (regular/redeem); gating on both sides (gate before data); per-frame resource caps
- Sync — opaque envelopes, bidirectional (Automerge adapter planned as a separate change)
Highlights of the 0.4.x line
opendweb@0.4.2(tagv1.0.1-clicontent): plugin installs pin@latestexplicitly — an ancestor-directorypackage.jsonwith a stale dependency range can no longer hijack version resolution@jixo/opendweb-ext-cf1.0 (tagsv1.0.0-cf…v1.0.3-cf): discovery-driven rewrite — browser login / one API token, SDK-backed control plane, managed cloudflared, whole-block/single-entry token paste UX; Codex-reviewed remediation round (SDK leaf imports, config-merge PUT, OAuth persistence contract, install-path and race fixes);v0.4.0split connector vs management credentials (live 401 fix)
Upgrade
npx opendweb@0.4.2 server # or: npm i -g opendweb@0.4.2
npm i @jixo/opendweb-client-sdk@0.3.2 # Node SDKDocker
docker run -d -p 8787:8787 -p 3340:3340 ghcr.io/jixoai/opendweb:0.4.2ghcr.io/jixoai/opendweb is the image home: v0.4.2 originally shipped from the pre-rename namespace ghcr.io/gaubee/dweb, and every historical tag has since been migrated there (digests unchanged). The old location still resolves, but point pulls at the new one.
Verify a running server
curl http://localhost:8787/healthz # -> 200
curl http://localhost:8787/services.json # -> service manifest (relay auto-discovery)End-to-end regression manual: EXAMPLE.md (中文版).