# oxc.rs × Next.js 16 — Intégration & élimination de code mort

- **URL source principale** : https://oxc.rs/
- **Auteur/Org** : VoidZero (équipe Evan You / Vite)
- **Date d'accès** : 2026-05-23
- **Type** : Recherche tooling Rust pour Next.js 16
- **Thématique** : oxc, oxlint, oxfmt, oxc-minify, knip, dead code elimination, Next.js 16, Turbopack
- **Niveau de confiance** : Élevé (sources officielles oxc.rs + Next.js docs + comparatifs PkgPulse 2026)
- **Conflit d'intérêt** : VoidZero promeut sa stack. Vercel (Next.js) promeut SWC/Turbopack. À démêler.

## ⚡ TL;DR (réponse directe à la question)

**Pour ElevaSEO sur Next.js 16, la stack "élimination code mort" optimale en 2026** :

| Couche | Outil | Status | Pourquoi |
|--------|-------|--------|----------|
| **1. Lint** | **Oxlint** + `eslint-plugin-oxlint` (config `flat/nextjs`) | GA, prod-ready | 50-100× ESLint, plugin nextjs natif inclus |
| **2. Détection cross-fichiers** | **Knip v6** (utilise déjà le parser oxc via NAPI) | GA | Trouve fichiers/exports/deps inutilisés — couvre ce qu'Oxlint ne voit pas |
| **3. Format** | **Oxfmt** (remplace Prettier) | Beta GA | 30× Prettier, sort imports + Tailwind + package.json |
| **4. Bundle (minify + tree-shake)** | **Turbopack par défaut Next.js 16** (utilise SWC, PAS oxc) | GA | Tree-shaking + minify intégré. **Pas la peine de plugger oxc-minify ici** |
| **5. (Optionnel) Lib custom** | **unplugin-oxc** ou **oxc-minify** CLI | Alpha | Pour des étapes de build hors Next.js (libs npm, scripts) |

**🛑 Le piège** : ne PAS essayer de remplacer le minifier interne de Next.js 16. **Turbopack est verrouillé sur SWC**, pas extensible avec oxc-minify côté bundle. **Oxc-minify est encore alpha**. Reste sur Turbopack natif pour le bundle, branche oxc en surcouche (lint, format, knip).

---

## 1. Qu'est-ce que oxc.rs ?

**The JavaScript Oxidation Compiler** — collection d'outils Rust haute-performance pour JS/TS, portée par **VoidZero** (la société qui porte Vite/Rolldown). Pas un bundler, mais la **fondation** sur laquelle d'autres outils s'appuient (Rolldown utilise oxc en interne).

### Les 6 composants

| Outil | Rôle | Status | Performance claim |
|-------|------|--------|-------------------|
| **Oxlint** | Linter | **GA** | 50-100× ESLint, 800+ rules |
| **Oxfmt** | Formatter | **Beta** (proche GA) | 30× Prettier, 3× Biome |
| **oxc-parser** | Parser AST | **GA** | 3× SWC, passe tout Test262 stage4 |
| **oxc-transform** | TS/JSX/ES2015 lowering | **GA** | — |
| **oxc-resolver** | Module resolution | **GA** | 28× enhanced-resolve |
| **oxc-minify** | Minifier | **Alpha** | DCE + mangling, en cours |

### Quatre principes de design (verbatim)
1. **Performance as a feature** — régressions perf = bugs
2. **Shared building blocks** — pas d'outils isolés, suite intégrée
3. **Correctness with clear boundaries** — différences avec autres outils documentées
4. **Practical DX** — defaults sensés, output stable

### Adoption production (Oxlint)
Elastic Kibana, Sentry, Renovate, Preact, date-fns, Outline, PostHog, Actual Budget, Cloudflare.

### Sponsors
- **Gold** : Hive
- **Silver** : schoolhouse.world, Zephyr Cloud IO, Persona
- **Bronze** : N-iX, Miro, Mews, etc.

