How to Tell If a Website Is Built With Remix
Remix is a full-stack React framework focused on web fundamentals. Detect it via the window.__remixContext, __remixManifest and __remixRouteModules globals embedded in the page.
Remix is a full-stack React framework built around web fundamentals — nested routing, native forms, and server-side data loading — with a strong focus on performance and progressive enhancement. Because it embeds distinctive route-data globals in the page, detecting it is straightforward: type __remixContext into the console. This guide covers every reliable signal, the framework's data-loading architecture, the look-alikes to rule out, and what a Remix build tells you about the team.
What is Remix?
Remix, created by the team behind React Router and later acquired by Shopify, is a full-stack React framework. Its philosophy centres on web fundamentals: it leans into the platform's native capabilities — HTML forms, HTTP caching, URLs and nested routes — rather than abstracting them away, and it co-locates data loading (loader functions) and mutations (action functions) with routes for fast, resilient pages. It server-renders by default, hydrates on the client, and is designed to deploy anywhere, including edge runtimes. In 2024–2025 Remix converged with React Router v7, so newer projects may be described as React Router in "framework mode", but the underlying Remix architecture and its page globals persist.
For detection, the key context is the same as for other React meta-frameworks: Remix is built on React, so finding it confirms React is in the stack, and because it server-renders and hydrates, it embeds route data and a manifest in inline scripts that are visible before any JavaScript runs. Its presence signals a React team that values performance, web standards and a fundamentals-first approach — usually a deliberate, technically sophisticated choice indicating a real application with engineering investment.
How Remix renders and hydrates
A server-rendered Remix page ships HTML plus a set of inline-script globals that carry everything the client needs to hydrate. The defining trio is window.__remixContext (the route state and loader data for the current request), window.__remixManifest (the manifest mapping routes to their JavaScript and CSS assets), and window.__remixRouteModules (the loaded route modules). These are assigned via inline <script> tags in the HTML, so they appear in the page source directly.
Because Remix uses nested routes, the __remixContext payload reflects the matched route hierarchy and the data each route's loader returned. Assets are loaded per-route from a build output directory (commonly under a /build/ or framework-specific path), and Remix relies on React for rendering, so React's runtime is present. With the React Router v7 convergence, the same hydration approach applies, and the __remix-prefixed globals remain the reliable identifier. Knowing this — the __remixContext/__remixManifest/__remixRouteModules globals — makes detection quick and unambiguous.
How to tell if a website uses Remix
Confirm at least one strong signal (any __remix global suffices).
1. Use the console. Type __remixContext and press Enter. A returned object confirms Remix. Try __remixManifest and __remixRouteModules too — all three indicate Remix.
2. View the page source. Search for __remixContext, __remixManifest or window.__remix. You will find the inline script assignments carrying route data and the manifest.
3. Inspect the route data. The __remixContext payload reflects nested routes and loader data, a structural Remix trait.
4. Confirm React. Because Remix is built on React, verify React is present; Remix plus React is the expected pairing.
5. Check asset loading. Per-route JavaScript and CSS loaded from the build output corroborate Remix's route-based code splitting.
What the Remix signals look like
<script>window.__remixContext = {"state":{"loaderData":{...}},"future":{...}, …};</script>
<script>window.__remixManifest = {"routes":{...},"entry":{...}, …};</script>
<script>window.__remixRouteModules = {...};</script>
The presence of the __remixContext, __remixManifest and __remixRouteModules globals is conclusive.
Remix versus other frameworks — avoiding false positives
Match the global to keep React meta-frameworks distinct. Remix uses the __remix-prefixed globals; Next.js uses __NEXT_DATA__ and /_next/ assets; Gatsby uses ___gatsby and window.___chunkMapping; Nuxt uses __NUXT__ (but that is Vue, not React). The __remix prefix is unique and unambiguous. With the React Router v7 convergence, a project may call itself "React Router" rather than Remix, but the framework-mode build still uses the Remix hydration approach and globals, so treat the __remix globals as Remix/React-Router-framework. A plain React SPA (or a React Router app in library mode without SSR) will show React but no __remix globals, so those globals are what specifically identify the Remix framework.
How reliable is each Remix signal?
Any of the __remixContext, __remixManifest or __remixRouteModules globals is definitive — the __remix prefix is specific to the framework. The nested-route structure in the payload corroborates. The presence of React reliably accompanies Remix. The weakest situation is a heavily customised build, but the __remix globals are embedded by the framework itself and are hard to remove without breaking hydration. As a rule, a single __remix global confirms Remix immediately, and there is essentially no false-positive risk.
What a Remix build reveals about a site
Finding Remix signals a React team that values performance, web standards and a fundamentals-first approach. Choosing Remix is a deliberate, somewhat sophisticated decision — it indicates developers who care about fast loads, progressive enhancement, resilient forms and edge deployment, rather than reaching for the most default option. Remix is common on modern web apps, content-driven sites and, given the Shopify connection, increasingly in commerce contexts and Shopify's own tooling (Hydrogen, Shopify's commerce framework, is built on Remix). Its presence tells you the site is a real application with engineering investment and a performance-conscious culture. If you sell developer tooling, edge hosting, or services aimed at modern React teams, a Remix site marks a technically discerning buyer who has opted for a fundamentals-focused framework.
What finding Remix means for sales, agencies and competitive research
For sales and prospecting, Remix marks a performance-focused, standards-minded React team — a fit for developer tools, edge hosting, and modern front-end services. In commerce contexts it may indicate Shopify Hydrogen usage, a useful adjacency.
For agencies and consultants, finding Remix tells you the client runs a fundamentals-first React framework, so engagements can focus on performance, data-loading patterns, progressive enhancement, or edge deployment. It signals a technically sophisticated client.
For competitive and market research, Remix adoption reveals a competitor's deliberate, performance-oriented framework choice. Spotting it suggests a team that prioritises web fundamentals and fast UX, useful when benchmarking technical approach and the calibre of their engineering.
Remix in the wider stack
Remix sits at the centre of a modern React full-stack setup. It implies React, a Node or edge runtime to handle server rendering and action/loader requests, and deployment on a platform that supports server functions (Vercel, Netlify, Cloudflare, Fly, or a Node server). In commerce, Remix underpins Shopify Hydrogen, so a Remix site in a storefront context may be a Hydrogen build talking to Shopify's Storefront API. Around it you will commonly find product analytics, an error tracker, and a data backend. For an auditor, the valuable details are whether the project is classic Remix or React Router v7 framework mode, the hosting/runtime, whether it is a Hydrogen commerce build, and the surrounding data and analytics tooling; together these reveal a performance-focused React team and its architecture.
A quick Remix confirmation walkthrough
Open the site with developer tools on the Console panel and type __remixContext — a returned object confirms Remix; __remixManifest and __remixRouteModules confirm it too. View the source and search for window.__remix to find the inline script assignments carrying route data and the manifest. Optionally confirm React via React DevTools, and note per-route asset loading. Any single __remix global is enough to confirm Remix (or React Router framework mode).
A quick Remix detection checklist
- Type
__remixContext(or__remixManifest,__remixRouteModules) in the console — conclusive. - View source for
window.__remixinline script assignments. - Confirm React is present, since Remix is built on React.
- Note nested-route loader data in the
__remixContextpayload. - Treat React Router v7 framework mode as Remix (same globals).
- Distinguish Remix (
__remix) from Next.js (__NEXT_DATA__) and Gatsby (___gatsby).
Detecting Remix at scale
Checking one site is quick, but mapping framework adoption across many domains — to find performance-focused React teams — calls for automation. StackOptic detects Remix and thousands of other technologies from a real browser, reading the embedded globals so it catches server-rendered builds reliably. Because Remix underpins Shopify Hydrogen, a market-wide scan can also surface modern headless-commerce storefronts, separating them from conventional Shopify themes — a distinction that matters for anyone selling to forward-looking ecommerce teams. For related reading, see our guides to checking if a website uses React, Vue or Angular and telling if a website is built with Next.js, and the full Remix technology profile.
Frequently asked questions
What is the fastest way to tell if a site uses Remix?
Open the console and type __remixContext. Remix embeds globals window.__remixContext, window.__remixManifest and window.__remixRouteModules in server-rendered pages. A returned object from any of these confirms Remix instantly.
What is __remixContext?
window.__remixContext is the global Remix uses to pass server-rendered route state and loader data to the client for hydration. Together with __remixManifest (the route/asset manifest) and __remixRouteModules, it is the defining Remix fingerprint, found as inline script assignments in the HTML.
Does Remix mean the site uses React?
Yes. Remix is a full-stack React framework, so a Remix site is a React site with server rendering, nested routing and data loading layered on. Remix has also converged with React Router v7, so newer projects may describe themselves as React Router framework mode, but the __remix globals remain the signal.
How is Remix different from Next.js?
Both are full-stack React frameworks, but they expose different globals: Remix uses __remixContext / __remixManifest, while Next.js uses __NEXT_DATA__ and serves assets from /_next/. Remix emphasises web fundamentals (nested routes, native forms, loaders/actions) and edge deployment, whereas Next.js centres on its App Router and React Server Components.
What does it mean if a site is built with Remix?
Remix is a full-stack React framework focused on performance and web standards. Finding it signals a React team building a server-rendered application that values fast loads, progressive enhancement and a fundamentals-first approach, common in modern web apps and content-driven sites.
Analyse any website with StackOptic
Get the full technology stack, performance, security and SEO report in seconds — free.
Analyse a websiteRelated articles
How to Tell If a Website Uses Heap
Heap (Heap Analytics) autocaptures product events. Detect it via the cdn.heapanalytics.com script, the global heap object, heapanalytics.com beacons and _hp2 cookies.
How to Tell If a Website Uses Foundation
Foundation (by Zurb) is a responsive front-end framework. Detect it via its grid classes (row/columns, grid-x/cell), data-* component attributes and the foundation.css/js files.
How to Tell If a Website Uses Crisp
Crisp is a developer-friendly, affordable live-chat and messaging tool. Detect it via the client.crisp.chat/l.js script, the window.$crisp object and the CRISP_WEBSITE_ID value.