Frameworks
Orino runs two layers of checks: URL-based checks that work on any live site regardless of framework, and codebase checks that are framework-specific and only run when Orino can read your source files. URL checks need a live URL. Codebase checks need a --dir path pointing to the project root.
Supported frameworks
Section titled “Supported frameworks”| Framework | Router/Variant | Minimum Version |
|---|---|---|
| Next.js | App Router | 13 |
| Next.js | Pages Router | 12 |
| Astro | 2 | |
| SvelteKit | 1 | |
| Nuxt | 3 | |
| Plain HTML / Static | n/a |
How detection works
Section titled “How detection works”Orino reads package.json in the project directory to identify the framework from its dependencies. It then checks for the presence of specific config files or directory structures to confirm detection and, for Next.js, to determine the router variant.
- Next.js App Router:
nextin dependencies plusapp/layout.tsxorsrc/app/layout.tsxpresent - Next.js Pages Router:
nextin dependencies pluspages/_app.tsx,pages/index.tsx, or theirsrc/pages/equivalents - Astro:
astroin dependencies plusastro.config.ts,astro.config.mjs, orastro.config.js(checked at project root and insidesrc/) - SvelteKit:
@sveltejs/kitin dependencies plussvelte.config.jsorsvelte.config.ts(checked at project root and insidesrc/) - Nuxt:
nuxtin dependencies plusnuxt.config.ts,nuxt.config.js, ornuxt.config.mjs - Plain HTML / Static: no recognised framework package in dependencies, and at least one
.htmlfile found in the project tree
Orino checks both project-root and src/-prefixed paths for every framework. If detection is wrong, pass --framework with one of the supported values to override it.
What is framework-specific vs universal
Section titled “What is framework-specific vs universal”Universal checks (URL-based, any site)
These run whenever Orino has a live URL, regardless of whether codebase access is available.
- Canonical tag presence and validity
- Meta title and description
- Open Graph tags (og:title, og:description, og:image, og:url)
- Structured data validity and schema types via JSON-LD
- Core Web Vitals via PageSpeed Insights (LCP, CLS, INP, TTFB)
- Heading structure and H1 presence
- Image alt attributes
- Content length
- AI crawler access in robots.txt (GPTBot, OAI-SearchBot, PerplexityBot, ClaudeBot)
- llms.txt presence
Framework-specific checks (codebase, requires --dir)
- Next.js App Router:
generateMetadataon dynamic routes,generateStaticParamson dynamic routes,'use client'at the page level (CSR-only risk),app/robots.tsandapp/sitemap.tspresence, root layoutmetadataexport,metadataBaseconfiguration - Next.js Pages Router:
getStaticPathson dynamic routes,<Head>component usage per page,_app.tsxand_document.tsxpresence - Astro:
getStaticPathson dynamic.astroroutes, layout-level<title>, description, andog:imagechecks, raw<img>vs Astro<Image>component usage - SvelteKit:
+page.server.tson dynamic routes,<svelte:head>usage per page and in root layout,ssr = falsedetection - Nuxt:
useAsyncDataoruseFetchon dynamic routes,useHeadanduseSeoMetausage, raw<img>vs<NuxtImg>usage,ssr: falseindefinePageMeta - Plain HTML: per-file
<title>, meta description,langattribute, and viewport meta tag checks, since there is no shared layout to inspect
Running without codebase access
Section titled “Running without codebase access”If you only have a URL and no access to source files, pass --no-codebase:
npx orino-cli audit --url https://example.com --no-codebaseFramework-specific findings are skipped entirely. Every universal check still runs, including performance, schema validation, metadata, and GEO readiness.
Unsupported frameworks
Section titled “Unsupported frameworks”If Orino cannot identify a supported framework, it falls back to URL-only analysis automatically rather than exiting with an error. Every URL-based check still runs, so you still get performance data, metadata results, and GEO readiness signals.
Remix and Gatsby are not currently supported. For projects on these frameworks, URL-only analysis covers the checks that matter most. Use --url with your deployed URL and Orino will run the full set of universal checks.