Terminal screen-time tracker for Linux.
cargo install daylog-tui --locked
daylogDaylog tells you where your time on this computer goes — which apps, which categories, which hours of the day. Today, this week, this month. It reads a local activity log and shows the breakdown in your terminal. No cloud, no account, no GUI to install.
I built it because every screen-time tool I tried either wanted me to send data to a server, or didn't run on a tiling window manager.
yay -S daylog-bin # or: paru -S daylog-bincurl -L https://github.com/Manas-Kenge/Daylog/releases/latest/download/daylog-x86_64-unknown-linux-gnu.tar.gz | tar -xz
./daylogMove it onto $PATH (e.g. ~/.local/bin/daylog) to keep it around.
Published to crates.io as daylog-tui; the executable is daylog:
cargo install daylog-tui --lockedRequires a Rust toolchain (rustup default stable) and a C toolchain — rusqlite builds SQLite from source. On Debian/Ubuntu: apt install build-essential. On Arch/Omarchy: pacman -S base-devel. On Fedora: dnf install gcc.
On first launch, daylog detects whether a local activity tracker is running. If not, it offers to install one (a single Y/N prompt). The installer is fully userspace — no sudo, no system packages.
daylog # open the dashboard (prompts for tracker install on first run)
daylog --setup # re-run the tracker installer
daylog --uninstall-tracking # stop and remove the bundled tracker (keeps your data)
daylog --help # full usage
daylog --version # print versiondaylog --json today prints today's KPIs as a single JSON object to stdout. Safe to poll on a short interval; exits 0 even when there's no data yet.
{
"as_of": "2026-05-17T11:45:00+05:30",
"today": {
"total_active": "PT4H32M",
"top_app": { "name": "kitty", "duration": "PT2H10M" },
"top_category": { "name": "Work > Programming", "duration": "PT3H5M" },
"hours": [0, 0, 0, 0, 0, 0, 0, 0, 12, 47, 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
}as_of is RFC 3339 with local timezone. total_active is the sum of non-AFK time today, as an ISO-8601 duration. top_app and top_category are the highest-duration entries; both are null when there's no activity yet. hours is 24 ints — minutes of active time per hour, indexed hours[0] = 00:00–00:59 local time.
"custom/daylog": {
"exec": "daylog --json today | jq -r '.today.total_active'",
"interval": 30
}[daylog]
command=daylog --json today | jq -r '.today.total_active'
interval=30
Custom category rules live at ~/.config/daylog/categories.json. Daylog ships with sensible defaults — edit only if you want different buckets.
x86_64 Linux. Tested on Ubuntu, Debian, Fedora, Arch (incl. Omarchy / EndeavourOS / CachyOS), openSUSE, and derivatives. The tracker uses systemd-user units when available and falls back to XDG-autostart on non-systemd distros (Void, Artix, Devuan).
Display servers: X11, GNOME-Wayland (auto-installs the focused-window-dbus shell extension; logout/login once after install), KDE-Wayland, and wlroots compositors (Hyprland, Sway, river, …).
aarch64 and non-Linux platforms aren't supported in the current release.
git clone https://github.com/Manas-Kenge/Daylog
cd Daylog
cargo build --release -p daylog-tui
./target/release/daylogSingle crate, library + binary. daylog-tui on crates.io produces a daylog executable, with the data layer in daylog_tui::data and the TUI on top.
MIT — see LICENSE.
Daylog downloads aw-server-rust and aw-awatcher from the ActivityWatch project (MPL-2.0) on first launch. Full attribution lives in THIRD-PARTY-NOTICES.md.
