{"_id":"@earendil-works/gondolin","_rev":"21-f5dacc6668a4721adbcff23bc6a0e304","name":"@earendil-works/gondolin","dist-tags":{"latest":"0.12.0"},"versions":{"0.0.1":{"name":"@earendil-works/gondolin","version":"0.0.1","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"MIT","_id":"@earendil-works/gondolin@0.0.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"80a7e6bf053b51f059b33f18078dcc4e501c6223","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.0.1.tgz","fileCount":149,"integrity":"sha512-LQqbzS2aClCSKxRnjUvTFB7chnBW++8ioF8+BmiRrfhayLDZxRtRecbLoxrscSlKAWgaTTb1/3P8RaY/poDh2A==","signatures":[{"sig":"MEYCIQCah+YYFEV6qo0jPOx32MHA6IlHALVyHRpuzInMQY0y5AIhAPy2WrFPadDiLvQ+Pz41OqLl0O4JtiMfzQhNXCHw1SJK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1081359},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","require":"./dist/src/index.js"}},"gitHead":"02000171b67678d7e78be5cc421bfcb3e25d0937","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","dev:ws":"tsx bin/gondolin.ts ws-server","test:ws":"tsx --test test/ws.test.ts","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"25.0.0","dependencies":{"ws":"^8.18.0","cbor":"^10.0.4","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","@types/ws":"^8.5.12","typescript":"^5.7.3","@types/node":"^22.10.7","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.0.1_1770244252242_0.04556240408282686","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@earendil-works/gondolin","version":"0.1.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"MIT","_id":"@earendil-works/gondolin@0.1.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"855056e14cfd242665508ba2985a2b807ec24a40","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.1.0.tgz","fileCount":132,"integrity":"sha512-HRej8ELtA9CgyJ70vlGrPINwiP3OF5LU+2y8wwqQidPNhz7KBSsBSyjZ+jcaADdtWXkRoD5AZ9CkS/ggwb9/JA==","signatures":[{"sig":"MEQCIB2C24HDVjqaZqrttPcZkF8xGnDcaSirjwplnN0fD9AdAiAOliG5eJjUQ77BOmfS47rW+wan4JkYZQulo3ov0hYtyA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":941231},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","require":"./dist/src/index.js"}},"gitHead":"c26e060f589991fd3d4de79697f6198973a23698","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","dev:ws":"tsx bin/gondolin.ts ws-server","test:ws":"tsx --test test/ws.test.ts","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","cbor":"^10.0.4","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","@types/ws":"^8.5.12","typescript":"^5.7.3","@types/node":"^22.10.7","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.1.0_1770245784538_0.8010191954052679","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@earendil-works/gondolin","version":"0.1.1","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.1.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"404f7fd50c0ce9f1633b80fc41de439bbeefad1a","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.1.1.tgz","fileCount":133,"integrity":"sha512-beY4FtRxcOmIHGquqsU3KRu7RR4YiYbfGuKi9teYz8qz4G8S9KR/LfY4Ox0fd8gRTjS1c5Q0+NHZrO8DOubZ3Q==","signatures":[{"sig":"MEQCIEvHADJypHqqWgCkHBrE5Gzx0iz9ZkCiB2W/2asRhRP1AiBUGGxRIgRfKwAoosjRw4BctEChFODT8n2L3e/Q3ns3Hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":953426},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","require":"./dist/src/index.js"}},"gitHead":"6898efcb9db9cf065d027c48537bec9bd2ae2011","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","dev:ws":"tsx bin/gondolin.ts ws-server","test:ws":"tsx --test test/ws.test.ts","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","cbor":"^10.0.4","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","@types/ws":"^8.5.12","typescript":"^5.7.3","@types/node":"^22.10.7","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.1.1_1770248745773_0.002885520974215572","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@earendil-works/gondolin","version":"0.1.2","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.1.2","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"7ccce174c6be09135f58f9516963bbf5c19710f2","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.1.2.tgz","fileCount":133,"integrity":"sha512-LA5SFQtrV2gmmzLwPayp9bUy/P4k88JORD5E7f+ZOZvLK1UzW9jpqsbsLpFame3kUpV+5BYMs9uW6ihNYTuGSg==","signatures":[{"sig":"MEUCIQCzNiVu188Jwdfnk+EwAfsIdTtFVosy47Bl2W8V5EVqLgIgES/MzeVMB2P6Cac22C2793Xahu0CuTTvkdQd1UiDhA0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":955083},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","require":"./dist/src/index.js"}},"gitHead":"fbb908dffe57f3c45c57de12bfaca6934c26831d","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","dev:ws":"tsx bin/gondolin.ts ws-server","test:ws":"tsx --test test/ws.test.ts","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","cbor":"^10.0.4","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","@types/ws":"^8.5.12","typescript":"^5.7.3","@types/node":"^22.10.7","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.1.2_1770249387051_0.9745102268808958","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@earendil-works/gondolin","version":"0.1.3","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.1.3","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"664b47412330220ce1e3fa999dd2b65e7db74b4f","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.1.3.tgz","fileCount":137,"integrity":"sha512-0+97o5dffpdGVerbBOQAHsaOvXAFF3TavS10r3j3lJI8micRbAW56pyBC3AOmTLpbzebMsyx/34G6xGLaIp2hg==","signatures":[{"sig":"MEYCIQC3yvJvWQ30OVjjjn/YAUoaTbNIhjfMNsJKMmzHSxg3IgIhAPOuE4igjOn/f02s9K3/AN55/+E6s4P81vJTVya+lsXZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":965112},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"61787950e582d345244adb0ae38c137064097816","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","dev:ws":"tsx bin/gondolin.ts ws-server","test:ws":"tsx --test test/ws.test.ts","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","cbor":"^10.0.4","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","@types/ws":"^8.5.12","typescript":"^5.7.3","@types/node":"^22.10.7","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.1.3_1770251645115_0.5739391606108875","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@earendil-works/gondolin","version":"0.2.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.2.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"8552ab927d98454698197ee8fffa22150a314e83","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.2.0.tgz","fileCount":145,"integrity":"sha512-r6mazTSsFvFwTvnIkLuTNm1TmCUUdJdDAWRZQcG5ywaJAAMydPKaUk0XGMVsYuUXwy63Xugd5mw2w8GVeyk6aQ==","signatures":[{"sig":"MEUCIQDRKH0+8LTWa5DbrdZIIepdct9ligwUufgKZ/O6LZA4JwIgWnbkUGbrtYRoDWf0aUAJvdtutVliCJuCYnW8xU7cGOo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1281584},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"8183ae0880b6a4eefa929452c663d1c29c222d6d","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cbor":"^10.0.4","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.10.7","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.2.0_1770474447176_0.060945906154974416","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@earendil-works/gondolin","version":"0.2.1","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.2.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"9487485508b6d50e016a8e45b1fd5ff6f722b6f6","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.2.1.tgz","fileCount":145,"integrity":"sha512-x//j4dhkmpUJN8J/ZbVXEbNCTuFOH8/WiYBXqrxBntFnL/pOw3yRVb4/myq0vHAdsFbLnRw1QOOBSHVhUmlMFA==","signatures":[{"sig":"MEUCIQCxd38dVtkSvzJlrsozpU6IoLwAQRkHPyVl/JxsTm+bYQIgUTeauH8KvyjVVsw9lFBNCbz7rKgz3hIKtQ1hYJgYWa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1283475},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"ed0459b0c633f0abb8a09710a07e7a52ad298081","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","test":"tsx --test test/*.test.ts","build":"tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cbor":"^10.0.4","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.10.7","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.2.1_1770476450428_0.0502324282620179","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@earendil-works/gondolin","version":"0.3.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.3.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"f0fc22a5ae5a5397b3c3cfceb0541fd3bc5a2754","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.3.0.tgz","fileCount":217,"integrity":"sha512-eoZaI0Fkx08RQrGZTmBJ6cUbdabPpcHpn+nkUc4oi1gSNrWUXYpyJlsFc0tJNDnEJMzkZQ4me+u8C/2Z1e9jDQ==","signatures":[{"sig":"MEQCIEtEd8KmepuRFRGMajXZoeUi93eVOS4TvlIjHX4xdkufAiBxXyLiGK3Oefa3+7ZELsgDSgN8OQo0ydCa6Th8DEsN6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1992052},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"563c10ee2a4d6cc6934cfa9238a3d43ae37df45e","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","fuzz":"tsx fuzz/cli.ts","test":"tsx --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.3.0_1771170413696_0.817318526123928","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@earendil-works/gondolin","version":"0.4.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.4.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"d083f698fb9270f655e67803e4827db918ef203b","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.4.0.tgz","fileCount":233,"integrity":"sha512-lXbes0lgVhladHErnqo1ezUAIW74tzGjid++IVFXO+yrMw/GdxoOHpgtO+0zerHAD/zomySgLR3YDhVg8G+pRA==","signatures":[{"sig":"MEUCIQD4Qz5XyFQ5K9Lu9hLYlUhXvfBqxeE3jmNk5yzkEwFL0gIgCc49l1Q6QueSw/sjkDw1nWx9NIbzgGL6FysOsbuKCIg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2092999},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"dbfc9be5a04631cc92087b2025576f2bf7754dc3","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","fuzz":"tsx fuzz/cli.ts","test":"tsx --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.4.0_1771407898896_0.9061311157602783","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@earendil-works/gondolin","version":"0.5.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.5.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"21cc16d496fe8e14ee94501150c9fd513a2b04fa","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.5.0.tgz","fileCount":241,"integrity":"sha512-bwBVWsyZc2/F576RLnPbjzSrldFlRYBnL3BOpUfedsh85hVTMInE4yRjgCkf+ClkJXjPujf7nPY6gwG4jodCzg==","signatures":[{"sig":"MEUCIFrsHQRyV9sCzD9ocj3HxMjOL1HjKHp0dzCOzucuiGAhAiEA5jGUG92Pq1d/E+hc1leLUYyAg6iaanxaStM+161QWlI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2161458},"main":"./dist/src/index.js","type":"commonjs","types":"./dist/src/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"c59e3bbdcde54bd8464fe4c63718c27738f98e7e","scripts":{"dev":"tsx bin/gondolin.ts exec","bash":"tsx bin/gondolin.ts bash","fuzz":"tsx fuzz/cli.ts","test":"tsx --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.json","start":"node dist/bin/gondolin.js exec","gondolin":"tsx bin/gondolin.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.6.2","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.5.0_1771542481304_0.6505105195258214","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@earendil-works/gondolin","version":"0.6.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.6.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"450ce9a06952d9b51ec69294d269a435a0e93e82","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.6.0.tgz","fileCount":315,"integrity":"sha512-tXYIFT+srTmX8klQWeUf/Sd2SC8Z2K0jqpfOBOzSBuDnUxF1gNPOCDuoFhYsDoOzD4ZU13SrtddYQpPzdSzA+w==","signatures":[{"sig":"MEYCIQDdnPDN2PU6lyDFfMHbP6A0kuFQqUdliHBDlrEYYjBX6wIhAPOb9gzOExaJ96Gww6/cu5keMjtase97lf2obQzHb6rP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2352781},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"b0e6eb8e8a7fe1ed2c21f5c188f164952e73e2f6","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.8.0","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.13.1","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.6.0_1772408885969_0.2251976872459882","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@earendil-works/gondolin","version":"0.7.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.7.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"c1fd22f1ba4b97b64242ea7ae4050c24bbaa92c0","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.7.0.tgz","fileCount":341,"integrity":"sha512-QtMa6zyTgTEsX4UetVs7+hEp09lSV4iLcPSpT9y51lnpO9Z7tR/IGc1RafEZw58ISDDAXmP21C2jcZyi5KMg3Q==","signatures":[{"sig":"MEYCIQDnJ4ziHvQevyDwB6A/mOt8BgmGuH6d3rGPkI2ExXWaiQIhAPKKU5T3D0q+0Opj8aXBW0DqW5z3TfT1ifcNK3S5J0Ku","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2728458},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"c9a37ff25d8a517dc0ce576a622d8685c2711fdc","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.9.0","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.14.0","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.7.0","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.7.0"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.7.0_1773958250165_0.7101931046250898","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@earendil-works/gondolin","version":"0.8.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.8.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"c4aca46cc3d9cfd66dcfc7e18b2f7a7f0e8fa82e","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.8.0.tgz","fileCount":341,"integrity":"sha512-SuOLwvWtp7QB+TRL09VgAYe3mTpPASrF5IdwM/9Ndj18bAU7I2uHeP9in1usOyQLfhEyfXsEEgwrhyuOCw3cpw==","signatures":[{"sig":"MEYCIQDGfHB44c2Uza4Ej60iJT933fFNLpdVXgVjfxSLKK6vrwIhAKnTJczzFjyVptqorm3b/mb0TP29sz09h8GnpJs8LW0m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2737093},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"},"./package.json":"./package.json"},"gitHead":"4b1316c0bdb4d6c552dadc6c1d5a5509b196f91e","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.11.0","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.8.0","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.8.0_1776763715592_0.9594603214206543","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@earendil-works/gondolin","version":"0.8.1","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.8.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"668666cdce47e970d833f0185ed825dbdc47f63b","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.8.1.tgz","fileCount":342,"integrity":"sha512-/GmmGmhAVBMO7g3TQyABRcjZDmBZaeO7tg173zTLjZ0grgDpETghyKdlBbEk+GxE9gnBYiHcJh6ze0X0sf2I5Q==","signatures":[{"sig":"MEYCIQCZcdbZrfpHOR6SC/9rW5wnX7fJD9CadF4g8O/ZPp3ESAIhAIFtjRb8Q5uQJsrMYY6yaOS7IE4Lnlsed43PahavIJJ2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2737188},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.cjs"},"./package.json":"./package.json"},"gitHead":"3af4d44525c99f1ebd4ace63a29a8a750feee451","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.11.0","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.8.1","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.8.1"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.8.1_1777993967160_0.46905622645242073","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@earendil-works/gondolin","version":"0.9.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.9.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"d781972ead6ef40381458e2ad7d0250044c0daf0","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.9.0.tgz","fileCount":347,"integrity":"sha512-sV2BwC1fOAinDnl3SX1vuV/Ys0hYlrUG2h0WjI0h05eQHns5kxwBKiHrfcn3ELRQrFRnXM1JUvqdgJY70gSNZA==","signatures":[{"sig":"MEUCICbpLITGhxOiuVhwX9HselZYmdanHmpSZH3OFP6CatemAiEAtqR9ahAPvA9z9fa/ThMPgFfPCSUxdgybgC+O2EpWUP8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2837274},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.cjs"},"./package.json":"./package.json"},"gitHead":"ea8b13bcb60cca14e51bba1875320885e2c099bb","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.11.0","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.9.0","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.9.0_1778142544299_0.5195335979622775","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@earendil-works/gondolin","version":"0.9.1","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.9.1","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"f66d7247680b1d6997cff290cf8f931041196720","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.9.1.tgz","fileCount":347,"integrity":"sha512-yg7AkbpmRWUyf+oBO4koFNVP1pC9p7hTFDIwuqomo5Iih685Q/7rfw7vVGA8mkTtHL82M+6Vy+dsnAT0FAfFvQ==","signatures":[{"sig":"MEYCIQDhF1J3nd39tNmYiBewdek1/iZoOpu1kHAdFkD9w/FBAwIhAOlzBus0WWOO4KbCa2OHrTC4CNaOszYtsXtkQ73hKkoZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2837278},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.cjs"},"./package.json":"./package.json"},"gitHead":"7a474052c83242f69a3ac28aa0e2feae26221385","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d9f5fb19-cfd8-42b1-a349-e449f1067c16"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.11.0","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.14.1","dependencies":{"cbor":"^10.0.4","ssh2":"^1.17.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.9.1","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.9.1"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.9.1_1778160003349_0.8304126437436297","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@earendil-works/gondolin","version":"0.10.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.10.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"1c8992407579a6c395f23629ec31a605f25f5a13","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.10.0.tgz","fileCount":347,"integrity":"sha512-Wdb5g33wHfHwbeOcdt5z6KIvgxV7mkfJuUoDtLkmxDjs5l/iEU6GNHJjym5ZOJG2LXPFgE2dUPtkic+Sg6abuQ==","signatures":[{"sig":"MEUCIFr3qD55b05/MTwfqLvRThihuQfpZ6csgf6rTUp67kIKAiEAvn25r7zV/CkRalqOf/gg5daaEkby5OcepONTkJr+iQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2874485},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.cjs"},"./package.json":"./package.json"},"gitHead":"42cd309aeb9a40c66358d4c5fb315e7070b1111d","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:66a793b1-0e3d-43df-8007-27c572ed6447"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.11.0","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ssh2":"^1.17.0","cbor2":"^2.3.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.10.0","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.10.0"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.10.0_1778669732336_0.9147874056236172","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@earendil-works/gondolin","version":"0.11.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.11.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"d4f44c9f60c027ddb510f39edecb80c21655fa9f","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.11.0.tgz","fileCount":347,"integrity":"sha512-I7ybipixOM6EERLM14YA27jrUXk+sEBGOv+t4957t/Pu5gf7uuyt3eB6XRJQxpNjqkQ2fyNa9Yg79LvN1GhLIw==","signatures":[{"sig":"MEYCIQDC9INMie9Eo24tjakeVSfZkvuPe+FeuFQO7FaQqfTzcgIhAPzOMkg0ublj8H/jKLSQFsFgixmx9VI6McXcCM3dVBGA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2911729},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.cjs"},"./package.json":"./package.json"},"gitHead":"debbfa40f8e99dad275445457143f97c215b5bc1","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:66a793b1-0e3d-43df-8007-27c572ed6447"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.12.1","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ssh2":"^1.17.0","cbor2":"^2.3.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.11.0","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.11.0_1779135357503_0.6670501971276224","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@earendil-works/gondolin","version":"0.12.0","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"license":"Apache-2.0","_id":"@earendil-works/gondolin@0.12.0","maintainers":[{"name":"mitsuhiko","email":"armin.ronacher@active-4.com"},{"name":"badlogic","email":"mario@badlogicgames.com"}],"homepage":"https://github.com/earendil-works/gondolin#readme","bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"bin":{"gondolin":"dist/bin/gondolin.js"},"dist":{"shasum":"19b48f4ac028af5599f9e847135e2ad027eed6e8","tarball":"https://registry.npmjs.org/@earendil-works/gondolin/-/gondolin-0.12.0.tgz","fileCount":347,"integrity":"sha512-BXbvzQKb5QmxY5NtthRDONJTu7+IDKbzqWGrJyyNXMP7N681Tx0Q9TK8pK1ba8nUvYQTipNJyGZOsJfYiZll1A==","signatures":[{"sig":"MEUCIHpGCOrJ+yOJBsWHe6XFSBdGX7rY/YcJqM9lkoiEv1KRAiEA7J7EuXqLVvdyx9qvMlRVjHlE6Fw5cSqX/J1D09oTdYw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@earendil-works%2fgondolin@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2913013},"main":"./dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","engines":{"node":">=23.6.0"},"exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js","require":"./dist/src/index.cjs"},"./package.json":"./package.json"},"gitHead":"628369764fcd2c987b4b99e5159ec90d4febe53a","scripts":{"dev":"node bin/gondolin.ts exec","bash":"node bin/gondolin.ts bash","fuzz":"node fuzz/cli.ts","test":"node --test test/*.test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && node ./scripts/postbuild.mjs","start":"node dist/bin/gondolin.js exec","gondolin":"node bin/gondolin.ts","dep:check":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs src","dep:graph":"pnpm dlx dependency-cruiser --config .dependency-cruiser.cjs --output-type dot src > /tmp/gondolin-host-deps.dot","prepublishOnly":"pnpm run build","test:backend-parity":"node --test test/backend-parity.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:66a793b1-0e3d-43df-8007-27c572ed6447"}},"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"_npmVersion":"11.12.1","description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ssh2":"^1.17.0","cbor2":"^2.3.0","undici":"^6.21.0","node-forge":"^1.3.3"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/ssh2":"^1.15.5","@types/node-forge":"^1.3.14"},"optionalDependencies":{"@earendil-works/gondolin-krun-runner-linux-x64":"0.12.0","@earendil-works/gondolin-krun-runner-darwin-arm64":"0.12.0"},"_npmOperationalInternal":{"tmp":"tmp/gondolin_0.12.0_1779189325698_0.38764087775588685","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-02-04T22:30:52.042Z","modified":"2026-05-27T20:47:36.708Z","0.0.1":"2026-02-04T22:30:52.387Z","0.1.0":"2026-02-04T22:56:24.752Z","0.1.1":"2026-02-04T23:45:45.984Z","0.1.2":"2026-02-04T23:56:27.277Z","0.1.3":"2026-02-05T00:34:05.297Z","0.2.0":"2026-02-07T14:27:27.364Z","0.2.1":"2026-02-07T15:00:50.692Z","0.3.0":"2026-02-15T15:46:53.879Z","0.4.0":"2026-02-18T09:44:59.448Z","0.5.0":"2026-02-19T23:08:01.484Z","0.6.0":"2026-03-01T23:48:06.161Z","0.7.0":"2026-03-19T22:10:50.371Z","0.8.0":"2026-04-21T09:28:35.885Z","0.8.1":"2026-05-05T15:12:47.356Z","0.9.0":"2026-05-07T08:29:04.479Z","0.9.1":"2026-05-07T13:20:03.635Z","0.10.0":"2026-05-13T10:55:32.532Z","0.11.0":"2026-05-18T20:15:57.694Z","0.12.0":"2026-05-19T11:15:25.916Z"},"bugs":{"url":"https://github.com/earendil-works/gondolin/issues"},"license":"Apache-2.0","homepage":"https://github.com/earendil-works/gondolin#readme","keywords":["sandbox","vm","qemu","alpine","linux","isolation","security"],"repository":{"url":"git+https://github.com/earendil-works/gondolin.git","type":"git","directory":"host"},"description":"Alpine Linux sandbox for running untrusted code with controlled filesystem and network access","maintainers":[{"email":"armin.ronacher@active-4.com","name":"mitsuhiko"},{"email":"mario@badlogicgames.com","name":"badlogic"},{"email":"r.wachtler@outlook.com","name":"rwachtler"}],"readme":"# Gondolin\n\n**Local Linux micro-VMs with a fully programmable network stack and filesystem.**\n\nGondolin runs lightweight micro-VMs on your Mac or Linux machine (QEMU by\ndefault, optional `krun` backend). The network stack and virtual filesystem are\nimplemented in TypeScript, giving you complete programmatic control over what\nthe sandbox can access and what secrets it can use.\n\n## Requirements\n\nYou need QEMU installed to run the micro-VMs (default backend):\n\n| macOS               | Linux (Debian/Ubuntu)              |\n| ------------------- | ---------------------------------- |\n| `brew install qemu` | `sudo apt install qemu-system-arm` |\n\nOptional experimental backend:\n\n- `libkrun` + `host/krun-runner` (`sandbox.vmm = \"krun\"`)\n- `make krun-runner` from repo root stages dependencies locally and builds the runner\n  - on macOS, it also ad-hoc signs the runner with `com.apple.security.hypervisor`\n  - Gondolin auto-detects this local runner for `--vmm krun`\n- `@earendil-works/gondolin` publishes platform-specific optional runner packages for supported targets (`darwin-arm64`, `linux-x64`)\n- krun boot assets are provided by image manifests (`assets.krunKernel` / `assets.krunInitrd`) produced by `gondolin build` and published image releases\n- `gondolin bash --vmm krun` selects the backend per-command\n- `GONDOLIN_VMM=krun` still works as a global default\n- backend parity matrix: [docs/backends.md](../docs/backends.md)\n\nLinux prerequisites for `make krun-runner` (Ubuntu/Debian):\n\n```bash\nsudo apt install \\\n  build-essential curl git make pkg-config clang lld xz-utils \\\n  libclang-dev llvm-dev libcap-ng-dev\n\n# libkrun needs current stable Rust (edition2024 crates)\ncurl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal\n. \"$HOME/.cargo/env\"\n\n# install Zig 0.16.0 for your Linux architecture\n```\n\n- Node.js >= 23.6\n\n> **Note:** Runtime validation is currently strongest on ARM64 (Apple Silicon, Linux aarch64).\n> Linux x86_64 is currently smoke-tested for `make krun-runner` in CI.\n\n## Installation\n\n```bash\nnpm install @earendil-works/gondolin\n```\n\n## Quick start (CLI)\n\n```bash\nnpx @earendil-works/gondolin bash\n```\n\nYou can also discover and re-attach to running VMs from another terminal:\n\n```bash\n# List running sessions\nnpx @earendil-works/gondolin list\n\n# Attach a second shell to a running VM by UUID/prefix\nnpx @earendil-works/gondolin attach <session-id>\n\n# Snapshot a running VM session (stops that session)\nnpx @earendil-works/gondolin snapshot <session-id>\n\n# Resume from snapshot id/path\nnpx @earendil-works/gondolin bash --resume <snapshot-id-or-path>\n```\n\nGuest images (~200MB) are automatically resolved on first run via\n`builtin-image-registry.json` and cached in `~/.cache/gondolin/images/`.\nIf no explicit image is provided, Gondolin uses `GONDOLIN_DEFAULT_IMAGE`\n(default: `alpine-base:latest`).\n\n## Hello world\n\n```ts\nimport { VM, createHttpHooks, MemoryProvider } from \"@earendil-works/gondolin\";\n\nconst { httpHooks, env } = createHttpHooks({\n  allowedHosts: [\"api.github.com\"],\n  secrets: {\n    GITHUB_TOKEN: {\n      hosts: [\"api.github.com\"],\n      value: process.env.GITHUB_TOKEN!,\n    },\n  },\n});\n\nconst vm = await VM.create({\n  httpHooks,\n  env,\n  vfs: {\n    mounts: { \"/workspace\": new MemoryProvider() },\n  },\n});\n\n// NOTE:\n// - `vm.exec(\"...\")` runs via `/bin/sh -lc \"...\"` (shell features work)\n// - `vm.exec([cmd, ...argv])` executes `cmd` directly and does not search `$PATH`\n//   so `cmd` must be an absolute path\nconst cmd = `\n  curl -sS -f \\\n    -H \"Accept: application/vnd.github+json\" \\\n    -H \"Authorization: Bearer $GITHUB_TOKEN\" \\\n    https://api.github.com/user\n`;\n\n// You can pass a string to `vm.exec(...)` as shorthand for `/bin/sh -lc \"...\"`.\nconst result = await vm.exec(cmd);\n\nconsole.log(\"exitCode:\", result.exitCode);\nconsole.log(\"stdout:\\n\", result.stdout);\nconsole.log(\"stderr:\\n\", result.stderr);\n\nawait vm.close();\n```\n\nThe guest never sees the real secret values. It only gets placeholders.\nPlaceholders are substituted by the host in outbound HTTP headers, including\n`Authorization: Basic …` (the base64 token is decoded and placeholders in\n`username:password` are replaced).\n\nBy default, placeholders in URL query parameters are not substituted. You can\nopt in with `replaceSecretsInQuery: true`, but this increases reflection\nrisk and should only be used when required.\n\n> **Note:** Avoid mounting a `MemoryProvider` at `/` unless you also provide a\n> system CA bundle. Gondolin injects its MITM CA at `/etc/gondolin/mitm/ca.crt`,\n> but if your root mount hides distro CA files then public TLS verification can\n> still fail (e.g. `curl: (60)`).\n\n## Outbound SSH host allowlist\n\nSSH egress can be enabled with an explicit host allowlist:\n\n```ts\nconst vm = await VM.create({\n  dns: {\n    mode: \"synthetic\",\n    syntheticHostMapping: \"per-host\",\n  },\n  ssh: {\n    allowedHosts: [\"github.com\"],\n\n    // Upstream host key verification\n    //\n    // If `hostVerifier` is not provided, gondolin verifies upstream host keys using\n    // OpenSSH known_hosts (by default: ~/.ssh/known_hosts and /etc/ssh/ssh_known_hosts).\n    // You can override this with `knownHostsFile`.\n    // knownHostsFile: \"/path/to/known_hosts\",\n\n    // Option A: use an ssh-agent (recommended for encrypted keys)\n    agent: process.env.SSH_AUTH_SOCK,\n\n    // Option B: provide a raw private key\n    credentials: {\n      \"github.com\": {\n        username: \"git\",\n        privateKey: process.env.GITHUB_DEPLOY_KEY!,\n      },\n    },\n  },\n});\n```\n\n`syntheticHostMapping: \"per-host\"` is required so the host can map outbound\nTCP connections on port `22` back to the intended hostname.\n\nWhen credentials or an SSH agent are configured, the host terminates the guest SSH\nsession and proxies `exec` requests (including Git smart-protocol commands) to the\nreal upstream host using host-side authentication. The private key is never\nvisible in the guest.\n\nIf no matching credential is configured for a host and no `ssh.agent` is set, the\nSSH flow is blocked (direct passthrough is not supported).\n\nBecause this is SSH termination, the guest sees a host-provided SSH host key;\nconfigure guest `known_hosts` (or disable strict checking explicitly) as needed.\n\nUpstream SSH host keys are verified against OpenSSH `known_hosts` by default.\nIf the upstream host is missing (or the key changes), the proxied SSH request\nwill fail.\n\n## License and Links\n\n- [Documentation](https://earendil-works.github.io/gondolin/)\n- [Issue Tracker](https://github.com/earendil-works/gondolin/issues)\n- License: [Apache-2.0](https://github.com/earendil-works/gondolin/blob/main/LICENSE)\n","readmeFilename":"README.md"}