Files
sausage/userland/spawn/README.md
T
surma b9e3e3677d userland: search and exec tools, spawn library (T14)
rg (ripgrep 15.2), grep (ours, on ripgrep's regex crates), find and xargs
(ours), sed (uutils 0.3 wrapper), diff and cmp (uutils diffutils 0.6 with -r),
fd 10.5, jaq 2.3, env and timeout. userland/spawn is a small Command-like
client of the process interface. search-test.nu: 42 cases match native tools.
2026-11-06 17:21:51 +00:00

1.1 KiB

World process library

sausage-spawn starts WASI components through sausage:process/host@0.1.0. It uses wit-bindgen 0.46.0 and the canonical host/wit/process.wit. It adds no host interface.

use sausage_spawn::Command;
let status = Command::new("printenv").arg("FOO").env("FOO", "1").status()?;
assert_eq!(status, 0);
# Ok::<(), std::io::Error>(())

A command inherits the environment, cwd, and all three streams. Stdio::Pipe exposes the generated WASI stream resource on Child. Stdio::Null discards output or supplies EOF. Drop piped stdin to supply EOF. Drain both output pipes before wait to prevent a bounded-pipe deadlock. try_wait returns the numeric status when the child finishes. kill stops every process in the child's group through the process interface. Use Command::new_group before spawn when the caller must survive a child kill. timeout uses a separate child group. Drop does not kill the child.

Run nix develop -c nu userland/spawn/check-imports.nu to inspect the release components. The script keeps the complete WIT output and checks each import.