A fast TUI for journalctl — pick a unit, scroll the logs.
journalctl is powerful but pages of text are awkward to navigate, and remembering -u <unit> for every service gets old fast. JournalView is a lightweight terminal UI written in Rust on top of Ratatui: it lists your systemd service units in a side panel, lets you pick one with the keyboard, and shows that unit's journal in a scrollable pane next to it. If no unit is selected it falls back to journalctl --since=yesterday. No daemon, no config — just a binary that shells out to journalctl and systemctl.
.service unit with Enter and the log pane refreshes with journalctl -u <unit>.Tab cycles panes, arrow keys scroll vertically and horizontally inside each pane.journalctl and systemctl are on $PATH.TODO/WIP: typing in the search pane is captured but does not yet filter the log view. Tracked in ROADMAP.md.Cells marked
TODOneed confirmation against current upstream behavior — see issue tracker.
| Capability | JournalView | journalctl |
lnav |
lazyjournal |
|---|---|---|---|---|
| Interactive TUI | Yes | No (pager only) | Yes | Yes |
| Reads systemd journal | Yes (shells out) | Yes (native) | TODO | TODO |
| Built-in unit picker | Yes | No | TODO | TODO |
| Live tail / follow | No | Yes (-f) |
TODO | TODO |
| Regex search inside the TUI | No (WIP) | Yes (-g) |
TODO | TODO |
| Reads arbitrary log files | No | No | TODO | TODO |
| Single static binary | Yes (Rust) | n/a (ships with systemd) | TODO | TODO |
curl -sL https://github.com/codervijo/journalview/raw/main/install.sh | bash
This installs to ~/.local/bin/journalview. Make sure ~/.local/bin is on your $PATH.
cargo install journalview
Ensure Rust is installed (see rustup.rs), then:
cargo install --git https://github.com/codervijo/journalview.git journalview
JournalView shells out to journalctl and systemctl, so it expects a Linux host with systemd. It does not need root, but it can only show journal entries the current user is allowed to read.
Launch:
journalview
The UI opens with the Logs pane focused, showing journalctl --since=yesterday. Tab cycles between Logs → Selector → Search → Logs. In the Selector pane, move the cursor with Up/Down and press Enter to filter the log pane by that service unit.
| Key | Pane | Action |
|---|---|---|
Tab |
any | Cycle to the next pane |
q / Q |
any | Quit |
Up / Down |
Logs, Selector | Scroll vertically |
Left / Right |
Logs, Selector | Scroll horizontally |
Enter |
Selector | Filter the log pane by the highlighted service unit |
Up / Down |
Selector | Also clears the active unit filter |
| any character | Search | Append to search buffer (filtering not yet wired up — see ROADMAP) |
Backspace |
Search | Delete last character from the buffer |
Enter / Esc |
Search | Leave the Search pane |
Contributions are very welcome. See CONTRIBUTING.md for dev setup, the test loop, and the PR process, and have a look at issues tagged good first issue for a starting point.
This project is licensed under the MIT License.
Thanks to the following projects for inspiration: - Ratatui - Lazyjournal
Inspired by the functionality of journalctl and enhanced by the capabilities of Rust for high-performance, terminal-based tools.
$ claude mcp add journalview \
-- python -m otcore.mcp_server <graph>