or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

content-parsing.mddecoration.mderror-handling.mdhooks.mdindex.mdplugins.mdrouting.mdschema.mdserver-lifecycle.mdtesting.md
tile.json

server-lifecycle.mddocs/

Server Lifecycle

Core server functionality including instance creation, server startup, shutdown, and configuration management.

Capabilities

Fastify Factory Function

Creates a new Fastify server instance with optional configuration.

/**
 * Creates a new Fastify server instance
 * @param options - Server configuration options
 * @returns FastifyInstance for method chaining
 */
function fastify(options?: FastifyServerOptions): FastifyInstance;

Usage Examples:

// Basic server creation
const fastify = require('fastify')();

// Server with logging enabled
const fastify = require('fastify')({ logger: true });

// Server with custom configuration
const fastify = require('fastify')({
  logger: {
    level: 'info',
    prettyPrint: true
  },
  bodyLimit: 1048576, // 1MB
  trustProxy: true
});

Server Listen

Start the HTTP server and begin accepting connections.

/**
 * Start the server and listen for connections
 * @param opts - Listen options including port, host, and other server options
 * @returns Promise resolving to the server address string
 */
listen(opts?: FastifyListenOptions): Promise<string>;

/**
 * Start the server with callback-style error handling
 * @param opts - Listen options
 * @param callback - Callback function called when server starts or fails
 */
listen(opts: FastifyListenOptions, callback: (err: Error | null, address: string) => void): void;

/**
 * Start the server with only callback (uses default options)
 * @param callback - Callback function called when server starts or fails
 */
listen(callback: (err: Error | null, address: string) => void): void;

FastifyListenOptions Interface:

interface FastifyListenOptions {
  port?: number;          // Default: 0 (picks first available port)
  host?: string;          // Default: 'localhost'
  path?: string;          // For IPC servers, ignored if port is specified
  backlog?: number;       // Default: 511
  exclusive?: boolean;    // Default: false
  readableAll?: boolean;  // For IPC servers, default: false
  writableAll?: boolean;  // For IPC servers, default: false
  ipv6Only?: boolean;     // Default: false
  signal?: AbortSignal;   // For graceful shutdown
  listenTextResolver?: (address: string) => string; // Custom listen message
}

Usage Examples:

// Promise-based listening
const start = async () => {
  try {
    const address = await fastify.listen({ port: 3000, host: '0.0.0.0' });
    console.log(`Server listening at ${address}`);
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
};

// Callback-based listening
fastify.listen({ port: 3000 }, (err, address) => {
  if (err) {
    fastify.log.error(err);
    process.exit(1);
  }
  console.log(`Server listening at ${address}`);
});

// With AbortSignal for graceful shutdown
const controller = new AbortController();
await fastify.listen({ 
  port: 3000, 
  signal: controller.signal 
});

// Later: controller.abort(); // Gracefully closes server

Server Close

Stop the server and close all connections.

/**
 * Close the server and call onClose hooks
 * @returns Promise that resolves when server is closed
 */
close(): Promise<undefined>;

/**
 * Close the server with callback
 * @param closeListener - Callback called when server is closed
 */
close(closeListener: () => void): undefined;

Usage Examples:

// Promise-based close
await fastify.close();

// Callback-based close
fastify.close(() => {
  console.log('Server closed');
});

// Graceful shutdown pattern
process.on('SIGINT', async () => {
  try {
    await fastify.close();
    console.log('Server closed gracefully');
    process.exit(0);
  } catch (err) {
    console.error('Error during shutdown:', err);
    process.exit(1);
  }
});

Ready State Management

Wait for all plugins to be loaded and server to be ready.

/**
 * Wait for all plugins to load and server to be ready
 * @returns FastifyInstance and Promise for method chaining
 */
ready(): FastifyInstance & Promise<undefined>;

/**
 * Wait for server ready with callback
 * @param readyListener - Callback called when ready or on error
 */
ready(readyListener: (err: Error | null) => void | Promise<void>): FastifyInstance;

Usage Examples:

// Promise-based ready
await fastify.ready();
console.log('Server is ready');

// Callback-based ready
fastify.ready((err) => {
  if (err) {
    console.error('Server failed to start:', err);
    return;
  }
  console.log('Server is ready');
});

// Chaining with other operations
await fastify
  .register(somePlugin)
  .ready();

Server Information

Get information about the running server.

/**
 * Get all server addresses (useful for multiple bindings)
 * @returns Array of address information objects
 */
addresses(): AddressInfo[];
interface AddressInfo {
  address: string;
  family: string;
  port: number;
}

Server Properties:

interface FastifyInstance {
  server: RawServer;           // Underlying HTTP server instance
  listeningOrigin: string;     // Server listening origin URL (getter)
  version: string;             // Fastify version (getter)
  log: FastifyLoggerInstance;  // Logger instance
  initialConfig: object;       // Read-only initial configuration
}

Usage Examples:

// Get server addresses
const addresses = fastify.addresses();
console.log('Server listening on:', addresses);

// Access underlying server
const httpServer = fastify.server;
httpServer.timeout = 30000; // Set 30 second timeout

// Get listening origin
console.log('Origin:', fastify.listeningOrigin);
// Output: "http://localhost:3000"

// Check Fastify version
console.log('Fastify version:', fastify.version);

Routing Function

Direct access to the routing function for advanced use cases.

/**
 * Direct routing function for handling raw HTTP requests
 * @param req - Raw HTTP request
 * @param res - Raw HTTP response
 */
routing(req: RawRequest, res: RawReply): void;

This is typically used internally or for custom server integration scenarios.