---

## 2. État des lieux Next.js 16 (mai 2026)

### Ce qui a changé (impact sur la question)

**Turbopack par défaut** (`next dev` + `next build`) :
- Plus besoin de `--turbopack` flag
- **Utilise SWC en interne, PAS oxc** (Vercel a construit Turbopack au-dessus de SWC)
- Tree-shaking complet sur les imports statiques + dynamic destructured (nouveau 16.x)
- Minify : **SWC Minify** (utilisé depuis Next 13)
- CSS minify : **Lightning CSS** (Rust mais pas oxc)

**Webpack** :
- Toujours possible via `next build --webpack` mais déprécié
- Build échoue par défaut si webpack config détectée → migration forcée

**`next lint` REMOVED** :
- Doc Next.js officielle : *"Use Biome or ESLint directly. `next build` no longer runs linting."*
- Codemod fourni : `npx @next/codemod@canary next-lint-to-eslint-cli .`
- `eslint` option dans `next.config` également supprimée
- `@next/eslint-plugin-next` est désormais **ESLint Flat Config par défaut** (aligné ESLint v10)

→ **Conséquence pour nous** : Next.js 16 a ouvert grand la porte aux remplaçants ESLint. **Oxlint est arrivé au bon moment**.

---

## 3. Oxlint × Next.js 16 — Intégration concrète

### 🎯 Stratégie 1 — Oxlint EN COMPLÉMENT d'ESLint (recommandé)

Oxlint fait un **pre-pass rapide** (50-100× ESLint), ESLint gère les rules spécifiques que Oxlint n'a pas.

#### Setup

```bash
pnpm add -D oxlint eslint eslint-plugin-oxlint @next/eslint-plugin-next
```

#### `package.json`

```json
{
  "scripts": {
    "lint": "oxlint && eslint .",
    "lint:fix": "oxlint --fix && eslint . --fix",
    "lint:oxc": "oxlint",
    "lint:eslint": "eslint ."
  }
}
```

#### `.oxlintrc.json` (config Oxlint)

```json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": [
    "eslint",
    "react",
    "react-perf",
    "unicorn",
    "typescript",
    "nextjs",
    "import",
    "jsx-a11y",
    "oxc"
  ],
  "categories": {
    "correctness": "error",
    "suspicious": "warn",
    "perf": "warn",
    "pedantic": "off",
    "style": "off",
    "restriction": "off",
    "nursery": "off"
  },
  "ignorePatterns": [
    ".next/**",
    "dist/**",
    "build/**",
    "node_modules/**",
    "public/**",
    "*.config.*"
  ]
}
```

#### `eslint.config.mjs` (flat config, ESLint v9+)

```js
import oxlint from 'eslint-plugin-oxlint';
import nextPlugin from '@next/eslint-plugin-next';

export default [
  {
    plugins: {
      '@next/next': nextPlugin,
    },
    rules: {
      ...nextPlugin.configs.recommended.rules,
      ...nextPlugin.configs['core-web-vitals'].rules,
    },
  },
  // ⚠️ Cette ligne désactive dans ESLint toutes les règles déjà couvertes par Oxlint
  // → pas de double-check, ESLint ne fait que les règles spécifiques
  ...oxlint.configs['flat/recommended'],
  ...oxlint.configs['flat/nextjs'],
  ...oxlint.configs['flat/react'],
  ...oxlint.configs['flat/typescript'],
];
```

#### Plugins natifs Oxlint disponibles

`eslint`, `react`, `react-perf`, `unicorn`, `typescript`, `nextjs`, `import`, `jsx-a11y`, `oxc`, `jest`, `vitest`, `jsdoc`, `node`, `promise`, `tree-shaking`, `n`.

### 🎯 Stratégie 2 — Oxlint SEUL (remplace ESLint)

