Node.js · TypeScript · self-hosted

Application observability for developers who do not want an observability stack.

Mark the operations that matter. Sightglass shows what happened, why it failed, which database or outbound call was slow, and what each customer used—without collecting everything else.

One container. Explicit SDK calls. Your infrastructure.

checkout.ts
export const checkout = observe("checkout", async () => {
  observe.set({ tenantId, plan: "pro" });
  const order = await observe.step("create-order", createOrder);
  observe.meter("orders.created", 1, { tenantId });
  return order;
});

Works with your Node stack

Official marks identify supported integrations; no affiliation implied.

  • Node.js
  • TypeScript
  • Express
  • Fastify
  • NestJS
  • Next.js
  • Prisma
  • Docker

A deliberately narrow model

Start with the questions your team actually asks.

Observed operations

Explicitly mark checkout, reporting, or any workflow worth understanding.

Query attribution

See Prisma cost inside the operation that caused it.

Durable metering

Record exact idempotent product usage with execution context.

Safe defaults

Bodies, headers, cookies, SQL, and bind values are never captured automatically.

The answers are already connected

From a slow operation to the exact step, query, and customer impact.

Sightglass keeps business context beside runtime evidence, so you can investigate without stitching together logs, traces, and billing exports.

Sightglass operations dashboard showing execution volume, latency, and errors

Know where to look

A calm overview of only the operations you chose to observe.

Compare volume, tail latency, and errors without building queries or maintaining dashboards.

Sightglass occurrence detail showing context, steps, a Prisma query, and a usage event

Explain what happened

Every occurrence tells one coherent story.

See bounded business context, steps, database work, outbound calls, events, and the final outcome in execution order.

Sightglass usage meter ledger showing per-tenant product usage

Meter with evidence

Durable usage records stay tied to the work that produced them.

Use idempotent meters for billing and limits, then move directly from an aggregate to its supporting executions.

Product renders use representative sample data.

Deliberately opt-in

Observe one operation, not the whole world.

Unwrapped work stays invisible. Add bounded business context, meaningful events, steps, database attribution, outbound calls, and usage only where they matter.

  • Express and tsoa, Fastify, NestJS, and Next.js Route Handlers
  • Prisma and native fetch attribution inside observed work
  • One SQLite server with a signed-in, opinionated dashboard
  • No daemon, external collector, query language, or dashboard builder