Skip to main content

Tiny tasks and time tracker

Project description

ttx — Tiny Tasks + Time Tracker

Release PyPI version PyPI downloads License: MIT

Author: Martin Dahl


tt is a lightweight, terminal-first task & time tracking tool with both a CLI and an interactive TUI.
It’s designed for speed, simplicity, and scriptability — with sensible defaults and flexible time parsing.


✨ Features

  • Tasks: add, list, complete, archive.
  • Time logs:
    • Start/stop timers
    • Manual entries (--start/--end, --minutes, --ago)
    • Flexible parsing (09:00, :30, 1h15, today, yesterday, now)
    • Strict ISO mode (optional)
  • Reports & exports:
    • Summaries by task, tag, or day
    • CSV and Markdown export
  • Interactive TUI (powered by Textual):
    • Task + log views
    • Filter indicator bar
    • Entry marking, bulk actions, sorting
    • Persisted UI state
  • Configurable:
    • XDG-compliant config (~/.config/ttx/config.yml)
    • Rounding rules
    • Confirmation prompts for destructive ops
  • SQLite backend:
    • WAL mode enabled
    • Auto-created indexes
  • Developer-friendly:
    • Semantic-release CI (auto changelog + versioning)
    • Conventional Commits
    • PyPI-ready packaging

📦 Installation

From GitHub (editable dev install)

git clone https://github.com/martindahlswe/ttx-clix-cli.git
cd ttx-cli
pip install -e .

Now you can run:

ttx --help

From GitHub directly (pip)

pip install "git+https://github.com/martindahlswe/ttx-clix-cli.git@main#egg=ttx-cli"

From PyPI (once published)

pip install ttx-cli

🚀 Usage

CLI examples

# Initialize DB
ttx init

# Add a task and list tasks
ttx task add "Finances"
ttx task ls

# Start and stop a timer
ttx start 1
ttx stop

# Add a manual log
ttx log add 1 --start "09:00" --end "10:15"
ttx log add 1 --minutes 30
ttx log add 1 --ago 1h15

# Show logs
ttx log ls --all --week

# Generate a report
ttx report --group day --since week

# Open TUI
ttx tui

TUI keybindings

  • ↑ / ↓ / Tab — navigate
  • Enter — open details
  • M — mark entry
  • D — bulk delete marked
  • + / - — adjust minutes
  • ? — help overlay
  • T — toggle theme

⚙️ Configuration

Config file lives at:

  • Linux/macOS: ~/.config/ttx/config.yml

Example:

rounding:
  minutes: 15
input:
  strict_iso: false
confirmations:
  bulk_delete: true

🛠 Development

Run tests

pytest

Commit conventions

We use Conventional Commits.
Examples:

feat(cli): add ttx examples command
fix(tui): guard _save_state when widgets are unmounted
feat!: drop pomodoro feature (breaking)

Release flow

  • Merge to main with proper commit messages
  • semantic-release bumps version, updates changelog, creates GitHub Release

📄 License

MIT © Martin Dahl


📌 Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ttx_cli-1.0.5.tar.gz (31.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ttx_cli-1.0.5-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

Details for the file ttx_cli-1.0.5.tar.gz.

File metadata

  • Download URL: ttx_cli-1.0.5.tar.gz
  • Upload date:
  • Size: 31.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ttx_cli-1.0.5.tar.gz
Algorithm Hash digest
SHA256 df47eefc99acb07f4f2d3820707627e9d3374881fa3f3164395bc4ca904a85c2
MD5 11454a709a446166eebb1944422bf330
BLAKE2b-256 c4a6481da38737c0cdc657465693e59aea75a9203d07b9787503913106997c5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ttx_cli-1.0.5.tar.gz:

Publisher: release.yml on martindahlswe/ttx-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ttx_cli-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: ttx_cli-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 35.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ttx_cli-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 57ef9b2e2b47a56e326b277ec76d6fadc7be38965aea518c83eb305053d6501a
MD5 e02c7c90159af2bb8575a28630ba4edd
BLAKE2b-256 acdfb83f2ebd1902a59509324475f00b0d37bca7b4243d54d728369d86d897ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for ttx_cli-1.0.5-py3-none-any.whl:

Publisher: release.yml on martindahlswe/ttx-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page