**À considérer si** :
- Stack frontend simple (pas de plugins custom internes)
- Pas de besoin de `@typescript-eslint/no-floating-promises` ou rules type-aware avancées
- CI speed est critique

**À ÉVITER si** :
- React Hooks rules complètes nécessaires
- Plugins ESLint customs internes
- `eslint-plugin-jest-extended`, `eslint-plugin-testing-library`, etc.

#### Setup minimal

```bash
pnpm add -D oxlint
```

```json
{
  "scripts": {
    "lint": "oxlint",
    "lint:fix": "oxlint --fix"
  }
}
```

Garder `.oxlintrc.json` ci-dessus mais activer plus de catégories (`pedantic`, `style` à `warn`).

### Type-aware linting (technical preview)

Oxlint supporte le type-aware via **`oxlint-tsgolint`** (utilise tsgo, port Go du compilateur TS).
Encore en preview au 2026-05, à activer prudemment :

```json
{
  "plugins": ["typescript-tsgolint"],
  "rules": {
    "typescript-tsgolint/no-floating-promises": "error"
  }
}
```

---

## 4. Élimination de code mort — La stratégie complète

### Catégorisation du "code mort"

| Type de mort | Outil pour le détecter | Niveau |
|--------------|------------------------|--------|
| Variables locales inutilisées | **Oxlint** (`no-unused-vars`) | Statement |
| Code après return / unreachable | **Oxlint** (`no-unreachable`) | Statement |
| Imports inutilisés | **Oxlint** (`no-unused-vars` sur imports) | Module |
| Imports unassigned | **Oxlint** (`no-unassigned-import`) | Module |
| Exports inutilisés | **Knip** (`exports`) | Cross-fichier |
| Fichiers entiers inutilisés | **Knip** (`files`) | Projet |
| Dependencies inutilisées | **Knip** (`dependencies`) | package.json |
| devDependencies inutilisées | **Knip** (`devDependencies`) | package.json |
| Code unreachable à l'exécution (`if(false){...}`) | **oxc-minify** (DCE auto) | Bundle |
| Class fields privés inutilisés | **oxc-minify** | Bundle |
| Console.log oubliés | **oxc-minify** (`dropConsole`) | Bundle |
| Debugger statements | **oxc-minify** (`dropDebugger` default) | Bundle |
| Tree-shaking (exports unused dans le bundle) | **Turbopack** natif Next.js 16 | Bundle |

### Stack complète recommandée pour Next.js 16

```bash
pnpm add -D oxlint eslint eslint-plugin-oxlint knip oxfmt
```

```json
{
  "scripts": {
    "lint": "oxlint && eslint .",
    "lint:fix": "oxlint --fix && eslint . --fix",
    "format": "oxfmt .",
    "format:check": "oxfmt --check .",
    "deadcode": "knip",
    "deadcode:fix": "knip --fix",
    "clean": "pnpm run format && pnpm run lint:fix && pnpm run deadcode:fix",
    "ci": "pnpm run format:check && pnpm run lint && pnpm run deadcode"
  }
}
```

### Knip — configuration Next.js 16

```jsonc
// knip.json (ou knip.ts)
{
  "$schema": "https://unpkg.com/knip@6/schema.json",
  "next": {
    "entry": [
      "next.config.{js,ts,mjs}",
      "middleware.{js,ts}",
      "proxy.{js,ts}",
      "app/**/{layout,page,loading,error,not-found,route,template,default,opengraph-image,twitter-image,icon,apple-icon,sitemap,robots}.{js,ts,tsx,mdx}",
      "instrumentation.{js,ts}"
    ]
  },
  "ignore": [
    ".next/**",
    "dist/**",
    "build/**"
  ],
  "ignoreDependencies": [
    "babel-plugin-react-compiler"
  ]
}
```

