{"_id":"@akabaru21/erdgo","_rev":"2-bfa8591e340d00a90e6df15d557dd7c2","name":"@akabaru21/erdgo","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@akabaru21/erdgo","version":"1.0.0","keywords":["erd","diagram","prisma","database","ai","schema"],"author":"","license":"ISC","_id":"@akabaru21/erdgo@1.0.0","maintainers":[{"name":"akabaru21","email":"nandasholatul@gmail.com"}],"bin":{"erdgo":"dist/cli.js"},"dist":{"shasum":"f8eac15b6cca811b15e8d5deb630275b07fff6bb","tarball":"https://registry.npmjs.org/@akabaru21/erdgo/-/erdgo-1.0.0.tgz","fileCount":54,"integrity":"sha512-bJCXu/NNHqvxx3or5yrm33nrVvJWF/5Bq3xnsu7tDJOYW5EVT6fENIud3RO6P427uD5rLXt31Yawr54FmhK+tw==","signatures":[{"sig":"MEYCIQCccNzj/VpWO+tXplji8t1GYl4N6Jp9noApLOdJ5+sf3AIhANKxetesjZ0X81DNRfpADQgKelYB++XBJoH42r24mgpd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":800322},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","scripts":{"ui":"tsx cli.ts ui","dev":"tsx index.ts","build":"tsc","start":"tsx cli.ts start","dashboard":"tsx cli.ts start","typecheck":"tsc --noEmit","start:dist":"node dist/cli.js start","prestart:dist":"npm run build","prepublishOnly":"npm run build"},"_npmUser":{"name":"akabaru21","email":"nandasholatul@gmail.com"},"_npmVersion":"11.13.0","description":"ERDGo - AI-powered ERD generator and analyzer for any project","directories":{},"_nodeVersion":"26.1.0","dependencies":{"chalk":"^4.1.2","dotenv":"^17.4.2","openai":"^4.104.0","express":"^4.22.2","fs-extra":"^11.3.6","commander":"^15.0.0","reactflow":"^11.11.4","playwright":"^1.61.1","web-tree-sitter":"^0.26.11"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","typescript":"^7.0.2","@types/node":"^26.1.1","@types/express":"^5.0.6","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/erdgo_1.0.0_1784009356408_0.9676827269236872","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@akabaru21/erdgo","version":"1.1.0","description":"ERDGo - AI-powered ERD generator and analyzer for any project","main":"dist/index.js","types":"dist/index.d.ts","bin":{"erdgo":"dist/cli.js"},"keywords":["erd","diagram","prisma","database","ai","schema"],"scripts":{"start":"tsx cli.ts start","ui":"tsx cli.ts ui","dev":"tsx index.ts","build":"tsc","prestart:dist":"npm run build","start:dist":"node dist/cli.js start","dashboard":"tsx cli.ts start","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"dependencies":{"chalk":"^4.1.2","commander":"^15.0.0","dotenv":"^17.4.2","express":"^4.22.2","fs-extra":"^11.3.6","openai":"^4.104.0","playwright":"^1.61.1","reactflow":"^11.11.4","web-tree-sitter":"^0.26.11"},"devDependencies":{"@types/express":"^5.0.6","@types/fs-extra":"^11.0.4","@types/node":"^26.1.1","tsx":"^4.23.1","typescript":"^7.0.2"},"author":"","license":"ISC","type":"commonjs","_id":"@akabaru21/erdgo@1.1.0","_nodeVersion":"26.1.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-pjHjkWtpyNLpuHdbzOx71PJSCz86F+8E6qyh/g+elB+dL22Eg1kiQOO+7HPb8NxWrTT4CS1XX14NjklQjRLbGQ==","shasum":"610bce4fbee0abbf7f4581de4b32f0ad294210dd","tarball":"https://registry.npmjs.org/@akabaru21/erdgo/-/erdgo-1.1.0.tgz","fileCount":54,"unpackedSize":812219,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCTg4OXoXCDLbTifTFVwFfq8tezYxGmWgrUmZ7Sbx1SzwIhANqUsfG+ZENnkD244EjM//mszf86WemRKd3yLOooHhdv"}]},"_npmUser":{"name":"akabaru21","email":"nandasholatul@gmail.com"},"directories":{},"maintainers":[{"name":"akabaru21","email":"nandasholatul@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/erdgo_1.1.0_1784015623541_0.47420326614064456"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-14T06:09:16.230Z","modified":"2026-07-14T07:53:43.816Z","1.0.0":"2026-07-14T06:09:16.604Z","1.1.0":"2026-07-14T07:53:43.688Z"},"license":"ISC","keywords":["erd","diagram","prisma","database","ai","schema"],"description":"ERDGo - AI-powered ERD generator and analyzer for any project","maintainers":[{"name":"akabaru21","email":"nandasholatul@gmail.com"}],"readme":"﻿# ERDGo\n\n**AI-powered Entity Relationship Diagram (ERD) generator and analyzer for any codebase.**\n\nERDGo scans your project (Prisma, Laravel, SQL, models, services, routes), builds an interactive ERD, optionally enhances relationships with AI, and lets you edit, export, screenshot, and chat about the schema.\n\n![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)\n![License](https://img.shields.io/badge/license-MIT-blue)\n![CLI](https://img.shields.io/badge/cli-erdgo-informational)\n\n---\n\n## Table of contents\n\n- [Features](#features)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Quick start](#quick-start)\n- [CLI reference](#cli-reference)\n- [Dashboard walkthrough](#dashboard-walkthrough)\n- [Generate ERD with AI](#generate-erd-with-ai)\n- [Interactive ERD editor](#interactive-erd-editor)\n- [AI project chat](#ai-project-chat)\n- [Exports](#exports)\n- [AI provider setup](#ai-provider-setup)\n- [Configuration](#configuration)\n- [HTTP API](#http-api)\n- [Project structure](#project-structure)\n- [Development](#development)\n- [How it works](#how-it-works)\n- [Troubleshooting](#troubleshooting)\n- [Publishing / GitHub](#publishing--github)\n- [License](#license)\n\n---\n\n## Features\n\n- **Framework-aware scan** — Prisma, Laravel, React/Vite, Nest-style layouts, SQL dumps, models, migrations\n- **Heuristic ERD** — tables/entities, fields, PK/FK, formal ORM relations\n- **AI enhancement** — soft/logical joins from app code (lookups, embeds, include trees)\n- **Interactive React Flow canvas** — drag tables, connect fields, bend lines, reconnect ends\n- **Full-page ERD screenshot** — PNG / JPEG / SVG, dark or light theme\n- **SQL + Markdown + DOC export** — MySQL, PostgreSQL, SQL Server, Oracle, SQLite\n- **Use Case & Business Process diagrams** — generated from the current ERD\n- **AI project chat** — ask about login, CRUD, routes, and tables using scanned context\n- **Global CLI** — `erdgo start -r /path/to/project`\n\n---\n\n## Requirements\n\n| Requirement | Version / notes |\n|-------------|-----------------|\n| Node.js | **18+** recommended (20+ ideal) |\n| npm | 9+ |\n| OS | Windows, macOS, Linux |\n| AI (optional) | Any OpenAI-compatible API (OpenAI, OpenRouter, Ollama, 9Router, custom gateway) |\n\n---\n\n## Installation\n\n### Option A — Global install from this repository (local package)\n\n```bash\ngit clone https://github.com/<your-org>/erdgo.git\ncd erdgo\nnpm install\nnpm run build\nnpm i -g .\n```\n\nAfter that, the `erdgo` command is available system-wide.\n\n### Option B — Global install from npm (after publish)\n\n```bash\nnpm i -g erdgo\n```\n\n### Option C — Run without global install\n\n```bash\ngit clone https://github.com/<your-org>/erdgo.git\ncd erdgo\nnpm install\nnpm run build\nnode dist/cli.js start -r /path/to/your/project\n# or during development:\nnpx tsx cli.ts start -r /path/to/your/project\n```\n\n> **Note:** Until the package is published to the npm registry, use **Option A** or **C**.\n> `npm i -g erdgo` only works after `npm publish`.\n\n---\n\n## Quick start\n\n```bash\n# 1) Install (from repo)\nnpm install\nnpm run build\nnpm i -g .\n\n# 2) Start against a project\nerdgo start -r /path/to/your/app\n\n# 3) Open the dashboard\n#    http://localhost:3847\n```\n\nOptional port:\n\n```bash\nerdgo start -r /path/to/your/app -p 3848\n```\n\nTypical first session:\n\n1. Open **http://localhost:3847**\n2. Confirm **Project root** points at your app\n3. Configure **AI settings** (optional but recommended)\n4. Click **Scan files + Generate ERD** (or open `/erd` → **Regenerate ERD**)\n5. Explore the interactive diagram at **http://localhost:3847/erd**\n\n---\n\n## CLI reference\n\n```text\nerdgo <command> [options]\n```\n\n| Command | Description |\n|---------|-------------|\n| `erdgo start` | Create `project-docs/` structure and start the dashboard server |\n| `erdgo ui` | Same as `start` (dashboard only entry) |\n| `erdgo --version` | Print version |\n| `erdgo --help` | Show help |\n\n### Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `-r, --project <path>` | Project root to scan | current working directory |\n| `-p, --port <port>` | Dashboard HTTP port | `3847` |\n\n### Examples\n\n```bash\n# Scan current folder\nerdgo start\n\n# Scan a specific app\nerdgo start -r D:\\laragon\\www\\HRGA-BTR\n\n# Custom port\nerdgo start -r ~/apps/my-api -p 3848\n\n# Dashboard alias\nerdgo ui -r ./my-project\n```\n\n---\n\n## Dashboard walkthrough\n\n### Home (`/`)\n\n- Project root switcher\n- AI provider / base URL / model / API key\n- Status: framework detection, file counts, last ERD summary\n- **Generate ERD** → opens full ERD view after generation\n- Links to **ERD**, **Use Case / Process**, exports\n\n### ERD full view (`/erd`)\n\n- Interactive React Flow canvas (tables + relationship lines)\n- **Regenerate ERD** — rescan + heuristic + AI (if configured)\n- **Save edits** — persist node positions and manual relationships\n- **Relayout tables** — recompute layout so lines attach cleanly\n- **Fit view** — zoom/pan to show all tables\n- **Screenshot** — full diagram capture (not only the viewport)\n- **Export .sql / .md / .doc**\n- **AI Chat** — ask questions about the scanned project\n- **Generate diagrams** — Use Case + Business Process from ERD\n\n### Diagrams (`/diagrams`)\n\n- Mermaid Use Case and Business Process views derived from the ERD\n\n---\n\n## Generate ERD with AI\n\n### From the UI\n\n1. Configure AI on the dashboard (provider, base URL, model, API key)\n2. Click **Test AI** (if available) to verify the connection\n3. Open `/erd` and click **Regenerate ERD**\n4. Wait for scan + AI analysis (can take 30s–several minutes on large projects)\n5. Status line shows source mode, e.g. `heuristic+ai · AI · Prisma`\n\n### From the API\n\n```bash\ncurl -X POST http://localhost:3847/api/erd/generate \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"useAi\\\": true}\"\n```\n\nDisable AI (heuristic only):\n\n```bash\ncurl -X POST http://localhost:3847/api/erd/generate \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"useAi\\\": false}\"\n```\n\n### What AI does\n\n1. **Heuristic pass** parses Prisma / SQL / models / migrations\n2. **AI pass** reads prioritized source files and returns extra entities/relationships\n3. **Soft-relation inference** merges logical joins (lookups, embeds, app-level FKs)\n4. Result is laid out as React Flow nodes/edges and saved under:\n\n```text\n<project-root>/project-docs/diagrams/erd.json\n```\n\n---\n\n## Interactive ERD editor\n\n| Action | How |\n|--------|-----|\n| **Move a table** | Drag the card |\n| **Add relationship** | Drag a blue handle from table A to table B (or to a field) |\n| **Arrow direction** | Arrow always points to the **drop** table (A→B vs B→A) |\n| **Bend a line** | Select the line, drag the yellow midpoint |\n| **Reconnect ends** | Drag the purple edge updater handles |\n| **Edit label / fields** | Select line → **Edit line** (or press `E`) |\n| **Delete relationship** | Select line → **Delete line** (or `Del`) |\n| **Expand fields** | Click **+N more fields** on a tall table |\n| **Persist changes** | Click **Save edits** |\n\nUnsaved changes show an **Unsaved** badge. Always save before regenerating if you want to keep manual edits (regenerate rebuilds from source).\n\n---\n\n## AI project chat\n\nOpen **AI Chat** on the ERD page.\n\nExample questions:\n\n- How does login work in this project?\n- Which tables are involved in registration?\n- List auth-related routes/endpoints\n- Explain the main CRUD pattern (controller/service/route)\n- Which entities relate to `travel` / `orders` / …?\n\nChat uses:\n\n- Latest ERD summary\n- Ranked source excerpts (routes, controllers, services, schema)\n- Your configured AI model\n\nIf AI text fails, ERDGo returns a structured fallback summary from the scan.\n\n---\n\n## Exports\n\nFrom `/erd` (after an ERD exists):\n\n| Export | Description |\n|--------|-------------|\n| **Export .sql** | DDL for selected dialect |\n| **Export .md** | Markdown documentation |\n| **Export .doc** | Simple document export |\n| **Screenshot** | Full-canvas image (PNG/JPEG/SVG) |\n\nSQL dialects: `mysql`, `postgres`, `sqlserver`, `oracle`, `sqlite`.\n\nAPI examples:\n\n```bash\n# SQL\ncurl -L \"http://localhost:3847/api/erd/export/sql?dialect=mysql\" -o erd-mysql.sql\n\n# Markdown / doc\ncurl -L \"http://localhost:3847/api/erd/export/doc?format=md\" -o erd.md\n```\n\n---\n\n## AI provider setup\n\n### Dashboard\n\n1. Open `/`\n2. Section **AI settings**\n3. Choose a preset or **custom**\n4. Set **Base URL**, **Model**, **API Key**\n5. Save AI config\n6. Test connection\n\n### User AI config (saved outside the package)\n\nWhen you click **Save config** on the dashboard, ERDGo stores **provider / baseURL / model / apiKey** in your **user profile**, not inside the npm package:\n\n| OS | Path |\n|----|------|\n| Windows | `%USERPROFILE%\\.erdgo\\config.json` |\n| macOS / Linux | `~/.erdgo/config.json` |\n\nExample user file:\n\n```json\n{\n  \"ai\": {\n    \"provider\": \"openai\",\n    \"baseURL\": \"https://api.openai.com/v1\",\n    \"apiKey\": \"sk-...\",\n    \"model\": \"gpt-4o\",\n    \"enabled\": true\n  }\n}\n```\n\nThe package install only ships a **non-secret** `config.json` (browser defaults, ERD limits, preset catalog).  \n**API keys, base URL, and model are never written into the install directory**, so `npm i -g` does not redistribute your credentials.\n\n### Environment variables\n\n```bash\nOPENAI_API_KEY=sk-...\nOPENAI_BASE_URL=https://api.openai.com/v1\nOPENAI_MODEL=gpt-4o\nAI_PROVIDER=openai\n```\n\nEnv vars override the user config file when set.\n\n### Built-in presets\n\n| Provider | Typical base URL | Example model |\n|----------|------------------|---------------|\n| OpenAI | `https://api.openai.com/v1` | `gpt-4o` |\n| OpenRouter | `https://openrouter.ai/api/v1` | `openai/gpt-4o` |\n| Ollama | `http://127.0.0.1:11434/v1` | `llama3.2` |\n| 9Router / custom | your gateway `/v1` | your model id |\n\nAny **OpenAI-compatible** Chat Completions API works.\n\n---\n\n## Configuration\n\n### ERD scan limits (package `config.json` — non-secret)\n\n```json\n{\n  \"erd\": {\n    \"maxFiles\": 280,\n    \"maxFileBytes\": 800000\n  }\n}\n```\n\n### Output folders (created under the scanned project)\n\n```text\nproject-docs/\n  diagrams/     # erd.json, diagram artifacts\n  exports/      # SQL / doc exports\n  cache/\n  docs/\n  reports/\n  screenshots/\n```\n\n### Important\n\n- **User AI secrets** live in `~/.erdgo/config.json` (or `%USERPROFILE%\\.erdgo\\config.json`).\n- **Package `config.json`** has no apiKey / personal baseURL / model.\n- **Scanned project root** (`-r`) never owns provider secrets.\n\n---\n\n## HTTP API\n\nBase URL: `http://localhost:3847` (or your port)\n\n| Method | Path | Description |\n|--------|------|-------------|\n| `GET` | `/api/health` | Health check |\n| `GET` | `/api/status` | Project + AI + last ERD summary |\n| `GET` | `/api/project-root` | Current project root |\n| `PUT` | `/api/project-root` | Switch project root `{ \"path\": \"...\" }` |\n| `GET` | `/api/config` | Public config (AI key masked) |\n| `PUT` | `/api/config/ai` | Update AI settings |\n| `POST` | `/api/ai/test` | Test AI connection |\n| `GET` | `/api/erd` | Load latest ERD + React Flow graph |\n| `POST` | `/api/erd/generate` | Generate ERD `{ \"useAi\": true }` |\n| `PUT` | `/api/erd` | Save manual edits (nodes/edges) |\n| `GET` | `/api/erd/export/sql?dialect=mysql` | Export SQL |\n| `GET` | `/api/erd/export/doc` | Export documentation |\n| `POST` | `/api/chat` | Project Q&A `{ \"question\": \"...\" }` |\n| `POST` | `/api/diagrams/generate` | Generate use-case / process diagrams |\n\n---\n\n## Project structure\n\n```text\nerdgo/\n├── cli.ts                 # CLI entry (compiled to dist/cli.js)\n├── index.ts               # Core entry\n├── config.json            # Non-secret defaults only (presets / ERD limits)\n├── package.json           # name: @akabaru21/erdgo, bin: erdgo\n├── public/                # Static HTML sources\n│   ├── index.html         # Dashboard\n│   ├── erd.html           # Full ERD editor\n│   └── diagrams.html      # Use case / process\n├── src/\n│   ├── server.ts          # Express dashboard + API\n│   ├── erd-generator.ts   # Scan, heuristic, AI enhance, layout\n│   ├── schema-scanner.ts  # File collection\n│   ├── framework-detector.ts\n│   ├── ai-client.ts       # OpenAI-compatible client\n│   ├── project-chat.ts    # AI chat over project context\n│   ├── erd-export.ts      # SQL / docs export\n│   ├── process-diagrams.ts\n│   └── pages/             # Generated HTML string modules\n└── dist/                  # Build output (npm package runtime)\n```\n\nSource of truth is **TypeScript**. Runtime for the published CLI is **`dist/`**.\n\n---\n\n## Development\n\n```bash\n# install deps\nnpm install\n\n# run TypeScript directly\nnpm start\n# or\nnpx tsx cli.ts start -r /path/to/project\n\n# typecheck\nnpm run typecheck\n\n# production build\nnpm run build\nnode dist/cli.js start -r /path/to/project\n```\n\n### Editing the UI\n\n1. Edit `public/index.html` or `public/erd.html`\n2. Regenerate page modules (example):\n\n```bash\nnode -e \"const fs=require('fs');const html=fs.readFileSync('public/erd.html','utf8');fs.writeFileSync('src/pages/erd.ts','/** Auto-generated */\\nexport function renderErdPage(): string {\\n  return '+JSON.stringify(html)+';\\n}\\n');\"\n```\n\n3. Rebuild / restart the server\n\n---\n\n## How it works\n\n```text\n┌─────────────────┐\n│  Project root   │  (-r path)\n└────────┬────────┘\n         │\n         v\n┌─────────────────┐\n│ Framework detect│  Prisma / Laravel / React / ...\n└────────┬────────┘\n         │\n         v\n┌─────────────────┐\n│ Schema scanner  │  scoped roots, max files/bytes\n└────────┬────────┘\n         │\n         v\n┌─────────────────┐\n│ Heuristic parse │  Prisma models, SQL DDL, FK patterns\n└────────┬────────┘\n         │\n         v\n┌─────────────────┐\n│ AI enhance      │  logical joins from app code (optional)\n└────────┬────────┘\n         │\n         v\n┌─────────────────┐\n│ React Flow layout│  nodes + relation edges\n└────────┬────────┘\n         │\n         v\n  project-docs/diagrams/erd.json\n  Dashboard /erd interactive UI\n```\n\n---\n\n## Troubleshooting\n\n| Problem | What to try |\n|---------|-------------|\n| `erdgo` not found | Run `npm i -g .` from the repo after `npm run build`, or use `node dist/cli.js` |\n| Port already in use | `erdgo start -p 3848` or stop the process on 3847 |\n| Empty ERD | Ensure the project has Prisma/SQL/models; check `/api/status` → `framework` + warnings |\n| AI not used | Check `enabled`, API key, base URL; `POST /api/ai/test`; look at `aiError` in generate response |\n| Generate is slow | Large monorepos: lower `erd.maxFiles`, or run with `\"useAi\": false` first |\n| Manual lines disappear | Click **Save edits** before regenerate; regenerate rebuilds from source |\n| Screenshot only viewport | Use the built-in **Screenshot** button (full bounds capture), not browser print |\n\n---\n\n## Publishing / GitHub\n\n### Suggested repository setup\n\n```bash\ngit init\ngit add .\ngit commit -m \"Initial commit: ERDGo AI ERD generator\"\ngit branch -M main\ngit remote add origin https://github.com/<your-org>/erdgo.git\ngit push -u origin main\n```\n\n### `.gitignore` recommendations\n\n```gitignore\nnode_modules/\ndist/\n.env\n*.log\nproject-docs/\n.DS_Store\n```\n\n> If you publish the npm package, **do** ship `dist/` (via `npm run build` + `files` in `package.json`).\n> For the GitHub source repo you may either commit `dist/` or build in CI before publish.\n\n### npm publish checklist\n\n1. Update `version` in `package.json`\n2. Ensure `bin.erdgo` → `dist/cli.js`\n3. `npm run build`\n4. `npm publish --access public` (scoped packages need access flag)\n5. Users install with:\n\n```bash\nnpm i -g erdgo\nerdgo start -r /path/to/project\n```\n\n### Security\n\n- Never commit real API keys\n- Prefer env vars (`OPENAI_API_KEY`) in CI\n- Keep AI secrets only in `~/.erdgo/config.json` (never in the package install or public forks)\n\n---\n\n## License\n\nMIT (or your chosen license). Add a `LICENSE` file before publishing.\n\n---\n\n## Support\n\n- Open an issue on GitHub for bugs and feature requests\n- Include: Node version, OS, framework of the scanned project, and `/api/status` summary (redact API keys)\n\n---\n\n**ERDGo** — scan · analyze · diagram · export.\n","readmeFilename":"README.md"}