← All projects2026
About
What it does
Winston felt too abstract to reason about and Pino too rigid for testing, so I wrote a logger small enough to read in one sitting: no global singletons, no hidden async behaviour, and a logging failure never crashes your process.
Context is passed down explicitly with withContext and child. Logging is fire-and-forget by default with awaitable variants, every transport call has a timeout and is isolated, and errors go to a handler instead of being thrown. Buffer mode, an in-memory test mode and a sanitizer hook round it out.
Browser-safe transports (console, JSON, HTTP, in-memory) ship separately from Node-only ones (file, stream, IPC), as both ESM and CommonJS.
- +Published on npm, now at 1.0.2
- +One runtime dependency
- +Works in Node 18+ and the browser