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.
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:
bash
# 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 fieldrover graph fetch <
Three rules that keep this correct:
Use rover graph fetch (the API schema) — notrover 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.
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 (opens in a new tab).
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.
Start a local Router with automatic schema composition:
bash
# Start with supergraph configrover dev --supergraph-config supergraph.yaml# Start with GraphOS variant as baserover dev --graph-ref my-graph@staging --supergraph-config local.yaml
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:
bash
❌ 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):
bash
# Overview of a GraphOS graphrover 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 levelrover graph fetch my-graph@current | rover schema describe -
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 (opens in a new tab) 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.
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)
About this skill
Trigger
Guide for using Apollo Rover CLI to manage GraphQL schemas and federation. Use this skill when: (1) publishing or fetching subgraph/graph schemas, (2) composing supergraph schemas locally or via GraphOS, (3) running local supergraph development with rover dev, (4) validating schemas with check and lint commands, (5) configuring Rover authentication and environment, (6) exploring or searching a graph's schema for agent-driven discovery (rover schema describe / rover schema search).
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
MIT — the text of every skill is reproduced unmodified, frontmatter included, under the upstream licence.
Discovery
14 skills found by walking the repository tree for SKILL.md, not by matching a directory convention. One layout observed: skills/*/SKILL.md.
Issue colours
Resolved from a deterministic hash of the owner name. Two accent tones are generated per issue and each is proven against its own ground before it ships: a single accent that passes AA on both light and dark paper is arithmetically impossible.
Heading repairs
1 repair applied to this skill so the document has one h1 and no skipped levels:
Shifted “24 headings” from h1 to h2 so the skill title is the only h1.
Images inside a skill come from the upstream repository. Where the author gave no alternative text we mark the image decorative rather than inventing a description — a plausible caption we made up is worse than none for the reader who depends on it.
Marketplace
A plugin manifest is published at .claude-plugin/marketplace.json by Apollo GraphQL, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree.
Signal
Install counts come from skills.sh. They measure downloads, not quality, and an unranked repository is not an unread one.
Agent surfaces
The whole issue is available as one markdown document at /apollographql/skills.md, and each skill at its own URL.
Set by Skills Docs from the source repository. Body text is Literata at the reader’s chosen size and measure; code is Geist Mono. Nothing on this page was written by us except this paragraph.
Appendix 12.1–12.6
6 files · 36 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of skill 12.
ReferencesMarkdown · 6 files
Documentation the agent loads on demand, rather than up front.