Skip to content
PluginStats

filesystem-routing weekly downloads statistics

By solidjs (3 listings) · npm · Vite plugins

Router-neutral file-system routing: scans a route directory into a neutral route manifest with pluggable conventions and delivery adapters

View on npm Fresh · Oct 17, 2026

filesystem-routing has 19,773 recorded weekly downloads on npm, an increase of 22.8% over the past 30 days.

It ranks #757 of 2,251 tracked npm listings by weekly downloads.

PluginStats has 542 daily observations since Apr 24, 2025; the latest is from Oct 17, 2026.

Weekly downloads
19,773
Official API · Oct 17, 2026
7-day growth
-52.5%
-21.8K weekly downloads
30-day growth
+22.8%
+3.7K weekly downloads
90-day growth
—
Insufficient history
Rank
#757
Among tracked npm listings

About filesystem-routing

filesystem-routing

Router-neutral file-system routing.

This package owns the *machinery* of file routing — scanning a directory, applying a filename convention and producing a neutral route manifest — while routers own the *shapes*: each router ships a small emission adapter that turns the manifest into its own route definitions, and each bundler ships a delivery adapter that materializes the manifest into code.

| Piece | Owner |

| Scanning, filename convention, neutral route manifest | filesystem-routing | | Nesting + (group) stripping | filesystem-routing/tree | | Vite delivery (virtual module, HMR, code splitting, build inputs) | filesystem-routing/vite | | Request dispatch for GET/POST routes, as fetch middleware | filesystem-routing/api | | RouteDefinition emission for Solid Router (code splitting, typed paths) | @solidjs/router/fs |

Nothing here is Solid-specific: the core is bundler-agnostic — it never imports Vite — the Vite adapter is router-agnostic, and the conventions are the ones proven by SolidStart. The manifest is served from virtual:file-routes, or from whatever id you pass as fileRoutes({ moduleId }).

Usage with Solid Router and Vite

The emission adapter ships with the router — @solidjs/router/fs for Solid Router; other routers mirror the same shape in their own packages. It never imports a virtual module itself — the app does, so the adapter resolves without the plugin, custom moduleIds work, and nothing needs excluding from dependency prebundling.

Route modules live in src/routes (configurable via fileRoutes({ dir })). A module is a page when it has a default export, and may export a route config object:

Filename conventions

Two conventions ship in the box. Both produce the same neutral manifest and share the same module convention (default export is a page, route config export, httpMethods handlers), so they are equally capable — only the filenames differ.

Nested (PageFileSystemRouter, the default)

The convention proven by SolidStart:

| File | Path |

