Change8

fetch-router@0.8.0

Breaking Changes
📦 remixView on GitHub →
4 breaking2 features🔧 6 symbols

Summary

This release rearchitects the router's middleware system to support pre-matching global middleware and moves FormData and method override logic into standalone middleware modules.

⚠️ Breaking Changes

  • The `router.use()` method has been removed for global middleware; middleware must now be passed to `createRouter({ middleware })` to run before route matching.
  • Renamed the `use` property to `middleware` within route handler definitions in `router.map()`.
  • Removed `router.mount()` and all support for sub-routers.
  • Moved FormData parsing and method override logic out of the router core into standalone middleware exports. `createRouter` options `parseFormData`, `methodOverride`, and `uploadHandler` have been removed.

Migration Steps

  1. Replace `router.use(middleware)` with `createRouter({ middleware: [middleware] })` for global middleware.
  2. Update `router.map()` definitions to use the key `middleware` instead of `use` for route-level middleware.
  3. Remove calls to `router.mount()` as sub-routers are no longer supported.
  4. Import `formData` and `methodOverride` from their respective middleware packages and add them to the router middleware chain if those features are required.
  5. Ensure `methodOverride()` is placed after `formData()` in the middleware array if using both.

✨ New Features

  • Introduced 'Router Middleware' (global) that runs before route matching, allowing modification of request context (method/URL) for matching purposes.
  • New standalone middleware exports: `formData` and `methodOverride` for more flexible composition and smaller core build size.

🔧 Affected Symbols

createRouterrouter.userouter.maprouter.mountformDatamethodOverride