⚠️ **Important Next.js 16** :
- `proxy.{js,ts}` remplace `middleware.{js,ts}` (déprécié)
- Cache Components introduits → vérifier que Knip détecte les nouveaux entries

### Knip v6 + parser oxc

Knip v6 (mars 2026) a adopté le **parser oxc via NAPI** → significativement plus rapide. **N'EST PLUS strictement Node single-thread JS**.

### Alternative emerging — Fallow (à surveiller)

> "Oxlint replaces ESLint, oxfmt replaces Prettier, **fallow finds what you're not using anymore**." — Dev.to article

Fallow utilise oxc en **natif Rust** + rayon (parallel cores). Très rapide. **Mais immature** (mars 2026) — Knip reste le standard.

---

## 5. oxc-minify — Le détail (et pourquoi tu ne l'utiliseras probablement PAS dans Next.js 16)

### Capacités

**4 optimisations principales** :
1. **Dead Code Elimination** (DCE) — auto, par défaut
2. **Syntax Normalization** — code équivalent plus court
3. **Mangling** — raccourcir variables
4. **Whitespace stripping** — espaces + comments

### Ce que la DCE oxc supprime

- `if (false) { ... }` → supprimé
- Unused variable declarations → supprimé
- Unused function/class declarations → supprimé
- Unused private class fields → supprimé
- `console.*` calls si `dropConsole: true`
- `debugger` statements (defaut)
- Labels nommés via `dropLabels`

### Side-effect analysis

oxc respecte les annotations standards :
- `/* #__PURE__ */ foo()` — call safe à supprimer si inutilisé
- `/* #__NO_SIDE_EFFECTS__ */ function foo() {}` — fonction entièrement pure

Configuration fine via :
- `compress.treeshake.manualPureFunctions: ['my.pure.fn']`
- `compress.treeshake.propertyReadSideEffects: false`
- `compress.treeshake.unknownGlobalSideEffects: false`
- `compress.treeshake.invalidImportSideEffects: false`

### Pourquoi pas dans Next.js 16 ?

**Turbopack = SWC en interne, pas oxc**. Le minify est intégré et non-substituable au niveau bundler.

Les options réalistes pour utiliser oxc-minify avec Next.js :

| Option | Setup | Verdict |
|--------|-------|---------|
| **A. Pas du tout** | Laisser Turbopack faire | ✅ Recommandé (Next.js 16) |
| **B. Custom build step post-Turbopack** | Script qui re-minifie `.next/standalone/` avec oxc-minify CLI | ⚠️ Risqué, casse le manifest |
| **C. Webpack mode + unplugin-oxc** | `next build --webpack` + plugin webpack | ⚠️ Webpack déprécié, complexe |
| **D. Pour libs npm publiées séparément** | Build script Rolldown (qui utilise oxc nativement) | ✅ Si tu publies des libs |

**Conclusion** : pour un site Next.js 16 standard, **oxc-minify n'a pas sa place dans le bundle**. Garde-le pour des **scripts auxiliaires** (build de libs internes via Rolldown, post-processing de .js statiques).

---

## 6. Oxfmt — Remplacer Prettier dans Next.js 16

### Setup

```bash
pnpm add -D oxfmt
pnpm remove prettier prettier-plugin-tailwindcss prettier-plugin-organize-imports
```

```json
{
  "scripts": {
    "format": "oxfmt .",
    "format:check": "oxfmt --check ."
  }
}
```

### Features built-in (vs Prettier qui demande des plugins)

- ✅ **Import sorting** (intégré, plus besoin de `simple-import-sort` ou `organize-imports`)
- ✅ **Tailwind CSS class sorting** (plus besoin de `prettier-plugin-tailwindcss`)
- ✅ **package.json field sorting**
- ✅ **Embedded formatting** : CSS-in-JS, GraphQL templates

### Compatibilité Prettier

"100% pass Prettier's JS+TS test suite" → output identique. Migration sans cassure de diff.

### File types supportés

