Migrating from Apollo Router
HyperRoute is a drop-in replacement for Apollo Router. It uses the same supergraph SDL format, same federation directives, and same OTLP/Prometheus observability protocols. The main changes are configuration key names and a few architectural differences.
Config Mapping
| Apollo Router | HyperRoute | Notes |
|---|---|---|
supergraph.path | schema | Schema SDL path |
homepage.enabled | Always available | Built-in playground at /graphql GET |
sandbox.enabled | security.enable_introspection | Introspection toggle |
telemetry.exporters.tracing.otlp | observability.tracing | Same OTLP protocol |
telemetry.exporters.metrics.prometheus | observability.metrics | Same Prometheus format |
limits.max_depth | security.max_query_depth | Same semantics |
rhai scripts | Plugins / Coprocessors | More powerful |
coprocessor | coprocessors | Same HTTP protocol |
--hot-reload | Built-in always | No flag needed |
Migration Steps
1. Install HyperRoute
Install alongside Apollo Router for a gradual migration:
curl -fsSL https://install.hyperroute.dev | sh
2. Convert Configuration
Apollo Router (router.yaml):
supergraph:
path: ./supergraph.graphql
sandbox:
enabled: true
limits:
max_depth: 15
telemetry:
exporters:
tracing:
otlp:
endpoint: http://tempo:4317
metrics:
prometheus:
enabled: true
listen: 0.0.0.0:9091
HyperRoute (hyperroute.yaml):
schema: ./supergraph.graphql
security:
enable_introspection: true
max_query_depth: 15
observability:
tracing:
enabled: true
endpoint: http://tempo:4317
metrics:
enabled: true
path: /metrics
3. Test with Existing Supergraph
HyperRoute uses the same supergraph SDL format produced by Apollo's rover supergraph compose:
routerd serve --schema supergraph.graphql
Your existing supergraph file works without changes.
4. Verify Metrics
Metric names differ but concepts are the same:
| Apollo Router Metric | HyperRoute Metric |
|---|---|
apollo_router_http_requests_total | hyperroute_requests_total |
apollo_router_http_request_duration_seconds | hyperroute_request_duration_seconds |
apollo_router_cache_hit_count | hyperroute_cache_hits_total |
Update your Grafana dashboards and Prometheus alerting rules accordingly.
5. Switch Traffic
Once verified, update your load balancer or ingress to point to HyperRoute:
# If using Kubernetes, update the service selector
kubectl set image deployment/router router=hyperroute/routerd:latest
6. Remove Apollo Router
Once traffic is fully switched and verified:
# Remove Apollo Router binary/image
# Update CI/CD pipelines
# Remove Apollo Router configuration files
Key Differences
What's Different
| Feature | Apollo Router | HyperRoute |
|---|---|---|
| Schema updates | Polling from registry | Push-based (bundles/snapshots) |
| Security | Basic (depth limits) | Full pipeline (injection detection, adaptive rate limiting, PII masking) |
| Multi-tenant | Enterprise license | Free, built-in |
| REST/gRPC subgraphs | Connectors plugin (enterprise) | Native, free |
| Scripting | Rhai | Plugins + Coprocessors |
| License | ELv2 (restrictive) | Free |
| Hot reload | --hot-reload flag | Always on |
What's the Same
- ✅ Federation directives (
@key,@external,@requires,@provides,@shareable,@override) - ✅ Supergraph SDL format
- ✅ OTLP tracing protocol
- ✅ Prometheus metrics format
- ✅ Coprocessor HTTP protocol
- ✅ GraphQL subscription support
Common Gotchas
-
No schema registry polling — HyperRoute uses push-based updates. Use the control plane API or file watching instead of polling a registry.
-
Rhai scripts — Convert Rhai scripts to plugins or coprocessors. Coprocessors are more powerful (any language, external service) and plugins are simpler for common transformations.
-
Metric names — Update Grafana dashboards. The metric concepts are identical but names use the
hyperroute_prefix instead ofapollo_router_. -
Hot reload is always on — No need for
--hot-reloadflag. HyperRoute watches the config file by default.
Next Steps
- Installation — Installation methods
- Configuration — Full configuration reference
- Deployment — Production deployment guides