rover

CLI Apollo Rover để quản lý schema GraphQL, federation và phát triển supergraph cục bộ. Xuất bản, tải và xác thực schema subgraph; soạn supergraph liên kết cục bộ hoặc qua GraphOS. Bao gồm kiểm tra schema (xác thực trước khi triển khai), linting và introspection từ các máy chủ đang chạy. Lệnh rover dev khởi động Router cục bộ với tính năng soạn schema tự động cho quy trình phát triển. Hỗ trợ các mẫu CI/CD với xác thực trước khi xuất bản và đầu ra JSON cho việc viết script. Yêu cầu...

npx skills add https://github.com/apollographql/skills --skill rover

Apollo Rover CLI Guide

Rover is the official CLI for Apollo GraphOS. It helps you manage schemas, run composition locally, publish to GraphOS, and develop supergraphs on your local machine.

Quick Start

Step 1: Install

# macOS/Linux
curl -sSL https://rover.apollo.dev/nix/latest | sh

# npm (cross-platform)
npm install -g @apollo/rover

# Windows PowerShell
iwr 'https://rover.apollo.dev/win/latest' | iex

Step 2: Authenticate

# Interactive authentication (opens browser)
rover config auth

# Or set environment variable
export APOLLO_KEY=your-api-key

Step 3: Verify Installation

rover --version
rover config whoami

Explore a Graph's Schema (start here for schema questions)

To answer "what's in this graph?", find a field, or write a query against a GraphOS graph, fetch the API schema and pipe it into rover schema — this keeps the SDL out of your context and returns only what you need:

# What can I query? (compact overview)
rover graph fetch <graph@variant> | rover schema describe -

# Find a field by concept/keyword (returns the path from a root operation)
rover graph fetch <graph@variant> | rover schema search - "<keyword>"

# Zoom into one type or field
rover graph fetch <graph@variant> | rover schema describe - --coord <Type.field> --depth 1

