anomalyco/sst · error · VisibleError
Cannot provide both "domain" and "route". Use the "domain" p
Error message
Cannot provide both "domain" and "route". Use the "domain" prop on the "Router" component when serving your site through a Router.
What it means
When an SSR site is served through a `Router` via the `route` prop, custom domain configuration must live on the Router itself. Passing both `domain` on the site and `route` is ambiguous and rejected at construction time with this message pointing you to set domain on the Router.
Source
Thrown at platform/src/components/aws/ssr-site.ts:1259
throw new VisibleError(
`Region ${region} is not supported by this component. Please select a different AWS region.`,
);
if (!Object.values(Region).includes(region as Region))
throw new VisibleError(
`Invalid AWS region: "${region}". Please specify a valid AWS region.`,
);
return region as Region;
});
});
}
function normalizeRoute() {
const route = normalizeRouteArgs(args.router, args.route);
if (route) {
if (args.domain)
throw new VisibleError(
`Cannot provide both "domain" and "route". Use the "domain" prop on the "Router" component when serving your site through a Router.`,
);
if (args.edge)
throw new VisibleError(
`Cannot provide both "edge" and "route". Use the "edge" prop on the "Router" component when serving your site through a Router.`,
);
if (args.protection)
throw new VisibleError(
`Cannot set "protection" when routing through a Router. Set "protection" on the Router component instead.`,
);
}
return route;
}
function normalizeEdge() {View on GitHub (pinned to a0bd20f762)
Solutions
- Remove the `domain` prop from the site component
- Move the domain configuration to the Router component (`new sst.aws.Router("Router", { domain: "example.com" })`)
- Deploy again
Example fix
// before
new sst.aws.NextjsSite("Web", {
path: "src",
domain: "app.example.com",
route: { router },
});
// after
new sst.aws.NextjsSite("Web", {
path: "src",
route: { router }, // router created with { domain: "app.example.com" }
}); Defensive patterns
Strategy: validation
Validate before calling
if (siteArgs.domain && siteArgs.route) {
throw new Error('Set `domain` on the Router component instead of the site when using `route`');
} Try / catch
try {
new sst.aws.NextjsSite("Web", args);
} catch (e) {
if (String(e).includes('Cannot provide both "domain" and "route"')) console.error("Move domain to the Router");
throw e;
} Prevention
- Pick one serving model: standalone (domain) or router-based (route) — not both
- When adding a Router, migrate domain config in the same change
- Grep site args for `domain:` before enabling route
When it happens
Trigger: An SSR site component args include both `domain: {...}` and `route: { router }` (or `router`), e.g. after partially migrating from domain-based to router-based serving.
Common situations: Following old docs that set `domain` while also adopting a Router; merging config changes where one teammate added a router and another kept the domain.
Related errors
- Cannot provide both "edge" and "route". Use the "edge" prop
- Cannot set "protection" when routing through a Router. Set "
- "cdn" prop is deprecated. Use the "route.router" prop instea
- Missing "name" for domain.
- Only one of function, queue, or topic is allowed for the "${
AI-assisted analysis of anomalyco/sst@a0bd20f762 (2026-08-30).
Data as JSON: /api/errors/c9ca783dcfc281cc.
Report an issue: GitHub.