Repository navigation
feat(javascript): add V8 and Node.js application backends - #99
Merged
Merged
Conversation
forhappy
marked this pull request as ready for review
October 23, 2026 01:52
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Behavior
Applications can implement Cellar business logic and durable cells in JavaScript or TypeScript while the native Rust host retains routing, ownership, storage, and durability. The optional V8 backend runs closed bundles; the optional Node backend runs real Node.js with ESM/CommonJS, dynamic imports, built-ins, native npm addons, and React server rendering. Native-only applications remain engine-free.
Both backends use the shared Python guest operation boundary and a typed npm SDK. Invocation authority follows async work and is revoked on cancellation; worker failure stops the application without replaying mutations. TypeScript builds retain the normal npm module graph for Node, and a separate bundler produces closed V8 applications.
Node now supports native fleet build, publish, and install. Builds capture an immutable Node/application/npm inventory before Cargo and bind it to the executable digest. Publication verifies content-addressed archives before changing the deployment selector. Installation restores checked files at the exact compiled prefix before publishing the executable; admission rejects a mismatched runtime inventory. A relocatable directory package remains available for local-graph delivery. Runtime directory publication is shared with Python and preserves traversal permissions under restrictive installer umasks.
Validation
Remaining limits
Node supervision supports macOS/Linux; Windows remains open. Node and native addons still require the target distribution's system libraries; system-library closure capture is not implemented. Fleet runtime prefixes must match between build and serving machines.
The Cellar guest transport uses bounded buffered HTTP values. Cellar streaming/WebSocket upgrades, workflows, RPC, JS-authored Raft commands, arbitrary framework ingress adapters, and broader production fleet fault/performance qualification remain separate work. Direct Node OS effects are outside Cellar transaction and cancellation guarantees; application execution is trusted. Tests qualify the documented packages and paths rather than universal npm compatibility.