| index.tsx | / | | about.tsx | /about | | blog/[id].tsx | /blog/:id | | blog/[[page]].tsx | /blog/:page? | | docs/[...path].tsx | /docs/*path | | (marketing)/about.tsx | /about, nested in the (marketing) group |

Nested layouts come from pairing a file with a directory: blog.tsx is the layout for everything in blog/.

Flat (FlatFileSystemRouter)

The convention proven by Remix v2 and carried forward by React Router's @react-router/fs-routes — . delimiters instead of directories:

| File | Path |

| _index.tsx | / | | about.tsx | /about | | concerts.trending.tsx | /concerts/trending | | concerts.$city.tsx | /concerts/:city | | concerts.($page).tsx | /concerts/:page? | | files.$.tsx | /files/*splat | | _auth.login.tsx | /login, nested in the _auth.tsx pathless layout | | concerts_.mine.tsx | /concerts/mine, escaping the concerts.tsx layout | | [sitemap.xml].tsx | /sitemap.xml — brackets escape special characters |

concerts.tsx is the layout for every concerts.* file; a top-level folder routes through its route.tsx module and co-locates everything else in the folder without routing it. Pass the router to the plugin:

Two departures from Remix: the catch-all param is named (params.splat rather than params["*"]), and optional *static* segments ((en).about.tsx) are rejected — the neutral pattern language has no representation for them.

API routes

Route modules can answer requests as well as render. Turn on httpMethods (off by default — a client-only manifest has no use for handlers) and uppercase exports become request handlers:

The scanner turns each handler export into a lazy ref on the entry — $GET: { src, pick: ["GET"] }, $DELETE: … — with the same code splitting pages get:

• A module with handlers but no default export routes without being a page: { path: "/api/posts/:id", page: false, $GET, $DELETE }. • A module can be both. A page with a GET export gets $component *and* $GET, and handler exports are excluded from the component ref's picks, so handler code never reaches the client bundle. • A lone GET also answers HEAD: a $HEAD ref aliasing the GET export is added unless the module exports its own. • The recognized set is HEAD/GET/POST/PUT/DELETE/PATCH/OPTIONS; pass an array instead of true to change it.

Dispatch ships as fetch-style middleware — filesystem-routing/api matches requests against the manifest's handler refs and composes into any (request, next) chain, an SSR handler's middleware option included:

Handlers receive the request event of the surrounding scope (the storage provideRequestEvent establishes — pass getEvent to dispatch outside one), with the matched params written onto it. Unmatched requests (no route, or no handler for the method) advance the chain; HEAD falls back to the GET handler; returned strings and JSON values are coerced into responses. A GET handler may decline by returning undefined: a module that is also a page falls through to the chain (its component renders instead), a handler-only module answers 404. createAPIMatcher exposes the matching alone for servers with their own dispatch shape.

Frameworks typically enable httpMethods on the server environment's router only (SolidStart pairs it with `components: false` in SPA mode, so the server manifest routes requests without shipping page modules) — see the per-environment routers option below.

Server-function pages

With serverComponents: true, a page whose default export begins with a "use server" directive is a server-function page:…

Description from the npm listing.

  • file-system routing
  • file routes
  • router
  • vite
  • vite-plugin
  • solid

Where filesystem-routing sits in the listing

Each band is one page of 20. Weekly downloads on a log scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

All npm2,248 listings · 113 pages · page 38, #17 (overall #757)
All npm: every listing in weekly downloads order
PNG SVG
Vite plugins250 listings · 13 pages · page 7, #4 (overall #124)
Vite plugins: every listing in weekly downloads order
PNG SVG

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

filesystem-routing weekly downloads on npm, last 90 days: 19,773 weekly downloads as of Oct 17, 2026.filesystem-routingWeekly downloads on npm · Last 90 days19,773downloads / week010K20K30K40K50KJul 19Aug 3Aug 18Sep 2Sep 17Oct 2Oct 17downloads / weekobservedarchived (Internet Archive)no observationsJul 21, 2026 – Oct 17, 2026 · 89 observations · Updated Oc…pluginstats.com
filesystem-routing weekly downloads on npm, last 90 days: 19,773 weekly downloads as of Oct 17, 2026.
PNG SVG

7/30/90-day growth

filesystem-routing weekly downloads growth on npm: -52.5% over 7 days, +22.8% over 30 days, 90-day growth unavailable.filesystem-routingWeekly downloads growth on npm19,773downloads / week now7-day growth-21,843 weekly downloads-52.5%30-day growth+3,675 weekly downloads+22.8%90-day growth+19,773 weekly downloadsInsufficient historyGrowth vs. nearest observation to each baseline date · Updated Oct 17, 2026pluginstats.com
filesystem-routing weekly downloads growth on npm: -52.5% over 7 days, +22.8% over 30 days, 90-day growth unavailable.
PNG SVG

Ranking history

filesystem-routing npm ranking history: currently #757 (by weekly downloads).filesystem-routingnpm ranking · by weekly downloads · Last 90 days#757current rank#200#300#400#500#600#700#800Jul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18rankOct 17, 2026 – Oct 18, 2026 · 2 observations · Updated Oct 17, 2026pluginstats.com
filesystem-routing npm ranking history: currently #757 (by weekly downloads).
PNG SVG

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Recent observations

Full history (542)
Recent weekly downloads observations for filesystem-routing
Date (UTC)Weekly downloadsChange vs. previous
19,773-9.4K
29,144+423
28,721-5.6K
34,353-6.9K
41,2990
41,299-638
41,937+321
41,616+3.5K
38,166+3K
35,182+2.9K
32,311+4.3K
28,056-3.2K
31,282+3.3K
27,980—

Similar npm Vite plugins plugins

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/filesystem-routing. First seen Oct 16, 2026; last successful collection Oct 18, 2026. See the methodology.