Running in production · Edition No. 22 · 16 Sep 2026

tstack/lnav

A log reader that merges files into one timeline by their timestamps and lets you query them with SQL.

← Running in productionRead the whole edition →

10.6k stars · BSD-2-Clause · v0.14.1 (2026-09-05), read from /releases/latest; the date showed no year and falls in the past, so 2026 · Track this in Scout

A log reader that merges files into one timeline by their timestamps and lets you query them with SQL.

Repo detailsthe review · specs · pros & cons · install

What it is

A terminal program that opens log files and directories of log files. It detects the format of the common ones on its own, including nginx, Apache, syslog and JSON lines, and builds an in-memory SQLite table out of what it parses. SQL is the ordinary language for asking questions of a database, and pressing ; inside lnav gives you a prompt where you can write it against your own log lines.What it is good for. Anyone who has ever opened a log file at midnight. The problem it removes is the reading. Instead of scrolling for the error, you filter to it; instead of counting by eye, you ask for a count. Compressed files are opened without unpacking them first, which matters when the thing you need is in last week's rotated log. For Grasppy this is the tool that answers "which requests were slow yesterday" straight from the nginx log, without adding anything to the server. It pairs with GoAccess (Edition 8 #4), which draws the traffic report, and with Dozzle (Edition 18 #2), which shows the live output of a container.

Stars10.6k
LicenceBSD-2-Clause
Latestv0.14.1 (2026-09-05), read from /releases/latest; the date showed no year and falls in the past, so 2026
Good
  • It works on files you already have, with nothing to set up and nothing left running afterwards.
  • It merges several files into one timeline by their timestamps, which is exactly what you want when a request crosses two services.
  • The SQL prompt turns questions that were guesswork into answers with numbers.
Watch for
  • It is a terminal program. There is no web page and no way to share a view with somebody else.
  • A log format it does not recognise is shown as plain text until you write a small format file for it, and that takes an hour the first time.
  • It reads what is on the machine you run it on. It is not a place to collect logs from several servers.
Similar repositories
Install
# Debian or Ubuntu:
sudo apt install lnav
# macOS:
brew install lnav
# Or take one static binary from:
#   https://github.com/tstack/lnav/releases/latest
# Read one file:
lnav /var/log/nginx/access.log
# Read every log in a folder, compressed ones included:
lnav /var/log/nginx/
# Inside lnav, press ';' and then ask a question:
#   ;SELECT c_ip, count(*) AS hits FROM access_log
#    GROUP BY c_ip ORDER BY hits DESC LIMIT 10
Screenshots
tstack/lnav: GitHub preview cardtstack/lnav: Screenshot 1

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.