{"_id":"napi-mojo","_rev":"28-add32d43dd08c67392fa71cca7b62762","name":"napi-mojo","dist-tags":{"latest":"0.17.0"},"versions":{"0.1.0":{"name":"napi-mojo","version":"0.1.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.1.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"15a235ee59395b00ed87026c10bcc3231783c2d7","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.1.0.tgz","fileCount":12,"integrity":"sha512-XCXcjV/UWVCZ18nZ1wyn20fj56vBsLT4A2dmlsZt3D7cy+//kAk1UiwJMW2XJXcycglGfVb3l+ebhVUihbGFfw==","signatures":[{"sig":"MEQCIBfXeCFZT9t4a5HnQxxY+8AVNIsIzBLgco2Mn634VOeuAiBXM7YQar3aCJYWPFwKNPLuQV6DGzFtLuuFhMQExZddow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39113},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3f62616291f31143879ed67b5495985c4517b05d","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.1.0","@napi-mojo/darwin-arm64":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.1.0_1773172296145_0.44786174319784444","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"napi-mojo","version":"0.2.1","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.1","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"7abcb0e1712e0bf3d1c3e6579ef279e219eb9786","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.1.tgz","fileCount":12,"integrity":"sha512-1ZSvH6PEy8TL+ZXUUj/mV9SQNIW3mQyXNnr25+Rd6/L3eMvVR02SgLPu6OdW5718eKb2JPpbrLdXL6TaXzTn9Q==","signatures":[{"sig":"MEUCIGAPxE9DVvEDdUa9jTqGJHdKFd+q7pMx+czYBSwOgoO+AiEAhYaM+EzkGxP4h1Mw3WKRRszBO81x8RqIqlL/4Id/5go=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39162},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1ef0ba9e5451940d39c9ddbf2d4263b1a482d5b1","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.1","@napi-mojo/darwin-arm64":"0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.1_1773175136349_0.12176638275827822","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"napi-mojo","version":"0.2.2","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.2","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"cf3f769dcca56a6f856bdaba5feb013e29cde4ba","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.2.tgz","fileCount":12,"integrity":"sha512-FWVrbSPSfv91BtH72LeiolAxUZ3Ayow+dvak9S55CrD3qPwAoVjIbM84Vrke0BGp0LQ85zekStORtrnWoVnVFA==","signatures":[{"sig":"MEUCIAYQsEmGG3WeXRHodLeK0P5YCvIRp5WBIVrHn+p+zgM3AiEAlZWz6gXvfj7dTkgmc5hKu1WW1GZR5uoz10RTRGaRtXc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39162},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"759abd29b3dab8a7410f8b434fae0af3ef8d45ab","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.2","@napi-mojo/darwin-arm64":"0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.2_1773176217686_0.7588410062208604","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"napi-mojo","version":"0.2.3","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.3","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"c2525387db4edc85200ebd896c5eebd49e174393","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.3.tgz","fileCount":12,"integrity":"sha512-qMnprStv+ShPTGQpbyLknzXCfaoajbUcT0u6vLOyl8tPI9cuP6sUdi96DUT1XfrHUP5VWOxnDCxC9HLoennGlg==","signatures":[{"sig":"MEQCICJSDsv0Rh/mpg1XXBNBLUwb02WGyDNFfITxG253LNCXAiAkCz58NCFhEkhxm25u3KLuwP7hVGsV86WU299TYdYdmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39162},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"ae69b13502959f7d28ecb7d75b6e7aa6f6d237a5","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.3","@napi-mojo/darwin-arm64":"0.2.3"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.3_1773176511129_0.446486969050361","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"napi-mojo","version":"0.2.4","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.4","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"820e97bebb4187e5cddb22b96e1114a52a160e85","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.4.tgz","fileCount":76,"integrity":"sha512-E2xWf5Rs2ZlrjXaoZ7RqgmrCoWzwlbEALOIb1FrvhZ3AdIb2EXiziIhJQf0r0QJMu7f578b7OCKiIMQz3Vh/3g==","signatures":[{"sig":"MEQCIDJE/ZwYViUiokytI4Z3WMENoo65yTC7Xa4cjfMCpbjuAiAJnmyYdibLjgGa0b9qOSNTsRnX1aOQTA4FaDLk9eB6uA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":617682},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"cb58735468713aaa631c8b7eeacc92adddb53ac1","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.4","@napi-mojo/darwin-arm64":"0.2.4"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.4_1773178758196_0.07105776854647106","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"napi-mojo","version":"0.2.5","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.5","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"27846b537d072badad8c7c949184162808d931b5","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.5.tgz","fileCount":76,"integrity":"sha512-ngBJwBqibVOJ0BW+jsDnb++Yeg4Awes/J9wBQ4UJr/5vGfAhnSRhHbKmAD0Ehv3419ECGsLcETeDCkR+ExHl2Q==","signatures":[{"sig":"MEUCID8GMxmw5nlPvu5Pmys7lKBADpOyGUtaOWZJxiPASBRbAiEApTZ4GyUnLKSC0DFYsU3qbhMBgx9dtnB5fIriNxCJIgU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618213},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2635015653393050221b806e1668709368fc4f74","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.5","@napi-mojo/darwin-arm64":"0.2.5"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.5_1773182677304_0.8274171409787399","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"napi-mojo","version":"0.2.6","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.6","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"d6cdd70557bcd9278a3e7f79942c80c0e5147704","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.6.tgz","fileCount":76,"integrity":"sha512-m+Xi8Ttt01zrS7H19EFbWOWVMus50aS7kkpz+NeS7lncKXk4M8uMd0k68PG+7fViMS3GoAdyDABA+HURVQdNEA==","signatures":[{"sig":"MEYCIQDy2JGZnNlwrTlZ+Eo2c1uWPd8I5SzUCaQpGrbbgqLSxQIhAIrwAP1PQFbYA1OS9rIiLqoc41y0Df9wqYtr3GDejdm5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":618299},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"718b8273f38bb86cfbac92a3e71e65aa30753f24","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.6","@napi-mojo/darwin-arm64":"0.2.6"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.6_1773362014684_0.19573156300651973","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"napi-mojo","version":"0.2.7","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.7","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"d1ab3eeefea3f345e5f00c6a1cf3a8a3b98cbe48","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.7.tgz","fileCount":76,"integrity":"sha512-ZJxjZnctStzhrOcLVDPZLrb8OnxB8REin3Yf49JjbEsE/kTLxWaAj4PfEl9a1ZqvO3CW7VjpXAqGBRuVlSDsCw==","signatures":[{"sig":"MEUCIQCQP7Ap6J6RW5dWsQ4kajMGJC5zl7JgqWpcqlH98n2VcgIgYsABGhtA20+ubBiIPeZG1OVtgy1o4Q/t0TfIrHytaMM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":621628},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5b47b5881497b4bc86c993b70280f2452e47205c","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.8.2","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"20.20.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.7","@napi-mojo/darwin-arm64":"0.2.7"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.7_1774322798973_0.8926554650583334","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"napi-mojo","version":"0.2.9","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.9","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"fceb10467d66e4284028e052d79956f2075ba387","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.9.tgz","fileCount":84,"integrity":"sha512-EyP6dJRmRQHu6MoS7KlEb9MliiZzzBVtBWsm7DHsBTyV0B90exjgIOuWk7+wZjkXZa5C3W0A+P82aPM7WsPjjg==","signatures":[{"sig":"MEUCIFuu4FJeX5uJPjCT6yDMmKK+a1YPCnZxzlKPHpi/PMQsAiEAzUtYrWuq4y4MTY+sL/0f2FTlXZl1nCgOfPj3WToq/vk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":663774},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"11504af4b7f2ccc44719b84c8f9d39166bd23e68","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.9.4","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.9","@napi-mojo/darwin-arm64":"0.2.9"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.9_1774755671701_0.6509804227002904","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"napi-mojo","version":"0.2.10","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.10","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"c879332095cdbb8bd891314255e432ff52647b11","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.10.tgz","fileCount":84,"integrity":"sha512-9gtwPB9fKXFWTu+A6SisoAaZHCOEroZSdh1nJsOTlkb3ySmv74X7ZACKk7nk8wkFqWzqScGY8GLIDyFO1rslTQ==","signatures":[{"sig":"MEQCIFBMjQ8nLp2wZ6sHDqZPwxwx7bnPZ6U28iIUkn34on1UAiBTb8ochrP7XLpdwKEJmIXDOvlaQFLRi9g/D9CbUXJlQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":663782},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"dac81221126bc0a1c7ae9de5f02ceab10d2ed374","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.9.4","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"22.22.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.10","@napi-mojo/darwin-arm64":"0.2.10"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.10_1774759072077_0.7974439975193761","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"napi-mojo","version":"0.2.11","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.2.11","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"78c78f236e5f8ef28006fcf07e38a9122e98ef10","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.2.11.tgz","fileCount":84,"integrity":"sha512-7Uj+s+YvAqUoQyu1ohofTP6xXV9/sk3XntOylli9Y51QPqrUC8maMVBb8Q5ElTBdBLMox65zlJ+C4prUkDa3Tw==","signatures":[{"sig":"MEQCICwEk723jMDlE+div+ypMxLQmEYEAvPiRUhl1dbBLTULAiBn6ExXJ0gQHhGcAWwY5/kdkMw8RLyJQsCr75TCCjBw/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":712782},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"24425c2bf50485b9440ca71900254075c5723020","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.9.7","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.2.11","@napi-mojo/darwin-arm64":"0.2.11"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.2.11_1775843483339_0.7244122315468144","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"napi-mojo","version":"0.3.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.3.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"7e77a3eb69e6d0d9256a9fcc87f7fa82a37ad968","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.3.0.tgz","fileCount":86,"integrity":"sha512-ZF8FfRfwYgkQeghTAGjoL+t7T4BWqg0HKrukNAC27SmCiBlFOxLOIuxJSKGwg/BSB7UkAruRioJRR7YP7VvPRg==","signatures":[{"sig":"MEUCIAiaUy71WudnczaaPbssPVRTOqSN/f1ukAiUlFsfDejSAiEA2ijTfLoDa/oGmvW0mb82i3/vN1ciYEcpwVCSnjokiV4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":721212},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9d17024a61ea59fe8fae371e291e135c849d7e78","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.9.7","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.3.0","@napi-mojo/darwin-arm64":"0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.3.0_1776091299914_0.643503387143882","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"napi-mojo","version":"0.3.1","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.3.1","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"d05f82292db38df688d72a0946c9bd5a96744b43","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.3.1.tgz","fileCount":86,"integrity":"sha512-Esl6hIiokaHrpAbFqLmmype+g27qF7FYyaTmoD5tT8qvSmaK9vumD0170sR8NZwVFlwH/vPx7x1WFzK2t4MFkg==","signatures":[{"sig":"MEUCIAZ0Tu83jytm/tQ/SZQ3vOIHLhxuWiri4oKqF5lEDmprAiEA9XUy4uPaIOU1Zu8ns0bDgk8D5bICSs3CNd/Lkt9QcDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":726376},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"08c0e8cc407fa5d79759f2a0264ab597339cb35c","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.9.7","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.3.1","@napi-mojo/darwin-arm64":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.3.1_1777599260887_0.705383629449309","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"napi-mojo","version":"0.3.3","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.3.3","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"8e1eb9a02f4d056730d9174862ef8959256a546d","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.3.3.tgz","fileCount":86,"integrity":"sha512-oKzOvUK2H+dgBgMttP1RCknxchHXbJVIZcuOQK9bA+C1WbwpAFXU+NsYzRWaw8Yffy38Ok0BGXKwuvtk8/KY8w==","signatures":[{"sig":"MEQCIA/aQOz+xoWEthuAdRx1eIfdz5Koq7AniSqufaYDtmm1AiAHNurCi7Vn7qN/IlxIVTWcqcue8KufrKNpUQ6ubqfpCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":728262},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"adac6c094150edf20ee5f3865e263bd92c2770df","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"codetalcott","email":"wtalcott@textshelf.com"},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"10.9.7","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.3.3","@napi-mojo/darwin-arm64":"0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.3.3_1777918352099_0.08432641910381067","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"napi-mojo","version":"0.5.1","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.5.1","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"11cbbe4a35301b966edceb6fdd39811e5cd9525b","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.5.1.tgz","fileCount":86,"integrity":"sha512-KZqxbmQQmN9ghiRc6XNyJWSU5GC52heh9LHWx/AAeFKzWJeBDua+Oe9CU4zaYA0QlOesHPzeeiXBh9Vh3E4WAg==","signatures":[{"sig":"MEQCID8HhgcSGqI16E3iOdGaM4DtsLH53SNo6OR0WuUAwRkpAiBjUE+Iee0EVCMhYXITihO0GRYXQd7sDzMmJbxEmv6cNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":733926},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"870e07f8d4a6956cc53ba44fdc9938ffca88d2b7","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.16.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.5.1","@napi-mojo/darwin-arm64":"0.5.1"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.5.1_1784864142285_0.9066858866575689","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"napi-mojo","version":"0.6.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.6.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"cc3f6ff87c8b1b55a00aaad434181a40bf29f88b","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.6.0.tgz","fileCount":87,"integrity":"sha512-F3H4y5hlFcPT9VObFn1+Lj/kbdAW6HqEtQ4D48Id4spism6+pVvc71D/Z9RnQ+Tihdh3PnOlucqJvU8+TOC+Nw==","signatures":[{"sig":"MEUCIGMOs+SSjHnkBMqIvBvD62PQQl79oIosAILCQgeQxLYjAiEAmSlTHpSKAex3vrCZ9FhUr763j1TeuSphck0fbtdU9FY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":740087},"main":"index.js","types":"build/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"78cda227bd9cdbafbd83f2b7dc244ad7e38e0c82","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.16.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.6.0","@napi-mojo/darwin-arm64":"0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.6.0_1784911395125_0.9809146063112801","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"napi-mojo","version":"0.7.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.7.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"8dfe5a9c2fec0e55637f2dbbe1ded26f518b46df","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.7.0.tgz","fileCount":69,"integrity":"sha512-Si3gy3F3wZ8zrokXc9mCDeoWJygv4TIHKSO390DmWGygnOnHQ53va6YDumMAwcmSM8Mlx1nMxzvT9keWtJ/PHg==","signatures":[{"sig":"MEYCIQC0WwYtChSGAhKrLnDcBJ4viOyG0c/R9xe8Q1PACwiTTgIhALLIhmKuBGHtM8ohv/bNXxub09GvWrTuJKoNRvmbomEm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":667275},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"02a14b7acd180df3a675f275b652272468cc2b97","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.16.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.7.0","@napi-mojo/darwin-arm64":"0.7.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.7.0_1786544462819_0.8272860298829825","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"napi-mojo","version":"0.8.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.8.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"676909770009352a6a6723eb69a820f5074dc816","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.8.0.tgz","fileCount":73,"integrity":"sha512-Naf4ai9oVUj+8YBvxlYXkAprJoGZFIJL2SBhkD4eQDVdOmhg85OGiNUy08/2anrBV0BWjnQ5nEZ6zsbnoMENIg==","signatures":[{"sig":"MEQCIC2EJd1TidCw/tvZ6j+O66GNlrcF1okJr04z4sa3gAAuAiBQfDGvITnahpgaf1eqywCLskrNKC9uyJN5y6qBjhHq5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":538538},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"2139a375944718dd1cb24bb81bc5a2c08be478d3","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api --name napi-mojo","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.17.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.8.0","@napi-mojo/darwin-arm64":"0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.8.0_1787066334781_0.09482618410132959","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"napi-mojo","version":"0.9.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.9.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"a6db012673ad794b9290a6af2e580aaacea5529e","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.9.0.tgz","fileCount":76,"integrity":"sha512-H1hORENVQ4nwY9GRd3LhTbxelTpv1W64TOY6rHmGSkoPEGXp5vLhuDZVvEvIFS0PUi0q0LO4HPMw4Mxys78E3w==","signatures":[{"sig":"MEUCIQD9W+JTbzfocMpV7L8UhkSMi6WZYsyJuRuuyUF9rfb5PAIga/IHgjF3THirmsYQYdEM2t4nUOWxIR+iDkugH7jeTUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":572827},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"e917697e2184c7578a28296fbc029b0aa96630fe","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.17.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.9.0","@napi-mojo/darwin-arm64":"0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.9.0_1787119899087_0.9818889070740258","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"napi-mojo","version":"0.10.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.10.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"d6ee9206c8bc9d6be5ab0a403988641635c07958","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.10.0.tgz","fileCount":76,"integrity":"sha512-hMkM0zAfbNC7GnYLM1wOAUaWO6f84IFJyV91azle8sMjIMm6S863DTQ2snDzKQNaYy5NTPKZJCqF3To6YM6Cww==","signatures":[{"sig":"MEQCIHFQq3FAZ1PyfLy52THfMDT+j5A2538G7ywh9kvAO+4tAiB8Njz+AmtdARUQ8Zo2Vyz4wZEOSYZO6lPIjunDuL4bog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":588195},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"755900e1d73edaef176bbe6e2fe3a88ec57ddc59","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.17.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.10.0","@napi-mojo/darwin-arm64":"0.10.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.10.0_1787253546176_0.4929752847208553","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"napi-mojo","version":"0.11.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.11.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"9bb32f5677515632b15ff157bf573a13f70405af","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.11.0.tgz","fileCount":80,"integrity":"sha512-T/vmJfEasGVCuNwPhScvOTgHbJe+iEmSjvjcP0n6Nvt3vFycSYvZCoRYZI8OonZWcUjD5P+Nh8TQqzqQ0tfJuw==","signatures":[{"sig":"MEYCIQCt0HqMKPtzX596TqbWxxfCWVouKPY54ktQ4lKSDchgeAIhAM+JVQnodzlhCp1hHgx8MOjBver3/QQTTp5o4cikNQXg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":630983},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"3750444732c384f43818053bd6a4f3ba6f97e781","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.17.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.11.0","@napi-mojo/darwin-arm64":"0.11.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.11.0_1787262132035_0.7951712647736962","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"napi-mojo","version":"0.12.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.12.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"2aac045dfee12bac4b3f2ac99a9e8f0192a32b2e","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.12.0.tgz","fileCount":81,"integrity":"sha512-MHsU3MdeoSrmmk8G1dqH85G8Fyy32WKobB6Fv6OEAi4QAYnx5LeavR3SmY1f7R6GVKnMibibARiJ8ucmarxY8A==","signatures":[{"sig":"MEQCIHRQTrMZuFE+mIz0Kn8R7cJtQAETQ2vxOa8nTfpTJl58AiANeCyA0w4XKD6qTgD9hiOT6dTruLqrQOQnY3jHz9GHUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":642833},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"a11b0048df9b8c187e9168e2f69c8b3d2a33a46f","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.17.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.12.0","@napi-mojo/darwin-arm64":"0.12.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.12.0_1787287836493_0.10947249753939237","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"napi-mojo","version":"0.13.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.13.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"34e9bba9fdea7bab28433056fd92a37b6392dc28","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.13.0.tgz","fileCount":105,"integrity":"sha512-urDskBR0ZQ8eoDB/psVWfFsyxex/sMlQVpHdBCn8BnicHu2tj5pcafLE/eWN+IScCbmSdAQsgnusgH1ilBb8BA==","signatures":[{"sig":"MEYCIQCqaT5Oh4ej2McXvARTb57kuzctcR9g8ypSeMSqynXC1QIhAIDfHayc+bctO/VhGYYpcK+ubLzn+hzY2DKEtIAZY0Fm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":899575},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"04e907a670371a8974f51730bbc9d967d36a3622","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npm run generate:api-reference && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:platforms":"node scripts/check-platforms.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs","check:api-reference":"node scripts/generate-api-reference.mjs --check","generate:api-reference":"node scripts/generate-api-reference.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.17.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.13.0","@napi-mojo/linux-arm64":"0.13.0","@napi-mojo/darwin-arm64":"0.13.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.13.0_1787358191654_0.9422811744939859","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"napi-mojo","version":"0.14.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.14.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"989da1724a6fa3b1ea1b2c49f3ac3656c21b9616","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.14.0.tgz","fileCount":110,"integrity":"sha512-aUW0NvaOVotqdUuu6ZwQOmlPiETeT7HV9NY4zB4x2dUkNOR/BDyG5yBfmH0aFnE7SgYzJU4VM8UfAKU5uCItXw==","signatures":[{"sig":"MEUCIDmdK8WbIAR1Lu3Jhrbh2hHfiNa+yrrWvY/tq8cWuq4hAiEAsaz9d+MFhFRuH8cg7OaUVsQzqIu5t+GkCShLqKs/6qA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1007947},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"c5e30ab981ba85e8d7e864b1f3df2d1780fcf14d","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npm run generate:api-reference && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:platforms":"node scripts/check-platforms.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs","check:api-reference":"node scripts/generate-api-reference.mjs --check","generate:api-reference":"node scripts/generate-api-reference.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.19.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.14.0","@napi-mojo/linux-arm64":"0.14.0","@napi-mojo/darwin-arm64":"0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.14.0_1789330592821_0.3984000228967026","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"napi-mojo","version":"0.15.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.15.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"26cead670749e9545f65db86e89c82b3dd192f58","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.15.0.tgz","fileCount":111,"integrity":"sha512-Djus+IxiPjnyveTkYT8FITNWO7JD/ysGW1SUnR6JlRSLAMmeMpSO0GyfSnzzB8nMJVY/fIFjQg5UO1M+3P4RRg==","signatures":[{"sig":"MEYCIQDdyceBj/gjpcG1ukiJf+CUChtEPBQv5S6cfrdInQJqJgIhAJ+qBbTMQEh8RiC+YdN/zaY4wNFOUSdad856YZEbt41/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1041322},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"cdeee3ba1cb6dde93f6b72321b6a555a3ca83a9a","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npm run generate:api-reference && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:platforms":"node scripts/check-platforms.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs","check:api-reference":"node scripts/generate-api-reference.mjs --check","generate:api-reference":"node scripts/generate-api-reference.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.19.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.15.0","@napi-mojo/linux-arm64":"0.15.0","@napi-mojo/darwin-arm64":"0.15.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.15.0_1789352531785_0.4036597613148183","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"napi-mojo","version":"0.15.1","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.15.1","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"cb6ea256586539c861108b9e171f6a6cf4171a63","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.15.1.tgz","fileCount":111,"integrity":"sha512-wYPulpwBlLxAGuuI9hKA4CPQ5Zo+EJY9cJREAS7keqvQnflQ4TajaRmGbVdStbKihNFhuDgwdiQk1mPrc7MBbg==","signatures":[{"sig":"MEUCICHZ3EQX6Z5FPdgvlzDZ8y1thLBGVJw7aO5DgYPNg/uTAiEAkZOyilat3nIonzNFI4AOTW5WhQMNSrHX20o5MKRkDmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.15.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1047942},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"6f29351e54329911a3261ff320b9781e07760212","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npm run generate:api-reference && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:platforms":"node scripts/check-platforms.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs","check:api-reference":"node scripts/generate-api-reference.mjs --check","generate:api-reference":"node scripts/generate-api-reference.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.19.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.15.1","@napi-mojo/linux-arm64":"0.15.1","@napi-mojo/darwin-arm64":"0.15.1"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.15.1_1789357440608_0.3537733076541978","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"napi-mojo","version":"0.16.0","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","_id":"napi-mojo@0.16.0","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"homepage":"https://github.com/codetalcott/napi-mojo#readme","bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"bin":{"napi-mojo":"bin/napi-mojo.mjs"},"dist":{"shasum":"3a5a8b06a08451696e3ec65cd5d29ee2c24a90e2","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.16.0.tgz","fileCount":112,"integrity":"sha512-7u1CfI6Hg7R9E1u0K4th/7UfuNFyjqBWnwgaIk6/EbrUznOYsKPJuFoiyCsA7rBtqYiLGNPJMEmbSn+G/TEWcQ==","signatures":[{"sig":"MEQCIF0EaEF5IWIA4Y16kvC0Kpvv4SP+fTJ0BKu2JceFkIpZAiBJd1cVuDeMoOuGiTViHSbXD+E72m+OLRMmZb4dLc+qFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCaHGj/PQCfAWI6XuCzniDOWbdwEVbfkCIb9L0/usjniwIhAJKEnZ5Oc8tvob+hN1btNMndSoUZHoAn6WKBuW9SdYSQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1094703},"main":"index.js","types":"index.d.ts","engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"40643743492e3549e389bbc6423b9e244570bc33","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","check:rules":"node scripts/generate-rules-extract.mjs --check","check:werror":"node scripts/check-werror.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npm run generate:api-reference && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","generate:rules":"node scripts/generate-rules-extract.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:platforms":"node scripts/check-platforms.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs","check:doc-samples":"node scripts/check-doc-samples.mjs --self-test && node scripts/check-doc-samples.mjs","check:api-reference":"node scripts/generate-api-reference.mjs --check","generate:api-reference":"node scripts/generate-api-reference.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.19.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.16.0","@napi-mojo/linux-arm64":"0.16.0","@napi-mojo/darwin-arm64":"0.16.0"},"_npmOperationalInternal":{"tmp":"tmp/napi-mojo_0.16.0_1789688790957_0.2847651738661088","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"_id":"napi-mojo@0.17.0","bin":{"napi-mojo":"bin/napi-mojo.mjs"},"bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"dist":{"shasum":"c36e80b656857d6c1017a40137286b661c1a0c4b","tarball":"https://registry.npmjs.org/napi-mojo/-/napi-mojo-0.17.0.tgz","fileCount":115,"integrity":"sha512-BWxYcrcwFTxe4Z2QUrIDXOwTqEqltLlFHrME90AOd9JHTiq1tXMfGhwWqNtPAITFCyp05IevRlGM/rS27SeGcA==","signatures":[{"sig":"MEUCIDt+Rpt2KBCbnJ/o89w7PECEobYzlY1oa+49UEWtmGurAiEA7K/aPjBIopr7SRhteeTuVlZd1I0wCSAmfKlm4IWO2qk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDYfNYZjjY71DFqyVokBBjpVOEAan2bBgpKdXzLpDFSUAiEA13xB4fdHb8FSR/5XQgcoAmXce7rU2X/eSnL7OESO34Y="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/napi-mojo@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1155755},"main":"index.js","name":"napi-mojo","types":"index.d.ts","author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"engines":{"node":">=22.12.0"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./demo":{"types":"./build/index.d.ts","default":"./demo.js"},"./package.json":"./package.json"},"gitHead":"4218812747f9dc94408955095aa35211853f5aa8","license":"MIT","scripts":{"test":"jest","build":"bash build.sh && npm run generate:dts","test:gc":"NODE_OPTIONS='--expose-gc' npx jest tests/finalizer_gc.test.js","version":"node scripts/sync-versions.mjs","check:rules":"node scripts/generate-rules-extract.mjs --check","check:werror":"node scripts/check-werror.mjs","generate:dts":"node scripts/generate-dts.js","check:exports":"node scripts/check-exports-doc.mjs","generate:docs":"npm run generate:dts && npm run generate:api-reference && npx typedoc build/index.d.ts --out docs/api-demo-addon --name 'napi-mojo demo addon'","generate:addon":"node scripts/generate-addon.mjs","generate:rules":"node scripts/generate-rules-extract.mjs","check:benchmark":"node scripts/check-benchmark.mjs","check:platforms":"node scripts/check-platforms.mjs","check:docstrings":"node scripts/check-docstring-coverage.mjs","check:doc-samples":"node scripts/check-doc-samples.mjs --self-test && node scripts/check-doc-samples.mjs","check:api-reference":"node scripts/generate-api-reference.mjs --check","generate:api-reference":"node scripts/generate-api-reference.mjs"},"version":"0.17.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9af95074-f2b5-4c9a-a326-f64ced621ae0"}},"homepage":"https://github.com/codetalcott/napi-mojo#readme","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"_npmVersion":"11.19.0","description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","directories":{},"maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2"},"optionalDependencies":{"@napi-mojo/linux-x64":"0.17.0","@napi-mojo/linux-arm64":"0.17.0","@napi-mojo/darwin-arm64":"0.17.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/napi-mojo_0.17.0_1790452634213_0.9617699750111735"}}},"time":{"created":"2026-03-10T19:51:36.002Z","modified":"2026-09-26T19:57:14.739Z","0.1.0":"2026-03-10T19:51:36.299Z","0.2.1":"2026-03-10T20:38:56.496Z","0.2.2":"2026-03-10T20:56:57.839Z","0.2.3":"2026-03-10T21:01:51.284Z","0.2.4":"2026-03-10T21:39:18.381Z","0.2.5":"2026-03-10T22:44:37.468Z","0.2.6":"2026-03-13T00:33:34.836Z","0.2.7":"2026-03-24T03:26:39.104Z","0.2.9":"2026-03-29T03:41:11.862Z","0.2.10":"2026-03-29T04:37:52.267Z","0.2.11":"2026-04-10T17:51:23.496Z","0.3.0":"2026-04-13T14:41:40.124Z","0.3.1":"2026-05-01T01:34:21.050Z","0.3.3":"2026-05-04T18:12:32.261Z","0.5.1":"2026-07-24T03:35:42.438Z","0.6.0":"2026-07-24T16:43:15.313Z","0.7.0":"2026-08-12T14:21:02.971Z","0.8.0":"2026-08-18T15:18:54.930Z","0.9.0":"2026-08-19T06:11:39.246Z","0.10.0":"2026-08-20T19:19:06.324Z","0.11.0":"2026-08-20T21:42:12.231Z","0.12.0":"2026-08-21T04:50:36.744Z","0.13.0":"2026-08-22T00:23:11.807Z","0.14.0":"2026-09-13T20:16:32.972Z","0.15.0":"2026-09-14T02:22:11.954Z","0.15.1":"2026-09-14T03:44:00.783Z","0.16.0":"2026-09-17T23:46:31.061Z","0.17.0":"2026-09-26T19:57:14.299Z"},"bugs":{"url":"https://github.com/codetalcott/napi-mojo/issues"},"author":{"name":"Wm Talcott","email":"wtalcott@gmail.com"},"license":"MIT","homepage":"https://github.com/codetalcott/napi-mojo#readme","keywords":["napi","mojo","native-addon","ffi","n-api","node-addon"],"repository":{"url":"git+https://github.com/codetalcott/napi-mojo.git","type":"git"},"description":"Build Node.js native addons in Mojo — the Mojo equivalent of napi-rs","maintainers":[{"name":"codetalcott","email":"wtalcott@textshelf.com"}],"readme":"# napi-mojo\n\n[![CI](https://github.com/codetalcott/napi-mojo/actions/workflows/test.yml/badge.svg)](https://github.com/codetalcott/napi-mojo/actions/workflows/test.yml)\n\nBuild Node.js native addons in [Mojo](https://www.modular.com/mojo) — the Mojo\nequivalent of Rust's [napi-rs](https://napi.rs).\n\nnapi-mojo is a **source framework**, the way `node-addon-api` is for C++: your\naddon compiles against it with `mojo build -I <include>`. The package's JS\nentry exposes the paths your build needs; the compiled demonstration addon\n(the binary this repo's 650+-test suite runs against) lives behind a subpath:\n\n```js\nconst napiMojo = require(\"napi-mojo\");\nnapiMojo.include; //   …/node_modules/napi-mojo/src — pass to `mojo build -I`\nnapiMojo.generator; // the TOML → Mojo code generator\n\nconst demo = require(\"napi-mojo/demo\"); // prebuilt demo addon\ndemo.hello(); // \"Hello from Mojo!\"\ndemo.add(2, 3); // 5\ndemo.greet(\"world\"); // \"Hello, world!\"\n```\n\n## Project Status\n\n**Alpha** — napi-mojo is under active development and not yet proven in\nproduction. The API covers the full N-API v10 surface (158 exported functions, 5\nclasses, 650+ tests). Expect breaking changes as the project matures.\n\n- **Goal:** Become the Mojo equivalent of Rust's [napi-rs](https://napi.rs) — a\n  complete, ergonomic framework for building Node.js native addons in Mojo.\n  We're not there yet; reaching that bar requires exhaustive real-world testing\n  and community feedback. The third prerequisite — a stable Mojo language\n  release — arrived with Mojo 1.0.0, which this project now builds against.\n- **Mojo compatibility:** Builds against **Mojo 1.1.0** (stable), pinned in\n  [`pixi.toml`](pixi.toml) as `max = \"==26.6.0\"`. napi-mojo ships Mojo source\n  that your addon compiles against, so the framework tracks *stable* language\n  releases rather than nightlies — pinning a nightly would force every consumer\n  onto that exact nightly. A twice-weekly Nightly Canary builds and tests\n  against the newest nightly to catch breaking changes ahead of the next\n  release.\n- **What works:** Core N-API bindings, type wrappers, async work, classes, error\n  handling, TypeScript definition generation, and a TOML-driven code generator\n  with `mojo_fn` auto-trampolines, nullable returns, and struct-to-object\n  mapping — all validated by the test suite.\n- **What's missing:** Production hardening, and documentation beyond this\n  README, the [API reference](docs/api/) and the generated `.d.ts`.\n- **Prebuilt platforms:** darwin-arm64, linux-x64, linux-arm64 — which is\n  every platform the Mojo toolchain itself targets. The `max` package\n  publishes no osx-64 (Intel Mac) or win-64 build, so a prebuild for either is\n  not something this project can produce; building from source on those\n  platforms is equally blocked, for the same reason.\n- **Performance vs napi-rs:** measured — **median 0.42x**, i.e. about 2.4x\n  faster per call. See [Performance](#performance) for the method and caveats.\n\n## Two directions\n\nMost native-addon frameworks serve one direction: JavaScript calls a fast\nnative function. napi-mojo does that, and also the inverse — a Mojo **program**\nthat drives Node, using the JavaScript runtime and npm as its standard library.\n\n```bash\nnapi-mojo build lib.mojo    # JS calls Mojo   — an addon Node requires\nnapi-mojo run  main.mojo    # Mojo calls JS   — a program Node hosts\n```\n\nHost mode needs no N-API boilerplate. You write `mojo_main`; `napi-mojo run`\ngenerates the registration wrapper and launches Node on a bootstrap that calls\nit:\n\n```mojo\ndef mojo_main(b: Bindings, env: NapiEnv, ctx: NapiValue) raises -> NapiValue:\n    var host = NodeHost.from_context(b, env, ctx)\n\n    var path_mod = host.require(\"path\")\n    var join_args = List[NapiValue]()\n    join_args.append(JsString.create(b, env, \"usr\").value)\n    join_args.append(JsString.create(b, env, \"local\").value)\n    join_args.append(JsString.create(b, env, \"bin\").value)\n    var joined = path_mod.call_method(b, env, \"join\", join_args)\n    host.console_log(\"joined: \" + js_to_string(b, env, joined))\n\n    # A number returned from mojo_main becomes the process exit code.\n    return JsNumber.create_int(b, env, 0).value\n```\n\n(Quoted from [`examples/host/main.mojo`](examples/host/main.mojo), which CI\nruns; `readFileSync` and every other synchronous Node API is called the same\nway.)\n\n```bash\nnapi-mojo init myprog --host && cd myprog && napi-mojo run main.mojo\n```\n\n[`examples/host/pipeline.mojo`](examples/host/pipeline.mojo) is the demo worth\nreading: Mojo computes statistics over 200,000 samples, Node does the JSON,\nthe gzip and the file write, and the samples themselves never cross the\nboundary.\n\n`ctx` carries `{ require, argv, cwd }` from the bootstrap. `require` is\nmodule-scoped in Node and is *not* reachable through `globalThis`, so the\nbootstrap hands it in rather than Mojo scavenging for it. See\n[`examples/host/`](examples/host/) and\n[`docs/plan-bidirectional.md`](https://github.com/codetalcott/napi-mojo/blob/main/docs/plan-bidirectional.md) for the design.\n\n**Two hosts, one language.** For a standalone Mojo binary that owns `main()`\nand needs no Node at all, there is [`mojo-http`](https://github.com/codetalcott/mojo-http)\n— an HTTP/1.1 server and web framework for Mojo. The two are complements, not\ncompetitors, and share no build-time dependency:\n\n| | owns `main()` | reaches | deployment |\n|---|---|---|---|\n| **mojo-http** | Mojo | nothing foreign, in-process | standalone binary |\n| **napi-mojo run** | Node | npm | Node + a `.node` |\n\nPick by whether you need the ecosystem more than you need the standalone\nbinary.\n\n(mojo-http does reach a foreign ecosystem, just not from inside Mojo: its\n`m0serve` runs Python WSGI/ASGI applications, and ships to **PyPI** as a\n`pip install m0serve` wheel. That is the same move in the other direction —\nwhich is the subject of the next section.)\n\n**What it costs.** Measured on darwin-arm64 / Node 24 (`node scripts/benchmark.mjs`), a full\nJS -> Mojo -> JS -> Mojo -> JS round trip through `callN(fn, [])` is ~435 ns,\nagainst ~375 ns for a forward-only call like `hello()`. So the Mojo -> JS call\nitself is not the expensive part — **argument marshalling is**: `callN` with\nthree arguments costs ~735 ns, i.e. roughly **~100 ns per value crossing the\nboundary**. A `this`-bound `callMethod` with one argument is ~680 ns.\n\nThe practical rule that follows: host mode is right for I/O-bound glue, where a\nsyscall dwarfs a few hundred nanoseconds, and wrong for a hot numeric loop.\nKeep data on the Mojo side and cross the boundary with few, coarse values\nrather than many fine ones.\n\n**What host mode cannot do:** wait for a JS Promise. Host-mode code runs\nsynchronously on Node's main thread, and a promise can only settle after that\ncode returns to the event loop — Mojo's own `async`/`await` suspends Mojo\ncoroutines, not JS promises, and N-API has no way to read a promise's state.\nUse synchronous APIs (`readFileSync`), or attach a continuation with\n`JsPromise.on_settled`: `mojo_main` returns, the event loop runs, and the\ncontinuation fires later with the outcome. It handles rejection, and it ties\neverything the continuation holds to the garbage collector, so a promise that\nnever settles leaks nothing.\n\n## Shipping Mojo to npm\n\nThe framework's most-used direction is not the one its name suggests. A Mojo\nauthor with something worth sharing has no registry of their own with much\nreach; npm is where the users are, and a napi-mojo addon is how Mojo code gets\nthere — installed by people who never install a toolchain.\n\nThat is what the framework's own release pipeline does, and\n`napi-mojo release --scaffold` writes the same thing for your project:\n\n```bash\nnpx napi-mojo build --bundle      # one self-contained binary, this platform\nnpx napi-mojo release --scaffold  # prebuilds for all of them, and the workflow\n```\n\nYou get `optionalDependencies` on one prebuilt package per platform, a loader\nthat picks the right one (preferring a local build so your own tests never\nresolve a stale published binary), `npm/<platform>/` manifests, and a release\nworkflow that builds each platform, **checks that the bundle does not depend\non the machine that built it**, publishes, and then installs the result on a\nmachine with no checkout and no toolchain. Section 9 of the\n[tutorial](docs/TUTORIAL.md) walks it through, including the one step that\ncannot be automated: npm's trusted publishing has nothing to match against\nuntil a package has been published once, so `npx napi-mojo release\n--bootstrap` publishes a placeholder of each package from your own machine —\nwithout spending a real version on a package that has no binary in it.\n\nTwo things to know before you plan a release:\n\n- **Prebuilds cover darwin-arm64, linux-x64 and linux-arm64** — every platform\n  the Mojo toolchain itself targets. There is no Intel Mac or Windows build of\n  `max` to build against.\n- **A prebuilt package carries the Mojo runtime**, so it is not MIT however\n  your own code is licensed. See [`licenses/NOTICE.bundle.txt`](licenses/NOTICE.bundle.txt)\n  for what this project's packages contain and under what terms; yours will\n  contain the same things.\n- **Linux prebuilds require glibc 2.35 or newer** (Ubuntu 22.04, Debian 12,\n  RHEL 9 and later). That floor comes from the Mojo runtime and cannot be\n  bundled around — glibc is the dynamic loader. The packages rely on the\n  host's `libstdc++` rather than shipping one, which is what keeps them small;\n  every host new enough for the glibc floor already provides a new enough\n  `libstdc++`, and `scripts/check-glibc-floor.mjs` fails the build if that\n  ever stops being true. **Under Bun or Deno, the image must provide\n  `libstdc++`** — neither runtime links it, so `oven/bun:*-distroless` and\n  `denoland/deno:alpine` cannot load a Linux prebuild; the Debian/Ubuntu-based\n  images and `denoland/deno:distroless` can.\n\n## Runtimes\n\nNode is not the only N-API host. An addon built with napi-mojo also loads under\n**Deno** and **Bun**, and every surface this framework exposes behaves\nidentically on all three — including the ones most likely to be missing\nelsewhere: async work on libuv worker threads, ThreadsafeFunction, escapable\nhandle scopes, type tagging, and primitives stored in a `napi_ref`.\n\n| | verified | notes |\n|---|---|---|\n| **Node.js** | 22, 24 | the control; the Jest suite runs here |\n| **Deno** | 2.9 | see the async cleanup hook caveat below |\n| **Bun** | 1.3 | reports N-API v9, implements v10 behaviour |\n\n`scripts/check-runtimes.mjs` keeps that true — the `runtimes` CI job runs every\nscenario as its own child process on each runtime and compares against Node,\nbecause the defects that show up here are process-level (an abort, a heap error\nat teardown) rather than wrong return values, and a same-process assertion\nwould miss them.\n\n**On Linux, Bun and Deno need a container image with the C++ runtime** —\nneither runtime links it, and the prebuilds use the system's copy. When an\nimage lacks it (`oven/bun:*-distroless`, `denoland/deno:alpine`), a scaffolded\naddon's loader says so, names the fix and links to\n[`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md), which also has the\ntwo-line Dockerfile fix and a check to put in your image build. Every image\nlisted there as checked is loaded, or refused, on every release.\n\n**Two upstream caveats**, both reproducible from a plain C N-API addon with no\nMojo involved, so neither is specific to this framework:\n\n- **Deno** double-frees a `napi_async_cleanup_hook_handle` at environment\n  teardown. Any addon that registers an async cleanup hook and lets it run at\n  exit is affected; a hook removed before exit is fine.\n- **Bun** aborts if two async cleanup hooks are registered with the same\n  `(function, data)` pair. N-API permits that; Bun asserts the pair is unique.\n\nNeither affects anything else. `docs/plan-distribution.md` has the measurements\nand the reproducers.\n\n**Do not gate on `napi_get_version`.** Bun answers `9` and supports the N-API\nv10 behaviour this framework relies on anyway, so a version check refuses it\nwrongly. Test the behaviour.\n\n## Features\n\n- **158 exported functions** and **5 classes** covering the full **N-API v10** surface (Node.js 22.12+ / 24+)\n- Primitives: strings, numbers (Float64/Int32/UInt32/Int64), booleans, null,\n  undefined, BigInt, Symbol, Date\n- Objects: create, read/write properties, enumerate keys, freeze/seal, prototype\n  access\n- Arrays: create, map, element access, has/delete\n- Functions: call, create from Mojo, closures with captured data —\n  `call0`/`call1`/`call2` plus `call_n` for runtime-length argument lists and\n  `call_with` for an explicit `this`\n- **Node as a host** (`napi-mojo run`): `NodeHost.require()` to load any\n  builtin or npm package from Mojo, `JsObject.call_method` for correctly-bound\n  method calls, `with_handle_scope` for Mojo-driven loops that call JS\n- Binary data: ArrayBuffer, Buffer (including zero-copy slice from ArrayBuffer), TypedArray, DataView, external (Mojo-owned) memory\n- Classes: constructors, instance methods, getters/setters, static methods,\n  inheritance\n- Async: Promises, worker thread execution, ThreadsafeFunction (call JS from\n  worker threads)\n- Error handling: Error/TypeError/RangeError, throw/catch any value, exception\n  propagation\n- References, handle scopes, escapable handle scopes, GC finalizers\n- Type coercion, strict equality, instanceof, external data with GC cleanup\n- **Typed wrappers**: `JsExternal.create_typed[T]` / `get_typed[T]` and\n  `set_instance_data[T]` / `get_instance_data[T]` — stash typed Mojo structs\n  behind N-API handles or per-env singletons without hand-writing\n  alloc/init/finalize/bitcast plumbing\n- Auto-generated TypeScript definitions\n- **TOML code generator** (`npm run generate:addon` + `src/exports.toml`):\n  - `mojo_fn` auto-trampolines — write a pure Mojo function, declare it in\n    TOML, and the generator creates type-checked N-API callbacks with zero\n    boilerplate\n  - **Nullable returns** — `returns = \"number?\"` generates `Optional[T]` →\n    `T | null` in JS/TS\n  - **Struct-to-object mapping** — `[structs.*]` TOML sections define typed\n    JS object shapes, generating bidirectional Mojo struct ↔ JS object\n    converters (the Mojo equivalent of napi-rs `#[napi(object)]`)\n  - Async function generation, class generation (constructor + methods +\n    getters/setters + statics), auto-generated TypeScript `.d.ts` with\n    interfaces\n- **Ergonomic API**: `ModuleBuilder`/`ClassBuilder` for registration, `fn_ptr()`\n  helper, `unwrap_native[T]()` for class methods, `ToJsValue`/`FromJsValue`\n  conversion traits, `AsyncWork` helpers, `MojoFloat64Array` for zero-copy\n  TypedArray output, and `parallelize_safe()` for SIMD parallel computation\n\n## Installation\n\n```bash\nnpm install napi-mojo\n```\n\nThe install gives you:\n\n- **The `napi-mojo` CLI** — scaffold, generate, and build addons (below).\n- **The framework source** (`require('napi-mojo').include`) — compile your\n  addon against it: `mojo build --emit shared-lib -I <include> lib.mojo -o addon.node`\n- **The code generators** (`require('napi-mojo').generator`) — declare your\n  exports in TOML, generate the N-API trampolines. See\n  [`examples/codegen/`](examples/codegen/) for a worked example.\n- **The demo addon** (`require('napi-mojo/demo')`) — prebuilt for\n  **darwin-arm64**, **linux-x64** and **linux-arm64** (Node.js 22.12+ /\n  N-API v10) so you can poke at a napi-mojo-built binary without a Mojo\n  toolchain. On other platforms the demo throws on load with a message saying\n  so; the framework itself works anywhere Mojo does, which is those same three\n  platforms.\n\n### Build your own addon (CLI)\n\n`init` scaffolds a `pixi.toml` pinned to the Mojo version this framework is\ntested against, so with [pixi](https://pixi.sh) installed the sequence below\nneeds no other toolchain setup — the first build provisions the compiler.\nAlready have `mojo` on your PATH? Delete that file. Want a different compiler?\nPass `--mojo \"<command>\"` or set `NAPI_MOJO_MOJO`.\n\n```bash\nnpx napi-mojo init my-addon && cd my-addon\nnpx napi-mojo generate --dts index.d.ts   # exports.toml → generated/ + index.d.ts\nnpx napi-mojo build                       # lib.mojo → build/index.node\nnode -e \"console.log(require('./build/index.node').greet('world'))\"\n```\n\nDeclare functions in `exports.toml`, implement them as pure Mojo in\n`fns.mojo`, rerun `generate`. `napi-mojo build --bundle` additionally copies\nthe Mojo runtime libraries next to the `.node` and rewrites its load paths, so\nthe result runs on machines with no Mojo installation (this is how the demo\npackages on npm are produced).\n\nTo import another Mojo library, pass the directory that holds its packages\nwith `-I` (repeatable; `build` and `run` alike). Roots are searched after the\nframework's, and `run`'s build cache covers every file under them, so an edit\ninside a library recompiles on the next run:\n\n```bash\nnpx napi-mojo build -I ../shared-mojo -I vendor/some-lib/src\n```\n\n[`examples/m0-session/`](examples/m0-session/) compiles an existing library\nthis way: m0's session and grant code, from its PyPI wheel, checked in CI\nagainst an independent `node:crypto` issuer.\n\n**API reference:** [docs/api/](docs/api/) documents the framework surface your\naddon calls into — `JsObject`, `CbArgs`, the error helpers — generated from the\nMojo docstrings. It covers the consumer-facing core today and names the modules\nthat are not yet documented rather than rendering empty pages for them.\n\n**New here? [docs/TUTORIAL.md](docs/TUTORIAL.md)** walks the whole path — a\nfunction, a nullable return, a struct in both directions, async work on a\nworker thread, and a class — building [`examples/tutorial/`](examples/tutorial),\nwhich CI compiles and calls on both platforms.\n\n**Writing Mojo against this framework:** [docs/MOJO-RULES.md](docs/MOJO-RULES.md)\nships with the package and holds the dialect and FFI rules the framework's own\nmaintainers work from — the spellings that compile on the pinned toolchain, and\nthe handful of idioms whose wrong form crashes at runtime with no compiler\nsignal. Read it before writing FFI code. It is generated from the repository's\n`CLAUDE.md`, so it cannot drift from the source it quotes.\n\nSee [`examples/`](examples/) for runnable scripts.\n\n### Building from source\n\n```bash\ngit clone https://github.com/codetalcott/napi-mojo.git\ncd napi-mojo\nnpm install\nnpm run build    # compiles Mojo → build/index.node + generates TypeScript defs\nnpm test         # full Jest suite (7 GC tests need `npm run test:gc`)\n```\n\n**Prerequisites:** [Mojo 1.1.0](https://mojolang.org/install/) via\n[pixi](https://pixi.sh) (exact version pinned in [`pixi.toml`](pixi.toml);\n`npm run build` provisions it from the stable `max` conda channel\nautomatically), Node.js 22.12+ (N-API v10)\n\n**pixi 0.73 or newer is required** — `pixi.lock` is lockfile format v7, which\nolder pixi cannot read. A fresh clone on pixi 0.66 fails at `pixi install` with\na lockfile-version error rather than anything that points at this project.\n\n## Usage Examples\n\n### Primitives and type coercion\n\n```js\nconst m = require(\"napi-mojo/demo\");\n\nm.add(2.5, 3.7); // 6.2\nm.addInts(10, 20); // 30  (Int32)\nm.addBigInts(1n, 2n); // 3n\nm.isPositive(42); // true\nm.coerceToString(123); // \"123\"\nm.strictEquals(1, 1); // true\n```\n\n### Objects and properties\n\n```js\nconst obj = m.makeGreeting(); // { message: \"Hello!\" }\nm.getProperty(obj, \"message\"); // \"Hello!\"\nm.getKeys({ a: 1, b: 2 }); // [\"a\", \"b\"]\nm.freezeObject({ x: 1 }); // frozen object\nm.hasOwn({ a: 1 }, \"a\"); // true\n\nconst sym = m.createSymbol(\"key\");\nm.setPropertyByKey(obj, sym, 42); // set symbol-keyed property\n```\n\n### Async and promises\n\n```js\nconst result = await m.asyncDouble(21); // 42  (computed on worker thread)\n\n// Call JS from a worker thread via ThreadsafeFunction\nconst values = [];\nawait m.asyncProgress(3, (i) => values.push(i));\n// values: [0, 1, 2]\n```\n\n### Classes\n\n```js\nconst counter = new m.Counter(10);\ncounter.value; // 10\ncounter.increment();\ncounter.value; // 11\nm.Counter.isCounter(counter); // true\n\nconst dog = new m.Dog(\"Rex\", \"Labrador\");\ndog.name; // \"Rex\"  (inherited from Animal)\ndog.breed; // \"Labrador\"\ndog.speak(); // \"Rex says hello\"\n```\n\n### Binary data\n\n```js\nconst ab = m.createArrayBuffer(8); // 8-byte ArrayBuffer\nconst buf = m.createBuffer(4); // Node.js Buffer\nconst f64 = new Float64Array(ab);\nm.doubleFloat64Array(f64); // doubles each element in-place\n\nconst dv = m.createDataView(ab, 0, 8); // DataView over ArrayBuffer\nm.getDataViewInfo(dv); // { byteLength: 8, byteOffset: 0 }\n```\n\n## Code Generator\n\nThe TOML code generator eliminates N-API boilerplate. Write a pure Mojo function,\ndeclare it in `src/exports.toml`, and run `npm run generate:addon` — the generator\ncreates type-checked callbacks, struct converters, and TypeScript definitions\nautomatically.\n\n### Bind a pure Mojo function (`mojo_fn`)\n\n```toml\n# src/exports.toml\n[functions.square]\njs_name = \"square\"\nargs = [\"number\"]\nreturns = \"number\"\nmojo_fn = \"square_pure\"\n```\n\n```mojo\n# src/addon/user_fns.mojo\ndef square_pure(x: Float64) -> Float64:\n    return x * x\n```\n\nSupported type tokens: `number`, `string`, `boolean`/`bool`, `int32`, `uint32`,\n`int64`, `object`, `array`, `number[]`, `string[]`, `any`, any declared struct\nand its array form `<struct>[]`, plus the zero-copy binary tokens\n`float64array` (argument and return) and `buffer` (argument only). Append `?` to a return type to map `Optional[T]` to `T | null`. On an\nargument, `?` accepts null/undefined: converting tokens (number, string,\nboolean, the integer tokens, declared structs) arrive as `Optional[T]`, while\n`any?`/`object?`/`array?` pass the raw value through. `number[]`,\n`float64array` and `buffer` have no meaningful Optional form and are refused.\n\n### Async returns\n\n`returns` accepts `number`, `int32`, `uint32`, `int64` and `string` for\n`async = true`. A `string` result is allocated by `execute_body` on the\nworker thread and consumed by the generated completion callback on the main\nthread, which is also where its destructor runs.\n\n### Long async jobs\n\n`thread = \"own\"` on an `async = true` function runs `execute_body` on a\nthread of the job's own (`AsyncWork.queue_on_thread`) instead of libuv's\nthread pool. That pool has four threads by default and `fs`, `dns.lookup`,\n`crypto` and `zlib` share it, so four long jobs there stall every file read\nin the process until one finishes. A thread costs tens of microseconds to\nstart (about 25 µs a call more than the pool, measured on a 4-core Linux\nVM), so short jobs stay on the pool, which is the default.\n\n### Classes with native state\n\n```toml\n[classes.tally]\njs_name = \"Tally\"\nstate = \"tally_state\"            # a declared [structs.*]\nconstructor_args = [\"number\"]\nconstructor_mojo_fn = \"tally_new\"\n\n[classes.tally.instance_methods.add]\nargs = [\"number\"]\nreturns = \"number\"\nmojo_fn = \"tally_add\"            # def tally_add(mut s: TallyStateData, n: Float64) -> Float64\n```\n\nThe generator heap-allocates the struct, wraps it onto the instance with a\n128-bit type tag derived from the class name, hands the unwrapped state to\nevery `mojo_fn` member, and emits the GC finalizer. Borrowing a method onto a\nforeign object is a TypeError, not a reinterpret. `mojo_fn` on setters and\nstatic methods is rejected (no instance to unwrap); use `body`.\n\n### Nullable returns (`Optional[T]` → `T | null`)\n\n```toml\n[functions.safe_divide]\njs_name = \"safeDivide\"\nargs = [\"number\", \"number\"]\nreturns = \"number?\"\nmojo_fn = \"safe_divide_pure\"\n```\n\n```mojo\ndef safe_divide_pure(a: Float64, b: Float64) -> Optional[Float64]:\n    if b == 0.0:\n        return None\n    return a / b\n```\n\n```js\nsafeDivide(10, 2); // 5\nsafeDivide(10, 0); // null\n```\n\n### Struct-to-object mapping (`[structs.*]`)\n\nDefine a typed JS object shape and get bidirectional Mojo struct ↔ JS object\nconverters — the Mojo equivalent of napi-rs `#[napi(object)]`:\n\n```toml\n[structs.config]\njs_name = \"Config\"\n[structs.config.fields]\nhost = \"string\"\nport = \"number\"\nverbose = \"boolean\"\n\n[functions.describe_config]\njs_name = \"describeConfig\"\nargs = [\"config\"]\nreturns = \"string\"\nmojo_fn = \"describe_config_pure\"\n```\n\n```mojo\nfrom generated.structs import ConfigData\n\n\ndef describe_config_pure(c: ConfigData) -> String:\n    var summary = c.host + \":\" + String(Int(c.port))\n    if c.verbose:\n        return summary + \" (verbose)\"\n    return summary\n```\n\nGenerates TypeScript:\n\n```ts\nexport interface Config { host: string; port: number; verbose: boolean; }\nexport function describeConfig(arg0: Config): string;\n```\n\n### Other generator features\n\n- **Async functions**: `async = true` + `execute_body` for worker-thread computation\n- **Classes**: `[classes.*]` with constructor, instance methods, getters/setters,\n  static methods\n- **Inline body**: Use `body` instead of `mojo_fn` for callbacks that need direct\n  N-API access\n\nSee `src/exports.toml` for the full set of examples.\n\n## API Reference\n\nFull typed API: [`build/index.d.ts`](build/index.d.ts) — auto-generated on every\nbuild, works in any TypeScript-aware IDE.\n\n| Category | Exports |\n| --- | --- |\n| Math & arithmetic | `add` `addInts` `bitwiseOr` `addIntsStrict` `addBigInts` `sumArgs` `isPositive` |\n| Strings | `hello` `greet` `toJsString` `createPropertyKey` `createExternalString` |\n| Objects | `createObject` `makeGreeting` `getProperty` `getKeys` `hasOwn` `deleteProperty` `setPropertyByKey` `hasPropertyByKey` `freezeObject` `sealObject` `getPrototype` |\n| Arrays | `sumArray` `mapArray` `arrayHasElement` `arrayDeleteElement` |\n| Binary data | `createArrayBuffer` `createBuffer` `createBufferCopy` `bufferFromArrayBuffer` `doubleFloat64Array` `createTypedArrayView` `createDataView` `createExternalArrayBuffer` |\n| Async & promises | `asyncDouble` `asyncTriple` `asyncProgress` `resolveWith` `rejectWith` `cancelAsyncWork` `asyncSleep` `threadSleep` |\n| Callbacks | `callFunction` `createCallback` `createAdder` `makeCallback` `makeCallback0` `makeCallback2` |\n| Classes | `Counter` (increment/reset/value) · `Animal` (name/speak) · `Dog` (breed) |\n| BigInt / Symbol / Date | `createSymbol` `symbolFor` `addBigInts` `bigIntFromWords` `bigIntToWords` `createDate` `getDateValue` |\n| Type checks & coercion | `strictEquals` `isInstanceOf` `coerceToBool` `coerceToNumber` `coerceToString` `coerceToObject` `isExternal` `isError` `isDataView` |\n| Errors | `throwTypeError` `throwRangeError` `throwSyntaxError` `throwValue` `catchAndReturn` |\n| GC & lifecycle | `createExternal` `attachFinalizer` `setInstanceData` `getInstanceData` `addCleanupHook` `removeCleanupHook` |\n| Runtime introspection | `getGlobal` `getNapiVersion` `getNodeVersion` `runScript` `adjustExternalMemory` |\n| Code-generated | `square` `clamp` `uppercase` `sumArrayPure` `negateBoolPure` `addInt32Pure` `describePure` `reverseStringsPure` `safeDivide` `findName` `echoConfig` `configSummary` `exampleAdd` `exampleGreet` `exampleIsPositive` `exampleClamp` `asyncSum` `ExamplePoint` |\n\n## Performance\n\nPer-call boundary overhead against [napi-rs](https://napi.rs), same Node\nprocess, same timing harness, verified-identical function semantics\n(darwin-arm64, Node 24, best of 5 interleaved rounds):\n\n| call | napi-mojo | napi-rs | ratio |\n|---|---|---|---|\n| `isPositive(42)` | 27.9 ns | 91.6 ns | 0.30x |\n| `createObject()` | 35.1 ns | 101.5 ns | 0.35x |\n| `add(1, 2)` | 35.8 ns | 97.5 ns | 0.37x |\n| `getNull()` | 18.9 ns | 33.7 ns | 0.56x |\n| `hello()` | 31.9 ns | 52.5 ns | 0.61x |\n| `makeGreeting()` | 188.2 ns | 278.0 ns | 0.68x |\n\n**Median 0.42x** — about 2.4x faster than napi-rs on these microbenchmarks.\nFull table and method in [`bench/napi-rs/README.md`](bench/napi-rs/README.md);\nreproduce with `node bench/napi-rs/compare.mjs`.\n\nThis is a recent change, and the honest version of the story is that napi-mojo\nwas **3.95x slower** until the measurement itself found the cause. The delta\nagainst napi-rs was flat at ~330 ns across calls whose absolute cost varied 8x\n— a constant tax, not a scaling one. It was the per-callback bootstrap: reading\na callback's data requires `napi_get_cb_info`, whose pointer could not come\nfrom the cache it was fetching, so every call ran `dlopen(NULL)` + `dlsym`\n(~346 ns). That single symbol is now held in a module-private data-segment slot\n(see `src/napi/global_cache.mojo`), and the tax is gone.\n\nCaveats worth knowing: this measures **binding-layer overhead only** — nothing\nhere says anything about Mojo versus Rust as languages. And the gap narrows as\nthe callee does more work (`makeGreeting()` at 0.68x), because fixed overhead\nis what is being removed.\n\n## Architecture\n\n1. `mojo build --emit shared-lib` produces a `.dylib`/`.so` renamed to `.node`\n2. Node.js calls `dlopen` on the `.node` file, then\n   `dlsym(\"napi_register_module_v1\")`\n3. Our exported Mojo function registers all callbacks via\n   `napi_define_properties`\n4. Each callback acts as a `napi_callback`: receives `(env, cbinfo)`, returns\n   `napi_value`\n5. N-API symbols are resolved at runtime from the host process via\n   `dlopen(NULL)`\n\nIn host mode the same machinery runs in reverse: `napi-mojo run` emits a\nwrapper that registers `mojo_main` as an ordinary export, plus a CJS bootstrap\nthat `require()`s the built `.node` and calls it with\n`{ require, argv, cwd }`. Node is still the process; Mojo is the program.\n\n## Development\n\n```bash\nnpm run build        # compile + generate TypeScript defs\nnpm test             # run the full Jest suite\nnpm run test:gc      # run the 7 GC finalizer tests (needs --expose-gc)\nnpm run generate:addon  # regenerate src/generated/ from src/exports.toml\nnpx jest tests/basic.test.js   # run a single test file\nnpm run generate:docs  # HTML API docs for the DEMO ADDON → docs/api-demo-addon/\n                       # (requires: npm i -D typedoc). A reference for the\n                       # framework itself is scoped in docs/plan-api-reference.md\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for coding standards and\n[docs/METHODOLOGY.md](https://github.com/codetalcott/napi-mojo/blob/main/docs/METHODOLOGY.md) for the TDD workflow.\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}