As Looker adoption grows across an organization, many teams end up needing the same core metrics with their own local variations. The clean way to serve them is to build once and reuse, and Looker's hub and spoke pattern is designed for exactly that. A central hub project holds a governed, generic LookML model, and each team's spoke project imports that model and tailors it without touching the shared definitions. The result is one source of truth for your metrics with room for local flexibility, which is also what makes LookML valuable as a semantic layer across Looker and the wider Google Cloud analytics stack.
In a large deployment, letting every team write its own LookML leads to duplicated logic and metrics that quietly drift apart. Hub and spoke keeps that from happening. The hub defines shared views, explores, and business logic once, under tight control. Spokes inherit that code and adapt it for their own audiences, so a regional team or a business unit can add a dimension or a join without forking the core model. Everyone stays aligned on the same definitions, and governance lives in one place.
Looker implements hub and spoke through project import, declared in a project's manifest file. There are two ways to bring the hub into a spoke.
Local dependency imports a project on the same Looker instance:
project_name: "sales_spoke"
local_dependency: {
project: "hub"
}
Remote dependency imports a hub from a Git repository and pins it to a version with the ref subparameter, which can be a branch, a release tag, or a commit:
remote_dependency: hub {
url: "https://github.com/your-org/looker-hub"
ref: "main"
}
When you add a remote dependency and validate, Looker pulls the hub files in under the imported_projects folder and creates a manifest lock file to track the version in use. In the spoke, you then include the hub view files and layer your changes on top using refinements and extends, which let you adjust or add to an existing view or explore without editing the hub itself.
The hub is a shared infrastructure, so treat it that way.
Local dependency is simplest when the hub and spoke live on the same instance and developers have model permissions in both. Choose remote dependency when you want version control over what the spoke consumes, when teams are separated, or when spoke developers lack permissions in the hub's models. Because remote dependency pins to a ref, you decide exactly when a spoke picks up hub changes: Update the ref, validate, and the spoke moves to the new version. That control is the main reason larger teams prefer it.
A few practical points help set expectations:
Hub and spoke is how a Looker deployment stays consistent and governed as it grows across teams. As a Google Cloud partner, KPI Partners helps organizations design LookML architectures that balance central governance with team-level flexibility. When this is part of a broader move to modernize or consolidate business intelligence, our BI Modernization Accelerator brings the same structure to migrating and scaling models across platforms.