{"_id":"@briansunter/nib","_rev":"23-6cb3f128eeca9fff70fc095f2b00c4b6","name":"@briansunter/nib","dist-tags":{"latest":"0.21.0"},"versions":{"0.1.0":{"name":"@briansunter/nib","version":"0.1.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.1.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"dist":{"shasum":"11fe6453f03e3bb1298f9b92e2650b22b02bd13d","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.1.0.tgz","fileCount":45,"integrity":"sha512-ndENF2GOLxhUelQpHQog9mDHVJkENSwkbubhLhcmfRxKNX6nVXFBx5m6W/FnRXPfry29grCttWl/Jb98Pp4gpQ==","signatures":[{"sig":"MEQCIAWFyyXvj1iBfkVvHUhT63+Ff5mrWnRqYSM02NmLrN7YAiB3hUn5XZf6YHB+61J9VIZI5NY4SUYxZ0FEQLWAV/+D7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173225},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"bb392e5c826d8303cd3997573f29f7ba726577c9","scripts":{"dev":"tsx server.ts","test":"vitest run --coverage","build":"bun run typecheck && bun run build:client && bun run build:server && bun run prerender","preview":"vite preview --outDir dist/client","prerender":"tsx scripts/prerender.ts","typecheck":"tsc --noEmit","test:watch":"vitest","build:client":"vite build --outDir dist/client","build:server":"vite build --outDir dist/server --ssr src/entry-server.tsx","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.16.0","description":"A minimal static-site starter with TSX templates, React islands, Vite, Tailwind, and Markdown.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"tsx":"^4.20.6","vite":"^8.1.5","react":"^19.2.7","express":"^5.2.1","unified":"^11.0.5","react-dom":"^19.2.7","remark-gfm":"^4.0.1","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.1.0_1784413650184_0.0886657361664811","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@briansunter/nib","version":"0.2.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.2.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"dist":{"shasum":"0d761ff54e1cbf73470e1e0427f34147b5f08b0f","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.2.0.tgz","fileCount":44,"integrity":"sha512-3nlw8GjTtPPLO9vSBp5K6sh3E2c+pVPqlaJdKjwUqagCFpKZbWGHPeXOp2RDlMLnDsNBkJsg9VW34PGmFgHVTQ==","signatures":[{"sig":"MEUCIExxo1QTYMANyuPhhuRz8w5MimT3BzzBRhH/GV2OsjEoAiEAjO+rZlQMBl/FP5ylNgy7TGkojv133+rl1Hb0pmm/DXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":157913},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"2ad45eafdd8e666e6354c26266b9ffebac5e95ed","scripts":{"dev":"tsx server.ts","test":"vitest run --coverage","build":"bun run typecheck && bun run build:client && bun run build:server && bun run prerender","preview":"vite preview --outDir dist/client","prerender":"tsx scripts/prerender.ts","typecheck":"tsc --noEmit","test:watch":"vitest","build:client":"vite build --outDir dist/client","build:server":"vite build --outDir dist/server --ssr src/entry-server.tsx","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.5.1","description":"A minimal static-site starter with TSX templates, React islands, Vite, Tailwind, and Markdown.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"tsx":"^4.20.6","vite":"^8.1.5","react":"^19.2.7","express":"^5.2.1","unified":"^11.0.5","react-dom":"^19.2.7","remark-gfm":"^4.0.1","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.2.0_1784413963370_0.4469989610489138","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@briansunter/nib","version":"0.3.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.3.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"dist":{"shasum":"e6ffcafc6e87ecaf0cb8ab1447c5defcb3654978","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.3.0.tgz","fileCount":48,"integrity":"sha512-75INH4kidvQC8VXoHjwEjhX6EaJtAHBHdrM4c/x+xCtGE6n7E7WP1nqrrjcSPRGY6DdN3TP7jO9EoTukIwAwgw==","signatures":[{"sig":"MEUCIAyYfCQhohQdwZLXTuSSTRzDAKFWdSn5j6DQfmm85xzcAiEA63DQcjLWAAyzbMtehgWYiQiP6HBEmMV35X+x1E480oY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":188715},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"gitHead":"dc0af142294ed6427844cf6e9f55eae3ecaa0e1d","scripts":{"dev":"tsx server.ts","test":"vitest run --coverage","build":"bun run typecheck && bun run build:client && bun run build:server && bun run prerender","preview":"vite preview --outDir dist/client","prerender":"tsx scripts/prerender.ts","typecheck":"tsc --noEmit","test:watch":"vitest","build:client":"vite build --outDir dist/client","build:server":"vite build --outDir dist/server --ssr src/entry-server.tsx","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.5.1","description":"A small static-site starter for React, Markdown, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"tsx":"^4.20.6","vite":"^8.1.5","react":"^19.2.7","express":"^5.2.1","unified":"^11.0.5","react-dom":"^19.2.7","remark-gfm":"^4.0.1","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.3.0_1784417147484_0.10974317519410315","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@briansunter/nib","version":"0.4.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.4.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"bce5535ce750729d17ab26f78a35925dda58b83f","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.4.0.tgz","fileCount":52,"integrity":"sha512-jK3T1lcbBlTOKPdNiYxNSK16FhX/H9Fz0IwoEnzwGmeHFOLAlEfjZAg1zBka95TZU8VAuR2DEje5Adkw3U4/VA==","signatures":[{"sig":"MEYCIQDHUcUaHpGtQ1aPhHfnmYMtfPvjI8+LsKDdDvqa4qNp7wIhALhpCKZATbbu82WvTjiVmb4aHBWNpaeLOV+AhgYF4clQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":99163},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"302360cd35d3846de80fa3dd818fc0d1a5f5027c","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"tsc --noEmit","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","react":"^19.2.7","vitest":"^4.0.18","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.4.0_1784419908693_0.7047846560518185","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@briansunter/nib","version":"0.5.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.5.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"02fc84cbe5b94e218aa17946a6a4cc9f871490a0","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.5.0.tgz","fileCount":52,"integrity":"sha512-cdUDNPRsYTLSEfg0Ce7wnyW88PZ4ql+oejGSOOXe80HTR7M655sGVB82xr8/aCw/e3Iz8noa2LtgIcZ60CrRmw==","signatures":[{"sig":"MEQCIFTqknXD+kZpo3CgXF/J6z2ZkK0A8RYcv/GQSxxtxXpdAiAdD/530XHOHwDKFi2Fowe2L4dnnT96lmGMRz4PXWkbaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":100346},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"3d9f3050f6d56d4016bea9cd8c797bbd7a8da986","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"tsc --noEmit","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","react":"^19.2.7","vitest":"^4.0.18","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.5.0_1784421927635_0.7757328678736799","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@briansunter/nib","version":"0.6.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.6.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"cc22cb24fb269e4f177c26c23f59b106e2ecf1fe","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.6.0.tgz","fileCount":55,"integrity":"sha512-8SkYqtY8giKRyyNV0eDXwUE9Noeis5OQ6syE3v/eqcZdI6DZoCVOPy9bUslQNHGc4Lusr90FK0CheRAUhRhC1g==","signatures":[{"sig":"MEUCIBzikHePWg3ST9LPiSehqPU9Tlvw78s+b4c8uOiwZtnHAiEAkrVcTihDd8F0dH/1/JFUAuLujVtOr7a2CdqmrJRVnes=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":129599},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"760f5b6b0e95b13d486e0e964201430db9a805e9","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"tsc --noEmit","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.6.0_1784427863960_0.04333113426987656","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@briansunter/nib","version":"0.7.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.7.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"f0fe1c04465104397a3a372915a339a40028c605","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.7.0.tgz","fileCount":57,"integrity":"sha512-f+KTyOvCh/RHCMac+Ftcaj3rzLy3SkjU2RjjlUt3IZt1hj99Nh0qg+WCwWWX+8zuFxPfnSwE2Sk3udwUr+8vyg==","signatures":[{"sig":"MEUCICp/kkhvZSI5S3wO1jLu+qKBhyw5+burby6yepobtMUFAiEAlD9uXCRlPsnJYXMwoDgLQ5X8ugd4CVy17YPQxW3MpmE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":132196},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"5b4397460251935b705122fa4d25f15acebd2cd9","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"tsc --noEmit","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.7.0_1784429978716_0.9423853925118528","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@briansunter/nib","version":"0.8.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.8.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"2be62e091786bcc2452b44a90e212a9f40a093bb","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.8.0.tgz","fileCount":57,"integrity":"sha512-xLbFgvuq2Ui4/WWLPSWDd/Gz7ialNJemVeIcZrKjDGWcNy70tBLxHfvZQB/gwikCg5dm7Areg6HamB7Q311Jtw==","signatures":[{"sig":"MEQCIBGqJi5IbXAn1EcCR5g4Xccsbt2kdf9b4aBUOyX8xShIAiAX4v/sNr3FYbngi4zGVLekhkKEjwwbxSCsy0ncNLkZ+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":132442},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"68f4b0422dd74422e7fda94a40f978ca427d133f","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"tsc --noEmit","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","tailwindcss":"^4.3.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@tailwindcss/vite":"^4.3.3","@vitejs/plugin-react":"^6.0.3","@tailwindcss/typography":"^0.5.19"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.8.0_1784433124909_0.5304089315996123","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@briansunter/nib","version":"0.9.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.9.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"849674dde0488649e9043db8e160d33897869e2f","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.9.0.tgz","fileCount":64,"integrity":"sha512-dqblWvBb1Q7Vgd24xRAdsbQWztraIIlkLhcgSIaA/5K1FTPRp7/dOqlgx6YGNVtnjYDV4FwHXugSUq13/trQMA==","signatures":[{"sig":"MEUCIG7o1l98owSzHWnGeg1Sa6QYxeEKJYzZZU4z8Igro6I+AiEA9SVS0bQHsxz2obEUVaP5jGDy1HoDMvXPPkOew4+5NFs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193966},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"2c3c33e2682d40adcac43c7b7c8e73ef66765766","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:images":"bun run --cwd packages/nib-images build","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.9.0_1784454152515_0.8448859454465054","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@briansunter/nib","version":"0.10.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.10.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"93e93bb25ac0e350ebc27e68d7ba4be1ed8d97aa","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.10.0.tgz","fileCount":67,"integrity":"sha512-Eb0SEAoHi+A1794Fh2BdtE2tPGiZsW9R/u2hitg57OVE3TKzikxsVn/yBjMQ9WI8jEnm8bAco54Zdc4vZ78xPw==","signatures":[{"sig":"MEQCIAboxw90q92yukFk3+rdDjmnagy09+b6/lmlkPlNro+RAiBlVD0+mks8FUFMkf89kNDIbuMieJw9wQ971FiHlt6wGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":218290},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"b241dc782f54c125ff35f9e21a453dbac757c3f3","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:images":"bun run --cwd packages/nib-images build","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.10.0_1784490622825_0.829345846268916","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@briansunter/nib","version":"0.11.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.11.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"906f3b5ece7a2fd8c43feaa2369ff9a3e66ee462","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.11.0.tgz","fileCount":69,"integrity":"sha512-+j1VYaf0GgXATTG7LoRKHWLqTabQkFvOo46pKdiBePm6o7gOETEkfni6xzmHg0czVY43z/JDruFET+0RTce1JQ==","signatures":[{"sig":"MEYCIQDftFwjiEp3nNGDNxgHBOI6q+3Hg+uDMtOGvw3eichkqgIhAM6Hb502yglipeXRcfA+xQW6IFGdEEHJGBSKiKgQoj8g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":226551},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"d6aa6e8dfe7e24faed4220d46e2d93d304b7d6ff","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:images":"bun run --cwd packages/nib-images build","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.11.0_1784496518337_0.9663666279838274","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@briansunter/nib","version":"0.11.1","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.11.1","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"849cda32e5ce3700a523a34d9a1f8bbe65450abd","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.11.1.tgz","fileCount":69,"integrity":"sha512-upDVSqXyuyp8nYsc/JponOg2AhG3uLVdFnpsm317INNTOWhorLpQu5jU0eyiIdMZk/jPdygalNsdOOj2hylNuQ==","signatures":[{"sig":"MEYCIQCbc6uwFIrsgfJ9Jrwy3Gbn7J/s/ljeQ+LtYlpqrj4y+wIhAPWF1ZLWz0OFHjf/pkqvRsZQGK5QLlmExdcBE7kzUOmd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":226812},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"501208b5ae11655732735d78e6001f24c46f0990","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:images":"bun run --cwd packages/nib-images build","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.11.1_1784500417578_0.5069134911653665","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@briansunter/nib","version":"0.12.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.12.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"93443acbbba1067d3cf9bac804aa09622901f585","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.12.0.tgz","fileCount":73,"integrity":"sha512-MPkhuV00Zuw4JUOqf1qxtkuhDh2iOktK2BpABjZ3pA8y4Xp44WPX2AWSXwGvz0det8em8oY0Vu0+kC9GhSl01A==","signatures":[{"sig":"MEQCIGhFC4VLsB1fU3sX1duJ8QaVWQ/gMCOQqJn206zSPjkaAiAvrU0ZMGiCyyBviii7fR5c9PU6otDYinUYx34LqPY0EQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":237932},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"a827bc4dbc39be122c7e88cacb8a9cc9c1046890","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:images":"bun run --cwd packages/nib-images build","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.12.0_1784503620486_0.7213098310768429","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@briansunter/nib","version":"0.13.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.13.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"fa419bfb6d2130ff9dc54e82d07cc5d6b7f4b488","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.13.0.tgz","fileCount":74,"integrity":"sha512-bCZK7SQah3EsEvVhWZSsnRJY6OI0EsRrmz4Wc9TwQSaFPvw6G6e4K7UnXF9Ke8ZGgI2NebuqAsLOwjKEqTsweQ==","signatures":[{"sig":"MEYCIQDkT06sxBgz1BZKTaD0H2WtJlGLnoqMzeXzWT8ErzfDqwIhALOZiEvXzFj/8RFNItcpXJs1dCaD9kJM/QMLCq82NMrj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":250860},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"0fdf0fc704b91f1682cab3fe0d20e3f0bece378b","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:images":"bun run --cwd packages/nib-images build","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.13.0_1784507986416_0.7710779739410201","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@briansunter/nib","version":"0.14.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.14.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"ab9da09f9734946c9b410a99da847b4f8f8c7672","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.14.0.tgz","fileCount":88,"integrity":"sha512-r9nXrtIJ2WZdogJXhwwPChiRToUgz19mbpvcYVUna2M1Vlu4k3/wKy2cZ0gR7yYWIW7gbBt8cjkylOtg92WRlQ==","signatures":[{"sig":"MEYCIQDbLjmLaPRrCyV0tgkSvlZ8r0OJ2Rz+Is2jr+7QkYDesAIhAPv7he0jFO1gWQo83jmahUbkleUZNXhy8PAmTEuMOXKT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":275417},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./package.json":"./package.json","./internal/client":{"types":"./dist/framework/runtime/client.d.ts","import":"./dist/framework/internal/client.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"}},"gitHead":"4a4cca026c308bec22c3c871e3a4fa4148027da8","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","preview":"node bin/nib.js preview --root examples/docs","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:docs":"node bin/nib.js build --root examples/docs","test:watch":"vitest","build:images":"bun run --cwd packages/nib-images build","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.14.0_1784515490765_0.3271285330232203","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@briansunter/nib","version":"0.15.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"_id":"@briansunter/nib@0.15.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"297c3f6b291049521cc7e3531bd86d08623e3171","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.15.0.tgz","fileCount":134,"integrity":"sha512-/wuHpY/5vABrZi6yUWWs6APJph8/xR+cAl63XWRqzA8R5h/NowLIn5EFff/mkXHlyCk2i77tcOcpDGLthap5uA==","signatures":[{"sig":"MEYCIQDemZjRXK23XyBjyCLjeDguFHDKvMNFkdr4P+k7R/9zggIhAPCZVsTKASC1hHQue2JhbGQL5u1S6qctdVnMybSLI8V5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":434418},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./client":{"types":"./dist/framework/client.d.ts","import":"./dist/framework/client.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./navigation":{"types":"./dist/framework/navigation.d.ts","import":"./dist/framework/navigation.js"},"./package.json":"./package.json","./client/islands":{"types":"./dist/framework/client-islands.d.ts","import":"./dist/framework/client/islands.js"},"./internal/server":{"types":"./dist/framework/runtime/server.d.ts","import":"./dist/framework/internal/server.js"},"./client/behaviors":{"types":"./dist/framework/client-behaviors.d.ts","import":"./dist/framework/client/behaviors.js"},"./client/navigation":{"types":"./dist/framework/client-navigation.d.ts","import":"./dist/framework/client/navigation.js"}},"gitHead":"1c0b45d30ecddb74194e335a8a4bc481d9df0c1a","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","preview":"node bin/nib.js preview --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:blog":"node bin/nib.js build --root examples/blog","build:docs":"node bin/nib.js build --root examples/docs","check:blog":"node bin/nib.js check --root examples/blog","test:watch":"vitest","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","build:images":"bun run --cwd packages/nib-images build","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","preview:blog":"node bin/nib.js preview --root examples/blog","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","parse5":"^8.0.1","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","happy-dom":"^20.11.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.15.0_1785265118198_0.13520667346677784","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"@briansunter/nib","version":"0.15.1","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"license":"UNLICENSED","_id":"@briansunter/nib@0.15.1","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"0f415c57a13c97a56c9d6d535c21ab078d0d774c","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.15.1.tgz","fileCount":158,"integrity":"sha512-ua5wSD6TUP1hS4U/s7cNv+gVywzgyW2QAq9/PdCEnS4wvih74bZsCKrwDybvWvot+IJ1ucRbomXAbd5ZTMQ9gw==","signatures":[{"sig":"MEYCIQC2+uWc0iE759pyUlA8wm8jtGsr3U0ZQ0kKzn7rCUqp4QIhAOjb+rCFJlwn1nWxo7W64bECODIPbEpkdRmI9KWNp3Vj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.15.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":460209},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./client":{"types":"./dist/framework/client.d.ts","import":"./dist/framework/client.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./navigation":{"types":"./dist/framework/navigation.d.ts","import":"./dist/framework/navigation.js"},"./package.json":"./package.json","./client/islands":{"types":"./dist/framework/client/islands.d.ts","import":"./dist/framework/client/islands.js"},"./internal/server":{"types":"./dist/framework/internal/server.d.ts","import":"./dist/framework/internal/server.js"},"./client/behaviors":{"types":"./dist/framework/client/behaviors.d.ts","import":"./dist/framework/client/behaviors.js"},"./client/navigation":{"types":"./dist/framework/client/navigation.d.ts","import":"./dist/framework/client/navigation.js"}},"gitHead":"8f8d12c6bf37ccdc9c841d5a1d9dc3d13108d9d1","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","preview":"node bin/nib.js preview --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:blog":"node bin/nib.js build --root examples/blog","build:docs":"node bin/nib.js build --root examples/docs","check:blog":"node bin/nib.js check --root examples/blog","test:watch":"vitest","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","build:images":"bun run --cwd packages/nib-images build","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","preview:blog":"node bin/nib.js preview --root examples/blog","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","parse5":"^8.0.1","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","happy-dom":"^20.11.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.15.1_1785268390881_0.4995508638911752","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@briansunter/nib","version":"0.16.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"license":"UNLICENSED","_id":"@briansunter/nib@0.16.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"d093f1a1e672f9dc2c26b355b0faa251fa022e29","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.16.0.tgz","fileCount":161,"integrity":"sha512-mZbyDiTrkO5r7xJ0VBkOS9Lh7eVp0UNgX7s/4eQVsmXWKLZecy2iqW+2ZXnsRd+b4D+r6ksiGIHNqvro2ew5hQ==","signatures":[{"sig":"MEQCIFUXUIJa3dXwJl8ve4x04HNOkLRiVqifnSsPA0zG4zmbAiBNkwZhnzzrrpMVzsIa0jagUOJbMtwRRTWiS46sG6S+8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":462112},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./client":{"types":"./dist/framework/client.d.ts","import":"./dist/framework/client.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./navigation":{"types":"./dist/framework/navigation.d.ts","import":"./dist/framework/navigation.js"},"./package.json":"./package.json","./client/islands":{"types":"./dist/framework/client/islands.d.ts","import":"./dist/framework/client/islands.js"},"./internal/server":{"types":"./dist/framework/internal/server.d.ts","import":"./dist/framework/internal/server.js"},"./client/behaviors":{"types":"./dist/framework/client/behaviors.d.ts","import":"./dist/framework/client/behaviors.js"},"./client/navigation":{"types":"./dist/framework/client/navigation.d.ts","import":"./dist/framework/client/navigation.js"}},"gitHead":"5026210835024a5eb5d8a2e76ae7c72cb473f78a","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","preview":"node bin/nib.js preview --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:blog":"node bin/nib.js build --root examples/blog","build:docs":"node bin/nib.js build --root examples/docs","check:blog":"node bin/nib.js check --root examples/blog","test:watch":"vitest","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","build:images":"bun run --cwd packages/nib-images build","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","preview:blog":"node bin/nib.js preview --root examples/blog","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","parse5":"^8.0.1","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","happy-dom":"^20.11.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.16.0_1785272796211_0.6019957550481314","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@briansunter/nib","version":"0.17.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"license":"UNLICENSED","_id":"@briansunter/nib@0.17.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"b6fe669427190f764385c26701e70d77eb1eeffb","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.17.0.tgz","fileCount":158,"integrity":"sha512-EHv7CNAcGqbF8Jse80zKd+UbvS+0HiAGOAYtU8Da08c2+Z4rjNmQKb9fnvNkEDtFmKoi4r4CptthVOD94N5EEQ==","signatures":[{"sig":"MEQCIBF8adC9aYZExH5BnuyScSZW3XW836jdfxrY60avEkBUAiBwmEc9jOYzxJJ018MeEmtTbARHUfNQVyuAac98coRymA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":480943},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./client":{"types":"./dist/framework/client.d.ts","import":"./dist/framework/client.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./navigation":{"types":"./dist/framework/navigation.d.ts","import":"./dist/framework/navigation.js"},"./package.json":"./package.json","./client/islands":{"types":"./dist/framework/client/islands.d.ts","import":"./dist/framework/client/islands.js"},"./internal/server":{"types":"./dist/framework/internal/server.d.ts","import":"./dist/framework/internal/server.js"},"./client/behaviors":{"types":"./dist/framework/client/behaviors.d.ts","import":"./dist/framework/client/behaviors.js"},"./client/navigation":{"types":"./dist/framework/client/navigation.d.ts","import":"./dist/framework/client/navigation.js"}},"gitHead":"43fdb132f0c7a474450dbcf1391168a0396483f8","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","preview":"node bin/nib.js preview --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:blog":"node bin/nib.js build --root examples/blog","build:docs":"node bin/nib.js build --root examples/docs","check:blog":"node bin/nib.js check --root examples/blog","test:watch":"bun run build:framework && bun run build:images && vitest --exclude tests/architecture.test.ts --exclude tests/package-consumer.test.ts","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","build:images":"bun run --cwd packages/nib-images build","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","preview:blog":"node bin/nib.js preview --root examples/blog","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","test:watch:images":"bun run --cwd packages/nib-images test --watch","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","parse5":"^8.0.1","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","happy-dom":"^20.11.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.17.0_1785281742538_0.695554306938081","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@briansunter/nib","version":"0.18.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"license":"UNLICENSED","_id":"@briansunter/nib@0.18.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"ae16f266151080e45d671a0bc1738d1cbaa0c195","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.18.0.tgz","fileCount":158,"integrity":"sha512-KhZpTQCSrItOeVHl9lK1es6Lz0FDxfvWNCuHJlDwifSryi/LBQs2Zifwe2eWMrH5MpVoEHc/zd3rnH9A6t6bsw==","signatures":[{"sig":"MEYCIQD2+1A9SOSDOw8Y0rUe0bcLPrcLJLvOvRYtzE+CvmwdtAIhAKc1mLfSke3vMpt+L9KLcKTMvIhTJs6oarACoCFICWWz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":482023},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./client":{"types":"./dist/framework/client.d.ts","import":"./dist/framework/client.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./navigation":{"types":"./dist/framework/navigation.d.ts","import":"./dist/framework/navigation.js"},"./package.json":"./package.json","./client/islands":{"types":"./dist/framework/client/islands.d.ts","import":"./dist/framework/client/islands.js"},"./internal/server":{"types":"./dist/framework/internal/server.d.ts","import":"./dist/framework/internal/server.js"},"./client/behaviors":{"types":"./dist/framework/client/behaviors.d.ts","import":"./dist/framework/client/behaviors.js"},"./client/navigation":{"types":"./dist/framework/client/navigation.d.ts","import":"./dist/framework/client/navigation.js"}},"gitHead":"bfda6518ea3960d2e3996f8a60edeb3353a290b1","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","preview":"node bin/nib.js preview --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:blog":"node bin/nib.js build --root examples/blog","build:docs":"node bin/nib.js build --root examples/docs","check:blog":"node bin/nib.js check --root examples/blog","test:watch":"bun run build:framework && bun run build:images && vitest --exclude tests/architecture.test.ts --exclude tests/package-consumer.test.ts","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","build:images":"bun run --cwd packages/nib-images build","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","preview:blog":"node bin/nib.js preview --root examples/blog","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","test:watch:images":"bun run --cwd packages/nib-images test --watch","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","parse5":"^8.0.1","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","happy-dom":"^20.11.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.18.0_1785309731401_0.7714009737758798","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@briansunter/nib","version":"0.19.0","keywords":["static-site","vite","react","islands","markdown","tailwind","ssr"],"license":"UNLICENSED","_id":"@briansunter/nib@0.19.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"d567ca2462b0e2a91be0e58c02312d286953d866","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.19.0.tgz","fileCount":160,"integrity":"sha512-rbM66xCzsJHNECV9yiwxhzPp3dyuUXDQIR5C8VKMEfwnTQK+5EqoxGqUyGEDG3LL2/yU1b2gO/7DxUkR0Be0Qg==","signatures":[{"sig":"MEUCIQDp0zCST2GohUvF30O45r2leWgpyUyURhYguPPPDsHl/wIgdAg67GmmFdm6Z5jH0AWYilznPpPjKqUXd9yLn3rAbvs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":488117},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./client":{"types":"./dist/framework/client.d.ts","import":"./dist/framework/client.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./navigation":{"types":"./dist/framework/navigation.d.ts","import":"./dist/framework/navigation.js"},"./package.json":"./package.json","./client/islands":{"types":"./dist/framework/client/islands.d.ts","import":"./dist/framework/client/islands.js"},"./internal/server":{"types":"./dist/framework/internal/server.d.ts","import":"./dist/framework/internal/server.js"},"./client/behaviors":{"types":"./dist/framework/client/behaviors.d.ts","import":"./dist/framework/client/behaviors.js"},"./client/navigation":{"types":"./dist/framework/client/navigation.d.ts","import":"./dist/framework/client/navigation.js"}},"gitHead":"0af4d80168c3f30d9a040398f820db27d771a45d","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","preview":"node bin/nib.js preview --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:blog":"node bin/nib.js build --root examples/blog","build:docs":"node bin/nib.js build --root examples/docs","check:blog":"node bin/nib.js check --root examples/blog","test:watch":"bun run build:framework && bun run build:images && vitest --exclude tests/architecture.test.ts --exclude tests/package-consumer.test.ts","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","build:images":"bun run --cwd packages/nib-images build","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","preview:blog":"node bin/nib.js preview --root examples/blog","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","test:watch:images":"bun run --cwd packages/nib-images test --watch","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, and opt-in islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","parse5":"^8.0.1","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","happy-dom":"^20.11.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.19.0_1785328825385_0.17489355575009413","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@briansunter/nib","version":"0.20.0","keywords":["static-site","vite","react","progressive-enhancement","markdown","tailwind","ssr"],"license":"UNLICENSED","_id":"@briansunter/nib@0.20.0","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"homepage":"https://github.com/briansunter/nib#readme","bugs":{"url":"https://github.com/briansunter/nib/issues"},"bin":{"nib":"bin/nib.js"},"dist":{"shasum":"b25c4d0a522c32f2a1ba6c879cc31b457f4277c3","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.20.0.tgz","fileCount":139,"integrity":"sha512-aNHGSM3Z4GT6+RL/lXyqJIQj2NRVBobv/1XfPDwWXTOhysH3cJA0VvrJ3wobYcKglet913RoEppcAXOFbQXOaw==","signatures":[{"sig":"MEUCIQDVzPDs4yd9QmS4slcg39MArfK2l6rrqWvzWUTizM3SFwIgLlYLMSPjk+E0V1AoFMJ7cQRHrjEv89Ys0w59wdr2Esg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":407078},"type":"module","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./react":{"types":"./dist/framework/react.d.ts","import":"./dist/framework/react.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./package.json":"./package.json","./internal/server":{"types":"./dist/framework/internal/server.d.ts","import":"./dist/framework/internal/server.js"},"./internal/islands":{"types":"./dist/framework/internal/islands.d.ts","import":"./dist/framework/internal/islands.js"},"./internal/enhancements":{"types":"./dist/framework/internal/enhancements.d.ts","import":"./dist/framework/internal/enhancements.js"}},"gitHead":"ccab76fdd614ee2db0eb241da2882da2b8e0766d","scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","build":"bun run build:framework && bun run build:images && bun run build:docs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","preview":"node bin/nib.js preview --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","build:blog":"node bin/nib.js build --root examples/blog","build:docs":"node bin/nib.js build --root examples/docs","check:blog":"node bin/nib.js check --root examples/blog","test:watch":"bun run build:framework && bun run build:images && vitest --exclude tests/architecture.test.ts --exclude tests/package-consumer.test.ts","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","build:images":"bun run --cwd packages/nib-images build","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","preview:blog":"node bin/nib.js preview --root examples/blog","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","test:watch:images":"bun run --cwd packages/nib-images test --watch","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","check:version-policy":"tsx scripts/check-version-policy.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"repository":{"url":"git+https://github.com/briansunter/nib.git","type":"git"},"workspaces":["packages/*"],"_npmVersion":"11.5.1","description":"A static-site framework for React, Markdown, data pages, DOM enhancements, and optional React islands.","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","vite":"^8.1.5","parse5":"^8.0.1","unified":"^11.0.5","remark-gfm":"^4.0.1","tinyglobby":"^0.2.17","gray-matter":"^4.0.3","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-stringify":"^10.0.1","@vitejs/plugin-react":"^6.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.3","devDependencies":{"tsx":"^4.20.6","yaml":"^2.9.0","react":"^19.2.7","vitest":"^4.0.18","csv-parse":"^7.0.1","happy-dom":"^20.11.1","react-dom":"^19.2.7","smol-toml":"^1.7.0","typescript":"^5.9.3","@types/node":"^24.10.1","tailwindcss":"^4.3.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/vite":"^4.3.3","@vitest/coverage-v8":"^4.0.18","@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"_npmOperationalInternal":{"tmp":"tmp/nib_0.20.0_1786501840141_0.6783842602281327","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@briansunter/nib","version":"0.21.0","packageManager":"bun@1.3.3","description":"A static-site framework for React, Markdown, data pages, DOM enhancements, and optional React islands.","license":"UNLICENSED","repository":{"type":"git","url":"git+https://github.com/briansunter/nib.git"},"bin":{"nib":"bin/nib.js"},"exports":{".":{"types":"./dist/framework/index.d.ts","import":"./dist/framework/index.js"},"./plugin":{"types":"./dist/framework/plugin.d.ts","import":"./dist/framework/plugin.js"},"./sitemap":{"types":"./dist/framework/sitemap.d.ts","import":"./dist/framework/sitemap.js"},"./rss":{"types":"./dist/framework/rss.d.ts","import":"./dist/framework/rss.js"},"./verify":{"types":"./dist/framework/verify.d.ts","import":"./dist/framework/verify.js"},"./testing":{"types":"./dist/framework/testing.d.ts","import":"./dist/framework/testing.js"},"./hosting":{"types":"./dist/framework/hosting.d.ts","import":"./dist/framework/hosting.js"},"./react":{"types":"./dist/framework/react.d.ts","import":"./dist/framework/react.js"},"./server":{"types":"./dist/framework/server.d.ts","import":"./dist/framework/server.js"},"./internal/server":{"types":"./dist/framework/internal/server.d.ts","import":"./dist/framework/internal/server.js"},"./internal/enhancements":{"types":"./dist/framework/internal/enhancements.d.ts","import":"./dist/framework/internal/enhancements.js"},"./internal/islands":{"types":"./dist/framework/internal/islands.d.ts","import":"./dist/framework/internal/islands.js"},"./package.json":"./package.json"},"keywords":["static-site","vite","react","progressive-enhancement","markdown","tailwind","ssr"],"engines":{"node":"^20.19.0 || >=22.12.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"type":"module","sideEffects":false,"workspaces":["packages/*"],"scripts":{"dev":"bun run build:framework && node bin/nib.js dev --root examples/docs","dev:blog":"bun run build:framework && bun run build:images && node bin/nib.js dev --root examples/blog","build":"bun run build:framework && bun run build:images && bun run build:docs","build:docs":"node bin/nib.js build --root examples/docs","build:blog":"node bin/nib.js build --root examples/blog","build:images":"bun run --cwd packages/nib-images build","benchmark:images":"bun run build:images && bun run --cwd packages/nib-images benchmark","benchmark:inspection":"bun run build:framework && node --expose-gc scripts/benchmark-inspection.mjs","build:framework":"vite build --config vite.framework.config.ts && tsc --project tsconfig.build.json","test":"bun run build:framework && bun run build:images && bun run --cwd packages/nib-images test && vitest run --coverage --exclude tests/package-consumer.test.ts && vitest run tests/package-consumer.test.ts --no-coverage","preview":"node bin/nib.js preview --root examples/docs","preview:blog":"node bin/nib.js preview --root examples/blog","test:watch":"bun run build:framework && bun run build:images && vitest --exclude tests/architecture.test.ts --exclude tests/package-consumer.test.ts","test:watch:images":"bun run --cwd packages/nib-images test --watch","typecheck":"bun run build:framework && bun run build:images && tsc --noEmit && bun run --cwd packages/nib-images typecheck","check:unused":"tsc --noEmit --noUnusedLocals --noUnusedParameters && tsc --project packages/nib-images/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters && tsc --project examples/blog/tsconfig.json --noEmit --noUnusedLocals --noUnusedParameters","check:blog":"node bin/nib.js check --root examples/blog","verify:blog":"tsc --project examples/blog/tsconfig.json --noEmit && bun run build:blog && bun run check:blog && node examples/blog/scripts/check-output.mjs","verify":"bun run typecheck && bun run check:unused && bun run test && bun run build:docs && bun run verify:blog","check:version-policy":"tsx scripts/check-version-policy.ts"},"dependencies":{"@vitejs/plugin-react":"^6.0.3","gray-matter":"^4.0.3","parse5":"^8.0.1","rehype-stringify":"^10.0.1","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","tinyglobby":"^0.2.17","unified":"^11.0.5","vite":"^8.1.5","zod":"^4.4.3"},"peerDependencies":{"react":"^19.2.0","react-dom":"^19.2.0"},"devDependencies":{"@briansunter/nib-images":"workspace:*","@tailwindcss/typography":"^0.5.19","@tailwindcss/vite":"^4.3.3","@types/node":"^24.10.1","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitest/coverage-v8":"^4.0.18","csv-parse":"^7.0.1","react":"^19.2.7","react-dom":"^19.2.7","smol-toml":"^1.7.0","tailwindcss":"^4.3.3","tsx":"^4.20.6","typescript":"^5.9.3","vitest":"^4.0.18","yaml":"^2.9.0"},"_id":"@briansunter/nib@0.21.0","gitHead":"fab2b0342205928e7562659a8274f3032317f9dc","bugs":{"url":"https://github.com/briansunter/nib/issues"},"homepage":"https://github.com/briansunter/nib#readme","_nodeVersion":"24.18.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-tbHFSmhTj//mmz+PsSZk1+dkhu2vZpJS6vRd6EEsXLql84ORT4je2r9/kJ8H7xA6Ge1AEhHUxV8DM+JWDsqCBA==","shasum":"fd3c4122eee556da997dc21eb4e0ab833b4bed84","tarball":"https://registry.npmjs.org/@briansunter/nib/-/nib-0.21.0.tgz","fileCount":140,"unpackedSize":412712,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@briansunter%2fnib@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCf0gysoZBan4sqMsJRV95uzcXfzb0o5sHeBqyo8ld/2wIgbMUpvLi62M3LZt3UyTNz8wtSgt3WPcYWP4ID0qkwL64="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:491db1c4-aca2-479c-9f84-7ce7510d98c1"}},"directories":{},"maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nib_0.21.0_1786598028033_0.328443404080639"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T22:27:30.040Z","modified":"2026-08-13T05:13:48.575Z","0.1.0":"2026-07-18T22:27:30.320Z","0.2.0":"2026-07-18T22:32:43.504Z","0.3.0":"2026-07-18T23:25:47.610Z","0.4.0":"2026-07-19T00:11:48.856Z","0.5.0":"2026-07-19T00:45:27.786Z","0.6.0":"2026-07-19T02:24:24.092Z","0.7.0":"2026-07-19T02:59:38.891Z","0.8.0":"2026-07-19T03:52:05.025Z","0.9.0":"2026-07-19T09:42:32.655Z","0.10.0":"2026-07-19T19:50:22.967Z","0.11.0":"2026-07-19T21:28:38.486Z","0.11.1":"2026-07-19T22:33:37.724Z","0.12.0":"2026-07-19T23:27:00.619Z","0.13.0":"2026-07-20T00:39:46.560Z","0.14.0":"2026-07-20T02:44:50.892Z","0.15.0":"2026-07-28T18:58:38.374Z","0.15.1":"2026-07-28T19:53:11.051Z","0.16.0":"2026-07-28T21:06:36.397Z","0.17.0":"2026-07-28T23:35:42.695Z","0.18.0":"2026-07-29T07:22:11.624Z","0.19.0":"2026-07-29T12:40:25.529Z","0.20.0":"2026-08-12T02:30:40.332Z","0.21.0":"2026-08-13T05:13:48.191Z"},"bugs":{"url":"https://github.com/briansunter/nib/issues"},"license":"UNLICENSED","homepage":"https://github.com/briansunter/nib#readme","keywords":["static-site","vite","react","progressive-enhancement","markdown","tailwind","ssr"],"repository":{"type":"git","url":"git+https://github.com/briansunter/nib.git"},"description":"A static-site framework for React, Markdown, data pages, DOM enhancements, and optional React islands.","maintainers":[{"name":"briansunter","email":"raggedy_quad.1j@icloud.com"}],"readme":"# Nib\n\n<p align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"docs/nib-wordmark-light.svg\" />\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"docs/nib-wordmark-dark.svg\" />\n    <img src=\"docs/nib-wordmark-dark.svg\" alt=\"Nib\" width=\"220\" />\n  </picture>\n</p>\n\nNib is a static-site framework for React. It handles routing, Vite, development\nSSR, HTML documents, and prerendering; a site supplies pages, layouts, data,\nstyles, and optional client enhancements or React islands.\n\nEvery known route is emitted as complete HTML. Browser interaction is explicit,\nroute-scoped, and absent by default. DOM enhancements add no browser React;\nReact runs in the browser only for islands a route explicitly renders. Links\nand forms use native document navigation; Nib has no client router.\n\n## Quick start\n\nNib requires Node 20.19 or newer.\n\n```bash\nnpx @briansunter/nib init my-site\ncd my-site\nnpm run dev\n```\n\nFor a compact feature-complete example, see the\n[Commonplace blog template](examples/blog/README.md). It uses fictional sample\ncontent while demonstrating Markdown, collections, typed data pages,\nresponsive images, client enhancements, feeds,\nsearch data, redirects, and hosting output.\n\n## Features\n\n- File-based routes from `src/pages`, including a static `404.html`.\n- React pages rendered to HTML with no browser runtime by default.\n- GitHub-Flavored Markdown with validated frontmatter.\n- Folder layouts for route trees and named layouts for Markdown.\n- Typed data pages that can turn YAML, CSV, or another format into one or many\n  routes.\n- Plugin-contributed data formats and virtual page, XML, or text routes.\n- Configured redirects and `always`, `never`, or `ignore` trailing-slash policy.\n- Required page titles and optional renderer-plugin document-head contributions.\n- Configurable Unified remark and rehype Markdown extensions.\n- Build-time collections for indexes, navigation, and related content.\n- Wrapper-free client enhancements with immediate or `visible` startup.\n- Optional React islands with `load` or `visible` hydration and serialized props.\n- An optional application-wide `src/client.ts` initializer for browser setup\n  that is not scoped to one enhanced element.\n- Native document navigation for links and forms; no client router or document\n  swapping runtime.\n- Optional Vite styling adapters; the starter opts into Tailwind without making\n  it a framework dependency.\n- Base-path support for GitHub Pages and other subpath deployments.\n- A small `nib.config.ts` configuration point for framework options, content\n  sources, collections, optional integrations, and an optional shell.\n\n## Authoring model\n\n```text\nnib.config.ts\npublic/\nsrc/\n├── pages/\n│   ├── page.tsx                 -> /\n│   ├── about/page.tsx           -> /about/\n│   ├── notes/page.md            -> /notes/\n│   ├── catalog/page.csv         -> configured data routes\n│   ├── 404/page.tsx             -> /404.html\n│   └── layout.tsx               -> wraps the route tree\n├── layouts/\n│   └── docs.tsx                 -> named Markdown layout\n├── enhancements/\n│   └── reveal/\n│       └── index.client.ts      -> scoped DOM enhancement\n├── islands/\n│   └── counter.tsx              -> optional React island\n├── content/                     -> optional collection inputs\n├── client.ts                    -> optional application-wide browser setup\n├── site-shell.tsx               -> optional page chrome\n└── style.css\n```\n\nEach route folder contains one `page.tsx`, `page.md`, or configured\n`page.<extension>`. Routes are discovered at build time, so there is no client\nrouter or runtime route loader.\n\nEvery page supplies typed metadata with a required `title`. Markdown pages support `title`,\n`description`, `draft`, `layout`, and social preview fields (`image`, `type`,\nand `twitterCard`) by default; `defineMarkdown` can replace that schema.\n`definePageSource` handles custom page formats, while\n`defineCollection` loads typed data shared across routes. Use\n`fromPageSource(source)` when an index should reuse the same validated entries\nthat generated its data pages. Use `fromPages()` or `fromMarkdownPages()` when\nthe pages themselves are authoritative and an index, archive, feed, or search\nresource needs selected route metadata and validated frontmatter. If a page\nrenderer imports a plugin-transformed module (for example `?nib-image`), declare it with\n`pageRenderer('./src/data-pages', 'ProjectPage')`; Nib imports that module from\nits configured Vite page-source graph rather than while loading `nib.config.ts`.\n\nFor pages and layouts that consume route, collection, or layout data, use the\nidentity helpers to make the prop contract explicit at the module seam:\n\n```tsx\nimport { defineLayout, definePage, type PageLayoutProps, type PageProps } from '@briansunter/nib'\nimport type config from '../../../nib.config'\n\nexport default definePage<typeof config>(({ collections }: PageProps<typeof config>) => (\n  <ul>{collections.posts.map((post) => <li key={post.id}>{post.data.title}</li>)}</ul>\n))\n\nexport const DocsLayout = defineLayout<{ title: string }, typeof config>(\n  ({ children, frontmatter }: PageLayoutProps<{ title: string }, typeof config>) => (\n    <article><h1>{frontmatter?.title}</h1>{children}</article>\n  ),\n)\n```\n\n`defineDataPage` provides the same check for a custom data-page component.\nThese helpers return the original component and add no browser or build\nruntime code.\n\nGenerated pages can compile prose through the same synchronous Markdown seam\nas `page.md`:\n\n```tsx\nimport { Content, markdownBody } from '@briansunter/nib'\n\nconst body = markdownBody(source, {\n  file: 'src/content/projects/example.md',\n  profile: config.markdown,\n})\n\nexport function ProjectBody() {\n  return <Content body={body} as=\"section\" className=\"prose\" data-pagefind-body=\"\" />\n}\n```\n\n`markdownBody()` retains the source identity for Unified diagnostics and\nreturns an opaque, frozen value. Only `Content` can render its compiled HTML.\nFor a Markdown route, `PageLayoutProps.Content` is the same body already bound\nto the route; a named layout can render it with its own semantic tag, classes,\nand static attributes instead of inspecting or cloning `children`. Nib fails\nthe server render if that route body is omitted or rendered more than once.\n\nKeep execution targets explicit:\n\n```ts\nimport {\n  defineCollection,\n  enhance,\n  type ClientEnhancement,\n  type ClientInitializer,\n} from '@briansunter/nib'\nimport { island } from '@briansunter/nib/react'\nimport { glob, jsonFile, jsonValue } from '@briansunter/nib/server'\n```\n\nThe root package owns universal authoring and imperative enhancement contracts,\n`/react` owns opt-in React island definitions, and `/server` owns\nfilesystem-backed loaders. Nib rejects a `.server.ts(x)` module imported by\nthe production client graph or a `.client.ts(x)` module imported by the\nproduction server graph.\n\nThe server entry includes three validated JSON collection helpers. `jsonFile()`\nloads an array as one entry per element, `jsonGlob()` loads one entry per\nmatched file, and `jsonValue()` loads a whole object or other JSON value as one\nentry (with the id `default` unless `id` is supplied):\n\n```ts\nimport { defineCollection, z } from '@briansunter/nib'\nimport { jsonValue } from '@briansunter/nib/server'\n\nexport const settings = defineCollection(jsonValue({\n  file: 'src/content/settings.json',\n  schema: z.object({ title: z.string(), featured: z.boolean() }),\n}))\n```\n\nAll three helpers parse through the same source-labeled error boundary before\nschema validation, so malformed JSON reports the loader and project-relative\nfile instead of an unlocated `JSON.parse` failure.\n\nApplication-wide CSS belongs in `src/style.css`. CSS can also be owned by a\nclient enhancement, React island, or `src/client.ts`. A stylesheet imported\nonly by a page, layout, or server-rendered component cannot reach the deployed\nclient graph, so Nib reports it as a build/development error instead of\npublishing an unstyled page.\n\nFor progressive enhancement, spread `enhance()` onto an existing HTML element\nand put one matching implementation at\n`src/enhancements/reveal/index.client.ts`:\n\n```tsx\nimport { enhance } from '@briansunter/nib'\n\nexport function Reveal() {\n  return (\n    <section {...enhance('reveal')}>\n      <button type=\"button\">Show details</button>\n      <p data-details hidden>Complete static content.</p>\n    </section>\n  )\n}\n```\n\n```ts\nimport type { ClientEnhancement } from '@briansunter/nib'\n\nexport default ((root, signal) => {\n  const button = root.querySelector('button')\n  const details = root.querySelector<HTMLElement>('[data-details]')\n  button?.addEventListener('click', () => {\n    if (details) details.hidden = !details.hidden\n  }, { signal })\n}) satisfies ClientEnhancement\n```\n\nThe implementation receives its scoped `root` and `signal` as positional\narguments. Plain JavaScript can default-export the mount function directly.\nRoutes without enhancement markers omit the enhancement script, and projects\nwithout enhancement modules do not build that runtime. Enhancements may nest\nwhen each owns a different element; cleanup aborts the deepest root first.\n\nUse a React island only when a feature needs React state or hooks in the\nbrowser. Island IDs come from their file paths below `src/islands`, and each\nmodule default-exports `island(Component)` or\n`island(Component, { when: 'visible' })` from `@briansunter/nib/react`. `load`\nis the default, and there is no `idle` strategy:\n\n```tsx\n// src/islands/counter.tsx\nimport { useState } from 'react'\nimport { island } from '@briansunter/nib/react'\n\nfunction Counter({ initialCount }: { initialCount: number }) {\n  const [count, setCount] = useState(initialCount)\n  return <button onClick={() => setCount(count + 1)}>Count: {count}</button>\n}\n\nexport default island(Counter, { when: 'visible' })\n```\n\nImport and render the default export like an ordinary component. Nib renders\nits initial HTML on the server, serializes JSON-safe props, and hydrates that\nisland on load or as it approaches the viewport. Routes without islands omit\nthe island runtime, and an island-free project ships no client React.\n\n### Site identity and document head\n\nSite identity and navigation are application data, not framework configuration.\nKeep them in an ordinary typed module and import that module wherever the\napplication needs it:\n\n```ts\n// src/site.ts\nexport const site = {\n  name: 'My site',\n  description: 'Recent writing from My site.',\n  navigation: [\n    { label: 'Home', href: '/' },\n    { label: 'Notes', href: '/notes/' },\n  ],\n} as const\n```\n\nThe shell can import `site.navigation`; pages remain the authority for their\nown metadata:\n\n```ts\nimport type { PageMeta } from '@briansunter/nib'\n\nexport const meta = {\n  title: 'Notes | My site',\n  description: 'Recent notes.',\n  head: {\n    elements: [{ tag: 'meta', attributes: { name: 'theme-color', content: '#0f172a' } }],\n  },\n} satisfies PageMeta\n```\n\nThere is no `resolveHead` phase. Without a plugin, Nib emits page metadata\ndirectly. Applications that want site-wide document policy can opt into the\ntyped first-party plugin:\n\n```ts\nimport { defineConfig, siteMetadata } from '@briansunter/nib'\nimport { site } from './src/site'\n\nexport default defineConfig({\n  plugins: [\n    siteMetadata({\n      title: site.name,\n      description: site.description,\n      titleTemplate: `%s | ${site.name}`,\n    }),\n  ],\n})\n```\n\nThe plugin uses its title for `/`, applies `titleTemplate` to non-home page\ntitles, and uses its description only when a page omits one. It can also add\nshared structured head elements. Navigation remains ordinary app data.\nRenderer plugins can contribute the same `HeadContribution` shape from their\ntyped `renderer().head(context)` hook. Nib emits page metadata followed by\nplugin contributions; later `title` and `description` overrides win. Head\nattributes are escaped, event-handler attributes are rejected, and script/style\ntext is protected from closing its raw-text element.\nUse `metadata()` for canonical, Open Graph, Twitter, and optional generic\nstructured data. Its static image accepts either a URL string or the same\nstructured `MetadataImage` as page metadata, including alt text and dimensions.\nA resolver can compute social defaults from the route, frontmatter, or data:\n\n```ts\nimport { metadata } from '@briansunter/nib'\n\nmetadata({\n  siteName: 'Example',\n  twitterSite: '@example',\n  image: {\n    src: '/social/default.png',\n    alt: 'Example',\n    width: 1200,\n    height: 630,\n    type: 'image/png',\n  },\n  resolve: ({ route, data }) => {\n    const project = data as { slug?: string } | undefined\n    return {\n      ...(route.path.startsWith('/projects/') && project?.slug\n        ? { image: `/social/projects/${project.slug}.png` }\n        : {}),\n      type: route.path.startsWith('/writing/') ? 'article' : 'website',\n    }\n  },\n})\n```\n\nEach of `image`, `type`, and `twitterCard` resolves independently. Explicit\n`route.meta` wins first, then `resolve(context)`, then the static plugin value.\nThe resolver is synchronous because it runs during the already-data-backed\npage render; perform I/O in a collection or page source instead.\n\n## Optional Vite adapters\n\nNib owns Vite's entries, SSR, base path, and output settings. A project can add\nVite plugins through the narrow `vite` factory in `nib.config.ts`; the factory\nruns separately for development, client, and server graphs. The starter uses it\nfor Tailwind:\n\n```ts\nimport { defineConfig } from '@briansunter/nib'\nimport tailwindcss from '@tailwindcss/vite'\n\nexport default defineConfig({\n  origin: 'https://my-site.example',\n  vite: () => tailwindcss(),\n})\n```\n\nUse `plugins` instead for packages that need Nib lifecycle hooks in addition to\nVite, such as the optional image optimizer below.\n\n## Routes, redirects, sitemap, and RSS\n\nConfigured redirects emit safe redirect HTML in static builds and real HTTP\nredirects during development. `trailingSlash` controls canonical route paths\nand matching across development, preview, and static output: `always` writes\ndirectory indexes, while `never` writes extensionless HTML files for leaf\nroutes and indexes for route parents that contain child pages. Preview redirects\nan alternate spelling to the canonical URL. When deploying `never`, configure a\nhost that serves extensionless page files as `text/html` and rewrites a\nparent's extensionless URL to its index artifact.\n\nAuthored route identities must be absolute local paths. Nib rejects queries,\nhashes, backslashes, repeated separators, dot segments (including encoded dot\nsegments), and encoded path separators before applying the trailing-slash\npolicy. Local redirect destinations may add a query or hash, but their path is\nvalidated by the same rules and cannot point back to the source pathname.\n\n```ts\nimport { defineConfig } from '@briansunter/nib'\nimport { rss } from '@briansunter/nib/rss'\nimport { sitemap } from '@briansunter/nib/sitemap'\n\nexport default defineConfig({\n  origin: 'https://my-site.example',\n  trailingSlash: 'always',\n  redirects: {\n    '/old': '/new',\n    '/external': {\n      destination: 'https://example.com/new',\n      status: 302,\n    },\n  },\n  plugins: [\n    sitemap(),\n    rss({\n      title: 'My site',\n      description: 'Recent writing from My site.',\n      items: [\n        { title: 'Hello', link: '/posts/hello/', pubDate: '2026-07-19' },\n      ],\n    }),\n  ],\n})\n```\n\nPlugins can also contribute typed page-source adapters, virtual React pages,\nstatic resources, and redirects. `@briansunter/nib/rss` is a first-party RSS\n2.0 resource-route helper: item `link` values may be absolute URLs or Nib route\npaths, which are resolved with the configured `base`. Its `items` option can\nalso be an async function receiving the current immutable route manifest, or an\nexplicit `fromCollection(collection, mapper)` capability. A capability grants\nthat resource access to only the named collection and returns deeply frozen\nbuild data. The generic resource route API remains available for Atom, JSON\nFeed, or another custom format.\nRoute providers run in plugin order, so later providers receive an immutable\nsnapshot that includes routes already contributed by earlier plugins. Nib\nretains path normalization, collision detection, base paths, and output-file\nownership.\n\nBuilds also emit `dist/client/.nib/publication.json`. It records the manifest\nversion, base path, trailing-slash policy, and each published route's kind,\ncanonical path, artifact, status, content type, and redirect destination when\napplicable. Static-host adapters can use it instead of reimplementing Nib's\nextensionless and directory-index rules. Plugin finalizers receive this same\nfrozen manifest as `context.publication`, so output integrations can open exact\nartifacts without recursively crawling `dist/client` or reconstructing routes.\n\nBuilds also emit `dist/client/.nib/client.json`. This versioned client-provenance\nreport records runtime entries, convention-owned enhancement/island modules, and\nroute-owned stylesheets and module preloads discovered while rendering each page.\nSite verifiers can enforce generic ownership and preload invariants from this\ntyped report without reparsing HTML or Vite's private manifest.\n\nRun `nib check` after a build to validate publication artifacts, titles, image\nalt text, and local `href`, `src`, `srcset`, and\n`poster` references. Checks use one route/file index and one standards-parsed\ndocument per page, then report every issue with a stable code. `nib inspect`\nprints the read-only inspection summary without treating it as a verification\nsuccess; `nib inspect --json` emits its compact, path-safe report.\n\nNode consumers can import `inspectSite`, `verifySite`, and\n`SiteVerificationError` from `@briansunter/nib/verify`. The returned inspection\nowns frozen route, file, and parsed-page indexes. The browser-facing package\nentry intentionally does not load the filesystem or HTML parser.\n\nSite-owned verification can be passed through `verifySite({ extensions })`.\nEach extension receives that same parsed inspection rather than a source or\noutput path, and all of its diagnostics are stamped with the extension name.\nExtensions should express site policy only; route resolution, HTML parsing, and\nartifact ownership remain built-in checks.\n\n`@briansunter/nib/testing` exposes the same standards parser through\n`semanticHtmlSnapshot()` and `compareSemanticHtml()`. It also exports\n`renderReactPage()` and `RenderedReactPage` for tests that need Nib's actual\nstatic React boundary rather than a separate renderer. `createBuildOutput()`\nprovides the same manifest-guarded artifact adapter received by plugin\nfinalizers, which keeps finalizer tests out of internal package entries:\n\n```tsx\nimport { renderReactPage } from '@briansunter/nib/testing'\n\nconst rendered = renderReactPage(<main>Article</main>)\nexpect(rendered.html).toContain('<main>Article</main>')\nexpect(rendered.enhancements).toEqual([])\n```\n\n```ts\nimport { createBuildOutput } from '@briansunter/nib/testing'\n\nconst output = createBuildOutput(clientDirectory, publication)\nawait output.write('search/index.json', '{}')\n```\n\nThe render helper returns HTML plus the discovered enhancement and island\nmanifests. Its optional second argument lists Markdown bodies the page must\nrender exactly once, and it applies the same marker, serialization, and parser\nvalidation as a real build. The\n`nib-semantic-v1` normalizer compares visible text, repeated headings and dates,\nlinks, and structural counts; `nib-typography-v1` retains curly quote\ndifferences. These are content-parity helpers, not visual-equivalence claims.\n\nWhen `@briansunter/nib-images` participates in a production build it writes a\ndeterministically sorted `.nib/images.json` candidate report. It contains only\ncontent-derived source identities, output-relative files, formats, dimensions,\nquality, and width caps—never authoring paths. The core inspector validates the\nreport and also rejects leaked `data-nib-width` authoring hints.\n\nDevelopment and preview bind to loopback by default. To expose a server through\na known hostname such as a Tailscale name, bind explicitly and allow only that\nhost; repeat the option for more than one hostname:\n\n```bash\nnpx @briansunter/nib dev --host 0.0.0.0 --allowed-host macmini.example.ts.net\nnpx @briansunter/nib preview --host 0.0.0.0 --allowed-host macmini.example.ts.net\n```\n\n`--host` controls the network interface and `--allowed-host` controls accepted\nHTTP `Host` headers. Keep the allowlist explicit rather than opening every host.\n\n## Markdown extensions\n\n`markdown.remarkPlugins` run after Nib's GitHub-Flavored Markdown parser, and\n`markdown.rehypePlugins` run before HTML serialization:\n\n```ts\nimport { defineConfig } from '@briansunter/nib'\nimport remarkToc from 'remark-toc'\nimport rehypeExternalLinks from 'rehype-external-links'\n\nexport default defineConfig({\n  markdown: {\n    remarkPlugins: [[remarkToc, { heading: 'Contents' }]],\n    rehypePlugins: [[rehypeExternalLinks, { rel: ['nofollow'] }]],\n  },\n})\n```\n\nConfigured Unified plugins receive a VFile whose `history` contains the\nMarkdown source path. This makes source-relative diagnostics and asset\nresolution possible without changing the generated page API.\n\n## Client enhancement loading\n\nEnhancement JavaScript is lazy by module. Immediate roots may preload their own\nchunk; roots configured with `{ when: 'visible' }` wait until the marked\nelement approaches the viewport. CSS imported by an enhancement is linked on\nevery route that renders that enhancement, including visible roots, and is\ndeduplicated against global and application-client styles.\n\n`enhance()` returns the canonical `data-nib-enhancement` and optional\n`data-nib-when` attributes. Spread the result onto the intrinsic HTML element\nthat the client module should receive. Nib treats final rendered HTML as the\nsource of truth and validates the same marker contract in raw HTML.\n\n## React island loading\n\nAn island module lives at `src/islands/<id>.tsx` and must default-export\n`island(Component)`. Nested paths produce nested IDs. The optional `when` value\nis `load` (the default) or `visible`; it is fixed for every instance of that\nisland. Props must be JSON-serializable because Nib embeds them in the static\ndocument for hydration. Island CSS is route-scoped like enhancement CSS.\n\nNib server-renders each island as complete initial HTML. Only routes that\nrender an island link the island runtime and React client code. Routes made\nfrom ordinary TSX, Markdown, data pages, and DOM enhancements remain free of\nclient React.\n\nRender an island where a custom HTML element is valid flow content. Do not put\nan island directly inside restricted parser contexts such as `table`, `tbody`,\n`tr`, or `select`; make the containing table or control subtree the island\ninstead. Nib parses the emitted document and fails the build if the browser\nwould restructure an island boundary before hydration.\n\n## Native navigation and optional application client\n\nNib does not intercept links or forms. Navigation loads each destination's\nprerendered document through the browser's native behavior; there is no client\nrouter, document swap, prefetch controller, or navigation history API.\n\nUse enhancements for browser code owned by one rendered element. When an\napplication needs one site-wide browser initializer instead, add the exact\noptional entry `src/client.ts`:\n\n```ts\nimport type { ClientInitializer } from '@briansunter/nib'\n\nexport default ((signal) => {\n  const reportOnline = () => {\n    document.documentElement.toggleAttribute('data-online', navigator.onLine)\n  }\n  reportOnline()\n  window.addEventListener('online', reportOnline, { signal })\n  window.addEventListener('offline', reportOnline, { signal })\n}) satisfies ClientInitializer\n```\n\nNib discovers this file without configuration and invokes its default export\nwith an `AbortSignal`. It may finish synchronously or return a promise. Use the\nsignal for listener cleanup; Nib aborts it when replacing the client module in\ndevelopment. CSS imported from `src/client.ts` is application-wide. Projects\nwithout this file do not build or link an application entry. Links and forms use\nnative browser navigation.\n\nGenerated Markdown uses the neutral `nib-markdown` class. Sites own typography,\ncolors, widths, and other prose presentation through their layouts or global\nstylesheet.\n\n## Scope\n\nNib is for sites whose routes and data can be resolved at build time. It does\nnot add dynamic route parameters, runtime routes, server actions, runtime data\nloaders, React Server Components, whole-page hydration, a client router, or JSX\ninside Markdown. React hydration is limited to explicitly declared islands.\n\n## Documentation\n\nThe [documentation site](https://briansunter.github.io/nib/docs/) covers setup,\npages, Markdown, layouts, data sources, collections, client enhancements,\nReact islands, and GitHub Pages.\n\nRepository maintainers can run `bun run verify` for the ordered framework,\npackage-consumer, documentation, and blog-template gate. The example is a root\nworkspace, so `bun install --frozen-lockfile` installs the exact dependency\ngraph used by CI.\n\n## Optional optimized images\n\nInstall the image package only in projects that need local image transformation:\n\n```bash\nnpm install @briansunter/nib-images\n```\n\nConfigure it as a normal typed Nib plugin, then import local raster files with\nthe explicit `?nib-image` query. `Image` emits static responsive `<picture>`\nmarkup with intrinsic dimensions, lazy loading by default, and no client runtime.\nSet `maxWidth` to put a hard ceiling on emitted transforms when a full or\nconstrained image will never be displayed at its source width.\n\n```tsx\nimport { Image } from '@briansunter/nib-images'\nimport hero from './hero.jpg?nib-image'\n\nexport default function Home() {\n  return <Image src={hero} alt=\"Mountain trail\" layout=\"full\" maxWidth={1280} priority />\n}\n```\n\n```ts\n// nib.config.ts\nimport { defineConfig } from '@briansunter/nib'\nimport { images } from '@briansunter/nib-images/plugin'\n\nexport default defineConfig({\n  plugins: [images()],\n})\n```\n\nFor public paths stored in collections or frontmatter, configure an image\n`content` root and import `resolveContentImage(path)` from the server-only\n`@briansunter/nib-images/content` entry. The plugin generates that lookup from\nthe configured directories, replacing a consumer-owned eager\n`import.meta.glob` map. Unknown paths return `undefined`, duplicate public\nmappings fail the build, and browser-target imports are rejected.\n\nSee [image optimization](examples/docs/src/pages/docs/image-optimization/page.md)\nfor layouts, cache behavior, and the current SVG/animated-image limits.\n\nFor implementation details and design rationale:\n\n- [Architecture](docs/reference/architecture.md)\n- [Client enhancements](docs/decisions/client-enhancements.md)\n- [Type-safe plugins and image optimization](docs/reference/type-safe-plugins-and-image-optimization.md)\n- [Licensing](docs/reference/licensing.md)\n  — implemented design, APIs, and validation matrix\n\n## Contributing\n\nThe repository test suite is run by Vitest through the package scripts. Use\n`bun run test` (or `bun run test:watch` while editing); invoking `bun test`\ndirectly uses Bun's separate test runner and is not supported for these files.\n\n```bash\nbun install --frozen-lockfile\nbun run typecheck\nbun run test\nbun run build\nbun run check:version-policy\n```\n\nFramework source lives in `src`, the published initializer in\n`templates/default`, the documentation site in `examples/docs`, and the\nfeature-complete sample in `examples/blog`. Optional publishable packages live\nunder `packages/*`; the image package can be built or tested directly with\n`bun run --cwd packages/nib-images <script>`.\n","readmeFilename":"README.md"}