{"_id":"kindscript","_rev":"155-2c0b9a80953b622bc1dfb24ea41aa1ce","name":"kindscript","dist-tags":{"latest":"2.0.3"},"versions":{"0.8.0-m8":{"name":"kindscript","version":"0.8.0-m8","keywords":["typescript","architecture","enforcement","clean-architecture"],"author":{"name":"garrick0"},"license":"MIT","_id":"kindscript@0.8.0-m8","maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"homepage":"https://github.com/garrick0/kindscript#readme","bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"bin":{"ksc":"dist/apps/cli/main.js"},"dist":{"shasum":"9f8eacf78503613fdb4ea6dd517c9cc3dd75dd85","tarball":"https://registry.npmjs.org/kindscript/-/kindscript-0.8.0-m8.tgz","fileCount":262,"integrity":"sha512-i42Ak4upclDKYbc/cmF0CX/nxuXiBXC0z/nmDplPXrpvsx6+TFmYy7xucUaYRV9jrLdUgTX7/zgyBV1ihNF/Aw==","signatures":[{"sig":"MEUCIQCNO2Tiph1H3Kjqh7jJCxy9a4lbsRcOWXh0E1I4b+5moAIgVrULF6kk3XAA22vOLeaDl1nqc15aVNCh5gBh28pQEJI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":289187},"main":"dist/types/index.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/types/index.js"},"./src/*":null,"./dist/*":null,"./plugin":"./dist/apps/plugin/index.js"},"gitHead":"db41f5d585f8cc8dc2a23d831fdee013012051bc","scripts":{"lint":"eslint src tests --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"garrick0","email":"samuel.gleeson95@gmail.com"},"repository":{"url":"git+https://github.com/garrick0/kindscript.git","type":"git"},"_npmVersion":"10.9.2","contributes":{"typescriptServerPlugins":[{"name":"kindscript","enableForWorkspaceTypeScriptVersions":true}]},"description":"Architectural enforcement for TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typescript":">=5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/kindscript_0.8.0-m8_1770667553006_0.11186370892945074","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"kindscript","version":"1.0.0","keywords":["typescript","architecture","enforcement","clean-architecture"],"author":{"name":"garrick0"},"license":"MIT","_id":"kindscript@1.0.0","maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"homepage":"https://github.com/garrick0/kindscript#readme","bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"bin":{"ksc":"dist/apps/cli/main.js"},"dist":{"shasum":"99dfd16a41b498bef566b71b3902f09930f268a3","tarball":"https://registry.npmjs.org/kindscript/-/kindscript-1.0.0.tgz","fileCount":295,"integrity":"sha512-IhdT5EMZiQzlsM/GqgDTS7xy9Mz5KSKAB1zRwDzN44FCk39TinXDgYzukybzfRf9Hf2Gb/CMRXvHOIqTXihHtg==","signatures":[{"sig":"MEUCIEPBcZmjpnjbcDj7+SsjdzOYxSL94kuytE48pD/65fFRAiEAjOztcdRbU6ey/uMWRRgDfrmxwhLTaUDgBAxDqorng38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":381781},"main":"dist/types/index.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/types/index.js"},"./src/*":null,"./dist/*":null,"./plugin":"./dist/apps/plugin/index.js"},"gitHead":"733638d5e1217a3628ba0f39f71584c003cf2101","scripts":{"lint":"eslint src tests --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"garrick0","email":"samuel.gleeson95@gmail.com"},"repository":{"url":"git+https://github.com/garrick0/kindscript.git","type":"git"},"_npmVersion":"10.9.2","contributes":{"typescriptServerPlugins":[{"name":"kindscript","enableForWorkspaceTypeScriptVersions":true}]},"description":"Architectural enforcement for TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typescript":">=5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/kindscript_1.0.0_1770831817156_0.3470257514439554","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"kindscript","version":"1.0.1","keywords":["typescript","architecture","enforcement","clean-architecture"],"author":{"name":"garrick0"},"license":"MIT","_id":"kindscript@1.0.1","maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"homepage":"https://github.com/garrick0/kindscript#readme","bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"bin":{"ksc":"dist/apps/cli/main.js"},"dist":{"shasum":"2d6a08f57e4ceef219f2ae21ebe045d4a54cb155","tarball":"https://registry.npmjs.org/kindscript/-/kindscript-1.0.1.tgz","fileCount":275,"integrity":"sha512-ud8TpRBwIkZtD4HaeZhdzTRe66i4N3w2KO5FvBMGoEM4InNwSysFR4sClTqXJsPfpQUH/l/+rC1jebCey+zJwQ==","signatures":[{"sig":"MEUCIQCP04AKNQzdLHopbRWoyluGfa6JmEAKKcXAjMMj1FO+3AIgEluDxiakQd0VjypbaH0LlbxL2kH5vrylHnaeb6N/37w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kindscript@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":358603},"main":"dist/types/index.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/types/index.js"},"./src/*":null,"./dist/*":null,"./plugin":"./dist/apps/plugin/index.js"},"gitHead":"9aafdb3d5c4622431664e3eec4c51e6909ac2cd8","scripts":{"lint":"eslint src tests --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4bf32595-76e1-4308-b5c1-33daf5712bbb"}},"repository":{"url":"git+https://github.com/garrick0/kindscript.git","type":"git"},"_npmVersion":"11.9.0","contributes":{"typescriptServerPlugins":[{"name":"kindscript","enableForWorkspaceTypeScriptVersions":true}]},"description":"Architectural enforcement for TypeScript","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.3.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typescript":">=5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/kindscript_1.0.1_1770839665978_0.5645581334826772","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"kindscript","version":"2.0.0","keywords":["typescript","architecture","enforcement","clean-architecture"],"author":{"name":"garrick0"},"license":"MIT","_id":"kindscript@2.0.0","maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"homepage":"https://github.com/garrick0/kindscript#readme","bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"bin":{"ksc":"dist/apps/cli/main.js"},"dist":{"shasum":"b49bf2eb33125eb2666963c3fb5e470915bd6d11","tarball":"https://registry.npmjs.org/kindscript/-/kindscript-2.0.0.tgz","fileCount":283,"integrity":"sha512-Tj/k4sRqLbF764X2ezPAyXKSClLR2Z8ZePgQTfAczdOkW2WszFBIefk9buiOEgZk022smsC/2x4CSZv0oRXqrg==","signatures":[{"sig":"MEYCIQCVAcRo69oAeyt+W9p1jkAlwskajdZuv7w/dk1iiP3QtwIhAOogD+unyuvHhLtcrnPalNInlQBvovEDW0insLaNgYRX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kindscript@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":360209},"main":"dist/types/index.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","default":"./dist/types/index.js"},"./src/*":null,"./dist/*":null,"./plugin":"./dist/apps/plugin/index.js"},"gitHead":"9571a8d0ae74a9f76d2116a682db93dca4b33acd","scripts":{"lint":"eslint src tests --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4bf32595-76e1-4308-b5c1-33daf5712bbb"}},"repository":{"url":"git+https://github.com/garrick0/kindscript.git","type":"git"},"_npmVersion":"11.10.0","contributes":{"typescriptServerPlugins":[{"name":"kindscript","enableForWorkspaceTypeScriptVersions":true}]},"description":"Architectural enforcement for TypeScript","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.9.3","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typescript":">=5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/kindscript_2.0.0_1770928393406_0.5894973771711995","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"kindscript","version":"2.0.1","keywords":["typescript","architecture","enforcement","clean-architecture"],"author":{"name":"garrick0"},"license":"MIT","_id":"kindscript@2.0.1","maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"homepage":"https://github.com/garrick0/kindscript#readme","bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"bin":{"ksc":"dist/apps/cli/main.js"},"dist":{"shasum":"2297b339c07fe651d6837b88fd36fbf0937b8150","tarball":"https://registry.npmjs.org/kindscript/-/kindscript-2.0.1.tgz","fileCount":283,"integrity":"sha512-p7cQ/GQMzYlTrmtSSdu0EwJamysJSBj9uiDcER0CZgsIfQ0F++JiXe2sKjl22DaSGjDuWlZHEwkWXp2QTQ3T4Q==","signatures":[{"sig":"MEUCIFudFvO+bSEuKZhj0uD602O8PNlr23cDzARoqBrz8XCdAiEA5tU/YT2i3fdmBxv89cJLFHsXtRCds+TTUTS3JYD28Ok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kindscript@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":347094},"main":"dist/types/index.js","type":"module","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js","default":"./dist/types/index.js"},"./src/*":null,"./dist/*":null,"./plugin":{"import":"./dist/apps/plugin/index.js","default":"./dist/apps/plugin/index.js"}},"gitHead":"c0fcf56eeef9160a02fa13f798c03a5c11840c94","scripts":{"lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4bf32595-76e1-4308-b5c1-33daf5712bbb"}},"repository":{"url":"git+https://github.com/garrick0/kindscript.git","type":"git"},"_npmVersion":"11.10.0","contributes":{"typescriptServerPlugins":[{"name":"kindscript","enableForWorkspaceTypeScriptVersions":true}]},"description":"Architectural enforcement for TypeScript","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^8.0.0","vitest":"^2.1.0","@vitest/ui":"^2.1.0","typescript":"^5.9.3","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.1.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typescript":">=5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/kindscript_2.0.1_1770938550987_0.5584546964805432","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"kindscript","version":"2.0.2","keywords":["typescript","architecture","enforcement","clean-architecture"],"author":{"name":"garrick0"},"license":"MIT","_id":"kindscript@2.0.2","maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"homepage":"https://github.com/garrick0/kindscript#readme","bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"bin":{"ksc":"dist/apps/cli/main.js"},"dist":{"shasum":"2e85f68d06791cd4d42384d99670630c1e469100","tarball":"https://registry.npmjs.org/kindscript/-/kindscript-2.0.2.tgz","fileCount":283,"integrity":"sha512-6eKnYWtNI2b1EjpT0bhL+a7/LlpodTuTxwWsEydyOX6tawRyHeGOAu6e3FBJP2dkBUr9ykKJqcK5cP5yBTzp0A==","signatures":[{"sig":"MEUCIECuZ+P3ot8pB83sGe8wrIjs7DpiZoM/AwSmmIKb/7ZQAiEAykYOPFbBmUK3sSWvYsnaXyHmxE4QZmNZhUKlWT0YGds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kindscript@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":347094},"main":"dist/types/index.js","type":"module","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js","default":"./dist/types/index.js"},"./src/*":null,"./dist/*":null,"./plugin":{"import":"./dist/apps/plugin/index.js","default":"./dist/apps/plugin/index.js"}},"gitHead":"255a93e889e3b1eb82791e6fc2f5a6be36d5c404","scripts":{"lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc","clean":"rm -rf dist","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4bf32595-76e1-4308-b5c1-33daf5712bbb"}},"repository":{"url":"git+https://github.com/garrick0/kindscript.git","type":"git"},"_npmVersion":"11.10.0","contributes":{"typescriptServerPlugins":[{"name":"kindscript","enableForWorkspaceTypeScriptVersions":true}]},"description":"Architectural enforcement for TypeScript","directories":{},"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^8.0.0","vitest":"^2.1.0","@vitest/ui":"^2.1.0","typescript":"^5.9.3","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.1.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"peerDependencies":{"typescript":">=5.3.0"},"_npmOperationalInternal":{"tmp":"tmp/kindscript_2.0.2_1770939777514_0.32929041021059224","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"kindscript","version":"2.0.3","type":"module","description":"Architectural enforcement for TypeScript","main":"dist/types/index.js","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js","default":"./dist/types/index.js"},"./plugin":{"import":"./dist/apps/plugin/index.js","default":"./dist/apps/plugin/index.js"},"./dist/*":null,"./src/*":null},"bin":{"ksc":"dist/apps/cli/main.js"},"contributes":{"typescriptServerPlugins":[{"name":"kindscript","enableForWorkspaceTypeScriptVersions":true}]},"scripts":{"build":"tsc","test":"vitest run","test:watch":"vitest","test:ui":"vitest --ui","test:coverage":"vitest run --coverage","lint":"eslint src tests --ext .ts","clean":"rm -rf dist"},"keywords":["typescript","architecture","enforcement","clean-architecture"],"author":{"name":"garrick0"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/garrick0/kindscript.git"},"homepage":"https://github.com/garrick0/kindscript#readme","bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"devDependencies":{"@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","@vitest/coverage-v8":"^2.1.0","@vitest/ui":"^2.1.0","eslint":"^8.0.0","tsx":"^4.21.0","typescript":"^5.9.3","vitest":"^2.1.0"},"peerDependencies":{"typescript":">=5.3.0"},"gitHead":"d533b383a49253bb8dc9766e3c4d29d2b47692a2","_id":"kindscript@2.0.3","_nodeVersion":"20.20.0","_npmVersion":"11.10.0","dist":{"integrity":"sha512-F2v2wnKAL+D7IBxkO0kKo92WCU/sfg27Cg+saGZPU79S6AyZtt0tYi8QYAVH2s4OW9veSYc+WiR0Ow+1xNv5mA==","shasum":"bafc6212fba53f578462a86495013e49bc752ee2","tarball":"https://registry.npmjs.org/kindscript/-/kindscript-2.0.3.tgz","fileCount":283,"unpackedSize":347705,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/kindscript@2.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA5LbaHQzqOL2evlAKiGQ7EIIe6znjA+QmXJmhCpWOUYAiEA2JlvkRPJ59cIbWTKNzElwmUdOojDgUc0IRwxGKffnA4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4bf32595-76e1-4308-b5c1-33daf5712bbb"}},"directories":{},"maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/kindscript_2.0.3_1770941606868_0.3549575678966237"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-09T20:05:53.006Z","modified":"2026-02-13T00:13:27.316Z","0.1.1":"2016-03-10T22:30:27.177Z","0.1.2":"2016-03-10T23:42:08.573Z","0.1.3":"2016-03-11T03:42:31.719Z","0.1.4":"2016-03-11T03:46:44.845Z","0.1.5":"2016-03-11T03:49:49.017Z","0.1.7":"2016-03-12T01:11:21.226Z","0.1.8":"2016-03-16T02:04:15.507Z","0.1.9":"2016-03-16T19:15:43.987Z","0.1.10":"2016-03-16T19:29:11.611Z","0.1.12":"2016-03-16T22:02:49.851Z","0.1.13":"2016-03-16T22:06:58.450Z","0.1.14":"2016-03-16T23:15:07.247Z","0.1.15":"2016-03-17T00:43:21.123Z","0.1.16":"2016-03-17T04:49:13.554Z","0.1.17":"2016-03-17T18:33:39.192Z","0.1.18":"2016-03-17T19:54:14.074Z","0.1.19":"2016-03-17T20:19:59.935Z","0.1.20":"2016-03-18T03:32:57.987Z","0.1.21":"2016-03-18T04:05:39.199Z","0.1.22":"2016-03-18T05:39:39.944Z","0.1.23":"2016-03-18T06:32:12.114Z","0.1.24":"2016-03-18T07:05:56.139Z","0.1.25":"2016-03-18T12:59:59.613Z","0.1.26":"2016-03-18T13:05:20.864Z","0.1.27":"2016-03-18T19:26:40.490Z","0.1.28":"2016-03-18T19:28:34.893Z","0.1.29":"2016-03-18T20:03:09.607Z","0.1.30":"2016-03-18T22:16:20.433Z","0.1.31":"2016-03-18T23:06:37.159Z","0.1.32":"2016-03-19T05:37:04.586Z","0.1.33":"2016-03-19T06:26:51.296Z","0.1.34":"2016-03-20T02:30:35.565Z","0.1.35":"2016-03-20T02:54:24.719Z","0.1.36":"2016-03-20T02:59:56.090Z","0.1.37":"2016-03-20T03:05:32.371Z","0.1.38":"2016-03-20T05:31:51.683Z","0.1.39":"2016-03-20T05:52:20.466Z","0.1.40":"2016-03-20T06:36:31.409Z","0.1.41":"2016-03-20T07:45:15.072Z","0.1.42":"2016-03-20T08:00:04.309Z","0.1.43":"2016-03-20T20:03:11.617Z","0.1.44":"2016-03-20T22:08:47.421Z","0.1.45":"2016-03-21T05:59:44.487Z","0.1.46":"2016-03-21T16:37:23.265Z","0.1.47":"2016-03-21T16:49:13.258Z","0.1.48":"2016-03-21T18:34:11.467Z","0.1.49":"2016-03-21T19:12:46.268Z","0.1.50":"2016-03-21T19:46:46.728Z","0.1.51":"2016-03-21T20:24:43.406Z","0.1.52":"2016-03-21T23:49:54.459Z","0.1.53":"2016-03-22T00:57:11.159Z","0.1.54":"2016-03-22T05:13:33.342Z","0.1.55":"2016-03-22T15:33:00.778Z","0.1.56":"2016-03-22T17:39:11.638Z","0.1.57":"2016-03-22T17:53:38.169Z","0.1.58":"2016-03-22T18:07:42.760Z","0.1.59":"2016-03-22T18:26:02.208Z","0.1.60":"2016-03-22T19:42:09.577Z","0.1.61":"2016-03-22T21:11:01.119Z","0.1.62":"2016-03-23T04:25:10.492Z","0.1.63":"2016-03-23T05:15:47.873Z","0.1.64":"2016-03-23T17:28:48.464Z","0.1.65":"2016-03-23T17:45:21.642Z","0.1.66":"2016-03-23T18:27:33.061Z","0.1.67":"2016-03-23T19:10:54.908Z","0.1.68":"2016-03-23T20:57:11.577Z","0.1.69":"2016-03-23T21:13:40.721Z","0.1.71":"2016-03-23T22:08:34.593Z","0.1.73":"2016-03-24T01:09:00.995Z","0.1.74":"2016-03-24T04:48:48.496Z","0.1.75":"2016-03-24T05:30:18.068Z","0.1.76":"2016-03-24T06:27:23.857Z","0.1.77":"2016-03-24T06:38:30.056Z","0.1.78":"2016-03-24T19:12:42.308Z","0.1.80":"2016-03-24T21:21:11.425Z","0.1.79":"2016-03-24T21:22:06.114Z","0.1.81":"2016-03-24T22:21:56.282Z","0.1.82":"2016-03-24T22:49:00.093Z","0.1.83":"2016-03-24T23:48:03.264Z","0.1.84":"2016-03-25T02:00:03.590Z","0.1.85":"2016-03-25T06:07:58.883Z","0.1.86":"2016-03-25T16:32:55.219Z","0.1.88":"2016-03-25T16:55:04.207Z","0.1.89":"2016-03-25T17:00:39.140Z","0.1.90":"2016-03-25T20:10:54.818Z","0.1.91":"2016-03-25T20:59:00.752Z","0.1.92":"2016-03-25T21:25:32.110Z","0.1.93":"2016-03-25T23:54:40.194Z","0.1.95":"2016-03-26T01:26:53.393Z","0.1.104":"2016-03-28T23:02:58.675Z","0.1.105":"2016-03-28T23:35:26.260Z","0.1.107":"2016-03-29T01:31:29.656Z","0.1.110":"2016-03-29T01:59:50.696Z","0.1.111":"2016-03-29T02:41:25.357Z","0.1.112":"2016-03-29T04:40:38.825Z","0.1.113":"2016-03-29T05:16:16.664Z","0.1.114":"2016-03-29T06:27:46.043Z","0.1.115":"2016-03-29T15:32:29.046Z","0.1.116":"2016-03-29T15:52:23.279Z","0.1.117":"2016-03-29T18:35:06.936Z","0.1.118":"2016-03-29T20:38:19.517Z","0.1.119":"2016-03-29T20:54:19.670Z","0.1.120":"2016-03-29T22:06:31.093Z","0.1.121":"2016-03-30T00:47:24.749Z","0.1.122":"2016-03-30T06:26:42.797Z","0.1.123":"2016-03-30T17:48:59.793Z","0.2.1":"2016-03-30T23:29:20.456Z","0.2.2":"2016-03-31T00:40:18.644Z","0.2.3":"2016-03-31T19:55:47.295Z","0.2.4":"2016-03-31T21:51:31.091Z","0.2.5":"2016-04-01T00:00:17.298Z","0.2.6":"2016-04-01T00:25:55.580Z","0.2.7":"2016-04-01T02:15:45.318Z","0.2.8":"2016-04-01T04:56:31.405Z","0.2.9":"2016-04-01T21:47:28.663Z","0.2.10":"2016-04-02T01:17:13.140Z","0.2.11":"2016-04-02T03:09:40.391Z","0.2.14":"2016-04-03T04:40:23.068Z","0.2.15":"2016-04-03T04:46:44.133Z","0.2.16":"2016-04-04T00:51:18.877Z","0.2.17":"2016-04-04T16:25:43.885Z","0.2.18":"2016-04-05T01:14:30.545Z","0.2.19":"2016-04-05T02:12:38.627Z","0.2.20":"2016-04-05T04:22:26.337Z","0.2.21":"2016-04-05T04:52:30.182Z","0.2.22":"2016-04-05T05:16:48.601Z","0.2.23":"2016-04-05T05:46:47.086Z","0.2.24":"2016-04-05T20:26:35.856Z","0.2.25":"2016-04-05T21:29:25.468Z","0.2.26":"2016-04-05T23:15:36.052Z","0.2.27":"2016-04-06T04:44:07.369Z","0.2.28":"2016-04-06T06:05:57.142Z","0.2.29":"2016-04-06T14:35:41.031Z","0.2.30":"2016-04-06T20:53:33.314Z","0.2.31":"2016-04-06T22:34:26.525Z","0.2.32":"2016-04-06T23:23:50.203Z","0.2.33":"2016-04-06T23:36:11.600Z","0.2.34":"2016-04-06T23:59:02.467Z","0.2.35":"2016-04-07T01:18:06.270Z","0.2.36":"2016-04-07T10:54:45.544Z","0.2.37":"2016-04-07T11:09:24.849Z","0.2.38":"2016-04-07T12:37:36.986Z","0.2.39":"2016-04-07T13:32:44.693Z","0.2.41":"2016-04-07T16:15:06.130Z","0.2.42":"2016-04-07T16:45:32.312Z","0.8.0-m8":"2026-02-09T20:05:53.143Z","1.0.0":"2026-02-11T17:43:37.311Z","1.0.1":"2026-02-11T19:54:26.139Z","2.0.0":"2026-02-12T20:33:13.576Z","2.0.1":"2026-02-12T23:22:31.154Z","2.0.2":"2026-02-12T23:42:57.663Z","2.0.3":"2026-02-13T00:13:27.041Z"},"bugs":{"url":"https://github.com/garrick0/kindscript/issues"},"author":{"name":"garrick0"},"license":"MIT","homepage":"https://github.com/garrick0/kindscript#readme","keywords":["typescript","architecture","enforcement","clean-architecture"],"repository":{"type":"git","url":"git+https://github.com/garrick0/kindscript.git"},"description":"Architectural enforcement for TypeScript","maintainers":[{"name":"garrick0","email":"samuel.gleeson95@gmail.com"}],"readme":"<div align=\"center\">\n\n# KindScript\n\n**TypeScript for Architecture**\n\nDefine architectural patterns as types. Enforce them at compile time.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/version-0.8.0--m8-brightgreen.svg)]()\n[![Tests](https://img.shields.io/badge/tests-382%20passing-brightgreen.svg)]()\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6.svg)](https://www.typescriptlang.org/)\n\n[Documentation](https://kindscript.ai/docs) · [Interactive Tutorial](https://kindscript.ai/tutorial) · [Examples](docs/05-examples.md) · [Agent](https://kindscript.ai/agent)\n\n</div>\n\n---\n\nTypeScript checks if values match types. KindScript checks if codebases match architectures. Same idea, same toolchain.\n\n```\n          TypeScript                         KindScript\n   ─────────────────────────        ─────────────────────────────\n\n   type User = {                    type App = Kind<\"App\", {\n     name: string;                    domain: DomainLayer;\n     age: number;                     infra: InfraLayer;\n   }                                }>\n\n   const user: User = {             export const app = {\n     name: \"Alice\",                   domain: {},\n     age: 30,                         infra: {},\n   }                                } satisfies Instance<App, '.'>\n\n   \"does this value                 \"does this codebase\n    match the type?\"                 match the architecture?\"\n```\n\n## Why KindScript?\n\n**Before KindScript:** A new developer imports a database client from the domain layer. It ships. Someone catches it in a PR review three days later -- or nobody catches it, and the architecture quietly erodes.\n\n**After KindScript:** The import gets a red squiggly the moment it's typed. `KS70001: Forbidden dependency: domain → infra`. It never reaches code review. The architecture is enforced by the same compiler that checks your types.\n\n- **New developers can't accidentally break architecture** -- violations surface in the IDE, not in code review\n- **Restructuring is safe** -- rename or move a layer and the compiler shows you every violation\n- **The architecture is always documented** -- definition files are the living source of truth\n- **Adopt incrementally** -- enforce one rule at a time on an existing codebase\n- **Nothing ships to production** -- compile-time only, zero runtime overhead\n\n## Quick Start\n\n### 1. Define your architecture (`src/context.ts`)\n\n```typescript\nimport type { Kind, Instance } from 'kindscript';\n\ntype DomainLayer = Kind<\"DomainLayer\">;\ntype InfraLayer  = Kind<\"InfraLayer\">;\n\ntype App = Kind<\"App\", {\n  domain: DomainLayer;\n  infra: InfraLayer;\n}, {\n  noDependency: [[\"domain\", \"infra\"]];  // domain cannot import from infra\n}>;\n\nexport const app = { domain: {}, infra: {} } satisfies Instance<App, '.'>;\n```\n\nThat's it. `domain/` maps to `src/domain/`, `infra/` maps to `src/infra/`. The compiler now enforces that nothing in `domain/` imports from `infra/`.\n\n### 2. Check\n\n```bash\n$ ksc check\nsrc/domain/service.ts:12:1 - error KS70001: Forbidden dependency: domain → infra (src/domain/service.ts → src/infra/database.ts)\n\n  12 import { Db } from '../infra/database';\n     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nFound 1 architectural violation.\n```\n\n### 3. IDE integration (`tsconfig.json`)\n\n```json\n{\n  \"compilerOptions\": {\n    \"plugins\": [{ \"name\": \"kindscript\" }]\n  }\n}\n```\n\nViolations appear inline in VS Code, Vim, Emacs, WebStorm -- any editor using tsserver. Same red squiggles as a type error.\n\n## What Can It Enforce?\n\n**Dependency direction** -- forbid imports between layers:\n\n```typescript\nnoDependency: [[\"domain\", \"infra\"]]\n```\n```\nsrc/domain/service.ts:3:1 - error KS70001: Forbidden dependency: domain → infra (src/domain/service.ts → src/infra/database.ts)\n```\n\n**Purity** -- mark a layer side-effect-free (no `fs`, `http`, `crypto`, etc.):\n\n```typescript\ntype DomainLayer = Kind<\"DomainLayer\", {}, { pure: true }>;\n```\n```\nsrc/domain/service.ts:1:1 - error KS70003: Impure import in 'domain': 'fs'\n```\n\n**Cycle detection** -- no circular dependencies between layers:\n\n```typescript\nnoCycles: [\"domain\", \"application\", \"infra\"];\n```\n```\nerror KS70004: Circular dependency detected: domain → infra → domain\n```\n\n**Wrapped Kind composability** -- group exports by architectural role and enforce constraints between groups:\n\n```typescript\nimport type { Kind } from 'kindscript';\n\ntype Decider = Kind<\"Decider\", {}, {}, { wraps: DeciderFn }>;\ntype Effector = Kind<\"Effector\", {}, {}, { wraps: EffectorFn }>;\n\ntype OrderModule = Kind<\"OrderModule\", {\n  deciders: Decider;\n  effectors: Effector;\n}, {\n  noDependency: [[\"deciders\", \"effectors\"]];\n}>;\n\n// Export declarations using direct Kind type annotation\nexport const applyDiscount: Decider = (order) => { /* ... */ };\nexport const notifyOrder: Effector = (order) => { /* ... */ };\n```\n```\nsrc/domain/apply-discount.ts:1:1 - error KS70001: Forbidden dependency: deciders → effectors (src/domain/apply-discount.ts → src/domain/notify-order.ts)\n```\n\nThree user-declared constraint types, plus three structural constraints that are checked automatically. See [Constraints documentation](docs/03-constraints.md) for full details.\n\n<details>\n<summary>All diagnostic codes</summary>\n\n| Code | Constraint | Description |\n|------|-----------|-------------|\n| KS70001 | noDependency | Forbidden dependency |\n| KS70003 | purity | Impure import in pure layer |\n| KS70004 | noCycles | Circular dependency |\n| KS70005 | scope | Scope mismatch (instance location vs Kind scope) |\n| KS70006 | overlap | Two sibling members claim the same file(s) |\n| KS70007 | exhaustive | File not assigned to any member (opt-in) |\n\n</details>\n\n## How does it compare?\n\n| Feature | KindScript | dependency-cruiser | Nx boundaries | eslint-plugin-boundaries |\n|---------|:---:|:---:|:---:|:---:|\n| Dependency rules | ✓ | ✓ | ✓ | ✓ |\n| Cycle detection | ✓ | ✓ | | |\n| IDE inline errors | ✓ | | ✓ | ✓ |\n| Behavioral rules (purity) | ✓ | | | |\n| TS-native definitions (no config/DSL) | ✓ | | | |\n| Works with any tsserver editor | ✓ | | | ✓ |\n\nOther tools solve pieces of this. KindScript is the only one that covers dependency and behavioral rules from a single TS-native mechanism -- with IDE support out of the box.\n\n## How It Works\n\nKindScript piggybacks on TypeScript's own compiler -- same scanner, parser, and type checker -- then adds four stages that produce standard `ts.Diagnostic` objects:\n\n```\nTypeScript phases (reused as-is):     scan → parse → bind → check\n                                                                ↓\nKindScript stages (new):              KS scan → KS parse → KS bind → KS check\n                                                                          ↓\n                                                                    ts.Diagnostic\n                                                                    (same format)\n                                                                          ↓\n                                                            IDE / CLI / CI exit code\n```\n\nViolations appear alongside regular TypeScript errors -- same format, same tooling, zero new infrastructure. See [Architecture](docs/01-architecture.md) for the full pipeline walkthrough.\n\n## Learn More\n\n| Resource | What it covers |\n|----------|---------------|\n| [Architecture](docs/01-architecture.md) | Full pipeline walkthrough, layers, data flow |\n| [Kind System](docs/02-kind-system.md) | Kind syntax, instances, location resolution, discovery |\n| [Constraints](docs/03-constraints.md) | All 6 constraint types, plugin architecture |\n| [Examples](docs/05-examples.md) | Real-world modeling (Clean Architecture, Atomic Design, monorepos) |\n| [Decisions](docs/decisions/) | Architecture Decision Records (32 ADRs) |\n\n### Interactive notebooks\n\nJupyter notebooks in `notebooks/` provide hands-on walkthroughs:\n\n| Notebook | What you'll learn |\n|----------|-------------------|\n| [01-quickstart](notebooks/01-quickstart.ipynb) | Define, check, break, fix — all 3 constraint types |\n| [02-real-world](notebooks/02-real-world.ipynb) | Multi-instance bounded contexts with a real codebase |\n| [03-typekind](notebooks/03-typekind.ipynb) | Wrapped Kind composability: declaration-level enforcement |\n\nFor a static walkthrough (no Deno kernel required), see [Tutorial](docs/06-tutorial.md).\n\n### Interactive tutorial\n\nThe `tutorial/` directory contains a browser-based interactive tutorial built with [TutorialKit](https://tutorialkit.dev). Edit files and run `npx ksc check .` directly in the browser. See [tutorial/README.md](tutorial/README.md) for setup.\n\n### Documentation Website\n\nThe KindScript documentation site is built with Next.js 15 and Nextra 4, featuring:\n\n- Complete documentation from `docs/`\n- All 32 Architecture Decision Records (ADRs)\n- Interactive tutorial with live Monaco editor and WebContainer-powered terminal\n- Full-text search via Pagefind\n\n**Live site:** https://website-five-theta-38.vercel.app\n\n**Local development:**\n```bash\ncd website\nnpm install\nnpm run dev  # http://localhost:3000\n```\n\nThe site is deployed automatically via GitHub Actions. See [website/README.md](website/README.md) and [website/DEPLOYMENT.md](website/DEPLOYMENT.md) for details.\n\n## Project Status\n\nAll core functionality is implemented and tested. 31 test suites, 350 tests, 100% passing.\n\n**What's working:** All 6 constraint types (3 user-declared + 3 structural), Wrapped Kind composability, CLI (`ksc check`), TypeScript language service plugin (inline diagnostics + code fixes).\n\n**Roadmap:** Watch mode, incremental compilation, diagnostic `relatedInformation` linking to contract definitions.\n\n## Contributing\n\n```bash\nnpm install && npm run build && npm test   # Clone, build, verify\n```\n\nKindScript itself follows strict Clean Architecture -- the domain layer has zero external dependencies. See [Architecture](docs/01-architecture.md) for the source layout and [Testing Guide](tests/README.md) for how to write tests. [CLAUDE.md](CLAUDE.md) is the full development guide.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}