refinedev/refine · warning

No resource is found. navigation to ${fallbackTo}.

Error message

No resource is found. navigation to ${fallbackTo}.

What it means

Warned by `NavigateToResource` in @refinedev/remix-router when the target resource (from `toResource`/`meta` resolution) cannot be found in the resource list and a `fallbackTo` prop is provided. The component then navigates to `fallbackTo` with replace so the user isn't stranded on a dead route. It signals a resource-definition or naming mismatch rather than a crash.

Source

Thrown at packages/remix-router/src/navigate-to-resource.ts:38

  const toResource = resource || resources.find((r) => r.list);

  React.useEffect(() => {
    if (toResource) {
      if (!ran.current) {
        const path = getToPath({
          resource: toResource,
          action: "list",
          meta,
        });

        if (path) {
          navigate(path, { replace: true });
        }
        ran.current = true;
      }
    } else if (fallbackTo) {
      console.warn(`No resource is found. navigation to ${fallbackTo}.`);
      navigate(fallbackTo, { replace: true });
      ran.current = true;
    }
  }, [toResource, meta, navigate, getToPath]);

  return null;
};

View on GitHub (pinned to 779d52a20e)

Solutions

  1. Ensure the resource name in `toResource` exactly matches a name in the `resources` array of <Refine>
  2. Give the resource a `list` route or `meta` so a path can be resolved, or point `toResource` at a resource that has one
  3. Keep `fallbackTo` pointing at a guaranteed-valid route (e.g. dashboard) as a safety net

Example fix

// before
<Refine resources={[{ name: 'blog-posts', list: '/blog-posts' }]} />
// index route
<NavigateToResource toResource="posts" fallbackTo="/dashboard" />
// after
<NavigateToResource toResource="blog-posts" fallbackTo="/dashboard" />
Defensive patterns

Strategy: validation

Validate before calling

const names = resources.map((r) => r.name);
if (!names.includes('posts')) console.warn('NavigateToResource target missing from resources');

Type guard

const resourceExists = (name: string) =>
  Boolean(resources.find((r) => r.name === name && (r.list || r.meta)));

Prevention

When it happens

Trigger: Rendering <NavigateToResource toResource="posts" /> (or default) where "posts" is not in the <Refine resources> list (different name, undefined, or resource has no list route and no meta to resolve one), while `fallbackTo` is set.

Common situations: Renaming a resource but forgetting the index-page redirect; typo in toResource; resource whose list action was removed; auth-conditional resource registration.

Related errors


AI-assisted analysis of refinedev/refine@779d52a20e (2026-08-27). Data as JSON: /api/errors/198ffb783abc1867. Report an issue: GitHub.