JS, JSX, TS, TSX, JSON, JSONC, JSON5, YAML, TOML, HTML, CSS, SCSS, Less, Markdown, MDX, GraphQL.
Frameworks : Vue, Svelte, Angular, Ember, Handlebars (partial).

### Hook pre-commit (Husky + lint-staged exemple)

```json
{
  "lint-staged": {
    "*.{js,jsx,ts,tsx,json,md,yml,yaml}": ["oxfmt --write", "oxlint --fix"]
  }
}
```

---

## 7. unplugin-oxc — Pour des cas avancés (NON Next.js direct)

`unplugin-oxc` v0.6.1 (avril 2026) — Drop-in replacement pour esbuild + node-resolve.

### Bundlers supportés
Vite, Rollup, **Rolldown**, esbuild, Webpack, Rspack, unloader.

❌ **PAS Turbopack** (Turbopack n'a pas d'API plugin externe au sens unplugin)
❌ **PAS Next.js bundler-level**

### Quand l'utiliser dans le contexte ElevaSEO ?

- Builds de **librairies internes** (`@elevaseo/ui`, `@elevaseo/seo-tools`) publiées en npm pour clients
- Outils CLI internes
- Build SaaS séparé Next.js (si tu construits des outils de scraping/analyse en parallèle)

### Exemple Rolldown (recommandé pour libs)

```ts
// rolldown.config.ts
import { defineConfig } from 'rolldown';
import Oxc from 'unplugin-oxc/rolldown';

export default defineConfig({
  input: 'src/index.ts',
  plugins: [
    Oxc({
      minify: {
        compress: {
          dropConsole: true,
          treeshake: {
            propertyReadSideEffects: false,
          },
        },
        mangle: true,
      },
      transform: {
        target: 'es2022',
      },
    }),
  ],
});
```

---

## 8. Comparatif final — qui fait quoi

| Outil | Remplace | Status 2026 | Next.js 16 OK ? |
|-------|----------|-------------|------------------|
| **Oxlint** | ESLint (partiel) | GA | ✅ **Oui** (avec eslint-plugin-oxlint flat/nextjs) |
| **Oxfmt** | Prettier | Beta GA | ✅ **Oui** (drop-in) |
| **oxc-minify** | Terser/SWC minify | Alpha | ⚠️ **Pas pour le bundle Next.js** (Turbopack=SWC) |
| **oxc-transform** | Babel/SWC transform | GA | ⚠️ **Pas pour le bundle Next.js** |
| **Knip v6** | depcheck, ts-prune | GA, utilise parser oxc | ✅ **Oui** (couche dead code orthogonale) |
| **Biome** | ESLint+Prettier | GA | ⚠️ Possible mais moins de plugin Next.js que Oxlint |
| **Fallow** | Knip (Rust native) | Alpha | 👀 À surveiller |

---

## 9. Plan de migration ElevaSEO (concret)

### Phase 1 — Setup minimal viable (jour 1)

```bash
# Install
pnpm add -D oxlint eslint eslint-plugin-oxlint @next/eslint-plugin-next knip oxfmt

# Init oxlint
pnpm dlx oxlint --init

# Migrer ESLint vers flat config si pas déjà fait
# (Next.js 16 codemod si besoin)
npx @next/codemod@canary next-lint-to-eslint-cli .

# Setup Knip avec auto-detect Next.js
pnpm dlx knip --reporter symbols
```

### Phase 2 — Configurer scripts (jour 1)

`package.json` scripts (copier la section "Stack complète" ci-dessus).

### Phase 3 — Run + fix (jour 2-3)

```bash
pnpm format            # Oxfmt formatte tout
pnpm lint:fix          # Oxlint + ESLint auto-fix
pnpm deadcode          # Knip identifie le mort
pnpm deadcode:fix      # Supprime ce que knip peut
```

Review manuel des findings Knip (faux positifs sur Next.js entries dynamiques).

### Phase 4 — CI/CD (jour 4)

GitHub Actions :

```yaml
# .github/workflows/quality.yml
name: Quality
on: [push, pull_request]
jobs:
  quality:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with: { node-version: 22, cache: 'pnpm' }
      - run: pnpm install --frozen-lockfile
      - run: pnpm format:check
      - run: pnpm lint
      - run: pnpm deadcode
```

### Phase 5 — Hook pre-commit (optionnel, jour 5)

`.lefthook.yml` (lefthook plus rapide que husky en Rust) :

```yaml
pre-commit:
  parallel: true
  commands:
    format:
      glob: "*.{js,jsx,ts,tsx,json,md,yml,yaml}"
      run: pnpm exec oxfmt --write {staged_files}
    lint:
      glob: "*.{js,jsx,ts,tsx}"
      run: pnpm exec oxlint --fix {staged_files}
```

---

## 10. ⚠️ Méfiance / Bullshit detector

### Claims marketing à nuancer

- **"50-100× ESLint"** : vrai sur gros codebase, mais sur petit projet ESLint reste sub-seconde — le gain absolu est faible. Le vrai gain est sur **CI** (de 60s à 1s).
- **"100% Prettier compatible"** : Oxfmt vise ça mais reste **Beta**. Des edge cases (Vue templates complexes, MDX exotique) peuvent diverger. Faire un dry-run avant migration totale.
- **"Dead Code Elimination auto par oxc-minify"** : oui mais SEULEMENT au niveau bundle. **Ne remplace pas Knip** qui détecte fichiers/exports inutiles avant build.
- **"Drop-in replacement"** : pour Oxlint, FAUX si tu as des plugins custom internes ou des rules type-aware critiques.
- **"Oxc va remplacer SWC dans Next.js"** : aucun roadmap public. **Vercel a investi sur SWC** depuis Next 13. La compétition Turbopack vs Vite/Rolldown reste le théâtre des opérations.

### Pièges Next.js 16 spécifiques

- **`next lint` removed** : `next build` ne lint plus → si ta CI repose sur "next build fail-on-lint", elle ne fail plus. **Ajouter un step lint explicite**.
- **Webpack mode + plugins oxc** : Turbopack par défaut → si tu reposes sur `unplugin-oxc/webpack`, ça ne sera PAS appliqué. Forcer `--webpack` ou repenser.
- **Tree-shaking Turbopack incomplet** : issue ouverte `vercel/next.js#85172` (mai 2026) — tree-shaking génère output invalide sur certains chunks SSR Pages Router. Si Pages Router est utilisé, monitorer.
- **Knip false positives sur entries Next.js** : les sitemap.ts, opengraph-image.tsx, etc. peuvent être marqués inutilisés si pas dans config. Toujours valider visuellement.

### Coût caché — courbe d'apprentissage

Migration ESLint flat config + Oxlint config + Knip config = **environ 1-2 jours** pour un consultant solo. **Gain ROI** dès 3-4 PRs/semaine en CI accélérée.

### Risque de "outil-itis"

Stack proposée = **4 outils** (Oxlint, ESLint, Knip, Oxfmt) + Turbopack interne. À évaluer vs **Biome solo** (Lint + Format + Import organize en 1 binaire) qui est plus simple mais moins de plugins Next.js.

**Décision pratique** :
- **Biome** si tu démarres un projet fresh, sans plugins ESLint complexes
- **Oxc stack (Oxlint+Oxfmt+Knip)** si tu as un projet ESLint existant et veux performance + ecosystem Next.js riche

---

## 11. Liens externes (références)

