Manual WakaTime tracker — send heartbeats with a live TUI
Project description
manualwakatime
Manual WakaTime tracker with a live terminal UI.
Sends heartbeats every 60 seconds while you work — no editor plugin required.
Works with the official WakaTime API and compatible backends like Hackatime.
┌──────────────────────────────────────────────┐
│ Tracking │
│ │
│ Project: my-awesome-project │
│ Elapsed: 00:12:35 │
│ Heartbeats: 12 │
│ Last beat: 23s ago │
│ Status: ● Running │
│ │
├──────────────────────────────────────────────┤
│ Press q or Ctrl+C to stop │
└──────────────────────────────────────────────┘
Why?
Sometimes you aren't writing code in an editor. Maybe you're:
- Reviewing PRs in a browser
- Designing in Figma
- Writing docs in Notion
- Pair programming over a call
manualwakatime lets you track any activity as a WakaTime project with a single command. Fire and forget.
Install
pip install manualwakatime
Requires Python 3.8+.
Quick start
mwt start my-project
A fullscreen TUI opens. Heartbeats are sent every 60 seconds. Press q or Ctrl+C when you're done, and a summary prints:
Stopped Tracked 01:23:45 83 heartbeat(s) sent.
No project name? Run mwt start — it shows your recent projects and lets you pick one by number or type a new name.
Commands
mwt start <project> Start tracking a project
mwt start Pick from recent projects interactively
mwt projects List all tracked projects
mwt config Show API key / URL status
mwt --help Show help
Configuration
API credentials are read from (highest priority first):
| Source | Variable |
|---|---|
| Environment | WAKATIME_API_KEY |
| Environment | WAKATIME_API_URL |
| WakaTime config | ~/.wakatime.cfg → api_key |
| WakaTime config | ~/.wakatime.cfg → api_url |
If no api_url is set, it defaults to https://api.wakatime.com/api/v1.
Example ~/.wakatime.cfg
[settings]
api_key = waka_your_api_key_here
api_url = https://api.wakatime.com/api/v1
Get your API key at wakatime.com/settings/api-key.
How it works
- On startup,
mwtreads your API key and URL from config or environment. - A background thread sends a heartbeat every 60 seconds.
- The TUI refreshes 8 times per second, showing elapsed time, heartbeat count, and status.
- Press
qorCtrl+Cto stop cleanly — the alternate screen restores your terminal.
Project history is saved locally to %APPDATA%/mwt/projects.json (Windows) or ~/.config/mwt/projects.json (Linux/macOS).
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file manualwakatimetracker-0.2.0.tar.gz.
File metadata
- Download URL: manualwakatimetracker-0.2.0.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fdee63bd726a35c88fabafb951423acbec8d9b89bd5a7197546e2772ff17765
|
|
| MD5 |
0101c68ddb2cb067e39dd0490ca7baf1
|
|
| BLAKE2b-256 |
cc0884710aa9e34c2160ec7208976db532b4c0faea0404e7fc2a099289328966
|
File details
Details for the file manualwakatimetracker-0.2.0-py3-none-any.whl.
File metadata
- Download URL: manualwakatimetracker-0.2.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d987b03d456a0884fe6db7931825d23e8c2ec58d229d31946b07a6d086df544c
|
|
| MD5 |
3c21a53902ebb70275944acab0c085dc
|
|
| BLAKE2b-256 |
a626eca61723c2604eb750a06d0e871699b5f43da8a7059db53dcf8106632674
|