sift-logs
v1.0.17
Published
Intelligent log aggregator for local development — the htop of dev logs
Maintainers
Readme
Sift — Intelligent Log Aggregator for Local Development
Sift is the htop of local development logging. It aggregates, parses, categorizes, and presents logs from all your running services in a single, beautiful, interactive terminal interface — so you can find what matters without scrolling through five terminal tabs.
Core Philosophy:
- Aggregate — One pane, all services. No more tab-switching.
- Parse — Understands log levels, timestamps, service names, and request IDs automatically.
- Correlate — Traces a single request across multiple services (when trace IDs are present).
- Filter — Search, filter by service, level, or time — in real-time.
- Pause — Spacebar pauses the display; logs keep buffering in the background.
Installation
npm install -g sift-logsRequires Node.js 18+.
Quick Start
Run services directly
From a project with a package.json, Sift auto-detects runnable services and lets you pick
which ones to run (multi-select, with the option to edit a command or add your own):
sift runSift remembers your selection per project — the next sift run in that directory offers to
reuse it. Guessed commands (e.g. a Celery/Sidekiq worker) are detected but left unchecked by
default since they often need project-specific arguments.
CLI Commands
| Command | Description |
| ----------------------------------- | -------------------------------------------------- |
| sift run | Detect services from package.json and aggregate logs. |
| sift run --file - | Read logs from stdin. |
| sift run --session-name <name> | Name the saved session. |
| sift run --no-save | Run without persisting the session. |
| sift replay --session yesterday | Replay a past session in the UI. |
| sift diff session1 session2 | Compare two persisted sessions. |
| sift config init | Create a sift.config.json file. |
| sift --version | Show version. |
Log persistence
Every sift run session is saved to a local SQLite database at ~/.config/sift/sift.db
(unless you pass --no-save). Replay previous sessions or compare two runs:
sift replay --session yesterday
sift diff session1 session2Session identifiers can be a name, id, or alias (last, today, yesterday).
Keyboard Shortcuts
| Key | Action |
| ------------------- | ----------------------------------------------- |
| ↑ / ↓ | Scroll logs (1 line) |
| PgUp / PgDn | Scroll (10 lines) |
| Home / End | Jump to first / last log |
| Space | Pause / resume stream |
| / | Open search overlay |
| n / N | Next / previous search match |
| e | Filter errors |
| w | Filter warnings |
| i | Filter info |
| a | Show all levels / services |
| s then 1-9 | Toggle service visibility (hide/show) |
| 1 … 9 | Show only that service (press again for all) |
| Enter | Expand multi-line log / show trace |
| Backspace / Esc | Close overlay / return to full view |
| d | Show detail view for selected log |
| c | Copy selected log to clipboard |
| r | Restart selected service |
| l | Toggle line wrapping |
| t | Toggle timestamps |
| h / ? | Show help overlay |
| q / Ctrl+C | Quit Sift |
Supported Log Formats
- Node.js / console (
console.log,console.error,console.warn) - Winston (JSON and human-readable transports)
- Pino (structured JSON logs)
- Express / Morgan (HTTP access logs)
- Next.js (dev server, build, and route handler output)
- JSON structured logs, bracketed logs (
[INFO] message), prefixed logs (ERROR: message), logfmt (key=value), and Docker / Docker Compose prefixed logs - Generic plain text with best-effort timestamp/level detection
Coming soon: Python, Go, and Rust support.
Metrics Dashboard
Sift extracts live metrics from HTTP access logs while you work:
- Request rate — requests per minute per service
- Error rate — rolling error ratio shown as a status-bar sparkline
- Average response time — per service, when response times are present in logs
- Health indicators — green / yellow / red dot per service based on error ratio
No configuration is required. Pipe any service that emits HTTP access logs and the metrics appear automatically.
Platform Support
- macOS: full support
- Linux: full support
- Windows: sql.js has no native build step, so native Windows should now work without WSL2 (untested — WSL2 remains a fallback if you hit issues)
Marketing Website
The public-facing website lives in site/. It is a Vite + React + TypeScript single-page app with a warm editorial design system, built to explain Sift and drive adoption.
cd site
npm install
npm run dev # local development
npm run build # static export to site/dist
npm run preview # preview the production buildDeploys are handled by .github/workflows/site.yml to GitHub Pages whenever main changes under site/. To use it, enable Pages in the repository settings and set the source to GitHub Actions.
License
MIT © Abdul-Qudus Rufai
