The problem
JSON-structured logs from node servers (pino, winston, bunyan) are unreadable as raw text — you end up piping through jq one query at a time or squinting at minified lines, with no way to filter by level or expand nested fields without a paid cloud service.
If you've hit this before, you know how it goes — you write a throwaway jq alias, copy the same pipeline from Stack Overflow, or just accept the pain.
As a solution, I created json-log-dash
Spin up a local web dashboard to browse, filter, and inspect JSON log files.
Zero-dependency Node.js, run it immediately:
npx json-log-dash server.log
Or pipe from a running process:
node app.js | npx json-log-dash
Output:
json-log-dash — 1,243 entries loaded
Server: http://localhost:7777
Press Enter to stop.
This opens a browser dashboard with:
- Level filter buttons (trace / debug / info / warn / error / fatal)
- Full-text search across all fields in every record
- Click any row to expand and see the full JSON with syntax highlighting
- Handles pino numeric levels, winston string levels, bunyan — normalised automatically
How it works
Pure Node.js with no dependencies. Reads newline-delimited JSON with readline, serves a self-contained HTML page via http.createServer (port 7777), inlines all CSS and JS as a template literal, and opens the browser with child_process.exec. The server shuts down after 60 seconds of inactivity or when you press Enter.
Why I built it
Found repeated complaints on r/node and Stack Overflow about pino/winston JSON logs being unreadable in the terminal. Tools like pino-pretty only colorize the terminal — none provide a local browser UI with filtering and expandable records. No popular zero-dependency npm package fills this gap.
Part of µ micro — one new developer tool, shipped every day.
Top comments (0)