# looker-open-source/looker-cli architecture

> Architecture diagram of the GitHub repository looker-open-source/looker-cli, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/looker-open-source/looker-cli
- Repository: https://github.com/looker-open-source/looker-cli

## Overview

looker-cli is a Go command-line client for managing Looker API 4.0 resources. Users invoke a command, configure a profile or authentication method, and the command performs Looker operations and presents or exports results. The graph groups the documented resource-management capabilities and sampled health and project workflows; unsampled commands are represented by their exact source files. Source excerpts show several concrete API operations and the executable entry point, while some internal command wiring is not visible, so the graph avoids claiming those specific calls.

Main entry points: [`internal/client/client.go`](https://github.com/looker-open-source/looker-cli/blob/main/internal/client/client.go) (API client), [`internal/config/config.go`](https://github.com/looker-open-source/looker-cli/blob/main/internal/config/config.go) (Profile config), [`internal/cmd/root.go`](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/root.go) (Command root), [`internal/cmd/session.go`](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/session.go) (Sessions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI entry"]
  node_root["Command root<br/>[root.go]"]
  node_main["CLI executable<br/>[main.go]"]
end

subgraph group_auth["Connection and auth"]
  node_session["Sessions<br/>[session.go]"]
  node_profile["Profiles<br/>[profile.go]"]
  node_client["API client<br/>[client.go]"]
  node_oauth["OAuth flow<br/>[oauth.go]"]
  node_netrc["Netrc credentials<br/>[netrc.go]"]
  node_tokenfile["Token storage<br/>[token_file.go]"]
  node_config["Profile config<br/>[config.go]"]
end

subgraph group_content["Analytics resources"]
  node_alert["Alerts<br/>[alert.go]"]
  node_dashboard["Dashboards<br/>[dashboard.go]"]
  node_folder["Folders and spaces<br/>[folder.go]"]
  node_look["Looks<br/>[look.go]"]
  node_plan["Scheduled plans<br/>[plan.go]"]
  node_query["Queries<br/>[query.go]"]
  node_model["Models<br/>[model.go]"]
end

subgraph group_admin["Administration"]
  node_user["User commands<br/>[user.go]"]
  node_attribute["User attributes<br/>[attribute.go]"]
  node_group["Groups<br/>[group.go]"]
  node_role["Roles<br/>[role.go]"]
  node_permission["Permissions<br/>[permission.go]"]
  node_connection["Connections<br/>[connection.go]"]
end

subgraph group_dev["Projects and health"]
  node_project["Projects<br/>[project.go]"]
  node_projectfiles["Project files<br/>[project_files.go]"]
  node_health["Health checks<br/>[health.go]"]
  node_analyze["Health analysis<br/>[health_analyze.go]"]
  node_vacuum["Health vacuum<br/>[health_vacuum.go]"]
  node_meta["Metadata<br/>[meta.go]"]
end

node_looker(("Looker API"))
node_operator(("CLI user"))

node_operator -->|"runs"| node_main
node_main -->|"executes"| node_root
node_root -->|"initializes"| node_client
node_root -->|"loads config"| node_config
node_client -->|"performs login"| node_oauth
node_client -->|"gets credentials"| node_netrc
node_client -->|"stores tokens"| node_tokenfile
node_client -->|"reads and saves"| node_config
node_session -->|"initializes login"| node_client
node_profile -->|"manages profiles"| node_config
node_session -->|"stores tokens"| node_config
node_attribute -->|"updates attributes"| node_looker
node_dashboard -->|"imports dashboards"| node_looker
node_dashboard -->|"upserts Looks"| node_look
node_folder -->|"reads folders"| node_looker
node_look -->|"creates Looks"| node_looker
node_plan -->|"runs plans"| node_looker
node_projectfiles -->|"manages files"| node_looker
node_analyze -->|"analyzes usage"| node_looker
node_user -.->|"manages users"| node_looker
node_group -.->|"manages groups"| node_looker
node_role -.->|"manages roles"| node_looker
node_permission -.->|"manages permissions"| node_looker
node_connection -.->|"manages connections"| node_looker
node_alert -.->|"manages alerts"| node_looker
node_query -.->|"runs queries"| node_looker
node_model -.->|"manages models"| node_looker
node_project -.->|"manages projects"| node_looker
node_health -.->|"checks health"| node_looker
node_vacuum -.->|"cleans resources"| node_looker
node_meta -.->|"reads metadata"| node_looker

click node_user "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/user.go"
click node_attribute "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/attribute.go"
click node_group "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/group.go"
click node_role "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/role.go"
click node_permission "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/permission.go"
click node_connection "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/connection.go"
click node_session "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/session.go"
click node_profile "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/profile.go"
click node_client "https://github.com/looker-open-source/looker-cli/blob/main/internal/client/client.go"
click node_oauth "https://github.com/looker-open-source/looker-cli/blob/main/internal/client/oauth.go"
click node_netrc "https://github.com/looker-open-source/looker-cli/blob/main/internal/client/netrc.go"
click node_tokenfile "https://github.com/looker-open-source/looker-cli/blob/main/internal/client/token_file.go"
click node_config "https://github.com/looker-open-source/looker-cli/blob/main/internal/config/config.go"
click node_alert "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/alert.go"
click node_dashboard "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/dashboard.go"
click node_folder "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/folder.go"
click node_look "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/look.go"
click node_plan "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/plan.go"
click node_query "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/query.go"
click node_model "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/model.go"
click node_project "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/project.go"
click node_projectfiles "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/project_files.go"
click node_health "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/health.go"
click node_analyze "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/health_analyze.go"
click node_vacuum "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/health_vacuum.go"
click node_meta "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/meta.go"
click node_root "https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/root.go"
click node_main "https://github.com/looker-open-source/looker-cli/blob/main/cmd/looker-cli/main.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_root,node_main,node_operator toneBlue
class node_session,node_profile,node_client,node_oauth,node_netrc,node_tokenfile,node_config toneAmber
class node_alert,node_dashboard,node_folder,node_look,node_plan,node_query,node_model,node_looker toneMint
class node_user,node_attribute,node_group,node_role,node_permission,node_connection toneRose
class node_project,node_projectfiles,node_health,node_analyze,node_vacuum,node_meta toneIndigo
```

## Components

### CLI entry

- [Command root](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/root.go): `internal/cmd/root.go`
- [CLI executable](https://github.com/looker-open-source/looker-cli/blob/main/cmd/looker-cli/main.go): `cmd/looker-cli/main.go`

### Connection and auth

- [Sessions](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/session.go): `internal/cmd/session.go`
- [Profiles](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/profile.go): `internal/cmd/profile.go`
- [API client](https://github.com/looker-open-source/looker-cli/blob/main/internal/client/client.go): `internal/client/client.go`
- [OAuth flow](https://github.com/looker-open-source/looker-cli/blob/main/internal/client/oauth.go): `internal/client/oauth.go`
- [Netrc credentials](https://github.com/looker-open-source/looker-cli/blob/main/internal/client/netrc.go): `internal/client/netrc.go`
- [Token storage](https://github.com/looker-open-source/looker-cli/blob/main/internal/client/token_file.go): `internal/client/token_file.go`
- [Profile config](https://github.com/looker-open-source/looker-cli/blob/main/internal/config/config.go): `internal/config/config.go`

### Analytics resources

- [Alerts](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/alert.go): `internal/cmd/alert.go`
- [Dashboards](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/dashboard.go): `internal/cmd/dashboard.go`
- [Folders and spaces](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/folder.go): `internal/cmd/folder.go`
- [Looks](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/look.go): `internal/cmd/look.go`
- [Scheduled plans](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/plan.go): `internal/cmd/plan.go`
- [Queries](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/query.go): `internal/cmd/query.go`
- [Models](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/model.go): `internal/cmd/model.go`

### Administration

- [User commands](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/user.go): `internal/cmd/user.go`
- [User attributes](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/attribute.go): `internal/cmd/attribute.go`
- [Groups](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/group.go): `internal/cmd/group.go`
- [Roles](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/role.go): `internal/cmd/role.go`
- [Permissions](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/permission.go): `internal/cmd/permission.go`
- [Connections](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/connection.go): `internal/cmd/connection.go`

### Projects and health

- [Projects](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/project.go): `internal/cmd/project.go`
- [Project files](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/project_files.go): `internal/cmd/project_files.go`
- [Health checks](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/health.go): `internal/cmd/health.go`
- [Health analysis](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/health_analyze.go): `internal/cmd/health_analyze.go`
- [Health vacuum](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/health_vacuum.go): `internal/cmd/health_vacuum.go`
- [Metadata](https://github.com/looker-open-source/looker-cli/blob/main/internal/cmd/meta.go): `internal/cmd/meta.go`

### Other components

- **Looker API**
- **CLI user**

## Connections

- CLI user → CLI executable: runs (evidence: `README.md`)
- CLI executable → Command root: executes (evidence: `cmd/looker-cli/main.go`)
- Command root → API client: initializes (evidence: `internal/cmd/root.go`)
- Command root → Profile config: loads config (evidence: `internal/cmd/root.go`)
- API client → OAuth flow: performs login (evidence: `internal/client/client.go`)
- API client → Netrc credentials: gets credentials (evidence: `internal/client/client.go`)
- API client → Token storage: stores tokens (evidence: `internal/client/client.go`)
- API client → Profile config: reads and saves (evidence: `internal/client/client.go`)
- Sessions → API client: initializes login (evidence: `internal/cmd/session.go`)
- Profiles → Profile config: manages profiles (evidence: `internal/cmd/profile.go`)
- Sessions → Profile config: stores tokens (evidence: `internal/cmd/session.go`)
- User attributes → Looker API: updates attributes (evidence: `internal/cmd/attribute.go`)
- Dashboards → Looker API: imports dashboards (evidence: `internal/cmd/dashboard.go`)
- Dashboards → Looks: upserts Looks (evidence: `internal/cmd/dashboard.go`)
- Folders and spaces → Looker API: reads folders (evidence: `internal/cmd/folder.go`)
- Looks → Looker API: creates Looks (evidence: `internal/cmd/look.go`)
- Scheduled plans → Looker API: runs plans (evidence: `internal/cmd/plan.go`)
- Project files → Looker API: manages files (evidence: `internal/cmd/project_files.go`)
- Health analysis → Looker API: analyzes usage (evidence: `internal/cmd/health_analyze.go`)
- User commands → Looker API: manages users (evidence: `README.md`)
- Groups → Looker API: manages groups (evidence: `README.md`)
- Roles → Looker API: manages roles (evidence: `README.md`)
- Permissions → Looker API: manages permissions (evidence: `README.md`)
- Connections → Looker API: manages connections (evidence: `README.md`)
- Alerts → Looker API: manages alerts (evidence: `README.md`)
- Queries → Looker API: runs queries (evidence: `README.md`)
- Models → Looker API: manages models (evidence: `README.md`)
- Projects → Looker API: manages projects (evidence: `README.md`)
- Health checks → Looker API: checks health (evidence: `README.md`)
- Health vacuum → Looker API: cleans resources (evidence: `README.md`)
- Metadata → Looker API: reads metadata (evidence: `README.md`)
