{"adoption": {"forks": 21, "observed_at": "2026-08-28T04:04:14.663365+00:00", "stars": 1285}, "canonical_url": "https://ross.abutalabs.com/products/tsr", "card": {"archived": true, "artifact_type": "cli-tool", "description": "TypeScript Remove (tsr) is a utility that removes unused code from TypeScript projects – It's like tree shaking, but for source files", "domain": ["developer-tools", "programming-languages"], "enriched": true, "function": ["cli", "developer-tools", "linter"], "health_score": 10, "homepage": "https://www.npmjs.com/package/tsr", "language": "TypeScript", "license": "Apache-2.0", "license_family": "permissive", "maturity": "abandoned", "member_repos": ["line/tsr"], "name": "line/tsr", "platform": ["cli", "cross-platform"], "pushed_at": "2025-10-23T02:04:07+00:00", "repo": "line/tsr", "stars": 1285, "tags": ["typescript", "static-analysis", "dead-code-elimination", "unused-exports", "code-cleanup", "tree-shaking", "tsconfig", "ci", "deprecated", "command-line", "nodejs"], "topics": ["typescript"], "urls": [], "use_cases": ["find unused exports in a TypeScript project", "remove dead code from TypeScript codebase automatically", "delete unused source files that nothing imports", "detect unused code being added in CI", "clean up unused imports after refactoring", "tree shake source files instead of bundles"], "what_it_is": "TypeScript Remove (tsr) is an npm-installed CLI utility that statically analyzes TypeScript projects to find unused files, exports, and declarations, then can automatically rewrite source files to remove them. It works like tree shaking but at the source level, using only the TypeScript compiler and a valid tsconfig.json with no extra configuration.", "when_to_avoid": ["The project has explicitly ended and is no longer maintained; the README recommends Knip for similar functionality", "Your project is plain JavaScript without a tsconfig.json", "You need runtime tree shaking of bundles rather than source-file cleanup"], "when_to_choose": ["You want automatic removal of unused code, not just detection, in a TypeScript project", "You want a zero-config tool that only requires a valid tsconfig.json and an entrypoint pattern", "You want to gate merges on unused-code checks in CI"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tsr", "repo": "line/tsr", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "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:04:14.663365+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:14.663365+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:56:40.289216+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "07cc7027b7e5dd8fb4479dc05db0af5ca21dfc1f2660f91bee225cd33683d90d", "fetched_at": "2026-08-28T04:04:14.663365+00:00", "kind": "readme", "missing": false, "url": "https://github.com/line/tsr"}, {"content_hash": "bc3fc691d6b7dac0f8b0712548970a201e6b1b624c3082c88b4b35666c221fd2", "fetched_at": "2026-08-29T12:12:30.008547+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/tsr"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 48, "longevity": 77, "rhythm": 40}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1085, "days_push": 315, "days_rel": 602, "gap_med": 1, "n_releases_24m": 22}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}