{"adoption": {"forks": 709, "observed_at": "2026-08-28T04:10:51.685247+00:00", "stars": 12076}, "canonical_url": "https://ross.abutalabs.com/products/inversifyjs", "card": {"archived": false, "artifact_type": "library", "description": "Powerful and lightweight inversion of control container. Moved to https://github.com/inversify/monorepo", "domain": ["developer-tools", "web-development", "backend", "frontend"], "enriched": true, "function": ["middleware", "developer-tools"], "health_score": 67, "homepage": "http://inversify.io/", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["inversify/InversifyJS"], "name": "inversify/InversifyJS", "platform": ["cross-platform", "browser"], "pushed_at": "2025-11-19T13:18:33+00:00", "repo": "inversify/InversifyJS", "stars": 12076, "tags": ["dependency-injection", "ioc-container", "solid-principles", "decorators", "oop", "javascript", "typescript", "nodejs"], "topics": ["typescript", "ioc", "javascript", "dependency-injection", "nodejs", "inversifyjs"], "urls": [], "use_cases": ["dependency injection in TypeScript apps", "manage class dependencies with an IoC container", "write SOLID object-oriented JavaScript code", "inject services into Node.js applications", "decouple components in a React or Express project", "replace manual constructor wiring with a DI container"], "what_it_is": "InversifyJS is a lightweight, strongly-typed inversion of control (IoC) container for TypeScript and JavaScript applications. It uses decorators and constructor injection to manage dependencies, encouraging SOLID design and OOP best practices with minimal runtime overhead.", "when_to_avoid": ["you prefer functional programming styles over class-based OOP", "your project uses plain JavaScript without decorator support", "you need a full application framework with routing and HTTP built in", "you want zero reflection-metadata setup or build configuration"], "when_to_choose": ["you build TypeScript or Node.js apps with class-based OOP architecture", "you want a lightweight, framework-agnostic DI container with strong typing", "you need decorator-based injection with minimal runtime overhead", "you want to follow SOLID principles and testable, decoupled code"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/inversifyjs", "repo": "inversify/InversifyJS", "role": "main", "score": 60}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:51.685247+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:14:57.559298+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e11c7288a5932c82c75096ca72fa979731a0b7e22142b020fca076b67ad7dcd0", "fetched_at": "2026-08-28T04:10:51.685247+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inversify/InversifyJS"}, {"content_hash": "9e30f68d06855aca1e72ed8ead02330c077c3b5da57e8e6142f703ee7a0b9a98", "fetched_at": "2026-08-29T08:12:49.398627+00:00", "kind": "homepage", "missing": false, "url": "http://inversify.io/"}, {"content_hash": "4de655208249c192a9b9d1e63d34fe3f6081d3ad5c6800c09b60ee49c5a6e49c", "fetched_at": "2026-08-29T08:12:49.408704+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/introduction/getting-started"}, {"content_hash": "dcecc360fe0f96a491130e91d4e99a3355c719a58b504c8b329aacd5cfc7d4c5", "fetched_at": "2026-08-29T08:12:49.410666+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/next/introduction/getting-started"}, {"content_hash": "98458916bc53500b9a05e92c971015596b4002e1725f6b644d6c112b484e1511", "fetched_at": "2026-08-29T08:12:49.412377+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/7.x/introduction/getting-started"}, {"content_hash": "6bd1af45efae49a8d2788a4b42e6a157159e46c89c252e602525ff6c90a71138", "fetched_at": "2026-08-29T08:12:49.414127+00:00", "kind": "site_page", "missing": false, "url": "https://inversify.io/docs/6.x/introduction/getting-started"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 53, "longevity": 100, "rhythm": 47}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4166, "days_push": 287, "days_rel": 353, "gap_med": 6, "n_releases_24m": 32}, "score": 60, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}