mini-dev
A minimal dev server with HMR (Hot Module Replacement) for TypeScript, TSX, CSS, and HTML.
Features
- Zero config — Works out of the box
- Config file — Optional
mini-dev.config.ts or mini-dev.config.js
- public/ directory — Static assets (favicon, images, robots.txt) served at
/
- 404 page — Custom 404 with a list of visitable paths when a route is not found
- Proxy — Forward paths (e.g.
/api) to another server so frontend and backend can run separately
- Preview —
mini-dev preview to serve static build output (e.g. ./dist) without HMR
- TypeScript/TSX — On-the-fly transpilation via esbuild
- HMR — Hot module replacement without full page reload
- Simple API — Programmatic and CLI usage
Install
pnpm add @farming-labs/mini-dev
Quick Start
CLI
npx @farming-labs/mini-dev
npx @farming-labs/mini-dev -p 5173 -r ./my-app
npx @farming-labs/mini-dev -l MY-APP
npx @farming-labs/mini-dev -o
npx @farming-labs/mini-dev --host
npx @farming-labs/mini-dev --base /app/
npx @farming-labs/mini-dev -s
npx @farming-labs/mini-dev preview
npx @farming-labs/mini-dev preview -r ./dist -p 4173
Programmatic API
import { createDevServer } from '@farming-labs/mini-dev';
const { url, stop } = await createDevServer({ port: 3000 });
console.log('Running at', url);
DevServer Class
import { DevServer } from '@farming-labs/mini-dev';
const server = new DevServer({
root: './src',
port: 3000,
host: '0.0.0.0',
verbose: true,
label: 'MY-APP',
});
const { port, url } = await server.start();
Preview server
import { createPreviewServer } from '@farming-labs/mini-dev';
const { url, stop } = await createPreviewServer({ root: './dist', port: 4173 });
console.log('Preview at', url);
Config
Optional config file in project root (mini-dev.config.ts or mini-dev.config.js):
import type { DevServerOptions } from '@farming-labs/mini-dev';
export default {
port: 5173,
open: true,
label: 'MY-APP',
} satisfies Partial<DevServerOptions>;
CLI options override config.
Static assets (public/)
Place files in a public/ folder at the project root; they are served at /:
public/favicon.ico → /favicon.ico
public/robots.txt → /robots.txt
public/images/logo.png → /images/logo.png
If public/ does not exist, it is ignored.
Example
See the example directory:
cd example
pnpm dev
Edit App.tsx or style.css and save — changes apply via HMR without a full reload.
API Reference
See docs/API.md for full API documentation.
Development
pnpm install
pnpm build
pnpm test