You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
:sidebar-position left|right command to move the filter sidebar to either side of the log panel. Persisted across sessions.
:line-numbers command to toggle the line number gutter.
Infer year from file metadata for timestamp formats without year e.g. syslog/journalctl.
Keep the selected line when filters change.
Fixed
Fixed mouse scroll in tail mode: scroll up pauses following, scroll down to the bottom resumes it.
Filter for timestamp for formats without year.
Parsing of unix epoch timestamp for syslog/journalctl.
Changed
Performance improvements on CLF parser
Theme, sidebar visibility, borders, wrap, and line numbers are now persisted to the database when changed at runtime via commands or the UI options menu (u). Previously only show_mode_bar was persisted.
Regex patterns with spaces (e.g. filter -r \d{3} \d+) are now accepted — words after the pattern flag are joined instead of being rejected as extra arguments.
Editing a filter from the filter manager no longer wraps the pattern in quotes.
Install logana 0.5.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pauloremoli/logana/releases/download/v0.5.1/logana-installer.sh | sh
Visual indication in the filter sidebar with different color when the filter mode is active.
Removed background color from selected line, colors and inherited from line.
Fixed
Empty stdin placeholder tab is now removed when files are opened via directory selection or :open.
Fix issue with single file being watched when multiple files were open.
Scroll to make the active tab name always visible.
Regex and literal include filters now correctly suppress lines that do not match them even when a date filter is also active.
Regex filter match counts are now correct when literal filters are also active. Previously evaluation of regex filters was being skipped for lines already matched by a lower-indexed literal filter, causing regex counts to be underreported.
Text filters now match against the full display text for formats where level field is not represented as text (syslog <PRI> priority codes, DLT subtype).
Install logana 0.4.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pauloremoli/logana/releases/download/v0.4.1/logana-installer.sh | sh
OTLP gRPC receiver: :otlp now defaults to gRPC on port 4317, matching the OTel SDK default export protocol. Use :otlp --http for the previous HTTP/JSON transport on port 4318. Custom ports still work: :otlp 4317, :otlp --http 4318.
OTLP HTTP/JSON receiver: use :otlp --http [port] (default 4318) to open a tab that accepts POST /v1/logs from any OpenTelemetry SDK. Logs are parsed by the existing OTLP parser and support all filtering features. Session state is persisted and restored across restarts.
Left/Right arrow keys now work as alternatives to h/l for horizontal scrolling in normal mode.
Embedded MCP (Model Context Protocol) server, controllable via :enable-mcp [--port N] and :disable-mcp commands. Exposes marked lines, and annotations as MCP resources.
--mcp [PORT] CLI flag to start the MCP server automatically on launch (port defaults to 9876).
Changed
CommonLogParser, JournalctlParser, and SyslogParser now use majority voting over the first 50 successfully parsed lines to select the format.
Format detection now uses exclusivity-weighted scoring: lines matched by multiple parsers contribute proportionally less weight (1/N where N is the number of matching parsers), so format-exclusive lines drive selection. Syslog files containing priority-prefixed lines (<PRI>...) are now correctly detected as syslog even when most lines are ambiguous plain BSD-timestamp format.
SyslogParser now recognises rsyslog's default file format (RSYSLOG_FileFormat): ISO 8601 timestamp with no <PRI> prefix. Files like /var/log/syslog written by modern rsyslog are now correctly detected as syslog instead of journalctl.
Plain BSD-timestamp lines (Oct 11 22:14:15 hostname tag: msg) now resolve to syslog over journalctl, as both formats use this timestamp style but it is more common in syslog output.
TabState filtering loops now use parse_timestamp instead of parse_line when only @date: filters are active.
TabState decomposed into focused sub-structs (ScrollState, FilterState, SearchState, CacheState, StreamState, DisplayConfig, InteractionState) in src/ui/tab_state/.
All popup UI surfaces extracted into ratatui Widget types in src/ui/widgets/ (ConfirmRestoreModal, ConfirmRestoreSessionModal, ConfirmOpenDirModal, CommentPopup, SelectFieldsPopup, DockerSelectPopup, DltSelectPopup, ValueColorsPopup, KeybindingsHelpPopup).
Popup widget tests moved to their respective widget modules; render_popups.rs deleted.
ModeBar extracted as a ratatui Widget type in src/ui/widgets/.
App::ui() decomposed into focused helper methods, each under 50 lines.
MCP server no longer exposes the logana://filtered resource (filtered lines can be very large).
Parser layer refactored
Field names unified, now it's always the same name regardless of source format.
Fixed
Scroll position is now correctly restored after session restore.
Eliminated a SIGBUS risk due usage of memory mapped files by swiching to pread solution.
Mechanism to detect log rotation and truncation making the application resilient to non-appending changes to the file.
OTLP parser now correctly sets the process color for service.name when it arrives as a top-level field (as produced by the OTLP HTTP receiver).
traceId, spanId, and telemetry.sdk.* fields are now hidden by default in the OTLP parser; they can be shown via :fields.
OTLP receiver now supports protobuf-encoded payloads (application/x-protobuf), the default format for most OTel SDKs. Previously protobuf requests were rejected with 415.
OTLP receiver now supports gzip-encoded request bodies (Content-Encoding: gzip), which many OTel SDKs send by default. Previously gzip payloads were silently discarded.
MCP server bind errors are now reported to the user instead of silently failing.
Normalize all timestamps to UTC format.
$ in normal mode now leaves 4 columns of padding between the last character and the right edge of the viewport.
Install logana 0.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pauloremoli/logana/releases/download/v0.4.0/logana-installer.sh | sh
Incremental search delivery — results are streamed in chunks of 5,000 lines so the first matches appear almost immediately on large files instead of waiting for the full scan to complete
Aho-Corasick acceleration for literal (non-regex) search patterns, matching the fast path already used by filters; regex patterns continue to use the regex engine
Fixed
Changing a filter's color (set-color) no longer triggers a full file rescan; only the render cache is invalidated so visible lines update instantly
Headless mode (--headless) no longer touches the real database before dispatching; it now exits early (before LogManager construction) so no saved session state — filters, marks, scroll position — from previous TUI runs can be inadvertently applied. Output is determined solely by the parameters given (-f, -i, -o, -t).
Headless mode now rejects directory arguments with a clear error message instead of failing with a raw I/O error.
Install logana 0.2.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pauloremoli/logana/releases/download/v0.2.1/logana-installer.sh | sh
Headless mode (--headless) — run the full filter pipeline without a TUI and write matching lines to stdout or a file via --output
Keybinding conflict warnings are now shown in the status bar on startup instead of being printed to stderr; the bar grows up to 10 lines and is dismissed on the first keypress
Tab-completion for :hide-field suggests all known field names; :show-field suggests currently hidden fields (falls back to all fields when none are hidden)
Fixed
Filtering with multiple literal include filters now performs a single Aho-Corasick scan per line instead of one scan per filter, eliminating O(N) slowdown on large files with N include patterns
Search highlighting in raw mode now computes match offsets against raw bytes instead of parsed text, fixing incorrect highlight positions
Viewport size is now reduced when the search or command bar is visible, preventing matches from being hidden behind the bar
Cursor no longer disappears in visual character mode
:hide-field <N> now correctly resolves the index against the currently visible (non-hidden) fields instead of all fields, so index 0 always refers to the first field shown on screen
:show-field now accepts field names only; numeric arguments are no longer misinterpreted as indices
Changed
Marked lines now have a different visual than warning lines.
Return to normal mode after UI commands.
Install logana 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/pauloremoli/logana/releases/download/v0.2.0/logana-installer.sh | sh