{"_id":"@butttons/dora","_rev":"3-cea63be749c4b2b50ac41c16c063464c","name":"@butttons/dora","dist-tags":{"latest":"2.0.0"},"versions":{"1.6.1":{"name":"@butttons/dora","version":"1.6.1","author":{"name":"butttons"},"license":"MIT","_id":"@butttons/dora@1.6.1","maintainers":[{"name":"butttons","email":"zilllionaire@gmail.com"}],"bin":{"dora":"dist/index.js"},"dist":{"shasum":"2ab3d87181d807879322c1295f78a97d78bc2d68","tarball":"https://registry.npmjs.org/@butttons/dora/-/dora-1.6.1.tgz","fileCount":4,"integrity":"sha512-o0nozNJcZ9PP/yerG/KGAlNbJsr4CqwC1dZ8aMyJjl6dg+j9zyJ4a/FcNulQT3aU6OvVFI7c3NqweiZaxD1Y5Q==","signatures":[{"sig":"MEYCIQCt87sVUCDRAl+dgd4dFuv7/EGDJr+ZREnAau7ktpNFuAIhALM7IH+NLZWN9jyBsG7J5FQTodq470jW02KtUN/OE1nN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1294932},"type":"module","module":"src/index.ts","gitHead":"47a9a04e4c0ffeeab437ebd6006036e1679ee6ed","scripts":{"test":"bun test ./test/","build":"bun build src/index.ts --compile --outfile dist/dora","build:all":"bun run build:linux && bun run build:macos && bun run build:macos-arm && bun run build:windows","build:npm":"bun build src/index.ts --outfile dist/index.js --target bun","type-check":"tsc","build:linux":"bun build src/index.ts --compile --target=bun-linux-x64 --outfile dist/dora-linux-x64","build:macos":"bun build src/index.ts --compile --target=bun-darwin-x64 --outfile dist/dora-darwin-x64","biome:format":"biome format --write ./src","build:windows":"bun build src/index.ts --compile --target=bun-windows-x64 --outfile dist/dora-windows-x64.exe","changeset:add":"changeset add","generate-proto":"protoc --plugin=./node_modules/.bin/protoc-gen-es --es_out=src/converter --es_opt=target=ts --proto_path=src/proto src/proto/scip.proto","build:macos-arm":"bun build src/index.ts --compile --target=bun-darwin-arm64 --outfile dist/dora-darwin-arm64","changeset:version":"changeset version"},"_npmUser":{"name":"butttons","email":"zilllionaire@gmail.com"},"_npmVersion":"11.4.2","description":"Fast code intelligence for AI agents. Query symbols, dependencies, and references without reading files.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.5","debug":"^4.4.3","ignore":"^5.3.0","commander":"^14.0.2","ts-pattern":"^5.9.0","@changesets/cli":"^2.29.8","@bufbuild/protobuf":"^2.10.2","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/debug":"^4.1.12","@bufbuild/protoc-gen-es":"^2.10.2"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/dora_1.6.1_1771671994102_0.3733227296232895","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@butttons/dora","version":"1.7.0","author":{"name":"butttons"},"license":"MIT","_id":"@butttons/dora@1.7.0","maintainers":[{"name":"butttons","email":"zilllionaire@gmail.com"}],"homepage":"https://github.com/butttons/dora#readme","bugs":{"url":"https://github.com/butttons/dora/issues"},"bin":{"dora":"dist/index.js"},"dist":{"shasum":"388356c782383d33a70298a5129b140d9235fefc","tarball":"https://registry.npmjs.org/@butttons/dora/-/dora-1.7.0.tgz","fileCount":4,"integrity":"sha512-fAxflUBOeYwkoRIXmr8N/zAzHfheI/2obD/8B/yLO0BQ7+JhThacQMMZ97SS/boL4TIzE0r235mMEIia4Wj7JA==","signatures":[{"sig":"MEYCIQDirx9Mll2NX1odS+4KuzqhCodBRxjU2Gt/FyGs67mJEgIhANOPNIgg0oWnxxeIkq2gyMnqNv6fdBHRTIBrHUuB1hhh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@butttons%2fdora@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1311123},"type":"module","module":"src/index.ts","gitHead":"d31eb8aba813114c6d161b8f376b24d3c32bf125","scripts":{"test":"bun test ./test/","build":"bun build src/index.ts --compile --outfile dist/dora","build:all":"bun run build:linux && bun run build:macos && bun run build:macos-arm && bun run build:windows","build:npm":"bun build src/index.ts --outfile dist/index.js --target bun","type-check":"tsc","build:linux":"bun build src/index.ts --compile --target=bun-linux-x64 --outfile dist/dora-linux-x64","build:macos":"bun build src/index.ts --compile --target=bun-darwin-x64 --outfile dist/dora-darwin-x64","biome:format":"biome format --write ./src","build:windows":"bun build src/index.ts --compile --target=bun-windows-x64 --outfile dist/dora-windows-x64.exe","changeset:add":"changeset add","generate-proto":"protoc --plugin=./node_modules/.bin/protoc-gen-es --es_out=src/converter --es_opt=target=ts --proto_path=src/proto src/proto/scip.proto","build:macos-arm":"bun build src/index.ts --compile --target=bun-darwin-arm64 --outfile dist/dora-darwin-arm64","changeset:version":"changeset version"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6226be8b-7f6c-4abd-87bd-d0a768fde64d"}},"repository":{"url":"git+https://github.com/butttons/dora.git","type":"git"},"_npmVersion":"11.6.2","description":"Fast code intelligence for AI agents. Query symbols, dependencies, and references without reading files.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.3.5","debug":"^4.4.3","ignore":"^5.3.0","commander":"^14.0.2","ts-pattern":"^5.9.0","@changesets/cli":"^2.29.8","@toon-format/toon":"^2.1.0","@bufbuild/protobuf":"^2.10.2","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest","@types/debug":"^4.1.12","@bufbuild/protoc-gen-es":"^2.10.2"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/dora_1.7.0_1771775300852_0.941226898008001","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@butttons/dora","version":"2.0.0","module":"src/index.ts","type":"module","description":"Fast code intelligence for AI agents. Query symbols, dependencies, and references without reading files.","bin":{"dora":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/butttons/dora.git"},"author":{"name":"butttons"},"license":"MIT","scripts":{"test":"bun test ./test/","type-check":"tsc","build":"bun build src/index.ts --compile --outfile dist/dora","build:npm":"bun build src/index.ts --outfile dist/index.js --target bun","generate-proto":"protoc --plugin=./node_modules/.bin/protoc-gen-es --es_out=src/converter --es_opt=target=ts --proto_path=src/proto src/proto/scip.proto","biome:format":"biome format --write ./src ./test","build:linux":"bun build src/index.ts --compile --target=bun-linux-x64 --outfile dist/dora-linux-x64","build:macos":"bun build src/index.ts --compile --target=bun-darwin-x64 --outfile dist/dora-darwin-x64","build:macos-arm":"bun build src/index.ts --compile --target=bun-darwin-arm64 --outfile dist/dora-darwin-arm64","build:windows":"bun build src/index.ts --compile --target=bun-windows-x64 --outfile dist/dora-windows-x64.exe","build:all":"bun run build:linux && bun run build:macos && bun run build:macos-arm && bun run build:windows","changeset:add":"changeset add","changeset:version":"changeset version"},"dependencies":{"@bufbuild/protobuf":"^2.10.2","@changesets/cli":"^2.29.8","@modelcontextprotocol/sdk":"^1.25.3","@toon-format/toon":"^2.1.0","commander":"^14.0.2","debug":"^4.4.3","ignore":"^5.3.0","ts-pattern":"^5.9.0","web-tree-sitter":"^0.26.6","zod":"^4.3.5"},"devDependencies":{"@bufbuild/protoc-gen-es":"^2.10.2","@types/bun":"latest","@types/debug":"^4.1.12"},"peerDependencies":{"typescript":"^5"},"gitHead":"f4edb8fd349e142e78dea3258c3cd754a27d37bb","_id":"@butttons/dora@2.0.0","bugs":{"url":"https://github.com/butttons/dora/issues"},"homepage":"https://github.com/butttons/dora#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-+psbUZtjS+W/DfdlgF/J0AQ9CNerVUe5JneY9PU4S3/yx7MO0gcNhhyQKSI7DOY6oLM9EgyWgCNaA9MrUHSZPQ==","shasum":"dbe6b2367106e3474a855c02252b588f1ab3f741","tarball":"https://registry.npmjs.org/@butttons/dora/-/dora-2.0.0.tgz","fileCount":4,"unpackedSize":1486154,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@butttons%2fdora@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCYMUlF0s5bZb/fAEjvbXXzNc69PV+JqSjFHZF5ydjWhgIhALzOkvVMn9KseeV54zKsVl63ECUQApWY9MyAkd3Yt7XF"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6226be8b-7f6c-4abd-87bd-d0a768fde64d"}},"directories":{},"maintainers":[{"name":"butttons","email":"zilllionaire@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dora_2.0.0_1773109852842_0.7626008437693053"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-21T11:06:33.979Z","modified":"2026-03-10T02:30:53.385Z","1.6.1":"2026-02-21T11:06:34.358Z","1.7.0":"2026-02-22T15:48:21.059Z","2.0.0":"2026-03-10T02:30:53.054Z"},"bugs":{"url":"https://github.com/butttons/dora/issues"},"author":{"name":"butttons"},"license":"MIT","homepage":"https://github.com/butttons/dora#readme","repository":{"type":"git","url":"git+https://github.com/butttons/dora.git"},"description":"Fast code intelligence for AI agents. Query symbols, dependencies, and references without reading files.","maintainers":[{"name":"butttons","email":"zilllionaire@gmail.com"}],"readme":"# dora\n\nA CLI that turns a SCIP index into a queryable SQLite database. Gives AI agents structured answers about your codebase instead of making them grep files and read imports.\n\n## Why\n\nWhen an AI agent needs to understand code, it typically reads files, searches for patterns, and traces imports manually. This is slow, burns tokens, and doesn't scale past a few hundred files.\n\ndora pre-indexes your codebase into SQLite. Questions like \"what depends on this file?\", \"where is this symbol used?\", and \"which files are most coupled?\" become millisecond queries instead of multi-step explorations.\n\n## Setup\n\n### Install\n\nDownload the latest binary from the [releases page](https://github.com/butttons/dora/releases):\n\n```bash\n# macOS (ARM)\ncurl -L https://github.com/butttons/dora/releases/latest/download/dora-darwin-arm64 -o dora\nchmod +x dora && sudo mv dora /usr/local/bin/\n\n# macOS (Intel)\ncurl -L https://github.com/butttons/dora/releases/latest/download/dora-darwin-x64 -o dora\nchmod +x dora && sudo mv dora /usr/local/bin/\n\n# Linux\ncurl -L https://github.com/butttons/dora/releases/latest/download/dora-linux-x64 -o dora\nchmod +x dora && sudo mv dora /usr/local/bin/\n```\n\nOr via npm (requires [Bun](https://bun.sh)):\n\n```bash\nbun install -g @butttons/dora\n```\n\n### Install a SCIP indexer\n\ndora needs a SCIP index to work. Install one for your language:\n\n```bash\n# TypeScript / JavaScript\nnpm install -g @sourcegraph/scip-typescript\n```\n\nOther languages: [scip-java](https://github.com/sourcegraph/scip-java), [rust-analyzer](https://github.com/rust-lang/rust-analyzer), [scip-python](https://github.com/sourcegraph/scip-python), [scip-ruby](https://github.com/sourcegraph/scip-ruby), [scip-clang](https://github.com/sourcegraph/scip-clang), [scip-dotnet](https://github.com/sourcegraph/scip-dotnet), [scip-dart](https://github.com/Workiva/scip-dart).\n\n### Initialize\n\n```bash\ncd your-project\ndora init\ndora index\n```\n\n`dora init` creates `.dora/config.json`. `dora index` runs the SCIP indexer and converts the output to SQLite.\n\n## Usage\n\n### Exploring a codebase\n\n```bash\ndora map                          # file count, symbol count, packages\ndora ls src/                      # files in a directory with symbol/dep counts\ndora status                       # index health and grammar availability\n```\n\n### Finding code\n\n```bash\ndora symbol AuthService           # find symbols by name\ndora file src/auth/service.ts     # symbols, dependencies, dependents for a file\ndora refs validateToken           # all references to a symbol across the codebase\n```\n\n### Understanding dependencies\n\n```bash\ndora deps src/auth/service.ts --depth 2    # what this file imports\ndora rdeps src/auth/service.ts --depth 2   # what imports this file\ndora adventure src/a.ts src/b.ts           # shortest path between two files\n```\n\n### Tree-sitter analysis (TypeScript / JavaScript)\n\nThese commands parse source directly without needing an index:\n\n```bash\ndora fn src/auth/service.ts       # functions with complexity, params, return type, LOC\ndora class src/auth/service.ts    # classes with methods, implements, decorators\ndora smells src/auth/service.ts   # high complexity, long functions, too many params, TODOs\n```\n\nInstall a grammar to enable these:\n\n```bash\nbun add -g tree-sitter-typescript\n```\n\n### Architecture\n\n```bash\ndora cycles                        # bidirectional dependencies (A imports B, B imports A)\ndora coupling --threshold 5        # file pairs with high symbol sharing\ndora complexity --sort complexity  # files ranked by change risk\ndora treasure                      # most imported files\ndora lost                          # symbols with zero references\n```\n\n### Documentation\n\n```bash\ndora docs                          # list indexed markdown/text files\ndora docs search \"authentication\"  # full-text search across docs\ndora docs show docs/api.md         # which symbols and files a doc references\n```\n\n### Custom queries\n\n```bash\ndora schema                        # database schema\ndora cookbook show quickstart      # walkthrough with real SQL examples\ndora cookbook show methods         # query patterns for finding methods\ndora query \"SELECT path, symbol_count FROM files ORDER BY symbol_count DESC LIMIT 10\"\n```\n\n### MCP server\n\n```bash\ndora mcp                           # start MCP server (stdio)\n\n# Claude Code\nclaude mcp add --transport stdio dora -- dora mcp\n```\n\n### Output format\n\nAll commands output [TOON](https://github.com/toon-format/toon) by default — a compact JSON encoding optimized for LLM token usage. Pass `--json` for standard JSON.\n\n```bash\ndora status --json\n```\n\n## AI agent integration\n\nFor agent-specific setup (hooks, skills, AGENTS.md snippets) for Claude Code, OpenCode, Cursor, and Windsurf:\n\n```bash\ndora cookbook show agent-setup\n```\n\nOr see [AGENTS.README.md](./AGENTS.README.md).\n\n## How it works\n\ndora has two layers:\n\n**SCIP layer** — runs your configured indexer (e.g. `scip-typescript`) to produce a `.scip` protobuf file, then parses it and loads it into SQLite. This gives you symbol definitions, references, and file-to-file dependencies derived from actual import resolution.\n\n**Tree-sitter layer** — parses source files directly using WebAssembly grammars. This runs on-demand per file and extracts things SCIP doesn't cover: function signatures, cyclomatic complexity, class hierarchy details, and code smells.\n\nThe SQLite schema uses denormalized counts (`symbol_count`, `dependency_count`, `dependent_count`, `reference_count`) so most queries are index lookups rather than aggregations.\n\n```\n.dora/\n├── config.json      # indexer command, ignore patterns, grammar paths\n├── index.scip       # raw SCIP protobuf output\n└── dora.db          # SQLite database (the thing dora actually queries)\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}