TOptions
Bun

type

Serve.Options

type Options<WebSocketData, R extends string = never> = Bun.__internal.XOR<HostnamePortServeOptions<WebSocketData>, UnixServeOptions<WebSocketData>> & Bun.__internal.XOR<FetchOrRoutes<WebSocketData, R>, FetchOrRoutesWithWebSocket<WebSocketData, R>>

The type of options that can be passed to serve, with support for routes and a safer requirement for fetch

export default {
  fetch: req => Response.json(req.url),

  websocket: {
    message(ws) {
      ws.data.name; // string
    },
  },
} satisfies Bun.Serve.Options<{ name: string }>;

Referenced types

type XOR<A, B> = Without<A, B> | Without<B, A>

interface HostnamePortServeOptions<WebSocketData>

  • development?: Development

    Render contextual errors? This enables bun's error page

  • error?: (this: Server<WebSocketData>, error: ErrorLike) => void | Promise<void> | Response | Promise<Response>

    Callback called when an error is thrown during request handling

    error: (error) => {
      return new Response("Internal Server Error", { status: 500 });
    }
    
  • hostname?: string & {} | '0.0.0.0' | '127.0.0.1' | 'localhost'

    What hostname should the server listen on?

    "127.0.0.1" // Only listen locally
    
  • id?: null | string

    Uniquely identify a server instance with an ID


    When bun is started with the --hot flag:

    This string will be used to hot reload the server without interrupting pending requests or websockets. If not provided, a value will be generated. To disable hot reloading, set this value to null.

    When bun is not started with the --hot flag:

    This string will currently do nothing. But in the future it could be useful for logs or metrics.

  • idleTimeout?: number

    Sets the the number of seconds to wait before timing out a connection due to inactivity.

  • ipv6Only?: boolean

    Whether the IPV6_V6ONLY flag should be set.

  • maxRequestBodySize?: number

    What is the maximum size of a request body? (in bytes)

  • port?: string | number

    What port should the server listen on?

  • reusePort?: boolean

    Whether the SO_REUSEPORT flag should be set.

    This allows multiple processes to bind to the same port, which is useful for load balancing.

  • tls?: TLSOptions | TLSOptions[]

    Set options for using TLS with this server

    const server = Bun.serve({
      fetch: request => new Response("Welcome to Bun!"),
      tls: {
        cert: Bun.file("cert.pem"),
        key: Bun.file("key.pem"),
        ca: [Bun.file("ca1.pem"), Bun.file("ca2.pem")],
      },
    });
    

interface UnixServeOptions<WebSocketData>

  • development?: Development

    Render contextual errors? This enables bun's error page

  • error?: (this: Server<WebSocketData>, error: ErrorLike) => void | Promise<void> | Response | Promise<Response>

    Callback called when an error is thrown during request handling

    error: (error) => {
      return new Response("Internal Server Error", { status: 500 });
    }
    
  • id?: null | string

    Uniquely identify a server instance with an ID


    When bun is started with the --hot flag:

    This string will be used to hot reload the server without interrupting pending requests or websockets. If not provided, a value will be generated. To disable hot reloading, set this value to null.

    When bun is not started with the --hot flag:

    This string will currently do nothing. But in the future it could be useful for logs or metrics.

  • maxRequestBodySize?: number

    What is the maximum size of a request body? (in bytes)

  • tls?: TLSOptions | TLSOptions[]

    Set options for using TLS with this server

    const server = Bun.serve({
      fetch: request => new Response("Welcome to Bun!"),
      tls: {
        cert: Bun.file("cert.pem"),
        key: Bun.file("key.pem"),
        ca: [Bun.file("ca1.pem"), Bun.file("ca2.pem")],
      },
    });
    
  • unix?: string

    If set, the HTTP server will listen on a unix socket instead of a port. (Cannot be used with hostname+port)

type FetchOrRoutes<WebSocketData, R extends string> = { routes: Routes<WebSocketData, R>; fetch(this: Server<WebSocketData>, req: Request, server: Server<WebSocketData>): MaybePromise<Response> } | { routes: Routes<WebSocketData, R>; fetch(this: Server<WebSocketData>, req: Request, server: Server<WebSocketData>): MaybePromise<Response> }
type FetchOrRoutesWithWebSocket<WebSocketData, R extends string> = { websocket: WebSocketHandler<WebSocketData> } & { routes: RoutesWithUpgrade<WebSocketData, R>; fetch(this: Server<WebSocketData>, req: Request, server: Server<WebSocketData>): MaybePromise<undefined | void | Response> } | { routes: RoutesWithUpgrade<WebSocketData, R>; fetch(this: Server<WebSocketData>, req: Request, server: Server<WebSocketData>): MaybePromise<undefined | void | Response> }