You could spin up Elasticsearch, Logstash, and Kibana. Configure a Loki cluster. Pay Datadog per gigabyte. Set up Fluentd with seventeen plugins.
Or: run one binary. Ship logs. Debug with a live workspace.
GLog is a local-first logging and debugging workspace that runs on SQLite and ships as a single binary. It gives small teams and coding agents a live dashboard, structured log search, rollups, repeated-pattern grouping, exports, and an inbox for notes, tasks, bugs, questions, and handoffs.
# Install
curl -fsSL https://raw.githubusercontent.com/dotcommander/glog/main/scripts/install.sh | sh
# Verify the install and see exact next steps
glog doctor
# Start the server (database creates itself)
glog serve
# In another terminal: register a host, get an API key
glog host register --server http://localhost:6016 --name my-server
# Writes config to ./glog.json — no manual setup
# Ship a log
glog log "Deployment complete" --level info --field version=2.1.0
# Pipe anything
tail -f /var/log/syslog | glog log --stream --level infoServer opens at http://localhost:6016. Dashboard and API, same port.
Binary (recommended):
curl -fsSL https://raw.githubusercontent.com/dotcommander/glog/main/scripts/install.sh | sh
glog doctorThe installer downloads the right macOS/Linux archive, installs glog into /usr/local/bin or ~/.local/bin, warns if that directory is not on PATH, and prints the first server/register/log commands.
You can also grab archives manually from the releases page. macOS, Linux, and Windows builds are published for amd64 and arm64.
Go install:
go install github.com/dotcommander/glog/cmd/glog@latestFrom source:
git clone https://github.com/dotcommander/glog && cd glog
make # Builds frontend + backend, starts on :6016
make install # Puts glog in ~/go/binglog serve # Start server (:6016 by default)
glog serve --addr :8080 --db logs.db # Custom port and database path
glog serve --durability strict # SQLite sync profile: strict, balanced, fast
glog host register --name prod-api # Register host, saves config to ./glog.json
glog host list # Show registered hosts
glog log "Something happened" # Send a log (level: info)
glog log --level error "Disk full" # Explicit level
glog log --field region=us-east-1 "OK" # Attach structured fields
journalctl -f | glog log --stream # Stream stdin, batched at 100 lines
cat app.log | glog log --level warn # Pipe a file
glog migrate --db glog.db # Run database migrations
glog inspect db --db glog.db --json # Offline database diagnostics
glog doctor # Check PATH, config, server, and next steps
glog inbox add "Follow up on flaky test" # Leave an agent note/task
glog inbox list # Show open agent inbox items
glog inbox done 123 # Complete an inbox item
glog version # Print version and build timeConfiguration resolves in order: flags, then GLOG_SERVER/GLOG_API_KEY env vars, then ./glog.json.
Use GLog as your local debugging memory when a task spans commands, browser checks, or multiple agent sessions.
# 1. Find or start the local server.
glog doctor
glog serve
# 2. Register the current workspace once, then reuse ./glog.json.
glog host register --server http://localhost:6016 --name "$(basename "$PWD")"
# 3. Send useful evidence while debugging.
glog log --level info "starting frontend smoke test" \
--field repo="$(basename "$PWD")" \
--field command="bun run build"
# 4. Leave durable follow-up work in the agent inbox.
glog inbox add "Recheck SSE reconnect after hub change" \
--kind task \
--priority normal \
--repo "$(basename "$PWD")" \
--session "$USER-$(date +%Y%m%d-%H%M%S)" \
--tag sse \
--body "Evidence belongs in logs. This item is the next action."
# 5. Before finishing, review open work and close completed items.
glog inbox list --status open --repo "$(basename "$PWD")"
glog inbox done 123Agent rules of thumb:
- Put runtime evidence, command output summaries, errors, and browser observations in logs.
- Put decisions, blocked questions, next tasks, bugs, and handoffs in the inbox.
- Include
repo,session, and focused tags so future agents can filter quickly. - Link the exact error text, fingerprint, or log ID in the inbox body when a task depends on evidence.
- Mark inbox items done when the task is handled; leave blocked questions open with
--kind question --priority high.
Full reference: Agent inbox.
| Method | Path | Auth | |
|---|---|---|---|
| POST | /api/v1/hosts |
- | Register host, returns API key |
| GET | /api/v1/hosts |
- | List all hosts |
| GET | /api/v1/hosts/{id} |
- | Get host details |
| GET | /api/v1/hosts/{id}/stats |
- | Host log statistics |
| Method | Path | Auth | |
|---|---|---|---|
| POST | /api/v1/logs |
Bearer | Create log entry |
| POST | /api/v1/logs/bulk |
Bearer | Bulk create (up to 1000) |
| GET | /api/v1/logs |
- | Query with filters |
| GET | /api/v1/logs/{id} |
- | Get single log |
| GET | /api/v1/stats/logs |
- | Hourly log count buckets |
| GET | /api/v1/stats/fingerprints |
- | Hourly fingerprint buckets |
| Method | Path | Auth | |
|---|---|---|---|
| GET | /api/v1/inbox |
- | List notes/tasks/questions/handoffs |
| POST | /api/v1/inbox |
- | Create inbox item |
| GET | /api/v1/inbox/{id} |
- | Get inbox item |
| PATCH | /api/v1/inbox/{id} |
- | Update inbox item |
| DELETE | /api/v1/inbox/{id} |
- | Delete inbox item |
| POST | /api/v1/inbox/{id}/done |
- | Mark inbox item done |
| Method | Path | Auth | |
|---|---|---|---|
| GET | /api/v1/events |
- | SSE live stream |
| GET | /api/v1/export/{json,csv,ndjson} |
Bearer | Export logs |
| GET | /health |
- | Health check |
Auth means Authorization: Bearer glog_v1_<key> — the key you get from host register.
# Create a log via curl
curl -X POST http://localhost:6016/api/v1/logs \
-H "Authorization: Bearer glog_v1_<key>" \
-H "Content-Type: application/json" \
-d '{"level":"error","message":"Payment failed","fields":{"order_id":"abc123"}}'
# Stream live events
curl -N http://localhost:6016/api/v1/eventsGo backend. Svelte 5 frontend. SQLite in WAL mode. Everything runs from one binary.
┌─────────────────────────────────────────────────┐
│ CLI (cobra) Browser (Svelte 5) │
│ glog log/host/serve localhost:6016 │
└──────────┬────────────────────┬─────────────────┘
│ │
┌─────▼────────────────────▼─────┐
│ HTTP / SSE (chi/v5) │
│ handlers → repos (no service │
│ layer, no ceremony) │
└──────────────┬─────────────────┘
│
┌─────────▼─────────┐
│ SQLite (WAL) │
│ single file │
│ embedded migrations │
└───────────────────┘
Handlers call repositories directly. The domain layer defines entities and interfaces — no infrastructure imports. Swapping SQLite for PostgreSQL means writing new repository implementations. Nothing else changes.
cmd/glog/ CLI and server entry point
internal/
domain/ Entities, repository interfaces, pattern matching
infrastructure/ HTTP handlers, SQLite repos, SSE hub
web/ Svelte 5 frontend (built into web/build/)
Small tools should stay understandable. Your logs belong on your hardware. The database is a single file you can cp to back up. The server is a single binary you can scp to deploy.
GLog is intentionally modest infrastructure: start the binary, point your apps or coding agents at it, inspect the evidence, and leave durable follow-up work in the inbox when the debugging thread needs to continue.
| Tool | What you get | What it costs |
|---|---|---|
| ELK Stack | Full-text search, Kibana | JVM heap tuning, three services, YAML therapy |
| Loki + Grafana | Label-based queries | Promtail sidecar, chunk storage, LogQL |
| Datadog / Splunk | Everything, managed | Per-GB pricing, vendor lock-in |
| Papertrail | Hosted tailing, simple search | Monthly bill, data leaves your network |
| GLog | Live dashboard, rollups, exports, agent inbox | One binary, SQLite, local-first |
GLog is for teams and coding agents that need operational evidence without a logging platform project. If you need petabyte-scale search across a fleet of thousands, use the big tools. If you want a local, inspectable place to capture logs, spot patterns, and hand off debugging state, this is the one.
- Go integration — embed glog in your Go services
- Getting started — first install, first server, first log
- Deployment — launchd, Docker, systemd, nginx
- SSE events — real-time event format
- Agent inbox — notes, tasks, questions, and handoffs for coding agents
- Architecture — design decisions
- Invariants — behavior future changes must preserve
- Contributing — commit format, test requirements
MIT. Because logs shouldn't require permission.

