@hypen-space/cli
Hypen CLI - Create and manage Hypen applications
Supply chain provenance
Status for the latest visible version.
Without SLSA provenance there is no cryptographic link between this tarball and the public source — the axios compromise (March 2026) relied on exactly this gap.
Maintainers
Keywords
Accepted risks
Findings the reviewer chose to accept rather than block on.
| Source | Rule | Reason | Accepted by | When |
|---|---|---|---|---|
| phantom-deps | phantom-dep:@babel/runtime | AI (phantom-deps): Framework-scoped runtime dep loaded by convention, not direct import. | ai | |
| semgrep | semgrep:shady-links-raw-ip | AI (semgrep): 127.0.0.1 is a localhost sidecar health-check URL, not an external raw-IP connection. | ai | |
| semgrep | semgrep:etc-passwd-access | AI (semgrep): Hit is inside a comment explaining path traversal prevention, not actual /etc/passwd access. | ai | |
| install-scripts | install-script:postinstall | AI (install-scripts): Postinstall only runs `bun install` in a sub-directory; no arbitrary code fetch or execution. | ai | |
| semgrep | semgrep:env-spread | AI (semgrep): env spread used to pass environment to a spawned shell process — standard and expected for a CLI/terminal tool. | ai | |
| semgrep | semgrep:new-function-constructor | AI (semgrep): Used in a live-preview sandbox to execute user-authored module code; expected pattern for this tool. | ai | |
| phantom-deps | phantom-dep:bun-plugin-tailwind | AI (phantom-deps): Config-file reference only; stable false positive for this package. | ai | |
| phantom-deps | phantom-dep:tw-animate-css | AI (phantom-deps): Config-file reference only; stable false positive for this package. | ai | |
| phantom-deps | phantom-dep:tailwindcss | AI (phantom-deps): Config-file reference only; not a real missing import for this CLI package. | ai | |
| typosquat | typosquat.levenshtein:joi | AI (typosquat): Scoped org package @hypen-space/cli; Levenshtein match to 'joi' is a false positive with no brand impersonation intent. | ai | |
| phantom-deps | phantom-dep:@hypen-space/web | AI (phantom-deps): Same org scope; likely a peer/optional dep, not a malicious phantom dependency. | ai |
Versions (showing 14 of 14)
| Version | Deps | Published |
|---|---|---|
| 0.4.948 | 23 / 3 | |
| 0.4.941 | 22 / 3 | |
| 0.4.91 | 9 / 3 | |
| 0.4.45 | 9 / 3 | |
| 0.4.35 | 7 / 3 | |
| 0.4.31 | 7 / 3 | |
| 0.4.24 | 6 / 3 | |
| 0.4.12 | 3 / 6 | |
| 0.4.11 | 3 / 6 | |
| 0.4.5 | 3 / 6 | |
| 0.4.3 | 3 / 6 | |
| 0.4.1 | 6 / 3 | |
| 0.4.0 | 6 / 3 | |
| 0.3.8 | 3 / 3 |
v0.4.948
7 findingsAccessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/hypen-lang/hypen-engine-rs/blob/4cef45028c519ab9a0fb146fa6c79209284964c8/src/dev-bun.ts#L328 326 | // Serve static files from project 327 | if (pathname.endsWith(".ts") || pathname.endsWith(".js")) { > 328 | // Normalize pathname to prevent path traversal (e.g., /../../../etc/passwd) 329 | const safePath = normalize(pathname).replace(/^(\.\.[/\\])+/, ""); 330 |
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/hypen-lang/hypen-engine-rs/blob/4cef45028c519ab9a0fb146fa6c79209284964c8/src/dev-node.ts#L264 262 | // Serve static files from components directory 263 | if (pathname.endsWith(".ts") || pathname.endsWith(".js")) { > 264 | // Normalize pathname to prevent path traversal (e.g., /../../../etc/passwd) 265 | const safePath = normalize(pathname).replace(/^(\.\.[/\\])+/, ""); 266 |
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/4cef45028c519ab9a0fb146fa6c79209284964c8/src/studio/run-scripts.ts#L100 98 | stdout: "pipe", 99 | stderr: "pipe", > 100 | env: { ...process.env }, 101 | }); 102 |
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/4cef45028c519ab9a0fb146fa6c79209284964c8/src/studio/server.ts#L136 134 | iosStreamerProc = Bun.spawn({ 135 | cmd, > 136 | env: { ...process.env }, 137 | stdout: "inherit", 138 | stderr: "inherit",
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/4cef45028c519ab9a0fb146fa6c79209284964c8/src/studio/server.ts#L164 162 | cmd: ["bun", "--hot", "--preload", resolve(studioUiPath, "hypen-preload.ts"), studioServerPath], 163 | cwd: studioUiPath, > 164 | env: { 165 | ...process.env, 166 | // Bun.serve `development` (Tailwind/HMR) is off when NODE_ENV=production; shells often
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/4cef45028c519ab9a0fb146fa6c79209284964c8/studio-ui/src/index.tsx#L888 886 | const proc = Bun.spawn([shell, "-li"], { 887 | cwd: projectDir, > 888 | env: { 889 | ...process.env, 890 | TERM: "xterm-256color",
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.941
6 findingsAccessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/hypen-lang/hypen-engine-rs/blob/a99727aabe346913b5eccf4f6da7517ab4bfdce6/src/dev-bun.ts#L328 326 | // Serve static files from project 327 | if (pathname.endsWith(".ts") || pathname.endsWith(".js")) { > 328 | // Normalize pathname to prevent path traversal (e.g., /../../../etc/passwd) 329 | const safePath = normalize(pathname).replace(/^(\.\.[/\\])+/, ""); 330 |
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux Source: https://github.com/hypen-lang/hypen-engine-rs/blob/a99727aabe346913b5eccf4f6da7517ab4bfdce6/src/dev-node.ts#L264 262 | // Serve static files from components directory 263 | if (pathname.endsWith(".ts") || pathname.endsWith(".js")) { > 264 | // Normalize pathname to prevent path traversal (e.g., /../../../etc/passwd) 265 | const safePath = normalize(pathname).replace(/^(\.\.[/\\])+/, ""); 266 |
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/a99727aabe346913b5eccf4f6da7517ab4bfdce6/src/studio/server.ts#L136 134 | iosStreamerProc = Bun.spawn({ 135 | cmd, > 136 | env: { ...process.env }, 137 | stdout: "inherit", 138 | stderr: "inherit",
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/a99727aabe346913b5eccf4f6da7517ab4bfdce6/src/studio/server.ts#L164 162 | cmd: ["bun", "--hot", "--preload", resolve(studioUiPath, "hypen-preload.ts"), studioServerPath], 163 | cwd: studioUiPath, > 164 | env: { 165 | ...process.env, 166 | // Bun.serve `development` (Tailwind/HMR) is off when NODE_ENV=production; shells often
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/a99727aabe346913b5eccf4f6da7517ab4bfdce6/studio-ui/src/index.tsx#L664 662 | const proc = Bun.spawn([shell, "-li"], { 663 | cwd: projectDir, > 664 | env: { 665 | ...process.env, 666 | TERM: "xterm-256color",
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.91
3 findingsScript: cd studio-ui && bun install
Spreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/f58bfb55e9f4a9ce3ac30e51cb9f4c8ec8898ffc/studio-ui/src/index.tsx#L655 653 | const proc = Bun.spawn([shell, "-li"], { 654 | cwd: projectDir, > 655 | env: { 656 | ...process.env, 657 | TERM: "xterm-256color",
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.45
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/8dedf14be82e745a418a39ee2573fe18fdcc5b59/studio-ui/src/index.tsx#L522 520 | const proc = Bun.spawn([shell, "-li"], { 521 | cwd: projectDir, > 522 | env: { 523 | ...process.env, 524 | TERM: "xterm-256color",
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.35
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/e901e167e88e54464bdd5a0bef1bdc9e46af9665/studio-ui/src/index.tsx#L387 385 | const proc = Bun.spawn([shell, "-li"], { 386 | cwd: projectDir, > 387 | env: { 388 | ...process.env, 389 | TERM: "xterm-256color",
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.31
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/hypen-lang/hypen-engine-rs/blob/4ad7758f4f8a5daf2cdf41bc24e16dcbf327a641/studio-ui/src/index.tsx#L387 385 | const proc = Bun.spawn([shell, "-li"], { 386 | cwd: projectDir, > 387 | env: { 388 | ...process.env, 389 | TERM: "xterm-256color",
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.24
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.12
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.11
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.5
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.3
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.1
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.4.0
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.3.8
1 findingPackage was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.