{"_id":"@bershadsky/metaframework","_rev":"12-9a56f21457e78052281af9c1fc96d2e6","name":"@bershadsky/metaframework","dist-tags":{"latest":"0.7.0"},"versions":{"0.1.0":{"name":"@bershadsky/metaframework","version":"0.1.0","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.1.0","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"c37d0544b54a73cfef2db17e4769d000e8bb2aaf","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.1.0.tgz","fileCount":1569,"integrity":"sha512-qav9pS6yVquyyXiMmtR4rn9H1vMldawY+9bQsltlzMF9xQ3A/pRNJj5a5EVWOuo56s9toA4LgMSR6p9ESdLs2w==","signatures":[{"sig":"MEUCIQDjZTPUR2ocTp31V3Iq6n7hrU9Kj/7cyDAURIFjd/5DsAIgaH4vAJTBmIUW5yC+LGuh00EQVHsrKj3Xy880YjDhXIE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40473776},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"0e03783150ca6f22dde5e3fd6d9ba02d3b9978ac","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.6.2","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.1","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.1","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.1.0_1787296610296_0.6687945647815698","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bershadsky/metaframework","version":"0.2.0","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.2.0","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"3293eec9bbd57b143916c6fd50f3a7c1807db142","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.2.0.tgz","fileCount":1596,"integrity":"sha512-l+LH4FZPcbFN3AK8+Y2bKQNRj6+QhvCeAQmB4YjNoPag7MP+dVvjsefM5phPHOA+fkkOvoWqJTx4siUwkjR1sA==","signatures":[{"sig":"MEUCIE2XBZTLz78+/Y34cQIxjyIiD1KYk/JcZtmWDgUMhmuIAiEAo3jPbc6PMLYBbpxwDA7Uu47Z972WGbcK0DuTRm3sdbo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40423067},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"3702c58d6b2a57110e1fd4024ac1697673c39c1d","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.6.2","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.2.0_1787559747509_0.3044861438489639","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@bershadsky/metaframework","version":"0.2.1","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.2.1","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"b87a75484729c1c9fce3037066f73a22d98d34bd","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.2.1.tgz","fileCount":1596,"integrity":"sha512-9TpZApw0yO4Uq2VqHAe8qZyeDtjfrmoBYWrNlsdTQpGyEMw09Sn2ehYt/XJgZOw9vZxJQfkvmnXnxNiElkpXvQ==","signatures":[{"sig":"MEQCIDLCUUzKaQslDM/O1SaZ3OhJI+5xjalxHKEfDNYwF02VAiBpEbR5wW1WHiOjB87SvEeBpRbbBGQbxgXK6GVhyOR4nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40423067},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"b698f870675d5db3f99b425d9e3138cc4445b544","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.6.2","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.2.1_1787566738283_0.24683317684491946","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bershadsky/metaframework","version":"0.2.2","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.2.2","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"898c000e8e32805ae1a1deb5b19f23205768944f","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.2.2.tgz","fileCount":1596,"integrity":"sha512-C7OWhjaDo4/K3kT8K21cZwRLd0JEBbP4Kn6hbf4yYEM4MV7P5WdYmJDK0WsEP3kO3OYjifVPHXW1saXYqsLbQA==","signatures":[{"sig":"MEUCIAVvvCIvagvtn87aWR9RghQgajoBkqHTRYUheSRagRm0AiEA3xrLSq3pgQ1hCeI+zw99hxhNf4RvvYHGbh+lCDbsJyg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40423207},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"7819a95ebfd379c47b9cb78017de06ce50bb4052","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.6.2","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.2.2_1788124956374_0.16179120393483748","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bershadsky/metaframework","version":"0.3.0","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.3.0","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"024afa5cbc606605e33853e40733553476758815","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.3.0.tgz","fileCount":1596,"integrity":"sha512-sofbTSTqQK6GLE0qb0GdQLyddoTsAFYke5P95W3DMAimndmdDQtlD2k0Kg71jbf2e8Q6ZK+uxbMyaINa7qPbeg==","signatures":[{"sig":"MEYCIQDv/MvgduRq/ng7KwJVhkipGgZXEePdYS3m2oNBgNX17AIhAPV+LWDNT0q1hJ4pb4d78TM5MkCYp54OghX/rTHBrzhA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40426239},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"550405238bd8e0e106242649fb510fd9bc969a39","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.6.2","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.3.0_1788173956917_0.08725956786055766","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bershadsky/metaframework","version":"0.4.0","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.4.0","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"791b6c6bc39ab24e684f61477f2ed71f3bee1fce","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.4.0.tgz","fileCount":1596,"integrity":"sha512-714Lpzp/AIs4yz0nFAJRKl+GNGPlC0dnVgIOzQMMfdu0zcKWGOTxhNapO468hxKnUP1uoCx0jHCOmgRsvvDD8A==","signatures":[{"sig":"MEUCICeD3GcYFhW1sTcUTGrSDuoWW/mptgWdefVUj2dDGGYzAiEAmU3GzYtAlFiGDITZzrl2HN9CeQdhsfxN+AFWFfAvwcs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40435355},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"a30b15dde8b6bebc05269ecd95f015efe6e6d033","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.6.2","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"25.2.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.4.0_1788207589895_0.6785076638593768","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bershadsky/metaframework","version":"0.5.0","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.5.0","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"7c98d10b4ec05313508876386ce38ecabe8fb5ba","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.5.0.tgz","fileCount":1597,"integrity":"sha512-GlucJs0QeAMse5QaVdQg6+hISopjiaBTe/RG/1s7e1c+QcBiq5eEVAOxQpFTYnwNREqv5Ui3nQe3kiwEmiU7Kg==","signatures":[{"sig":"MEQCIB1wWsQ82mK5UEwze4yWYKdfTq1eUQ7ZfuzgZhbBDGxMAiARE2EzQJzSotWbI0kkON7PbnDmRasT9mxrm2/rfuYimA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bershadsky%2fmetaframework@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40441978},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"3e7286a583ea3f26cc45571c9f02973b871ee2bc","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9dd4975-5bb3-48d5-94da-6f70b6d294a8"}},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.17.0","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"24.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.5.0_1788376485913_0.677317262762152","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@bershadsky/metaframework","version":"0.5.1","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.5.1","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"b2913a52a0b6f19b71d204c0ee82a5a0b240b4c6","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.5.1.tgz","fileCount":1597,"integrity":"sha512-5tBTgIayYe7hGBDqU4NDCP9XsUZaPJYFH2pAWnMt6vTEfT+q8ZLbEgviEIDQ6FJahqzqYDVoV6ptsZtBdzLsgg==","signatures":[{"sig":"MEQCIE0JiQctqKtqgzK1txdmiBFVArRTnBGa0siL2fsex/gpAiBUbSpvTqf3ChaJljbSIzb03XVfOK/dJiWtM+GtCxlmIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bershadsky%2fmetaframework@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40446577},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"0a7691e13442cd0fbe8765ad4ff0b241721ffb0a","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9dd4975-5bb3-48d5-94da-6f70b6d294a8"}},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.19.0","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.5.1_1788880542050_0.7095753753910725","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bershadsky/metaframework","version":"0.6.0","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.6.0","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"dca17b3b380390e05d810530c8309609801efd39","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.6.0.tgz","fileCount":1597,"integrity":"sha512-x1dGwR/XAdpHlz+LP4A83dLY9izVODl7QQnBw53vxp0WIl59M7Fwvb9TNPDR/Rg8N6e+EL8GmoV0ilT+/luwXA==","signatures":[{"sig":"MEQCIGsBeBT+6BUp3CxdxY8MvE6H61JJa6fINk9HiJ980Z6lAiAPwt9v2qikJ1TvSrDpzvZ24faaLrHwl08zsLxTzq1j8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICI7qgrAkjiFxXdc1ATeSuWu4O/ypTHUxU2zlkLIl1N7AiEA3HB1ALASHoJHmBSuCFeaYsUZrBy4KgStT7r++N9KbbM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bershadsky%2fmetaframework@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40446577},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"f6bff30cdc73b9be21f7a11087f72662452457ed","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9dd4975-5bb3-48d5-94da-6f70b6d294a8"}},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.19.0","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.6.0_1789803501360_0.9948926862112202","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@bershadsky/metaframework","version":"0.6.1","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.6.1","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"134d7a0a3cb12b4a846a3aada3a0c7a63b1561e0","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.6.1.tgz","fileCount":1597,"integrity":"sha512-NkY6n+zSt0T6p0B891t0wi0MjGkHJBqfzZ+RmUP1US2SHtYhsid8caG9AhU+Bri4XRGmL48wiL0d56BSSUZPBg==","signatures":[{"sig":"MEUCIQDAZ1THVNk0FptRIOTJXMQNhTyY8HJMluiOw7xf6AZoGAIgDRdMS2h32nWbrSw+R0IYc9pu+2NG/yUH3RA85cM9CUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHbcVLWuq0J7Ju0BqcQiZEDiL2pB6EaWq0fVTv0lBwTLAiBZqIkDD+Y5Qu/lHimip6Wu23gbsoghLio9T+M4KzQ0eA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bershadsky%2fmetaframework@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40453584},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"f0e7e3ba95571f2b5a0f5b9c2298c648a01590a1","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9dd4975-5bb3-48d5-94da-6f70b6d294a8"}},"overrides":{"jotai":"1.11.2"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.19.0","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.2","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.6.1_1789805863223_0.14300812788756945","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@bershadsky/metaframework","version":"0.6.2","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","_id":"@bershadsky/metaframework@0.6.2","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"bin":{"metaframework":"bin/metaframework.mjs"},"dist":{"shasum":"850b3188943a4abb9b77fa5ffd528019acc18daf","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.6.2.tgz","fileCount":1597,"integrity":"sha512-BrMoT4Qjdtw6Ziq6/sFaOw4Jc2v0kMhSOeUMGeHmpb/cTWDj15+etKfj+dPKr4fE8Eyki9uVCLa6iEHNgr72Yg==","signatures":[{"sig":"MEYCIQC9NcHVxlZZOTW73PM3zvp+iUvew7/VunzW8xcRe6ndvQIhAO/OalR20Kop1rcU72G5t5yF2ww60XTezCshOBJQ+rba","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAlNy6IehKFOM4tG3l96BebO6VQuquORbqtCJ4ipuuflAiEAiipg1jPKxJHClUfQDzDLdHAWMu4fsOb0ZZ2wwmycGsQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bershadsky%2fmetaframework@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40427498},"type":"module","engines":{"node":">=20.9.0"},"gitHead":"b40cc7d21ae38752d3cb947bcb8db52acd7f85e9","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9dd4975-5bb3-48d5-94da-6f70b6d294a8"}},"overrides":{"jotai":"1.11.2","dompurify":"3.4.13","@stoplight/react-error-boundary":"3.0.0"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.19.0","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.3","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/metaframework_0.6.2_1789808265757_0.5415872957295105","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"_id":"@bershadsky/metaframework@0.7.0","bin":{"metaframework":"bin/metaframework.mjs"},"bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"dist":{"shasum":"0036f632f44d071258c489cb48f5aa1998f1afde","tarball":"https://registry.npmjs.org/@bershadsky/metaframework/-/metaframework-0.7.0.tgz","fileCount":1597,"integrity":"sha512-4Oq8imHcPIBrDEEbedntsUrMMvUpGI0d/fd3NjD94JXdsJp19M8t7YhVdgZjkIX844ebWWi2dkF9ih1No8rAAQ==","signatures":[{"sig":"MEUCIQC8Ngw2j6SS0j+HZy69iL9Z8Fh2S5bgH3baXPHKtou+mQIgJZ6ClOF0eNEToUxI5LjVyZswqlFGX4pQdliooWC/L0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCrHn0+aR8pnIeP/z+groIKX5DWZE12VCMNG9To+xV9owIgU9ZCqlZOmf9KBUy0kFHA8v7La6qXUHLLLqvNI9gt5YE="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bershadsky%2fmetaframework@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":40429368},"name":"@bershadsky/metaframework","type":"module","author":{"name":"Sergey Bershadsky"},"engines":{"node":">=20.9.0"},"gitHead":"b6f8716dda57aab941d30cf86228d60db1753bbc","license":"PolyForm-Noncommercial-1.0.0","scripts":{"dev":"next dev","lint":"eslint","test":"vitest run","build":"next build","start":"next start","package":"npm run build && node scripts/assemble-standalone.mjs","prepack":"node scripts/build-embedded-schemas.mjs --check && npm run package","typecheck":"tsc --noEmit","test:watch":"vitest"},"version":"0.7.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f9dd4975-5bb3-48d5-94da-6f70b6d294a8"}},"homepage":"https://github.com/sergio-bershadsky/metaframework#readme","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"overrides":{"jotai":"1.11.2","dompurify":"3.4.13","@stoplight/react-error-boundary":"3.0.0"},"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"_npmVersion":"11.19.0","description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","directories":{},"maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","zod":"^4.4.3","clsx":"^2.1.1","next":"16.3.3","yaml":"^2.9.0","elkjs":"^0.12.0","react":"19.2.8","eslint":"^9","shadcn":"^4.18.0","vitest":"^4.1.11","xstate":"^5.32.5","js-yaml":"^5.3.0","mermaid":"^11.17.0","radix-ui":"^1.6.7","react-dom":"19.2.8","remark-gfm":"^4.0.1","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1","gray-matter":"^4.0.3","tailwindcss":"^4","@types/react":"^19","lucide-react":"^1.32.0","@xyflow/react":"^12.11.3","monaco-editor":"^0.56.0","@types/js-yaml":"^4.0.9","react-markdown":"^10.1.0","tailwind-merge":"^3.6.0","tw-animate-css":"^1.4.0","@types/react-dom":"^19","@stoplight/mosaic":"^1.53.5","eslint-config-next":"16.3.2","@monaco-editor/react":"^4.7.0","@tailwindcss/postcss":"^4","class-variance-authority":"^0.7.1","@stoplight/markdown-viewer":"^5.7.1","@stoplight/json-schema-viewer":"^4.16.4","@stoplight/mosaic-code-viewer":"^1.53.5","@apidevtools/json-schema-ref-parser":"^16.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/metaframework_0.7.0_1789809459658_0.3176828628707944"}}},"time":{"created":"2026-08-21T07:16:50.069Z","modified":"2026-09-19T09:17:40.269Z","0.1.0":"2026-08-21T07:16:50.683Z","0.2.0":"2026-08-24T08:22:27.829Z","0.2.1":"2026-08-24T10:18:58.659Z","0.2.2":"2026-08-30T21:22:36.693Z","0.3.0":"2026-08-31T10:59:17.233Z","0.4.0":"2026-08-31T20:19:50.277Z","0.5.0":"2026-09-02T19:14:46.248Z","0.5.1":"2026-09-08T15:15:42.364Z","0.6.0":"2026-09-19T07:38:21.763Z","0.6.1":"2026-09-19T08:17:43.449Z","0.6.2":"2026-09-19T08:57:46.011Z","0.7.0":"2026-09-19T09:17:39.904Z"},"bugs":{"url":"https://github.com/sergio-bershadsky/metaframework/issues"},"author":{"name":"Sergey Bershadsky"},"license":"PolyForm-Noncommercial-1.0.0","homepage":"https://github.com/sergio-bershadsky/metaframework#readme","keywords":["architecture","architecture-as-code","catalog","documentation","docs-as-code","json-schema","metaframework","solution-design"],"repository":{"url":"git+https://github.com/sergio-bershadsky/metaframework.git","type":"git","directory":"framework/portal"},"description":"Serve a metaframework solution catalog — a reviewable file tree of markdown entities — as a live portal, with reload on change","maintainers":[{"name":"bershadsky","email":"sergio.bershadsky@gmail.com"}],"readme":"# @bershadsky/metaframework\n\nServe a **metaframework solution catalog** — a reviewable file tree of markdown\nentities with YAML frontmatter and JSON/YAML artifacts — as a live portal.\n\nThe portal reads the catalog straight off your disk. Nothing is imported, copied\nor indexed into a database: the filesystem is the database, your editor is the\neditor, git is the history. Save a file and the open page updates itself.\n\n```bash\nnpm install -g @bershadsky/metaframework\ncd ~/code/my-solution        # anywhere inside a repository that has solutions/\nmetaframework\n```\n\n```text\n  metaframework 0.7.0\n\n  catalog    /Users/you/code/my-solution/solutions\n  solutions  3\n  entities   288\n  warnings   2\n  url        http://127.0.0.1:6363\n\n  Watching the catalog — the open page reloads itself. Ctrl-C to stop.\n```\n\nNo catalog yet? **[Getting started][start]** walks from an empty directory to a\ndescribed solution you can navigate here — a solution, a product, two components,\na data model with a real `schema.json`, and a protocol whose sequence diagram the\nportal compiles from a workflow file. Every command in it has been run.\n\nInstalling pulls in **no dependencies**: the tarball carries a compiled server,\nso `npm install -g` adds exactly one package. Needs **Node 20.9 or newer** —\nthe floor `engines` declares, and Next 16's own. Verified on 20.11.0 and 25.2.1.\n\n## What it looks like\n\nEverything below is **derived from the files** — no diagram is drawn by hand and\nno layout is stored anywhere.\n\n### The catalog, and one entity\n\nA rail of every entity in every solution, and a page per entity: what it is,\nwhat it promises, what it touches, and the artifacts it owns.\n\n![An entity page — kind, review status, delivery lifecycle, component type, version, and the components it owns](https://raw.githubusercontent.com/sergio-bershadsky/metaframework/main/docs/screenshots/02-entity-page.png)\n\n### A solution map that re-centres\n\nProducts and components only, arranged around whatever you clicked last.\nDistance is drawn as recession, so the neighbourhood stays legible instead of\nbecoming a hairball.\n\n![The solution map, focused on one product, with distant boxes receding](https://raw.githubusercontent.com/sergio-bershadsky/metaframework/main/docs/screenshots/01-solution-map.png)\n\n### Protocols draw themselves\n\nA protocol owns a `workflows/*.yaml` describing an exchange. The sequence\ndiagram is compiled from it, so the picture cannot disagree with the contract —\nand the source sits next to it.\n\n![A derived sequence diagram beside the YAML it was compiled from](https://raw.githubusercontent.com/sergio-bershadsky/metaframework/main/docs/screenshots/03-protocol-sequence.png)\n\n### Data models are real JSON Schema\n\nA datamodel's `schema.json` is not a picture of a type — it *is* the type, with\na resolvable `$id`, an `x-srn` back-reference, and `$ref`s into other entities.\nThe viewer renders it; the composition lineage is computed from `allOf`.\n\n![A rendered JSON Schema beside its source, with composition lineage](https://raw.githubusercontent.com/sergio-bershadsky/metaframework/main/docs/screenshots/05-datamodel-schema.png)\n\n### The past comes from git, not from a database\n\nEvery entity carries a `version`. Ask for an older one and the page is rebuilt\nfrom the commit that carried it — and when a version is genuinely unreachable,\nit says so and why rather than pretending.\n\n![An entity rebuilt from git at version 3, naming the commit it came from](https://raw.githubusercontent.com/sergio-bershadsky/metaframework/main/docs/screenshots/04-version-history.png)\n\n### Integrity is checked on every load\n\nReferences, frontmatter, directory placement and schemas are validated as the\ncatalog loads. `metaframework check` runs the same pass and exits non-zero, so\nit works as a CI gate.\n\n![The diagnostics page listing every warning with its file and rule code](https://raw.githubusercontent.com/sergio-bershadsky/metaframework/main/docs/screenshots/06-diagnostics.png)\n\n## What it expects to find\n\nA `solutions/` directory holding one directory per solution, each with an\n`index.md`:\n\n```text\nyour-repo/\n└── solutions/\n    ├── acme/\n    │   ├── index.md              # the solution root entity\n    │   ├── product/…\n    │   ├── datamodel/…           # index.md + schema.json\n    │   └── protocol/…            # index.md + transport.yaml + workflows/\n    └── other-solution/\n```\n\n`--dir` beats `CATALOG_DIR` beats discovery. With none of them, the catalog is\nfound the way git finds a repository: look for a `solutions` directory in the\nworking directory, then in each directory above it, stopping at the first one\nthat actually holds a solution. Run it from anywhere in your repo and it works.\nWhen nothing is found, the error lists every path tried — the answer is usually\nthat you are one directory too deep, and the list shows it.\n\nThe rules the catalog is held to — SRN grammar, per-kind frontmatter, placement,\nadditive-only evolution — are the [metaframework specification][spec]. The portal\nis that specification's reader and its validator: `/diagnostics` lists every\nviolation in the tree, and zero errors there is the pass condition.\n\n## Running it\n\n```text\nmetaframework [options]          start the portal and watch the catalog\nmetaframework check [options]    validate the catalog and exit non-zero on errors\n```\n\n| Flag                 | Does                                                                          |\n|----------------------|-------------------------------------------------------------------------------|\n| `-d`, `--dir <path>` | Catalog directory to serve, skipping discovery. Point it at `solutions/`.     |\n| `-p`, `--port <n>`   | Port to listen on. Default `6363`, stepped past if taken; naming one pins it. |\n| `--host <addr>`      | Address to bind. Default `127.0.0.1`; `0.0.0.0` to share.                     |\n| `--open`             | Open the portal in your browser once it is ready.                             |\n| `--no-watch`         | Stop pushing reloads; edits still show on refresh.                            |\n| `-v`, `--version`    | Print the version.                                                            |\n| `-h`, `--help`       | Print usage.                                                                  |\n\nIt binds loopback by default. This serves a directory off your laptop with no\nauthentication in front of it; putting that on every interface without being\nasked would be the wrong default.\n\n`metaframework check` is the same loader, the same diagnostics and the same\nseverity split as `/diagnostics`, printed instead of rendered. It exits `1` on\nerrors and `0` on warnings, which is the contract CI wants.\n\n## What happens when you change a file\n\nThe server watches the catalog directory and pushes the change to every open\nbrowser over Server-Sent Events. The page re-renders itself — it does not\nnavigate — so scroll position, the rail's filter box and every open panel survive\nthe update.\n\nMeasured on a 288-entity, 3-solution catalog: **median 239ms** from writing the\nfile to the portal serving the new content. A browser sees it a little later; the\npush is held back 150ms first, to coalesce the burst of events an editor emits\nwhen it saves.\n\nDeletions count as changes, so do new files, renames, and edits to a\n`schema.json` or a workflow YAML. Dot- and underscore-prefixed paths are ignored,\nthe same rule the loader applies, so `.git/` churn and `_drafts/` do not trigger\nreloads.\n\nWhere the platform cannot watch a tree recursively, the server falls back to\npolling a cheap stat-walk once a second — the same correctness, one second of\nlag. If watching fails for any other reason (open-file limits, mostly) it says so\nonce and keeps serving; refresh by hand after an edit, or start it with\n`--no-watch` and expect to.\n\n## What it does not do yet\n\n- **It does not write.** The portal renders and validates a catalog; every edit\n  is made in your editor. There is no create, edit or delete from the browser.\n- **No authentication, no TLS.** It is a localhost tool. Bind it to `0.0.0.0` and\n  everyone who can reach the port can read your unreleased design work.\n- **History needs git.** The revision panel shells out to `git` in the catalog\n  directory. Outside a repository it reports itself unavailable rather than\n  failing; there is no non-git history.\n- **A change re-reads the whole catalog.** There is no incremental parse. That is\n  what the ~240ms is; on a catalog an order of magnitude larger it will show.\n- **One catalog per process.** The directory is chosen at startup and cannot be\n  re-pointed without a restart.\n- **Verified on macOS only** (arm64, Node 20.11.0 and 25.2.1). Nothing in it is\n  platform-specific and the watcher degrades on its own, but Linux and Windows\n  are so far untested.\n- **No config file and no plugins.** The flags above are the whole surface.\n\n## Developing the portal itself\n\nThe package is built from `framework/portal` in the [metaframework\nrepository][repo]. From that directory:\n\n```bash\nnpm install\nnpm run dev      # next dev against ../../solutions\nnpm test         # vitest — catalog loader, schema registry, watcher, mode\nnpm run package  # next build (output: 'standalone') + assemble the shipped layout\n                 # `npm publish` runs prepack, which adds a freshness check on the\n                 # embedded meta-schemas first and can fail before the build starts\nnpm pack         # runs `package` first through prepack, so a stale bundle cannot ship\n```\n\n`npm run dev` and a published `metaframework` are the same mode: both serve a\nworking tree, both watch it. A build deployed to a server is the other mode — it\nreads the catalog once, because there the catalog is static input to the build.\nThe switch is `METAFRAMEWORK_MODE`, not `NODE_ENV`; the CLI sets it, and\n`docs/decision-record.md` says why that distinction had to exist.\n\n[spec]: https://github.com/sergio-bershadsky/metaframework/tree/main/framework/spec\n[repo]: https://github.com/sergio-bershadsky/metaframework\n[start]: https://github.com/sergio-bershadsky/metaframework/blob/main/docs/getting-started.md\n","readmeFilename":"README.md"}