Production

Lifecycle Hooks

Run code on server start, stop, and during request processing.

Lifecycle Hooks

Lifecycle hooks let you run code at specific points in the server and request lifecycle — useful for database connections, metrics, logging, and cleanup.

Available Hooks

HookFiresUse Case
onStartAfter app.listen() succeedsDB connection, cache warmup
onStopBefore shutdown beginsClose connections, flush logs
onRequestAfter context creation, before middlewareRequest logging, rate limit checks
onResponseAfter a response is ready, before sendingResponse logging, custom headers

Configuration

const app = Bklar({
  hooks: {
    onStart(server) {
      console.log(`Ready on port ${server.port}`);
      connectDatabase();
    },

    onStop() {
      console.log("Shutting down...");
      disconnectDatabase();
    },

    onRequest(ctx) {
      console.log(`${ctx.req.method} ${ctx.req.url} [${ctx.requestId}]`);
    },

    onResponse(ctx, response) {
      console.log(`→ ${response.status}`);
    },
  },
});

Database Connection Example

let db: Database;

const app = Bklar({
  hooks: {
    onStart: () => {
      db = new Database("app.db");
      console.log("DB connected");
    },
    onStop: () => {
      db.close();
      console.log("DB closed");
    },
  },
});

app.listen(3000);

// Graceful shutdown
process.on("SIGTERM", () => app.stop());
process.on("SIGINT", () => app.stop());

Error handling in hooks

Hook errors are caught and logged — they won't crash the server. Use try/catch in hooks for critical operations.

On this page