You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/nodejs-conformance-report.mdx
+22-23Lines changed: 22 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,6 @@
1
1
---
2
2
title: Node.js Conformance Report
3
3
description: Node.js v22 test/parallel/ conformance results for the secure-exec sandbox.
4
-
icon: "chart-bar"
5
4
---
6
5
7
6
{/* AUTO-GENERATED — do not edit. Run: pnpm tsx scripts/generate-node-conformance-report.ts */}
@@ -279,7 +278,7 @@ icon: "chart-bar"
279
278
-`test-debugger-*.js` — debugger protocol requires inspector which is Tier 5 (Unsupported)
280
279
-`test-quic-*.js` — QUIC protocol depends on tls which is Tier 4 (Deferred)
281
280
282
-
<details><summary>179 individual tests</summary>
281
+
<Accordiontitle="179 individual tests">
283
282
284
283
| Test | Reason |
285
284
| --- | --- |
@@ -463,7 +462,7 @@ icon: "chart-bar"
463
462
|`test-buffer-resizable.js`| requires 'test' module (node:test) which is not available in sandbox |
464
463
|`test-stream-consumers.js`| stream/consumers submodule not available in stream polyfill |
465
464
466
-
</details>
465
+
</Accordion>
467
466
468
467
### unsupported-api (79 entries)
469
468
@@ -473,7 +472,7 @@ icon: "chart-bar"
473
472
-`test-shadow-*.js` — ShadowRealm is experimental and not supported in sandbox
474
473
-`test-compile-*.js` — V8 compile cache/code cache features not available in sandbox
475
474
476
-
<details><summary>76 individual tests</summary>
475
+
<Accordiontitle="76 individual tests">
477
476
478
477
| Test | Reason |
479
478
| --- | --- |
@@ -489,14 +488,14 @@ icon: "chart-bar"
489
488
|`test-fs-options-immutable.js`| hangs — fs.watch() with frozen options waits for events that never arrive (VFS has no inotify) |
490
489
|`test-fs-promises-watch.js`| hangs — fs.promises.watch() waits forever for filesystem events (VFS has no watcher) |
491
490
|`test-fs-watch-file-enoent-after-deletion.js`| hangs — fs.watchFile() waits for stat changes that never arrive (VFS has no inotify) |
492
-
|`test-fs-watch-recursive-add-file-to-existing-subfolder.js`| hangs — fs.watch({recursive}) waits for filesystem events that never arrive (VFS has no inotify) |
493
-
|`test-fs-watch-recursive-add-file-to-new-folder.js`| hangs — fs.watch({recursive}) waits for filesystem events that never arrive (VFS has no inotify) |
494
-
|`test-fs-watch-recursive-add-file.js`| hangs — fs.watch({recursive}) waits for filesystem events that never arrive (VFS has no inotify) |
495
-
|`test-fs-watch-recursive-assert-leaks.js`| hangs — fs.watch({recursive}) waits for filesystem events that never arrive (VFS has no inotify) |
496
-
|`test-fs-watch-recursive-delete.js`| hangs — fs.watch({recursive}) waits for filesystem events that never arrive (VFS has no inotify) |
497
-
|`test-fs-watch-recursive-linux-parallel-remove.js`| hangs — fs.watch({recursive}) waits for filesystem events that never arrive (VFS has no inotify) |
491
+
|`test-fs-watch-recursive-add-file-to-existing-subfolder.js`| hangs — fs.watch(\{recursive\}) waits for filesystem events that never arrive (VFS has no inotify) |
492
+
|`test-fs-watch-recursive-add-file-to-new-folder.js`| hangs — fs.watch(\{recursive\}) waits for filesystem events that never arrive (VFS has no inotify) |
493
+
|`test-fs-watch-recursive-add-file.js`| hangs — fs.watch(\{recursive\}) waits for filesystem events that never arrive (VFS has no inotify) |
494
+
|`test-fs-watch-recursive-assert-leaks.js`| hangs — fs.watch(\{recursive\}) waits for filesystem events that never arrive (VFS has no inotify) |
495
+
|`test-fs-watch-recursive-delete.js`| hangs — fs.watch(\{recursive\}) waits for filesystem events that never arrive (VFS has no inotify) |
496
+
|`test-fs-watch-recursive-linux-parallel-remove.js`| hangs — fs.watch(\{recursive\}) waits for filesystem events that never arrive (VFS has no inotify) |
498
497
|`test-fs-watch-recursive-sync-write.js`| hangs — fs.watch() with recursive option waits forever for events |
499
-
|`test-fs-watch-recursive-update-file.js`| hangs — fs.watch({recursive}) waits for filesystem events that never arrive (VFS has no inotify) |
498
+
|`test-fs-watch-recursive-update-file.js`| hangs — fs.watch(\{recursive\}) waits for filesystem events that never arrive (VFS has no inotify) |
500
499
|`test-fs-watch-stop-async.js`| uses fs.watch/watchFile — inotify not available in VFS |
501
500
|`test-fs-watch-stop-sync.js`| uses fs.watch/watchFile — inotify not available in VFS |
502
501
|`test-fs-watch.js`| hangs — fs.watch() waits for filesystem events that never arrive (VFS has no inotify) |
@@ -544,7 +543,7 @@ icon: "chart-bar"
544
543
|`test-util-types-exists.js`| require('util/types') subpath import not supported by sandbox module system |
545
544
|`test-websocket.js`| WebSocket global is not defined in sandbox — Node.js 22 added WebSocket as a global but the sandbox does not expose it |
546
545
|`test-webstream-readable-from.js`| ReadableStream.from() static method not implemented in sandbox WebStreams polyfill — added in Node.js 20 and not available globally in sandbox |
547
-
|`test-webstreams-clone-unref.js`| structuredClone({transfer: [stream] }) for ReadableStream/WritableStream not supported in sandbox — transferable stream structured clone not implemented |
546
+
|`test-webstreams-clone-unref.js`| structuredClone(\{ transfer: [stream]\}) for ReadableStream/WritableStream not supported in sandbox — transferable stream structured clone not implemented |
548
547
|`test-zlib-brotli-16GB.js`| getDefaultHighWaterMark() not exported from readable-stream v3 polyfill — test also relies on native zlib BrotliDecompress buffering behavior with _readableState internals |
549
548
|`test-buffer-constructor-outside-node-modules.js`| ReferenceError: document is not defined — test uses browser DOM API not available in sandbox |
550
549
|`test-child-process-fork.js`| child_process.fork is not supported in sandbox |
@@ -554,7 +553,7 @@ icon: "chart-bar"
554
553
|`test-fs-watchfile-ref-unref.js`| fs.watchFile not supported in sandbox |
555
554
|`test-fs-write-stream-file-handle-2.js`| fs.promises.open (FileHandle API) not implemented |
556
555
557
-
</details>
556
+
</Accordion>
558
557
559
558
### requires-v8-flags (239 entries)
560
559
@@ -566,7 +565,7 @@ icon: "chart-bar"
566
565
567
566
-`test-permission-*.js` — spawns child Node.js process via process.execPath — sandbox does not provide a real node binary
568
567
569
-
<details><summary>172 individual tests</summary>
568
+
<Accordiontitle="172 individual tests">
570
569
571
570
| Test | Reason |
572
571
| --- | --- |
@@ -743,17 +742,17 @@ icon: "chart-bar"
743
742
|`test-webstorage.js`| spawns child Node.js process via process.execPath — sandbox does not provide a real node binary |
744
743
|`test-windows-failed-heap-allocation.js`| spawns child Node.js process via process.execPath — sandbox does not provide a real node binary |
745
744
746
-
</details>
745
+
</Accordion>
747
746
748
747
### security-constraint (1 entries)
749
748
750
-
<details><summary>1 individual test</summary>
749
+
<Accordiontitle="1 individual test">
751
750
752
751
| Test | Reason |
753
752
| --- | --- |
754
753
|`test-process-binding-internalbinding-allowlist.js`| process.binding is not supported in sandbox (security constraint) |
755
754
756
-
</details>
755
+
</Accordion>
757
756
758
757
### test-infra (22 entries)
759
758
@@ -762,7 +761,7 @@ icon: "chart-bar"
762
761
-`test-runner-*.js` — Node.js test runner infrastructure — not runtime behavior
763
762
-`test-eslint-*.js` — ESLint integration tests — Node.js CI tooling, not runtime
764
763
765
-
<details><summary>20 individual tests</summary>
764
+
<Accordiontitle="20 individual tests">
766
765
767
766
| Test | Reason |
768
767
| --- | --- |
@@ -787,23 +786,23 @@ icon: "chart-bar"
787
786
|`test-worker-messaging-errors-handler.js`| passes in sandbox — overrides glob pattern |
788
787
|`test-worker-messaging-errors-invalid.js`| passes in sandbox — overrides glob pattern |
789
788
790
-
</details>
789
+
</Accordion>
791
790
792
791
### native-addon (3 entries)
793
792
794
-
<details><summary>3 individual tests</summary>
793
+
<Accordiontitle="3 individual tests">
795
794
796
795
| Test | Reason |
797
796
| --- | --- |
798
797
|`test-http-parser-timeout-reset.js`| uses process.binding() or native addons — not available in sandbox |
799
798
|`test-internal-process-binding.js`| uses process.binding() or native addons — not available in sandbox |
800
799
|`test-process-binding-util.js`| uses process.binding() or native addons — not available in sandbox |
801
800
802
-
</details>
801
+
</Accordion>
803
802
804
803
### vacuous-skip (34 entries)
805
804
806
-
<details><summary>34 individual tests</summary>
805
+
<Accordiontitle="34 individual tests">
807
806
808
807
| Test | Reason |
809
808
| --- | --- |
@@ -842,4 +841,4 @@ icon: "chart-bar"
842
841
|`test-fs-utimes-y2K38.js`| vacuous pass — test self-skips because child_process.spawnSync(touch) fails in sandbox |
843
842
|`test-tick-processor-arguments.js`| vacuous pass — test self-skips because common.enoughTestMem is undefined in sandbox shim |
Copy file name to clipboardExpand all lines: docs/posix-compatibility.md
+5-3Lines changed: 5 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,14 @@
1
-
# POSIX Compatibility
1
+
---
2
+
title: POSIX Compatibility
3
+
---
2
4
3
5
> **This is a living document.** Update it when kernel, WasmVM, Node bridge, or Python bridge behavior changes for any POSIX-relevant feature.
4
6
5
-
> **Looking for automated test results?** See the [POSIX Conformance Report](posix-conformance-report.mdx) for os-test suite results with per-suite pass rates and exclusion details.
7
+
> **Looking for automated test results?** See the [POSIX Conformance Report](posix-conformance-report) for os-test suite results with per-suite pass rates and exclusion details.
6
8
7
9
This document tracks how closely the secure-exec kernel, runtimes, and bridges conform to POSIX and Linux behavior. The goal is full POSIX compliance 1:1 — every syscall, signal, and shell behavior should match a real Linux system unless an architectural constraint makes it impossible.
8
10
9
-
For command-level support (ls, grep, awk, etc.), see [WasmVM Supported Commands](wasmvm/supported-commands.md). For Node.js API compatibility (fs, http, crypto modules), see [Node.js Compatibility](nodejs-compatibility.mdx). For Python API compatibility, see [Python Compatibility](python-compatibility.mdx).
11
+
For command-level support (ls, grep, awk, etc.), see [WasmVM Supported Commands](wasmvm/supported-commands.md). For Node.js API compatibility (fs, http, crypto modules), see [Node.js Compatibility](nodejs-compatibility). For Python API compatibility, see [Python Compatibility](python-compatibility).
|`basic/sys_statvfs/fstatvfs`| fstatvfs() not part of WASI — no filesystem statistics interface |[#34](https://github.com/rivet-dev/secure-exec/issues/34)|
51
-
|`basic/sys_statvfs/statvfs`| statvfs() not part of WASI — no filesystem statistics interface |[#34](https://github.com/rivet-dev/secure-exec/issues/34)|
49
+
|`basic/sys_statvfs/fstatvfs`| fstatvfs() not part of WASI — no filesystem statistics interface |[#48](https://github.com/rivet-dev/secure-exec/issues/48)|
50
+
|`basic/sys_statvfs/statvfs`| statvfs() not part of WASI — no filesystem statistics interface |[#48](https://github.com/rivet-dev/secure-exec/issues/48)|
Copy file name to clipboardExpand all lines: docs/runtimes/node.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -63,7 +63,7 @@ const runtime = new NodeRuntime({
63
63
These exports are also available from `@secure-exec/nodejs`.
64
64
</Note>
65
65
66
-
By default, all runtimes share a single V8 child process. You can pass a dedicated `V8Runtime` handle via `createNodeRuntimeDriverFactory({ v8Runtime })` to control crash blast radius and resource partitioning. See [Process Isolation](/process-isolation) for topology options and trade-offs.
66
+
By default, all runtimes share a single V8 child process. You can pass a dedicated `V8Runtime` handle via `createNodeRuntimeDriverFactory({ v8Runtime })` to control crash blast radius and resource partitioning. See [Process Isolation](/features/process-isolation) for topology options and trade-offs.
0 commit comments