Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
6e27a95
feat: US-001 - Scaffold Rust crate with dependencies and module stubs
NathanFlurry Mar 19, 2026
c242e41
chore: update progress for US-001
NathanFlurry Mar 19, 2026
f95d4dc
feat: US-002 - Define IPC message types as Rust structs with serde
NathanFlurry Mar 19, 2026
9bed461
chore: update progress for US-002
NathanFlurry Mar 19, 2026
cd58d50
feat: US-003 - Implement length-prefixed MessagePack framing
NathanFlurry Mar 19, 2026
0b62a3f
chore: update progress for US-003
NathanFlurry Mar 19, 2026
2ebfd07
feat: US-004 - Implement V8 platform init and isolate lifecycle
NathanFlurry Mar 19, 2026
5daa785
chore: update progress for US-004
NathanFlurry Mar 19, 2026
0e244f9
feat: US-005 - Implement UDS listener with socket path security
NathanFlurry Mar 19, 2026
3645a6e
chore: update progress for US-005
NathanFlurry Mar 19, 2026
47acd04
feat: US-006 - Implement connection authentication handshake
NathanFlurry Mar 19, 2026
555bc3b
chore: update progress for US-006
NathanFlurry Mar 19, 2026
d91dbab
feat: US-007 - Implement session management (create/destroy)
NathanFlurry Mar 19, 2026
689310e
chore: update progress for US-007
NathanFlurry Mar 19, 2026
2a592fc
feat: US-008 - Implement InjectGlobals and V8 context hardening
NathanFlurry Mar 19, 2026
2b75e54
chore: update progress for US-008
NathanFlurry Mar 19, 2026
30ba7db
feat: US-009 - Implement sync-blocking bridge call host functions
NathanFlurry Mar 19, 2026
079a514
chore: update progress for US-009
NathanFlurry Mar 19, 2026
1fd5257
feat: US-010 - Implement async promise-returning bridge calls
NathanFlurry Mar 19, 2026
9bb1341
chore: update progress for US-010
NathanFlurry Mar 19, 2026
d92663d
feat: US-011 - Implement CJS script compilation and execution
NathanFlurry Mar 19, 2026
502fada
chore: update progress for US-011
NathanFlurry Mar 19, 2026
d96f1f2
feat: US-012 - Implement ESM module loading with ResolveModuleCallback
NathanFlurry Mar 19, 2026
ac9ff04
chore: update progress for US-012
NathanFlurry Mar 19, 2026
5531874
feat: US-013 - Implement session event loop
NathanFlurry Mar 19, 2026
794cf8b
feat: US-014 - Implement streaming event dispatch (child process, HTTP)
NathanFlurry Mar 19, 2026
b2ee81a
chore: update progress for US-014
NathanFlurry Mar 19, 2026
183bf3b
feat: US-015 - Implement timeout enforcement with timer thread
NathanFlurry Mar 19, 2026
1cbe81e
chore: update progress for US-015
NathanFlurry Mar 19, 2026
1e820b0
feat: US-016 - Implement structured error serialization from TryCatch
NathanFlurry Mar 19, 2026
65b6fb7
chore: update progress for US-016
NathanFlurry Mar 19, 2026
17c0625
feat: US-017 - Implement FD hygiene in Rust process
NathanFlurry Mar 19, 2026
9dda665
chore: update progress for US-017
NathanFlurry Mar 19, 2026
00cfae2
feat: US-018 - Scaffold @secure-exec/v8 npm package
NathanFlurry Mar 19, 2026
f66fa8b
chore: update progress for US-018
NathanFlurry Mar 19, 2026
cbe9142
feat: US-019 - Implement JS-side IPC client with MessagePack framing
NathanFlurry Mar 19, 2026
3540130
chore: update progress for US-019
NathanFlurry Mar 19, 2026
f1bf45e
feat: US-020 - Implement JS-side process spawning and lifecycle
NathanFlurry Mar 19, 2026
2a3c789
chore: update progress for US-020
NathanFlurry Mar 19, 2026
df05f5b
feat: US-021 - Implement JS-side session abstraction
NathanFlurry Mar 19, 2026
85e5191
chore: update progress for US-021
NathanFlurry Mar 19, 2026
88ee9cb
feat: US-022 - Update NodeExecutionDriver to use @secure-exec/v8
NathanFlurry Mar 19, 2026
4015780
chore: update progress for US-022
NathanFlurry Mar 19, 2026
cba7114
feat: US-023 - Update bridge-contract.ts to remove ivm.Reference types
NathanFlurry Mar 19, 2026
78f059d
chore: update progress for US-023
NathanFlurry Mar 19, 2026
7076c00
feat: US-025 - Remove base64 encoding for binary transfers
NathanFlurry Mar 19, 2026
6d3312e
chore: update progress for US-025
NathanFlurry Mar 19, 2026
40d5216
feat: US-026 - Set up platform-specific npm packages for prebuilt bin…
NathanFlurry Mar 19, 2026
947d291
chore: update progress for US-026
NathanFlurry Mar 19, 2026
08fd7a7
feat: US-027 - Add Rust build to CI matrix
NathanFlurry Mar 19, 2026
b410f85
chore: update progress for US-027
NathanFlurry Mar 19, 2026
a961111
feat: US-028 - Remove isolated-vm dependency
NathanFlurry Mar 19, 2026
7be2644
chore: update progress for US-028
NathanFlurry Mar 19, 2026
5122430
feat: US-029 - Add integration tests for full IPC round-trip
NathanFlurry Mar 19, 2026
6902c5c
chore: update progress for US-029
NathanFlurry Mar 19, 2026
e1d249f
feat: US-030 - Add crash isolation tests
NathanFlurry Mar 19, 2026
21d229a
chore: update progress for US-030
NathanFlurry Mar 19, 2026
b6ac873
feat: US-031 - Add IPC security tests
NathanFlurry Mar 19, 2026
c9990e7
chore: update progress for US-031
NathanFlurry Mar 19, 2026
fbe2da5
feat: US-032 - Update security model documentation
NathanFlurry Mar 19, 2026
22a0865
chore: update progress for US-032
NathanFlurry Mar 19, 2026
1a58f04
feat: US-033 - Run existing test suite against new V8 runtime
NathanFlurry Mar 19, 2026
32c9f37
chore: update progress for US-033
NathanFlurry Mar 19, 2026
64e5881
feat: US-034 - Add V8 ValueSerializer/ValueDeserializer wrappers in b…
NathanFlurry Mar 19, 2026
3712588
chore: update progress for US-034
NathanFlurry Mar 19, 2026
5ed9fa1
feat: US-035 - Add binary header encoder/decoder module in Rust
NathanFlurry Mar 19, 2026
c604aa3
chore: update progress for US-035
NathanFlurry Mar 19, 2026
d9889fe
feat: US-036 - Add binary header encoder/decoder module in TypeScript
NathanFlurry Mar 19, 2026
5af9df8
chore: update progress for US-036
NathanFlurry Mar 19, 2026
971317b
feat: US-037 - Switch IPC pipeline to binary header + V8 serialization
NathanFlurry Mar 19, 2026
c46dbc2
feat: US-038 - Eliminate ChannelMessageReader re-serialization
NathanFlurry Mar 19, 2026
c52aabf
chore: update progress for US-038
NathanFlurry Mar 19, 2026
c5a8398
feat: US-039 - Remove MessagePack dependencies and dead code
NathanFlurry Mar 19, 2026
6a5340a
chore: update progress for US-039
NathanFlurry Mar 19, 2026
ad4ebeb
feat: US-040 - Verify all tests pass with new serialization pipeline
NathanFlurry Mar 19, 2026
98a5171
chore: update progress for US-040
NathanFlurry Mar 19, 2026
6fcfe0c
feat: US-041 - Add V8 code caching for bridge code compilation
NathanFlurry Mar 19, 2026
e24ea56
chore: update progress for US-041
NathanFlurry Mar 19, 2026
b185fe8
feat: US-042 - Cache bridge code on Rust side to skip resending over IPC
NathanFlurry Mar 19, 2026
f8ebea5
chore: update progress for US-042
NathanFlurry Mar 19, 2026
ae36c20
feat: US-043 - Improve IPC client buffer management
NathanFlurry Mar 19, 2026
0f2ad2c
chore: update progress for US-043
NathanFlurry Mar 19, 2026
01622a1
feat: US-044 - Replace accept loop polling with poll(2)
NathanFlurry Mar 19, 2026
4c53a1c
chore: update progress for US-044
NathanFlurry Mar 19, 2026
dd5cb4a
feat: US-045 - Remove JSON double-serialization in bridge handlers
NathanFlurry Mar 19, 2026
3e4373b
chore: update progress for US-045
NathanFlurry Mar 19, 2026
6e94327
feat: US-046 - Reduce SharedWriter mutex contention with per-session …
NathanFlurry Mar 19, 2026
4284aff
chore: update progress for US-046
NathanFlurry Mar 19, 2026
dc14d04
feat: US-047 - Batch module resolution to reduce IPC round-trips
NathanFlurry Mar 20, 2026
2eb0b8c
chore: update progress for US-047
NathanFlurry Mar 20, 2026
91109e4
feat: US-048 - Pre-allocate V8 serialization buffers per session
NathanFlurry Mar 20, 2026
c068657
chore: update progress for US-048
NathanFlurry Mar 20, 2026
5699b64
feat: US-049 - Add v8Runtime option to createNodeRuntimeDriverFactory
NathanFlurry Mar 20, 2026
c6db7fa
chore: update progress for US-049
NathanFlurry Mar 20, 2026
3db5dde
feat: US-050 - Add process isolation integration tests
NathanFlurry Mar 20, 2026
59c07f6
chore: update progress for US-050
NathanFlurry Mar 20, 2026
338e59d
feat: US-051 - Add process isolation documentation page
NathanFlurry Mar 20, 2026
74e4905
chore: update progress for US-051
NathanFlurry Mar 20, 2026
33ab412
feat: US-052 - Add ExternalReferences and snapshot creation/restore f…
NathanFlurry Mar 20, 2026
528cb76
chore: update progress for US-052
NathanFlurry Mar 20, 2026
d6441c3
feat: US-053 - Add thread-safe SnapshotCache with LRU eviction
NathanFlurry Mar 20, 2026
7cfc25d
chore: update progress for US-053
NathanFlurry Mar 20, 2026
f3d1146
feat: US-054 - Add WarmSnapshot IPC message type
NathanFlurry Mar 20, 2026
e5033c2
chore: update progress for US-054
NathanFlurry Mar 20, 2026
6201fd5
feat: US-055 - Wire SnapshotCache into session thread and connection …
NathanFlurry Mar 20, 2026
8b4068e
chore: update progress for US-055
NathanFlurry Mar 20, 2026
34bf1fc
feat: US-056 - Add eager snapshot warm-up on module load
NathanFlurry Mar 20, 2026
7216425
chore: update progress for US-056
NathanFlurry Mar 20, 2026
0551db4
feat: US-057 - Add snapshot security and integration tests
NathanFlurry Mar 20, 2026
e68476f
chore: update progress for US-057
NathanFlurry Mar 20, 2026
61f5c14
feat: US-058 - Record context snapshot benchmark baseline (before)
NathanFlurry Mar 20, 2026
b3b2a10
feat: US-059 - Fix setupFsFacade to use getter-based delegation
NathanFlurry Mar 20, 2026
b7215c4
chore: update progress for US-059
NathanFlurry Mar 20, 2026
875b0cf
feat: US-060 - Defer config-dependent bridge setup to post-restore init
NathanFlurry Mar 20, 2026
3ba2f76
chore: update progress for US-060
NathanFlurry Mar 20, 2026
5720d40
feat: US-069 - Fix IPC binary frame length guards and fnv1aHash (Type…
NathanFlurry Mar 20, 2026
bb5480d
feat: US-070 - Fix IPC binary frame length guards (Rust)
NathanFlurry Mar 20, 2026
a1e283e
feat: US-071 - Add bounded IPC channels with backpressure
NathanFlurry Mar 20, 2026
4e2b19a
chore: update progress for US-071
NathanFlurry Mar 20, 2026
4dac616
feat: US-072 - Fix auth token comparison and socket directory security
NathanFlurry Mar 20, 2026
40c9741
chore: update progress for US-072
NathanFlurry Mar 20, 2026
1e5a0d4
feat: US-073 - Fix call_id overflow and accept error handling
NathanFlurry Mar 20, 2026
f7c0b26
chore: update progress for US-059
NathanFlurry Mar 20, 2026
12f22e4
feat: US-061 - Split composeBridgeCode into static and post-restore p…
NathanFlurry Mar 20, 2026
2acf5ef
chore: update progress for US-061
NathanFlurry Mar 20, 2026
653e53a
feat: US-062 - Add stub bridge context and registration for snapshot …
NathanFlurry Mar 20, 2026
74f8d8b
chore: update progress for US-062
NathanFlurry Mar 20, 2026
a034aef
feat: US-063 - Implement context snapshot creation with fully-initial…
NathanFlurry Mar 20, 2026
111b249
chore: update progress for US-063
NathanFlurry Mar 20, 2026
1b4d704
feat: US-064 - Implement context restore with bridge function replace…
NathanFlurry Mar 20, 2026
1c073c8
chore: update progress for US-064
NathanFlurry Mar 20, 2026
83b690a
feat: US-065 - Wire post-restore init script through IPC
NathanFlurry Mar 20, 2026
09e6e2b
chore: update progress for US-065
NathanFlurry Mar 20, 2026
826fdd3
feat: US-066 - Add context snapshot tests
NathanFlurry Mar 20, 2026
132f9e1
chore: update progress for US-066
NathanFlurry Mar 20, 2026
b046837
feat: US-067 - Verify context snapshot benchmark improvement (after)
NathanFlurry Mar 20, 2026
edab14b
feat: Docker build linux-x64 + release script platform package support
NathanFlurry Mar 20, 2026
e55d5dd
release: v0.1.1-rc.1
NathanFlurry Mar 20, 2026
4d5a835
fix: use --no-frozen-lockfile in release workflow for optional platfo…
NathanFlurry Mar 20, 2026
e819e75
fix: rename postinstall.js to .cjs for ESM package compat
NathanFlurry Mar 20, 2026
4067420
fix: add default export condition for CJS resolution compat
NathanFlurry Mar 20, 2026
2e06f8a
release: v0.1.1-rc.2
NathanFlurry Mar 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,31 @@ jobs:
registry-url: https://registry.npmjs.org

- name: Install dependencies
run: pnpm install --frozen-lockfile
run: pnpm install --no-frozen-lockfile

- name: Type check
run: pnpm turbo check-types

- name: Build
run: pnpm turbo build

- name: Build linux-x64 binary via Docker
run: |
cd crates/v8-runtime
docker build -f docker/Dockerfile.linux-x64-gnu -o type=local,dest=npm/linux-x64-gnu .

- name: Publish to npm
run: |
FAILURES=""

# Publish workspace packages
for dir in $(pnpm -r ls --json --depth -1 | jq -r '.[] | select(.private != true) | .path'); do
# Skip the root package
if [ "$dir" = "$(pwd)" ]; then
continue
fi
NAME=$(jq -r .name "$dir/package.json")
VERSION="${{ inputs.version }}"
# Skip if already published
if npm view "${NAME}@${VERSION}" version >/dev/null 2>&1; then
echo "⏭ ${NAME}@${VERSION} already published, skipping."
continue
Expand All @@ -72,6 +78,24 @@ jobs:
FAILURES="${FAILURES} ${NAME}"
fi
done

# Publish v8 platform packages (not in pnpm workspace)
for dir in crates/v8-runtime/npm/*/; do
if [ ! -f "$dir/package.json" ]; then
continue
fi
NAME=$(jq -r .name "$dir/package.json")
VERSION="${{ inputs.version }}"
if npm view "${NAME}@${VERSION}" version >/dev/null 2>&1; then
echo "⏭ ${NAME}@${VERSION} already published, skipping."
continue
fi
echo "Publishing ${NAME}@${VERSION}..."
if ! (cd "$dir" && npm publish --access public --tag ${{ inputs.npm-tag }}); then
FAILURES="${FAILURES} ${NAME}"
fi
done

if [ -n "$FAILURES" ]; then
echo "::error::Failed to publish:${FAILURES}"
exit 1
Expand Down
100 changes: 100 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: Rust

on:
push:
branches:
- main
paths:
- "crates/v8-runtime/**"
- ".github/workflows/rust.yml"
pull_request:
branches:
- main
paths:
- "crates/v8-runtime/**"
- ".github/workflows/rust.yml"

jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
npm-dir: linux-x64-gnu
binary: secure-exec-v8
test: true
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
npm-dir: linux-arm64-gnu
binary: secure-exec-v8
cross: true
- target: x86_64-apple-darwin
os: macos-13
npm-dir: darwin-x64
binary: secure-exec-v8
test: true
- target: aarch64-apple-darwin
os: macos-latest
npm-dir: darwin-arm64
binary: secure-exec-v8
test: true
- target: x86_64-pc-windows-msvc
os: windows-latest
npm-dir: win32-x64
binary: secure-exec-v8.exe
test: true
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: "1.85.0"
targets: ${{ matrix.target }}

- name: Cache Rust build artifacts
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
crates/v8-runtime/target
key: rust-${{ matrix.target }}-${{ hashFiles('crates/v8-runtime/Cargo.lock') }}
restore-keys: |
rust-${{ matrix.target }}-

# Cross-compilation toolchain for linux-arm64
- name: Install cross-compilation tools
if: matrix.cross
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

- name: Configure cross-compilation linker
if: matrix.cross
working-directory: crates/v8-runtime
run: |
mkdir -p .cargo
cat > .cargo/config.toml <<'EOF'
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
EOF

- name: Build
working-directory: crates/v8-runtime
run: cargo build --release --target ${{ matrix.target }}

- name: Run tests
if: matrix.test
working-directory: crates/v8-runtime
run: cargo test --release --target ${{ matrix.target }}

- name: Upload binary artifact
uses: actions/upload-artifact@v4
with:
name: v8-${{ matrix.npm-dir }}
path: crates/v8-runtime/target/${{ matrix.target }}/release/${{ matrix.binary }}
Loading
Loading