Skip to content

Desktop App Overview

The Gunsole desktop app is where your logs end up. It’s a native application built with Tauri (Rust backend, React frontend) that runs on macOS, Windows, and Linux.

  1. Receives logs — runs an HTTP server on localhost:17655
  2. Stores them — in a local SQLite database
  3. Displays them — in a real-time, virtualized log table
  4. Filters them — by level, bucket, tags, message search, time range
SDK (your app)
↓ POST /logs (gzip JSON)
HTTP Server (Axum, port 17655)
↓ async channel
Log Batcher (buffers per project)
↓ flush every 100ms or 50 logs
SQLite (local database)
↓ Tauri event
React UI (virtualized table)

The HTTP server accepts logs and returns 200 OK immediately. Logs are processed asynchronously — batched, stored in the database, and emitted to the frontend as events. This keeps ingestion fast even under high log volume.

  • Virtualized rendering — React Virtuoso handles 10,000+ log entries
  • Server-side filtering — all filtering happens in Rust via SQL, not in JavaScript
  • Indexed queries — timestamps, levels, buckets, and tags all have database indexes
  • Log batching — incoming logs are buffered and flushed in batches to reduce rendering churn
  • Gzip decompression — the server automatically handles compressed payloads

SQLite, stored locally. No external database, no server, no configuration.

The database contains tables for workspaces, projects, buckets, logs, tags, filters, and preferences. Migrations run automatically on startup.

See Installation for database file locations per OS.

Projects, buckets, and tags are all auto-created. The first time the app receives a log with a new projectId, it creates the project. First time it sees a new bucket name, it creates the bucket. First time it sees a new tag key-value pair, it indexes it.

You never need to configure anything before sending logs.