Version: v5
DevServer
The Re.Pack DevServer is built on top of Fastify and provides a subset of webpack-dev-server  configuration options.
Usage
The DevServer is configured through the devServer option in your configuration:
rspack.config.mjs
import * as Repack from '@callstack/repack';
export default {
  // ... other options
  devServer: {
    port: 8081,
    host: 'localhost', 
    hot: true,
    // ... other DevServer options
  },
  plugins: [
    new Repack.RepackPlugin(),
  ],
};
 
Configuration Options
host
- Type: 
string 
- Default: 
'localhost' 
Hostname or IP address under which to run the development server.
Supported special values:
'local-ip' - Listen on all available network interfaces 
'local-ipv4' - Listen on local IPv4 address 
'local-ipv6' - Listen on local IPv6 address 
port
- Type: 
number 
- Default: 
8081 
Port under which to run the development server.
hot
- Type: 
boolean 
- Default: 
true 
Whether to enable Hot Module Replacement (HMR).
server
- Type: 
'http' | 'https' | { type: 'http' } | { type: 'https'; options?: HttpsServerOptions } 
- Default: 
'http' 
Options for running the server as HTTPS. When set to 'https' or { type: 'https' }, the server will run with HTTPS using default options. For custom HTTPS configuration, provide an options object.
rspack.config.mjs
import fs from 'node:fs';
export default {
  devServer: {
    server: 'https', // Simple HTTPS with default options
    // or
    server: {
      type: 'https',
      options: {
        key: fs.readFileSync('/path/to/server.key'),
        cert: fs.readFileSync('/path/to/server.crt'),
      },
    },
  },
};
 
proxy
- Type: 
ProxyConfig[] 
- Default: 
undefined 
Configuration for proxying API requests. Each entry in the array defines a proxy rule that forwards matching requests to a target server.
interface ProxyConfig extends ProxyOptions {
  path?: ProxyOptions['pathFilter'];
  context?: ProxyOptions['pathFilter'];
}
 
The ProxyConfig extends http-proxy-middleware options with webpack-dev-server compatible aliases:
path - Alias for pathFilter 
context - Alias for pathFilter 
rspack.config.mjs
export default {
  devServer: {
    proxy: [
      {
        context: ['/api', '/auth'],
        target: 'http://localhost:3001',
        changeOrigin: true,
      },
      {
        path: '/graphql',
        target: 'http://localhost:4000',
        ws: true, // Proxy websockets
      },
    ],
  },
};
 
setupMiddlewares
- Type: 
SetupMiddlewaresFunction 
- Default: 
undefined 
Function to customize middleware setup, allowing you to reorder, modify, or add custom middlewares.
type SetupMiddlewaresFunction = (
  middlewares: Middleware[],
  devServer: FastifyInstance
) => Middleware[];
 
The function receives:
middlewares - Array of built-in middlewares 
devServer - Fastify server instance 
Built-in middlewares include:
dev-middleware - @react-native/dev-middleware enabling use of React Native Devtools 
proxy-middleware-* - proxy middlewares created via proxy 
rspack.config.mjs
export default {
  devServer: {
    setupMiddlewares: (middlewares, devServer) => {
      // Add custom middleware before built-ins
      middlewares.unshift({
        name: 'auth-middleware',
        middleware: (req, res, next) => {
          // Custom authentication logic
          next();
        },
      });
      
      // Add custom route
      devServer.get('/health', async () => {
        return { status: 'ok' };
      });
      
      return middlewares;
    },
  },
};
 
Example
Add middleware while respecting middlewares order
Use unshift() to run middleware before all other middlewares
or use push() to run middleware after all other middlewares:
rspack.config.mjs
export default {
  devServer: {
    setupMiddlewares: (middlewares, devServer) => {
      // add before every other middleware
      middlewares.unshift({
        name: 'first-in-array',
        path: '/foo/path',
        middleware: (req, res) => {
          res.send('Foo!');
        },
      });
      // add after every other middleware
      middlewares.push({
        name: 'hello-world-test-one',
        path: '/foo/bar',
        middleware: (req, res) => {
          res.send('Foo Bar!');
        },
      });
      return middlewares;
    },
  },
};
 
Add new route to the DevServer directly
rspack.config.mjs
export default {
  devServer: {
    setupMiddlewares: (middlewares, devServer) => {
      devServer.get('/some/path', (_, response) => {
        response.send('/some/path GET response');
      });
      return middlewares;
    },
  },
};
 
Access the DevServer logger
Access the DevServer instance for routes and logging:
rspack.config.mjs
export default {
  devServer: {
    setupMiddlewares: (middlewares, devServer) => {
      devServer.get('/test', (_, response) => {
        response.send('GET test response');
        devServer.log.info('GET /test called');
      });
      return middlewares;
    },
  },
};