{"_id":"@atchaya_v/devstack-detect","name":"@atchaya_v/devstack-detect","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@atchaya_v/devstack-detect","version":"1.0.0","description":"A modular CLI tool to recursively scan and identify technology stacks in any project.","main":"src/index.js","type":"module","bin":{"devstack-detect":"src/index.js"},"engines":{"node":">=18.0.0"},"scripts":{"start":"node src/index.js","test":"node src/index.js ./test-projects"},"keywords":["cli","detector","techstack","analyzer","monorepo","developer-tools","react","node","golang"],"author":{"name":"Atchaya"},"license":"MIT","dependencies":{"chalk":"^5.3.0","commander":"^12.1.0"},"gitHead":"7399079a453dd70c626dccf3fc52a2c74d5ebb34","_id":"@atchaya_v/devstack-detect@1.0.0","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-hE2Bym0WuR+qLBZ0FiKSyA9TMVZQqspInAAugeXMtKaWvYsffd03mK8TKFrglAp79MXm9Ifh/CgMg3jgeeXyfw==","shasum":"06f349b47e5a9093bded3852828d4b7b9f483ef4","tarball":"https://registry.npmjs.org/@atchaya_v/devstack-detect/-/devstack-detect-1.0.0.tgz","fileCount":19,"unpackedSize":83281,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCeMkd8omT+3j5t4yb+m26nuZv+FgJay+IPYJeQ7bXFBgIgbdIo6xtXCSg36Lx6A6iJFp/xGdephakh8ufYs6u+bNo="}]},"_npmUser":{"name":"atchaya_v","email":"vatchayavenkat@gmail.com"},"directories":{},"maintainers":[{"name":"atchaya_v","email":"vatchayavenkat@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/devstack-detect_1.0.0_1778353001927_0.6051234017633156"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-09T18:56:41.851Z","1.0.0":"2026-05-09T18:56:42.102Z","modified":"2026-05-09T18:56:42.295Z"},"maintainers":[{"name":"atchaya_v","email":"vatchayavenkat@gmail.com"}],"description":"A modular CLI tool to recursively scan and identify technology stacks in any project.","keywords":["cli","detector","techstack","analyzer","monorepo","developer-tools","react","node","golang"],"author":{"name":"Atchaya"},"license":"MIT","readme":"# devstack-detect\n\n> Instantly analyze any project folder and detect its full technology stack — frameworks, databases, languages, styling, auth, testing, build tools, and more.\n\n[![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n---\n\n## Why devstack-detect?\n\n- **Onboarding** — Understand an unfamiliar codebase in seconds\n- **Auditing** — Document the tech stack across many repos at once\n- **CI/CD** — Gate pipelines on detected stack requirements\n- **Monorepo support** — Detects and reports per sub-project automatically\n\n---\n\n## Installation\n\n### Global install (recommended)\n\n```bash\nnpm install -g devstack-detect\ndevstack-detect ./my-project\n```\n\n### One-shot with npx (no install required)\n\n```bash\nnpx devstack-detect ./my-project\n```\n\n### Local dev / contribution\n\n```bash\ngit clone https://github.com/you/devstack-detect.git\ncd devstack-detect\nnpm install\nnpm link                        # makes `devstack-detect` available globally\ndevstack-detect ./test-projects/mern-test\n```\n\n---\n\n## CLI Commands\n\n```bash\n# Default — colored terminal output\ndevstack-detect ./project\n\n# JSON output to stdout (pipe-friendly)\ndevstack-detect ./project --json\n\n# Save JSON report to a file (also prints to terminal)\ndevstack-detect ./project --output report.json\n\n# Verbose — show which files triggered each detection\ndevstack-detect ./project --verbose\n\n# CI mode — exits with code 1 if nothing is detected\ndevstack-detect ./project --ci\n\n# Show tool version\ndevstack-detect --version\n```\n\n---\n\n## Example Output\n\n```\n═══════════════════════════════════════════════════\n  DEVSTACK REPORT — ./my-project\n═══════════════════════════════════════════════════\n\n  Package Manager:  npm\n\n  Frontend:\n  ✔ React (v18.2.0)\n  ✔ Next.js (v14.0.0)\n\n  Backend:\n  ✔ Express.js (v4.18.2)\n\n  Database:\n  ✔ MongoDB\n  ~ PostgreSQL (possible)\n\n  ORM:\n  ✔ Mongoose (v8.0.0)\n  ✔ Prisma (v5.6.0)\n\n  Styling:\n  ✔ TailwindCSS (v3.4.0)\n\n  Auth:\n  ✔ JWT\n  ✔ NextAuth\n\n  Testing:\n  ✔ Jest (v29.7.0)\n  ✔ Cypress (v13.6.0)\n\n  Build Tools:\n  ✔ Vite (v5.0.0)\n\n  Language:\n  ✔ TypeScript (v5.2.0)\n\n═══════════════════════════════════════════════════\n  Detected 12 technologies | Confidence: High\n═══════════════════════════════════════════════════\n```\n\n### Monorepo output\n\n```\n  [frontend/]\n  ✔ React, Next.js, TailwindCSS, TypeScript\n\n  [backend/]\n  ✔ Express.js, MongoDB, JWT, TypeScript\n```\n\n### Verbose mode\n\n```\n  Frontend:\n  ✔ React (v18.2.0)\n       [strong] package.json dependency: react\n       [weak]   .jsx/.tsx files found (12) → src/App.tsx\n       [weak]   React hooks usage in source → src/App.tsx\n```\n\n---\n\n## Detection Coverage\n\n| Category        | Technologies Detected                                              |\n|----------------|---------------------------------------------------------------------|\n| Frontend       | React, Vue, Angular, Svelte, Next.js, Nuxt.js                      |\n| Backend        | Express.js, Fastify, NestJS, Koa                                   |\n| Database       | MongoDB, PostgreSQL, MySQL, Redis, SQLite                           |\n| ORM            | Prisma, Mongoose, TypeORM, Sequelize, Drizzle                      |\n| Styling        | TailwindCSS, styled-components, Sass/SCSS, CSS Modules             |\n| Auth           | JWT, Passport.js, Auth0, NextAuth                                  |\n| Testing        | Jest, Vitest, Mocha, Cypress, Playwright                           |\n| Build Tools    | Vite, Webpack, Rollup, esbuild, Turbopack                          |\n| Package Manager| npm, Yarn, pnpm                                                    |\n| Language       | TypeScript, JavaScript (ES Modules), JavaScript (CommonJS)         |\n\n---\n\n## Detection Strategy\n\nFor each technology, signals are collected in priority order:\n\n1. **`package.json` dependencies** — strongest signal (weight: 2)\n2. **Config files** — `tsconfig.json`, `tailwind.config.js`, `jest.config.js`, `prisma/schema.prisma`, etc. (weight: 2)\n3. **Lock files** — `yarn.lock`, `pnpm-lock.yaml`, `package-lock.json` (weight: 2)\n4. **`.env` files** — `DATABASE_URL=mongodb://`, `JWT_SECRET`, etc. (weight: 2)\n5. **Import/require statements** — in source files (weight: 1)\n6. **Code pattern matching** — `mongoose.connect()`, `jwt.sign()`, etc. (weight: 1)\n\n### Confidence levels\n\n| Symbol | Meaning   | Rule                          |\n|--------|-----------|-------------------------------|\n| `✔`    | Detected  | Total signal weight ≥ 2       |\n| `~`    | Possible  | Total signal weight = 1       |\n\nA single weak pattern match alone never produces a `✔`.\n\n---\n\n## Monorepo Support\n\n`devstack-detect` automatically detects monorepos by scanning for **multiple `package.json` files**. Each sub-project is reported independently with a label based on its directory path relative to the root.\n\n```\nmy-monorepo/\n├── frontend/package.json   → reported as [frontend/]\n├── backend/package.json    → reported as [backend/]\n└── packages/\n    └── api/package.json    → reported as [packages/api/]\n```\n\n---\n\n## JSON Output\n\n```bash\ndevstack-detect ./project --json\n```\n\n```json\n[\n  {\n    \"label\": \"root\",\n    \"projectPath\": \"/absolute/path/to/project\",\n    \"totalDetected\": 10,\n    \"stacks\": {\n      \"frontend\": [\n        {\n          \"name\": \"React\",\n          \"confidence\": \"detected\",\n          \"version\": \"^18.2.0\",\n          \"signals\": [\n            { \"strength\": \"strong\", \"source\": \"package.json dependency: react\" }\n          ]\n        }\n      ]\n    }\n  }\n]\n```\n\n---\n\n## GitHub Actions Usage\n\n```yaml\nname: Stack Audit\n\non: [push, pull_request]\n\njobs:\n  detect-stack:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Run devstack-detect\n        run: npx devstack-detect . --output stack-report.json --ci\n\n      - name: Upload stack report\n        uses: actions/upload-artifact@v4\n        with:\n          name: stack-report\n          path: stack-report.json\n```\n\nThe `--ci` flag causes the action to **fail** if no technologies are detected, useful for verifying new repos have a recognizable stack.\n\n---\n\n## Local Testing\n\n```bash\n# Install dependencies\nnpm install\n\n# Link globally for local testing\nnpm link\n\n# Run against the built-in test projects\ndevstack-detect ./test-projects/react-test\ndevstack-detect ./test-projects/express-test\ndevstack-detect ./test-projects/mern-test\n\n# Verbose mode to inspect signals\ndevstack-detect ./test-projects/mern-test --verbose\n\n# JSON output\ndevstack-detect ./test-projects/mern-test --json\n\n# Unlink when done\nnpm unlink -g devstack-detect\n```\n\n---\n\n## Publishing to npm\n\n```bash\n# 1. Make sure you are logged in\nnpm login\n\n# 2. Bump the version\nnpm version patch   # or minor / major\n\n# 3. Publish\nnpm publish --access public\n```\n\n---\n\n## How to Add a New Detector\n\nAdding support for a new technology takes **one file**:\n\n### 1. Create `src/detectors/my-tech.js`\n\n```js\nimport { buildDetection } from '../confidence.js';\n\nfunction hasDep(packageJson, name) {\n  if (!packageJson) return false;\n  return name in (packageJson.dependencies || {}) ||\n         name in (packageJson.devDependencies || {});\n}\n\nexport function detect(files, packageJson) {\n  const signals = [];\n\n  // Strong signal — dependency in package.json\n  if (hasDep(packageJson, 'my-tech')) {\n    signals.push({ strength: 'strong', source: 'package.json dependency: my-tech' });\n  }\n\n  // Strong signal — config file\n  const config = files.find(f => f.name === 'my-tech.config.js');\n  if (config) {\n    signals.push({ strength: 'strong', source: 'my-tech.config.js exists', file: config.relativePath });\n  }\n\n  // Weak signal — code pattern\n  const usageFiles = files.filter(f => f.content && /myTech\\.init\\(/.test(f.content));\n  if (usageFiles.length > 0) {\n    signals.push({ strength: 'weak', source: 'myTech.init() in source', file: usageFiles[0].relativePath });\n  }\n\n  return [buildDetection('MyTech', signals, null)].filter(Boolean);\n}\n```\n\n### 2. Register it in `src/analyzer.js`\n\n```js\nimport { detect as detectMyTech } from './detectors/my-tech.js';\n\n// Inside analyzeProject():\nconst stacks = {\n  // ...existing detectors...\n  myTech: detectMyTech(files, packageJson),\n};\n```\n\n### 3. Render it in `src/formatter.js`\n\n```js\nrenderSection('My Tech', stacks.myTech, verbose);\n```\n\nThat's it. The confidence scoring, signal tracking, and JSON output work automatically.\n\n---\n\n## Requirements\n\n- **Node.js** v18.0.0 or higher\n- **npm** v7+ (for `npx` support)\n\n## Roadmap\n\nFuture detectors planned:\n\n- Django, Flask (Python)\n- Laravel, Symfony (PHP)\n- Spring Boot (Java)\n- Docker / Kubernetes\n- GraphQL, tRPC\n- Supabase, Firebase\n- Cloudflare Workers\n- Astro, SolidJS, Remix\n- Bun, Deno runtimes\n\n---\n\n## License\n\nMIT © devstack-detect contributors\n","readmeFilename":"README.md","_rev":"1-191e5cd46a639ced4fcca1ea270e5731"}