Three rules that keep this correct:

  • Use rover graph fetch (the API schema) — not rover supergraph fetch (that returns composition SDL with federation internals like join__/link__).
  • Pipe it in — never run rover graph fetch alone and read the raw SDL (a large schema floods your context; that's exactly what rover schema avoids).
  • The schema commands read piped SDL, not a graph ref — rover schema describe <graph@variant> fails; you must fetch first and pipe.

Full reference, ranking rules, and the save-once pattern: Schema Exploration and references/schema.md.

Core Commands Overview

CommandDescriptionUse Case
rover subgraph publishPublish subgraph schema to GraphOSCI/CD, schema updates
rover subgraph checkValidate schema changesPR checks, pre-deploy
rover subgraph fetchDownload subgraph schemaLocal development
rover supergraph composeCompose supergraph locallyLocal testing
rover devLocal supergraph developmentDevelopment workflow
rover graph publishPublish monograph schemaNon-federated graphs
rover schema describeExplore a schema by coordinate; takes SDL via stdin/file, not a graph ref — pipe from rover graph fetchAgent schema discovery
rover schema searchSearch a schema by keyword; takes SDL via stdin/file, not a graph ref — pipe from rover graph fetchAgent schema discovery

Graph Reference Format

Most commands require a graph reference in the format:

<GRAPH_ID>@<VARIANT>

Examples:

  • my-graph@production
  • my-graph@staging
  • my-graph@current (default variant)

Set as environment variable:

export APOLLO_GRAPH_REF=my-graph@production

Subgraph Workflow

Publishing a Subgraph

# From schema file
rover subgraph publish my-graph@production \
  --name products \
  --schema ./schema.graphql \
  --routing-url https://products.example.com/graphql

# From running server (introspection)
rover subgraph publish my-graph@production \
  --name products \
  --schema <(rover subgraph introspect http://localhost:4001/graphql) \
  --routing-url https://products.example.com/graphql

Checking Schema Changes

# Check against production traffic
rover subgraph check my-graph@production \
  --name products \
  --schema ./schema.graphql

Fetching Schema

# Fetch from GraphOS
rover subgraph fetch my-graph@production --name products

# Introspect running server
rover subgraph introspect http://localhost:4001/graphql

Supergraph Composition

Local Composition

Create supergraph.yaml:

federation_version: =2.9.0
subgraphs:
  products:
    routing_url: http://localhost:4001/graphql
    schema:
      file: ./products/schema.graphql
  reviews:
    routing_url: http://localhost:4002/graphql
    schema:
      subgraph_url: http://localhost:4002/graphql

federation_version here is the composition version — it only needs to be ≥ each subgraph's @link floor, so subgraphs pinned to a lower version compose fine. If a subgraph server throws UNKNOWN_FEDERATION_LINK_VERSION at startup, that's a client-library lag, not a composition problem. See the apollo-federation skill's Federation versions.

Compose:

rover supergraph compose --config supergraph.yaml > supergraph.graphql

Fetch Composed Supergraph

rover supergraph fetch my-graph@production

This returns the supergraph SDL (federation directives + join__/link__ internals) — use it for composition/router work. To explore what you can query or write an operation, use rover graph fetch (the API schema) instead — see Explore a Graph's Schema.

Local Development with rover dev

Start a local Router with automatic schema composition:

# Start with supergraph config
rover dev --supergraph-config supergraph.yaml

# Start with GraphOS variant as base
rover dev --graph-ref my-graph@staging --supergraph-config local.yaml

With MCP Integration

# Start with MCP server enabled
rover dev --supergraph-config supergraph.yaml --mcp

Schema Exploration (for Agents)

rover schema describe and rover schema search let an agent explore a schema without loading the full SDL into context — that is the entire point of these commands.

⚠️ Never read the raw SDL into context. Running rover graph fetch <ref> (or rover graph introspect <url>) on its own prints the entire schema — hundreds to tens of thousands of lines — straight into your context, which defeats the purpose of these commands. Always pipe fetch output into rover schema describe/search: the SDL flows through stdin and only the compact overview/results reach you. (Fetching to a file is fine when the user actually wants the SDL.)

These commands also take SDL on stdin or a file, NOT a graph ref — you can't pass graph@variant to them. Fetch first, then pipe:

❌ rover schema describe my-graph@current             # error: looks for a file named that
❌ rover graph fetch my-graph@current                 # dumps the full SDL into your context
✅ rover graph fetch my-graph@current | rover schema describe -

To explore a graph in GraphOS, fetch its schema and pipe it in. Use rover graph fetch (the API schema) for "what can I query?" exploration — it omits federation internals. Reach for rover supergraph fetch only when you need composition details (join__/link__ types, subgraph structure):

# Overview of a GraphOS graph
rover graph fetch my-graph@current | rover schema describe -

# Find fields by keyword (results include paths from root operations)
rover graph fetch my-graph@current | rover schema search - "playback"

# Zoom into a coordinate, expanding referenced types one level
rover graph fetch my-graph@current | rover schema describe - --coord <Type.field> --depth 1

Coordinate forms: --coord accepts a type (User), a field (User.posts), a field argument (Type.field(arg:)), or a directive (@deprecated) — omit it for the overview.

search vs describe: reach for rover schema search first when matching a concept or keyword and you don't yet know the field name — it finds nested fields and shows the path from a root operation. The describe overview lists only root fields, so search is how you locate fields buried deeper. Use describe for the overview or once you know the type/field coordinate.

This enables a closed-loop workflow — search → describe → write a query — with no MCP server setup. See Schema Exploration for the full command reference, ranking rules, and the save-once pattern for large schemas.

Running the generated operation: Rover does not execute queries — it only manages and inspects schemas. To actually run a generated query you need the graph's endpoint:

  • Single-subgraph graph: rover subgraph list <graph@variant> prints the Routing Url — send the query there with curl.
  • Multi-subgraph / federated: the client endpoint is the router URL (find it in GraphOS Studio; for a GraphOS cloud router, rover cloud config fetch <graph@variant>), not the per-subgraph routing URLs.
  • Don't try to discover the endpoint via the GraphOS Platform API — Rover keeps the API key in its profile/keychain, not $APOLLO_KEY, so ad-hoc API calls will come back unauthenticated.

Reference Files

Detailed documentation for specific topics:

  • Subgraphs - fetch, publish, check, lint, introspect, delete
  • Graphs - monograph commands (non-federated)
  • Supergraphs - compose, fetch, config format
  • Dev - rover dev for local development
  • Schema Exploration - describe, search, agent schema discovery workflows
  • Configuration - install, auth, env vars, profiles

Common Patterns

CI/CD Pipeline

# 1. Check schema changes
rover subgraph check $APOLLO_GRAPH_REF \
  --name $SUBGRAPH_NAME \
  --schema ./schema.graphql

# 2. If check passes, publish
rover subgraph publish $APOLLO_GRAPH_REF \
  --name $SUBGRAPH_NAME \
  --schema ./schema.graphql \
  --routing-url $ROUTING_URL

Schema Linting

# Lint against GraphOS rules
rover subgraph lint --name products ./schema.graphql

# Lint monograph
rover graph lint my-graph@production ./schema.graphql

Output Formats

# JSON output for scripting
rover subgraph fetch my-graph@production --name products --format json

# Plain output (default)
rover subgraph fetch my-graph@production --name products --format plain

Ground Rules

  • ALWAYS authenticate before using GraphOS commands (rover config auth or APOLLO_KEY)
  • ALWAYS use the correct graph reference format: graph@variant
  • PREFER rover subgraph check before rover subgraph publish in CI/CD
  • USE rover dev for local supergraph development instead of running Router manually
  • NEVER commit APOLLO_KEY to version control; use environment variables
  • USE --format json when parsing output programmatically
  • SPECIFY federation_version explicitly in supergraph.yaml for reproducibility
  • USE rover subgraph introspect to extract schemas from running services
  • USE rover schema search / rover schema describe (piped from a fetch) to explore large schemas instead of loading the full SDL into context
  • NEVER fetch a full schema into context just to explore it — pipe rover graph fetch/introspect into rover schema describe/search (a bare fetch is only for when the user wants the SDL file itself)

Thêm skills từ apollographql

apollo-federation
apollographql
Apollo Federation cho phép kết hợp nhiều API GraphQL (subgraph) thành một siêu đồ thị thống nhất.
apollo-ios
apollographql
Apollo iOS là một trình khách GraphQL có kiểu mạnh dành cho các nền tảng Apple. Nó tạo ra các kiểu Swift từ các thao tác và lược đồ GraphQL của bạn, đồng thời cung cấp một trình khách async/await, bộ nhớ đệm chuẩn hóa (trong bộ nhớ hoặc dùng SQLite), một lớp truyền tải HTTP dựa trên interceptor có thể cắm thêm để xử lý các truy vấn, biến đổi và đăng ký đa phần, cùng với một lớp truyền tải WebSocket tùy chọn (graphql-transport-ws) có thể mang bất kỳ loại thao tác nào.
apollo-router
apollographql
Apollo Router là một bộ định tuyến đồ thị hiệu suất cao được viết bằng Rust để chạy các siêu đồ thị Apollo Federation 2. Nó nằm phía trước các đồ thị con của bạn và xử lý việc lập kế hoạch truy vấn, thực thi và tổng hợp phản hồi.
apollo-router-plugin-creator
apollographql
Tạo plugin Rust gốc cho Apollo Router.
apollo-server
apollographql
Hướng dẫn hoàn chỉnh để xây dựng máy chủ GraphQL với Apollo Server 5.x trên nhiều framework. Bao gồm định nghĩa schema, resolver, thiết lập context và xử lý lỗi với hỗ trợ TypeScript. Hỗ trợ chế độ standalone để tạo nguyên mẫu và tích hợp với Express, Fastify, Koa cùng môi trường serverless. Bao gồm các mẫu resolver, xác thực/phân quyền, plugin, DataLoader để ngăn chặn N+1 và các kỹ thuật tối ưu hiệu suất. Cung cấp tài liệu tham khảo cho nguồn dữ liệu, lỗi...
graphql-operations
apollographql
Hướng dẫn thực hành tốt nhất để viết các thao tác GraphQL hiệu quả, an toàn về kiểu và tổ chức chúng với các fragment. Bao gồm queries, mutations, subscriptions và fragments với quy ước đặt tên, cú pháp biến và cách sử dụng chỉ thị. Nhấn mạnh các nguyên tắc cốt lõi: chỉ yêu cầu các trường cần thiết, đặt tên cho tất cả các thao tác, sử dụng biến thay vì giá trị cứng, và bao gồm các trường id để có thể lưu vào bộ nhớ đệm. Khuyến nghị đặt fragment cùng với component và sử dụng các chỉ thị @include / @skip cho các trường có điều kiện...
graphql-schema
apollographql
Hướng dẫn thực tiễn tốt nhất trong ngành để thiết kế lược đồ GraphQL trực quan, hiệu suất cao và dễ bảo trì. Bao gồm các nguyên tắc thiết kế cốt lõi như tổ chức kiểu dữ liệu tập trung vào máy khách, các mẫu nullability rõ ràng và chiến lược phát triển tương thích ngược. Cung cấp tài liệu tham khảo về các kiểu dữ liệu, quy ước đặt tên, phân trang dựa trên con trỏ, mô hình hóa lỗi và các cân nhắc bảo mật. Bao gồm các mẫu thực tế cho interfaces, unions, input types, mutations và chiến lược ID kèm ví dụ mã...
rust-best-practices
apollographql
Các tiêu chuẩn mã hóa Rust thành ngữ dựa trên sổ tay thực hành tốt nhất của Apollo GraphQL. Bao gồm chín lĩnh vực cốt lõi: phong cách và thành ngữ mã hóa, linting clippy, tối ưu hóa hiệu suất, xử lý lỗi, mẫu kiểm thử, generics và dispatch, mẫu trạng thái kiểu, tài liệu và an toàn con trỏ. Nhấn mạnh việc mượn hơn là sao chép, xử lý lỗi dựa trên Result với thiserror/anyhow, và phân tích hiệu suất với bản phát hành. Bao gồm hướng dẫn tham khảo nhanh về các mẫu sở hữu, tránh panic,...