gunsole
Local-first
Your logs stay on your machine. No telemetry, no cloud sync, no “enterprise tier” upsell. SQLite database, localhost server, done.
Structured logging
Buckets, tags, context objects, log levels, trace IDs. Not just strings dumped to stdout. Actual structure you can filter and search.
Real-time streaming
Logs appear as they happen. Batched for performance, virtualized for scale. Handles 10k+ entries without breaking a sweat.
Dynamic tag filtering
Tags are auto-discovered from your logs. No config, no schema. Send a tag, it appears as a filter. Add more tags, get more filters.
Multi-project
One app, many projects. Organize with workspaces. Your API server, your React app, your cron jobs — all in one place, separated cleanly.
SDK in 3 lines
Install, configure, log. The JS SDK handles batching, compression, retries. You write one line of code to send a log. That’s it.
How it works
Section titled “How it works”Your App → SDK (batches + gzip) → localhost:17655 → Gunsole DesktopThe SDK collects logs in your application, batches them (default: every 10 logs or 5 seconds), compresses the payload, and sends it to the Gunsole desktop app running on localhost. The desktop app stores everything in a local SQLite database and shows it in a fast, filterable log viewer.
No intermediary. No cloud service. Your logs go from your process to your screen.
Quick taste
Section titled “Quick taste”import { createGunsoleClient } from "gunsole-js";
const gun = createGunsoleClient({ projectId: "my-app", apiKey: "dev", mode: "local",});
gun.info({ bucket: "api", message: "POST /users → 201", context: { userId: "u_382", latency: 45 }, tags: { route: "/users", method: "POST" },});That log shows up in the desktop app immediately. With the bucket, context, tags, and level all parsed and filterable.