{"_id":"supabase-markdown","_rev":"4-121fcd7f50e997ed6f69f63e8a67c796","name":"supabase-markdown","dist-tags":{"latest":"1.0.4"},"versions":{"0.1.0":{"name":"supabase-markdown","version":"0.1.0","keywords":["supabase","typescript","markdown","types","database"],"author":{"name":"Brandon Ha"},"license":"MIT","_id":"supabase-markdown@0.1.0","maintainers":[{"name":"idevbrandon","email":"idevbrandon@gmail.com"}],"bin":{"supabase-markdown":"dist/cli.js"},"dist":{"shasum":"f2230e1b12021b97bbc359c37750d65165b1feb2","tarball":"https://registry.npmjs.org/supabase-markdown/-/supabase-markdown-0.1.0.tgz","fileCount":9,"integrity":"sha512-ztX2RYpMtBvMgmFcG4XdxWuhpBJleMAzb27tLJPTm2Lj1IW9MFbSJHac9/GlN84jsusdesOJKVqeXSG/Zb6wSQ==","signatures":[{"sig":"MEQCIHMgK9SLMiRHbJCMJGViW3wMTv64nwCWdpbMEH9nhzh7AiAtrSXoy/BBJKniPRTGHkgi6z3ZNmUIgwF4wUBNe7+hNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14394},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","generate":"ts-node src/generate.ts","prepublishOnly":"pnpm build"},"_npmUser":{"name":"idevbrandon","email":"idevbrandon@gmail.com"},"_npmVersion":"11.5.2","description":"Generate TypeScript types and markdown documentation from your Supabase database","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@supabase/supabase-js":"^2.87.0"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.0","typescript":"^5.2.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/supabase-markdown_0.1.0_1765370269344_0.6635574733673242","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"supabase-markdown","version":"1.0.0","keywords":["supabase","typescript","markdown","types","database","erd","mermaid","documentation","generator"],"author":{"name":"Brandon Ha"},"license":"MIT","_id":"supabase-markdown@1.0.0","maintainers":[{"name":"idevbrandon","email":"idevbrandon@gmail.com"}],"homepage":"https://github.com/idevbrandon/supabase-markdown","bugs":{"url":"https://github.com/idevbrandon/supabase-markdown/issues"},"bin":{"supabase-markdown":"lib/cli.js"},"dist":{"shasum":"a7adde87254ce7c8f9f24393e71dc0c63f51923d","tarball":"https://registry.npmjs.org/supabase-markdown/-/supabase-markdown-1.0.0.tgz","fileCount":23,"integrity":"sha512-Ob0PQNFhryE2j3pC3yLZEeSB6S3Nxbd0v6ER17P1Hfjexhkm14VmfWOEnbveXvzJi40SCl1JZEkjLTSB4wmpfQ==","signatures":[{"sig":"MEUCIQCeN/2MCTymclvHSDzzOWETTFlMw5GaOCRKAOlA5ZIUkAIgZ4ZZA/hu1qxK/vspeaRkBO2rxSp/rIrfLRwoNm5BzFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73670},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"3f1a34dd474d1270a1ea7bdabdbd90ac45f873da","scripts":{"dev":"rimraf lib && tsc --watch","lint":"echo 'Skipping lint for now'","test":"vitest","build":"rimraf lib && tsc","format":"prettier --write src","test:cov":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"idevbrandon","email":"idevbrandon@gmail.com"},"repository":{"url":"git+https://github.com/idevbrandon/supabase-markdown.git","type":"git"},"_npmVersion":"11.5.2","description":"Generate beautiful Mermaid ERD diagrams and markdown documentation from your Supabase database.types.ts file","directories":{},"_nodeVersion":"22.17.0","dependencies":{"dotenv":"^16.6.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","rimraf":"^6.0.0","vitest":"^2.0.0","ts-node":"^10.9.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^2.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/supabase-markdown_1.0.0_1765548451505_0.8693977304081437","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"supabase-markdown","version":"1.0.1","keywords":["supabase","typescript","markdown","types","database","erd","mermaid","documentation","generator"],"author":{"name":"Brandon Ha"},"license":"MIT","_id":"supabase-markdown@1.0.1","maintainers":[{"name":"idevbrandon","email":"idevbrandon@gmail.com"}],"homepage":"https://github.com/idevbrandon/supabase-markdown","bugs":{"url":"https://github.com/idevbrandon/supabase-markdown/issues"},"bin":{"supabase-markdown":"lib/cli.js"},"dist":{"shasum":"dde436f42cf94832da8c9fef29af7a886e43a10c","tarball":"https://registry.npmjs.org/supabase-markdown/-/supabase-markdown-1.0.1.tgz","fileCount":28,"integrity":"sha512-y+HCvRXBJOkaJErxh/lZvIWa2whHsgo/OWezHFFjeCZHg9hdvsaGAwDM/8PG3AYXArQMVhy7U083ZRyVIX4ZQw==","signatures":[{"sig":"MEUCIQClbTQu1cf9IZ/V2aYjDVJga9NbWEz+T968QqhQsiOEWgIgVfho3nsMgDfWW8abHCGY+5X0Zi33GNNbxFYlL+91iCo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129844},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"9fb34486673f2eb518a5924ba2160feef99723f6","scripts":{"dev":"rimraf lib && tsc --watch","lint":"echo 'Skipping lint for now'","test":"vitest","build":"rimraf lib && tsc","format":"prettier --write src","test:cov":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"idevbrandon","email":"idevbrandon@gmail.com"},"repository":{"url":"git+https://github.com/idevbrandon/supabase-markdown.git","type":"git"},"_npmVersion":"11.5.2","description":"Generate beautiful Mermaid ERD diagrams and markdown documentation from your Supabase database.types.ts file","directories":{},"_nodeVersion":"22.17.0","dependencies":{"pg":"^8.16.3","dotenv":"^16.6.1","@types/pg":"^8.16.0","@supabase/supabase-js":"^2.87.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.0.0","rimraf":"^6.0.0","vitest":"^2.0.0","ts-node":"^10.9.0","prettier":"^3.0.0","typescript":"^5.6.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^2.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/supabase-markdown_1.0.1_1765624818879_0.5587930720662151","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"supabase-markdown","version":"1.0.4","description":"Generate beautiful Mermaid ERD diagrams and markdown documentation from your Supabase database.types.ts file","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"rimraf lib && tsc","dev":"rimraf lib && tsc --watch","test":"vitest","test:cov":"vitest run --coverage","lint":"echo 'Skipping lint for now'","format":"prettier --write src","prepublishOnly":"npm run build"},"bin":{"supabase-markdown":"lib/cli.js"},"keywords":["supabase","typescript","markdown","types","database","erd","mermaid","documentation","generator"],"author":{"name":"Brandon Ha"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/idevbrandon/supabase-markdown.git"},"bugs":{"url":"https://github.com/idevbrandon/supabase-markdown/issues"},"homepage":"https://github.com/idevbrandon/supabase-markdown","devDependencies":{"@types/node":"^22.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","@vitest/coverage-v8":"^2.0.0","eslint":"^9.0.0","prettier":"^3.0.0","rimraf":"^6.0.0","ts-node":"^10.9.0","typescript":"^5.6.0","vitest":"^2.0.0"},"dependencies":{"@supabase/supabase-js":"^2.87.1","@types/pg":"^8.16.0","dotenv":"^16.6.1","pg":"^8.16.3"},"_id":"supabase-markdown@1.0.4","gitHead":"7b5572e8dda9520b5c0ccc73d389d31af39214f7","_nodeVersion":"22.17.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-Ve2CDIv+1rSn91HJmzIhBQl9OQcufg0hf+r1CMiMrWdy8VPEAtbrbAMFObQoKFcW0gB8mhL5aQoiQc2QjDEZ7Q==","shasum":"8bcb25af950778594fb823e0fc927664e8fe37c7","tarball":"https://registry.npmjs.org/supabase-markdown/-/supabase-markdown-1.0.4.tgz","fileCount":28,"unpackedSize":131649,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGyXYw4gi7oN5BVOnE8+uwvicpDqVFouY7FPNGbYczCeAiEAwJOc2K2fDZGff8Xd0r9FLu0ttcnQImJ4bEtcktv8gbc="}]},"_npmUser":{"name":"idevbrandon","email":"idevbrandon@gmail.com"},"directories":{},"maintainers":[{"name":"idevbrandon","email":"idevbrandon@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/supabase-markdown_1.0.4_1765626656629_0.3042267578221429"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-10T12:37:49.343Z","modified":"2025-12-13T11:50:56.966Z","0.1.0":"2025-12-10T12:37:49.478Z","1.0.0":"2025-12-12T14:07:31.651Z","1.0.1":"2025-12-13T11:20:19.028Z","1.0.4":"2025-12-13T11:50:56.778Z"},"bugs":{"url":"https://github.com/idevbrandon/supabase-markdown/issues"},"author":{"name":"Brandon Ha"},"license":"MIT","homepage":"https://github.com/idevbrandon/supabase-markdown","keywords":["supabase","typescript","markdown","types","database","erd","mermaid","documentation","generator"],"repository":{"type":"git","url":"git+https://github.com/idevbrandon/supabase-markdown.git"},"description":"Generate beautiful Mermaid ERD diagrams and markdown documentation from your Supabase database.types.ts file","maintainers":[{"name":"idevbrandon","email":"idevbrandon@gmail.com"}],"readme":"# Supabase Markdown\n\n[![npm version](https://badge.fury.io/js/supabase-markdown.svg)](https://badge.fury.io/js/supabase-markdown)\n[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/idevbrandon/supabase-markdown/blob/main/LICENSE)\n[![downloads](https://img.shields.io/npm/dm/supabase-markdown.svg)](https://www.npmjs.com/package/supabase-markdown)\n\nGenerate beautiful Mermaid ERD diagrams and markdown documentation from your Supabase `database.types.ts` file.\n\n## Installation\n\n```bash\nnpm install -D supabase-markdown\n\npnpm add -D supabase-markdown\n\nyarn add -D supabase-markdown\n```\n\n## Features\n\n- 📊 **Mermaid ERD Diagrams** - Automatically generate visual database diagrams\n- 📚 **Schema Documentation** - Detailed markdown docs for all tables and relationships\n- 🎯 **Multi-Schema Support** - Works with multiple schemas (business, omx, public, etc.)\n- 🔄 **Type-Safe** - Parses TypeScript types directly from generated files\n- 🚀 **Zero Config** - Works out of the box with Supabase CLI generated types\n- 📋 **Complete** - Includes tables, columns, types, nullability, and relationships\n- 🔗 **Enhanced FK Support** - Optionally inspects database for system relationships (e.g. `auth.users`)\n\n## Example Output\n\n### Mermaid ERD Diagram\n\n```mermaid\nerDiagram\n    ecommerce_orders {\n        json details\n        varchar created_at\n        varchar id PK\n        varchar user_id \"NOT NULL\"\n    }\n    ecommerce_products {\n        varchar id PK\n        varchar name \"NOT NULL\"\n        varchar order_id \"NOT NULL\"\n        varchar status\n    }\n    orders ||--o{ ecommerce_products : \"order_id\"\n```\n\n### Schema Documentation\n\n```markdown\n## Schema: `ecommerce`\n\n### products\n\n#### Columns\n\n| Column   | Type   | Nullable |\n| -------- | ------ | -------- |\n| id       | string | ✗        |\n| name     | string | ✗        |\n| order_id | string | ✗        |\n| status   | string | ✓        |\n\n#### Relationships\n\n| Foreign Key            | Column(s) | References | Type        |\n| ---------------------- | --------- | ---------- | ----------- |\n| products_order_id_fkey | order_id  | orders.id  | One-to-Many |\n```\n\n## Enhanced Foreign Key Extraction\n\nBy default, `supabase-markdown` generates relationships solely from `database.types.ts`. However, some relationships (especially to system schemas like `auth` or cross-schema foreign keys) might be missing from the generated types.\n\nTo include these missing relationships, you can provide database credentials. The tool follows this priority:\n\n1.  **Direct Database Connection (Recommended)**\n    - Provides the most complete results, including `auth`, `storage`, and other system schemas.\n    - usage: `DATABASE_URL=postgres://... npx supabase-markdown`\n    - or flag: `npx supabase-markdown --db-url \"postgres://...\"`\n\n    > [!TIP]\n    > If you encounter `ENOTFOUND` or connection errors (common with IPv6-only databases on AWS), use the **Transaction** or **Session** pooler connection string instead of the direct connection string.\n\n2.  **Supabase API (Fallback)**\n    - Uses `SUPABASE_URL` and `SUPABASE_SERVICE_ROLE_KEY`.\n    - Only finds relationships in _exposed_ schemas (usually `public`).\n    - Does NOT require a direct connection, but is less powerful.\n\n3.  **Manual Relations**\n    - Create a `manualRelations.json` file in your project root to manually define missing links.\n\n## Quick Start\n\n### 1. Generate Database Types\n\nFirst, generate your `database.types.ts` file using Supabase CLI:\n\n```bash\n# For local development\nnpx supabase gen types typescript --local > database.types.ts\n\n# For production\nnpx supabase gen types typescript --project-id your-project-id > database.types.ts\n```\n\n### 2. Generate Documentation\n\n```bash\n# Generate to ./docs directory (default)\nnpx supabase-markdown\n\n# Generate to custom directory\nnpx supabase-markdown --output ./documentation\n\n# Use custom types file location\nnpx supabase-markdown --types-file ./src/types/database.types.ts\n\n# Generate single combined file\nnpx supabase-markdown --output ./database-overview.md\n```\n\n### 3. View Your ERD\n\nOpen the generated `ERD.md` file in any markdown viewer that supports Mermaid diagrams (GitHub, VS Code, etc.)\n\n## Generated Files\n\nAfter running the generator, you'll find:\n\n- **`ERD.md`** - Beautiful Mermaid ERD diagram showing all tables and relationships\n- **`database-schema.md`** - Detailed documentation of your database schema\n\nOr a single combined file if you specified a `.md` output file.\n\n## Multi-Schema Support\n\nsupabase-markdown automatically detects and documents all schemas in your database:\n\n```typescript\nexport type Database = {\n  public: { ... },\n  business: { ... }\n}\n```\n\nAll schemas will be included in the generated ERD and documentation.\n\n## Requirements\n\n- Node.js 16+\n- A `database.types.ts` file generated by Supabase CLI\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Credits\n\nInspired by [prisma-markdown](https://github.com/samchon/prisma-markdown) by [@samchon](https://github.com/samchon). This project adapts the concept of generating markdown documentation and ERD diagrams for Supabase databases.\n\n## License\n\nMIT © [Brandon Ha](https://github.com/idevbrandon)\n\n---\n\nMade with ❤️ for the Supabase community\n","readmeFilename":"README.md"}