Skip to content

gunsole

A desktop log viewer that doesn't suck. Send structured logs from any app — frontend, backend, whatever — and actually see what's happening. Locally. Instantly. No cloud. No account. No bullshit.

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.


Your App → SDK (batches + gzip) → localhost:17655 → Gunsole Desktop

The 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.


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.

Read the full docs →