Repository navigation
Releases: kobesoft-labs/openvessel
Release list
OpenVessel 1.2.1 — Node.js 22.23.4
Fixes previews in one-origin deployments (for example GitHub Pages, where the host page, the runtime and the preview share an origin).
1.2.0 made the preview relay refuse every parent on its own origin, so createPreview() failed there with OpenVessel: preview relay did not start. The relay now refuses only a parent under the preview's scope (a preview page that framed it) and accepts a host page outside it. Deployments with three origins behave as before. A new end-to-end check covers the refused case.
Ports Node.js v22.23.4 (unchanged). Download openvessel-1.2.1.tgz below; see the changelog.
OpenVessel 1.2.0 — Node.js 22.23.4
Use 1.2.1 instead if the host page, runtime and preview share one origin (GitHub Pages and similar): 1.2.0 fails to start the preview there.
The ported Node.js runtime is now the default, and OpenVessel runs in Firefox.
- Ported runtime by default. Every
nodeprocess runs Node.js's ownlib/on bindings written in TypeScript. The older hand-written runtime is still there: writelegacyto/etc/openvessel/nodeto use it. - Firefox. The current Firefox release runs the shell, npm, Astro builds and the dev server with its preview. 1200 of the 1237 Node tests that pass in Chrome also pass in Firefox; the differences are listed in docs/compatibility.md.
- Host API.
end()works on terminal processes, a newerrorevent reports runtime errors after boot,server-readywaits until the preview relay is up, andteardown()cleans up waiting calls, processes and dialogs. - Network policy. Loopback is always denied by the policy (curl, wget and the package managers reach the virtual ports instead), redirects are checked where they end, several runtime frames can share one origin, and the preview fails closed.
- Fixes across the shell and coreutils, the package managers, the kernel and the Node.js runtime (command-line options,
async_hooksfor native resources,fetchto virtual ports over HTTPS,import.meta.dirname,Response#clone()and the staticResponsefactories). - Docs. A technical reference in English and Japanese under docs/reference/.
Node's own test suite: 1237 of 1237 tests that a browser can pass (Chrome). Astro corpus: 131 of 147 real sites build.
Ports Node.js v22.23.4 (unchanged). Download openvessel-1.2.0.tgz below and install it with npm install https://github.com/kobesoft-labs/openvessel/releases/download/v1.2.0/openvessel-1.2.0.tgz; the full list is in the changelog.
OpenVessel 1.1.1 — Node.js 22.23.4
Fixes npm install of Astro 7 (and anything else that uses rolldown's WebAssembly build) failing with "Cannot find module './rolldown-binding.wasi.cjs'".
@napi-rs/wasm-runtime 1.2.6 (published 2026-10-25) needs emnapi 2.0.0-beta.2, while rolldown's WebAssembly binding pins emnapi 2.0.0-alpha.5, so rolldown could not load. The installer now takes the newest @napi-rs/wasm-runtime in a binding's range whose peer accepts the emnapi that binding pins. An explicit overrides entry still wins.
Ports Node.js v22.23.4 — unchanged. Download openvessel-1.1.1.tgz below; see the changelog.
OpenVessel 1.1.0 — Node.js 22.23.4
The class returned by spawn() is now Process (it was VesselProcess). Only the entry point, OpenVessel, keeps the product name; every type reachable from it has a neutral name.
VesselProcess is still exported as a deprecated alias, so code written against 1.0.0 keeps working.
Ports Node.js v22.23.4 — unchanged from 1.0.0. Download openvessel-1.1.0.tgz below; see the changelog.
OpenVessel 1.0.0 — Node.js 22.23.4
OpenVessel runs Node.js inside a browser tab: a real node, a POSIX-style shell, npm/pnpm/yarn/bun, a file system and processes, with no server and no open network port. This is the first stable release.
Ports Node.js v22.23.4 — Node's own lib/ runs unmodified; the C++ half (internalBinding()) is re-implemented in TypeScript.
| Node's own test suite | 1237 of 1237 tests a browser can pass (34 more are listed with the reason) |
| Astro 7 / 6 / 5 | 131 of a corpus of 147 real sites build |
| Browsers | Chromium-based, cross-origin isolation required |
Highlights
npm install,astro buildandastro devwith HMR, previewed in an iframe- Native packages are installed as their WebAssembly builds (esbuild, rollup, lightningcss, sharp, …)
- One network policy gate (
ask/allowlist/allow-all); servers use virtual ports - Page, runtime and preview are three origins, so previewed code can't reach the runtime or the host page
- Host API with TypeScript declarations
Using it
Download openvessel-1.0.0.tgz below, serve dist/runtime and dist/preview from their own origins, and embed dist/host — see the README.
Stability
From 1.0.0 the host API and the embedding requirements follow semver. Internals are not covered. Limits and what can't work in a browser: docs/compatibility.md.