Skip to content

Releases: kobesoft-labs/openvessel

OpenVessel 1.2.1 — Node.js 22.23.4

Choose a tag to compare

@ks-tmatsuoka ks-tmatsuoka released this 26 Oct 14:36

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

Choose a tag to compare

@ks-tmatsuoka ks-tmatsuoka released this 26 Oct 12:47

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 node process runs Node.js's own lib/ on bindings written in TypeScript. The older hand-written runtime is still there: write legacy to /etc/openvessel/node to 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 new error event reports runtime errors after boot, server-ready waits until the preview relay is up, and teardown() 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_hooks for native resources, fetch to virtual ports over HTTPS, import.meta.dirname, Response#clone() and the static Response factories).
  • 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

Choose a tag to compare

@ks-tmatsuoka ks-tmatsuoka released this 26 Oct 01:58

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

Choose a tag to compare

@ks-tmatsuoka ks-tmatsuoka released this 25 Oct 01:23

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

Choose a tag to compare

@ks-tmatsuoka ks-tmatsuoka released this 25 Oct 01:21

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 build and astro dev with 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.

Live demo: https://kobesoft-labs.github.io/openvessel-demo/