{"id":49038348,"url":"https://github.com/upstart-gg/lucerna","last_synced_at":"2026-04-19T14:00:40.976Z","repository":{"id":351961205,"uuid":"1211960218","full_name":"upstart-gg/lucerna","owner":"upstart-gg","description":"AST-aware code indexer, search engine, and knowledge graph for AI agents.","archived":false,"fork":false,"pushed_at":"2026-04-17T09:19:11.000Z","size":205,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T09:34:50.876Z","etag":null,"topics":["ai-agents","bm25","code-agent","code-search","codebase-search","knowledge-graph","lancedb","rag","semantic-search","tree-sitter"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/upstart-gg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-15T23:33:56.000Z","updated_at":"2026-04-17T08:53:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"11a5b27b-5385-4716-bf1f-a94ff3f752af","html_url":"https://github.com/upstart-gg/lucerna","commit_stats":null,"previous_names":["upstart-gg/lucerna"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/upstart-gg/lucerna","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upstart-gg%2Flucerna","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upstart-gg%2Flucerna/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upstart-gg%2Flucerna/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upstart-gg%2Flucerna/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upstart-gg","download_url":"https://codeload.github.com/upstart-gg/lucerna/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upstart-gg%2Flucerna/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32009239,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","bm25","code-agent","code-search","codebase-search","knowledge-graph","lancedb","rag","semantic-search","tree-sitter"],"created_at":"2026-04-19T14:00:22.248Z","updated_at":"2026-04-19T14:00:40.968Z","avatar_url":"https://github.com/upstart-gg.png","language":"TypeScript","readme":"# Lucerna\n\nAST-aware code indexer, search engine, and knowledge graph for AI agents.\n\nParses your codebase with [tree-sitter](https://tree-sitter.github.io/tree-sitter/), stores structured chunks in an embedded [LanceDB](https://lancedb.com/) database, and exposes hybrid vector + BM25 search with an optional knowledge graph.\n\n**[Full documentation at lucerna.upstart.gg](https://lucerna.upstart.gg)**\n\n---\n\n## Features\n\n- **AST-based chunking** — extracts functions, classes, methods, interfaces, type aliases, and heading sections rather than arbitrary line ranges\n- **Hybrid search** — combines semantic (vector) and lexical (BM25 full-text) search via Reciprocal Rank Fusion\n- **Optional reranking** — second-stage cross-encoder reranking to improve precision after RRF fusion\n- **Knowledge graph** — AST-extracted call, import, and inheritance edges stored in a persisted graph; traverse callers, callees, and dependencies, or expand search results with graph context\n- **Repo map** — aider-style concise listing of all indexed files and their top-level symbols\n- **Recall evaluation** — built-in `eval` command measures recall@k against a JSONL query set\n- **Fully embedded** — uses LanceDB; the index is a directory on disk, one per project\n- **Multi-project** — multiple `CodeIndexer` instances in the same process, each fully isolated\n- **File watching** — debounced incremental re-indexing via chokidar; watcher path uses an in-memory chunk cache (no full DB scan per file change)\n- **Pluggable embeddings** — local (`GemmaEmbeddings`, `NomicTextEmbeddings`, `JinaCodeEmbeddings`, `BGESmallEmbeddings`, `HFEmbeddings`) or remote (`CloudflareEmbeddings`); swap or disable entirely\n- **Popular languages** — custom AST-aware chunkers for Python, Java, Go, Rust, TypeScript/JavaScript, C/C++, C#, Swift, Kotlin, Ruby, PHP, Bash, Scala, Lua, R, Dart, Haskell, Elixir, Clojure, Groovy, Perl, PowerShell, MATLAB, Zig, Solidity, SQL, JSON, Markdown, XML, and more\n- **Gitignore-aware** — `.gitignore` files at any depth are always respected during indexing and watching\n- **CLI** — `lucerna index / watch / search / graph / stats / clear / eval`\n\n---\n\n## MCP server\n\nRegister Lucerna as an MCP server with your AI client (Claude Code, Cursor, Windsurf, Zed, VS Code, and more):\n\n```bash\nnpx add-mcp \"npx -y @upstart.gg/lucerna mcp-server\" --name lucerna\n```\n\n---\n\n## CLI\n\n```bash\nnpx @upstart.gg/lucerna index /path/to/project\nnpx @upstart.gg/lucerna search /path/to/project \"authentication middleware\"\n```\n\nOr install globally for repeated use:\n\n```bash\nnpm install -g @upstart.gg/lucerna\nlucerna index /path/to/project\n```\n\n---\n\n## Programmatic usage\n\n```bash\nnpm install @upstart.gg/lucerna\n```\n\n```ts\nimport { CodeIndexer } from '@upstart.gg/lucerna';\n\nconst indexer = new CodeIndexer({ projectRoot: '/path/to/project' });\nawait indexer.initialize();\nawait indexer.indexProject();\n\nconst results = await indexer.search('authentication middleware', { limit: 5 });\nawait indexer.close();\n```\n\nFor the full API reference, embedding options, CLI docs, and more — see [lucerna.upstart.gg](https://lucerna.upstart.gg).\n\n---\n\n## License\n\nMIT\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupstart-gg%2Flucerna","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fupstart-gg%2Flucerna","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupstart-gg%2Flucerna/lists"}