Fallow ships with built-in plugins for popular TypeScript and JavaScript tools. Each plugin teaches fallow about framework-specific conventions: entry points, config files, used exports, and tooling dependencies. Analysis is accurate out of the box.
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.
| 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; the safe in-project directory from convex.json#functions becomes the functions entry root when configured |
| 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) |
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.* |
Run fallow list --plugins to see which plugins are active in your project.
Active plugins:
- nextjs
- vite
- vitest
- playwright
- storybook
- eslint
- typescript
- tailwind
- drizzle
Don't see your framework? Custom plugins support any internal or third-party tool using declarative JSON or TOML.