Skip to content
This repository was archived by the owner on Jul 10, 2026. It is now read-only.

Repository files navigation

universal-autorouter

An universal plugin that scans the file system and automatically loads to a server all routes in a target directory.

Inspired by elysia-autoload package and compatible with Node.js and Bun runtimes.

⚙️ Install

yarn add universal-autorouter

📖 Usage

Register the Plugin (example with Hono)

// /app.tsimportpathfrom'node:path'import{serve}from'@hono/node-server'import{Hono}from'hono'importautoloadRoutesfrom'universal-autorouter'constapp=newHono()awaitautoloadRoutes(app,{// Pattern to scan route filespattern: '**/*.ts',// Prefix to add to routesprefix: '/api',// Source directory of route files: use "relative" pathroutesDir: path.resolve(import.meta.dirname,'api')})constport=+(process.env.PORT||3000)serve({fetch: app.fetch,
port
},()=>console.log(`Server running at http://localhost:${port}`))

Create a Route

// /routes/index.tsimporttype{Context}from'hono'exportdefault(c: Context)=>{returnc.text('Hello World!')}

Directory Structure

Guide on how universal-autorouter matches routes:

├── app.ts
├── routes
│ ├── index.ts // index routes
│ ├── posts
│ │ ├── index.ts
│ │ └── [id].ts // dynamic params
│ ├── likes
│ │ └── [...].ts // wildcard
│ ├── domains
│ │ ├── @[...] // wildcard with @ prefix
│ │ │ └── index.ts
│ ├── frontend
│ │ └── index.tsx // usage of tsx extension
│ ├── events
│ │ ├── (post).ts // dynamic method
│ │ └── (get).ts
│ └── users.ts
└── package.json
  • /routes/index.ts → GET /
  • /routes/posts/index.ts → GET /posts
  • /routes/posts/[id].ts → GET /posts/:id
  • /routes/users.ts → GET /users
  • /routes/likes/[...].ts → GET /likes/*
  • /routes/domains/@[...]/index.ts → GET /domains/@*
  • /routes/frontend/index.tsx → GET /frontend
  • /routes/events/(post).ts → POST /events
  • /routes/events/(get).ts → GET /events

Options

KeyTypeDefaultDescription
pattern?string**/*.{ts,tsx,js,jsx,mjs,cjs}Glob patterns
prefix?stringPrefix to be added to each route
routesDir?string./apiThe folder where routes are located (use a relative path)
defaultMethod?Methodstringget
viteDevServer?ViteDevServerundefinedDeveloper server instance of Vite to use SSR module loader
skipNoRoutes?booleanfalseSkip the throw error when no routes are found
skipImportErrors?booleanfalseSkip the import errors with the default export of a rotue file

License

This project is licensed under the MIT License.

About

Archived: Universal filesystem autoloader for routes

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages