vite-plugin-fs-api-routes
v1.3.0-beta2
Published
File-system API routes for clean Vite apps without Express.
Maintainers
Readme
vite-plugin-fs-api-routes
File-system API routes for clean Vite apps, without Express.
Routes live under src/api by default and are exposed under /api.
src/api/example/route.ts -> /api/example
src/api/example/[id]/route.ts -> /api/example/:id
src/api/files/[...path]/route.ts -> /api/files/*Hebrew and other Unicode param names are supported too:
src/api/example/[משתנה]/route.ts -> params["משתנה"]Install
npm install vite-plugin-fs-api-routesConfigure Vite
// vite.config.ts
import { defineConfig } from 'vite';
import apiRoutes from 'vite-plugin-fs-api-routes';
export default defineConfig({
plugins: [apiRoutes()],
});Write Routes
// src/api/example/route.ts
export function GET() {
return Response.json({ ok: true });
}// src/api/users/[id]/route.ts
import type { ApiRouteContext } from 'vite-plugin-fs-api-routes';
export async function GET(request: Request, { params }: ApiRouteContext) {
return Response.json({
id: params.id,
url: request.url,
});
}
export async function POST(request: Request, { params }: ApiRouteContext) {
const body = await request.json();
return Response.json({
id: params.id,
body,
});
}Supported handler exports:
export function GET(request, context) {}
export function POST(request, context) {}
export function PUT(request, context) {}
export function PATCH(request, context) {}
export function DELETE(request, context) {}
export function HEAD(request, context) {}
export function OPTIONS(request, context) {}
export function ALL(request, context) {}
export default function handler(request, context) {}If HEAD is not exported, GET is used as the fallback. If OPTIONS is not exported, the plugin returns 204 with an Allow header.
Handlers can return:
Response- plain objects, numbers, or booleans, returned as JSON
- strings,
Blob,ArrayBuffer,ReadableStream,FormData, orURLSearchParams nullorundefined, returned as204
Options
apiRoutes({
dir: 'src/api',
prefix: '/api',
routeFileName: 'route',
extensions: ['ts', 'tsx', 'js', 'jsx', 'mjs', 'mts', 'cjs', 'cts'],
debug: false,
});Preview
vite preview is supported. During preview, route modules are bundled on demand with esbuild so TypeScript route files can run in Node without Express.
This is still a Vite preview server integration. For production static hosting, API routes need a Node/serverless adapter.
