Most plugins activate automatically when the relevant package is in your
package.json. Some plugins (ESLint, Vitest) also activate when a config file is present in the workspace root, even without the package. This covers monorepos where the tool is installed at the root but workspace packages have their own config files.- Frameworks
- Bundlers
- Testing
- Linting & Formatting
- Transpilation
- CSS
- Database
- Monorepo
- CI/CD & Release
- Git Hooks
- Other
| Plugin | Enabler packages |
|---|---|
| Next.js | next |
| Nuxt | nuxt, nuxt3 |
| Remix | @remix-run/dev |
| SvelteKit | @sveltejs/kit |
| Gatsby | gatsby |
| Astro | astro |
| Angular | @angular/core, ng-packagr |
| React Router | react-router, @react-router/dev |
| RedwoodSDK | rwsdk (keeps src/worker.{ts,tsx,js,jsx,mts,mjs} reachable in rwsdk/vite apps) |
| TanStack Router | @tanstack/react-router, @tanstack/start, @tanstack/react-start |
| React Native | react-native |
| Expo | expo |
| NestJS | @nestjs/core |
| AdonisJS | @adonisjs/core |
| Docusaurus | @docusaurus/core |
| Nitro | nitropack |
| Capacitor | @capacitor/core, @capacitor/cli |
| Sanity | sanity, @sanity/ |
| VitePress | vitepress |
| next-intl | next-intl |
| Relay | relay-runtime, react-relay, relay-compiler |
| Electron | electron, electron-builder, @electron-forge/cli, electron-vite |
| Qwik | @builder.io/qwik, @builder.io/qwik-city, @qwik.dev/core, @qwik.dev/router |
| i18next | i18next, react-i18next, vue-i18n |
| Wuchale | wuchale, @wuchale/vite-plugin, or wuchale.config.js |
| Convex | convex |
| Lit | lit, lit-element, lit-html (also activates for native Custom Elements without a Lit dependency) |
| Lexical | lexical, @lexical/ (credits custom node lifecycle methods on DecoratorNode, ElementNode, TextNode subclasses) |
| Ember | ember-source, ember-cli, @embroider/core, @glimmer/component |
| Expo Router | expo-router |
| Supabase | supabase, or supabase/config.toml / supabase/functions/ present (treats supabase/functions/*/index.* as runtime entry roots) |
| Content Collections | @content-collections/core, @content-collections/vite, @content-collections/next |
| Contentlayer | contentlayer, contentlayer2, next-contentlayer, next-contentlayer2, or contentlayer.config.{ts,js,mts,mjs} present |
| Fumadocs | fumadocs-mdx, fumadocs-core, fumadocs-ui, or source.config.* present |
| Mintlify | mint, mintlify, or docs.json / mint.json present |
| Velite | velite, or velite.config.{ts,mts,cts,js,mjs,cjs} present |
| rspress | rspress, @rspress/ (credits the @theme / @theme-original virtual modules) |
Plugins with deep config parsing
Plugins with deep config parsing
These plugins go beyond simple package detection. They parse your config files with Oxc’s AST parser to extract entry points, dependencies, aliases, and other settings automatically:
| Plugin | What it extracts |
|---|---|
| ESLint | Plugin imports, shared configs, custom rule paths, import resolver packages |
| Vitest | Reporters, coverage provider, typecheck checker, browser provider from vitest.config.ts |
| Vite | Entry points, resolve.alias mappings, plugin imports from vite.config.ts |
| Jest | Setup files, transform paths, module mappers from jest.config.js |
| tsd | Declaration test directory from package.json#tsd.directory |
| Storybook | Story globs, addon imports from .storybook/main.ts |
| Tailwind | Content paths, plugin imports from tailwind.config.js |
| Webpack | Entry points including descriptor/context forms, resolve.alias mappings, loader/plugin imports from webpack.config.js |
| TypeScript | Path aliases, project references from tsconfig.json |
| Babel | Plugin and preset imports from babel.config.js |
| Rollup | Entry points, plugin imports from rollup.config.js |
| Rolldown | Entry points, external deps, plugin imports from rolldown.config.ts |
| PostCSS | Plugin imports from postcss.config.js |
| Nuxt | Modules, plugins, server routes, alias, imports.dirs, components, srcDir from nuxt.config.ts |
| SvelteKit | kit.alias mappings, param matchers from svelte.config.js |
| Next.js | App Router convention exports (page, layout, loading, error, route), route segment config, Pages Router exports, middleware, proxy, instrumentation, mdx-components, transpilePackages |
| Rsbuild | Entry points, plugin imports from rsbuild.config.ts |
| Remark | Plugin imports from .remarkrc.js |
| Angular | Styles, scripts, main, polyfills from angular.json build targets; ng-packagr ng-package.json / ng-package.prod.json lib.entryFile (default src/public_api.ts, resolved relative to the config directory) becomes a library public API entry point, with nested secondary-entry-point configs in the package subtree scanned too; @Component({ templateUrl, styleUrl }) decorator references create graph edges; standalone .html templates and inline template: literals both contribute synthetic <template> complexity findings (@if/@for/@switch/@defer, *ngIf, bound attributes, interpolations) suppressible via <!-- fallow-ignore-file complexity --> (external) or // fallow-ignore-next-line complexity above the @Component decorator (inline) |
| Nx | Executor references, main entry points, tsconfig paths from project.json |
| Hardhat | Plugin imports and side-effect requires from hardhat.config.ts |
| Contentlayer | contentDirPath, same-file defineDocumentType filePathPattern entries, and config imports from contentlayer.config.* |
| Velite | defineCollection pattern globs joined to the top-level root (default content), generated .velite output, a non-default output.data dir, and config imports from velite.config.* |
| UnoCSS | Preset and transformer imports from uno.config.ts |
| Wuchale | Adapter imports from wuchale.config.js; static custom JavaScript config files referenced from @wuchale/vite-plugin in vite.config.* |
$ fallow list --plugins
Don’t see your framework? Custom plugins support any internal or third-party tool using declarative JSON or TOML.
See also
Custom plugins
Add support for internal frameworks with external plugin files.
fallow list
Inspect active plugins, entry points, and project metadata.