How GitLab Orbit Local works
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
- Status: Beta
GitLab Orbit Local is experimental. Capabilities and command shape may change before GA.
Indexing pipeline
When you run orbit index, GitLab Orbit Local:
- Walks the current working tree, including uncommitted files and respecting
.gitignore. - Passes each source file to a language-specific parser (rust-analyzer, tree-sitter, or a custom parser depending on language).
- Extracts definitions (functions, classes, modules), import declarations, and cross-file symbol references.
- Writes the results as nodes and edges into a local DuckDB file at
~/.orbit/graph.duckdb.
Indexing does not enumerate or check out other Git branches. Each checkout or worktree is indexed from the files currently on disk.
The v2 pipeline runs all language parsers in parallel. Indexing a medium-sized repository typically completes in seconds.
The graph model
GitLab Orbit Local builds a code-only graph. It does not have access to SDLC data (merge requests, pipelines, users) because there is no GitLab connection.
Nodes in the local graph:
- File - a source file in the repository
- Directory - a directory in the repository
- Definition - a function, class, module, or other named symbol
- ImportedSymbol - a symbol imported from another file or package
Edges connect files to their definitions, files to their imports, and definitions to the symbols they reference across files.
Query execution
GitLab Orbit Local exposes the graph as a DuckDB database. Run any read-only SQL
against it with orbit sql:
orbit sqlopens~/.orbit/graph.duckdbread-only.- Your SQL runs directly against the graph tables — no DSL compilation, no authorization layer.
- Results stream back as a table, JSON, NDJSON, or CSV.
All data in the graph is accessible to whoever runs the CLI.
Storage
The graph is stored in a single DuckDB file at ~/.orbit/graph.duckdb. Multiple
repository checkout paths can share the database. The canonical checkout path
determines the project ID. Switching branches alone does not update the stored
graph. Reindexing the same checkout replaces its previous graph in that database
with the current working-tree contents. To retain graphs for multiple branches,
index them from separate checkout or worktree paths.
Supported languages
See index data with GitLab Orbit for the shared language-support table.
Billing
GitLab Orbit Local does not consume GitLab Credits. All processing is local.