- **oxc.rs** — https://oxc.rs/
- **oxc compatibility matrix** — https://oxc.rs/compatibility (Next.js = Full Support Oxlint + Oxfmt)
- **Oxlint rules** — https://oxc.rs/docs/guide/usage/linter/rules.html
- **Dead Code Elimination doc** — https://oxc.rs/docs/guide/usage/minifier/dead-code-elimination.html
- **eslint-plugin-oxlint** — https://github.com/oxc-project/eslint-plugin-oxlint (v1.66 mai 2026)
- **unplugin-oxc** — https://github.com/unplugin/unplugin-oxc (v0.6.1 avril 2026)
- **Knip** — https://knip.dev/ (v6 utilise oxc parser via NAPI)
- **Next.js 16 upgrade guide** — https://nextjs.org/docs/app/guides/upgrading/version-16
- **Next.js 16.2 Turbopack blog** — https://nextjs.org/blog/next-16-2-turbopack
- **Better Stack guide Oxlint** — https://betterstack.com/community/guides/scaling-nodejs/oxlint-explained/
- **PkgPulse Biome vs ESLint vs Oxlint 2026** — https://www.pkgpulse.com/guides/biome-vs-eslint-vs-oxlint-2026
- **PkgPulse Oxc vs SWC 2026** — https://www.pkgpulse.com/guides/oxc-vs-swc-rust-javascript-toolchain-2026

## 12. Actionable pour ElevaSEO

### Niveau 1 — Wins rapides (1 jour)
- [ ] Sur le prochain projet Next.js 16 ElevaSEO : installer la stack `oxlint + eslint-plugin-oxlint + oxfmt + knip` dès `create-next-app`
- [ ] Migrer les projets existants vers ESLint flat config (codemod next-lint-to-eslint-cli)
- [ ] Ajouter `pnpm deadcode` au workflow hebdomadaire
- [ ] Setup pre-commit hook avec lefthook (Rust, plus rapide qu'husky)

### Niveau 2 — Standardisation (1 semaine)
- [ ] Créer un template `npx create-elevaseo-next` qui inclut oxc stack pré-configurée
- [ ] Documenter la stack dans le wiki ElevaSEO (entité `concepts/tooling-stack-2026.md`)
- [ ] Faire un audit DCE rétroactif sur le site ElevaSEO + sites clients (bundle size monitoring)

### Niveau 3 — Veille (continu)
- [ ] Tracker la stabilité de **oxc-minify** (alpha → beta → GA) — quand GA, reconsidérer pour libs
- [ ] Surveiller **Fallow** (Rust-native Knip alternative) — si stable, switcher pour les très gros monorepos
- [ ] Surveiller un éventuel RFC Vercel sur oxc dans Turbopack (peu probable court terme, mais à monitorer)
- [ ] Surveiller la stabilité du **type-aware Oxlint (tsgolint)** — quand GA, ça remplace `@typescript-eslint`

### Niveau 4 — Service client (à packager)
- [ ] **Offre "Audit Performance + DCE"** : prendre un site client Next.js, mesurer bundle size, faire pass oxc + knip, livrer rapport "X KB éliminés, Y fichiers/exports morts supprimés" → 800-1500€
- [ ] Couplage avec audit Core Web Vitals → vente cross-perf/SEO (le DCE améliore LCP/FCP, ce qui aide indirectement le ranking SERP)

---

## 13. Insight stratégique pour ElevaSEO

**Le SEO 2026 = performance + tooling moderne.** Cyrus Shepard et l'étude Zyppy (cf. [`zyppy-ai-citation-ranking-factors.md`](./zyppy-ai-citation-ranking-factors.md)) montrent que **AI-ready Structure (8.6/10)** et **Content Visibility (7.6/10)** dépendent de la qualité du HTML rendu — et **Turbopack + oxc stack accélère le build**, ce qui permet d'itérer plus vite sur ces signaux.

Le bundle minifié + DCE = **moins de JS shipped** = **LCP/FCP améliorés** = **signal positif Google + meilleur crawl AI**. C'est une opportunité de packager "Audit Tooling + Perf + GEO" en une seule offre cohérente.
