Skip to content

yatto is a terminal-based CLI task manager that stores each task as a versioned JSON file. Sync, collaborate, and track your tasks using Git or Jujutsu, all from the command line.

License

Notifications You must be signed in to change notification settings

handlebargh/yatto

Repository files navigation

yatto

A Git-backed terminal task manager with full history, sync, and collaboration built in.

Go Report Card Go Version Release CI codecov

yatto is a terminal-first to-do application that stores each task as a plain JSON file and manages your task directory as a Git or Jujutsu repository.

Every change is versioned. Collaboration and sync come for free. Your tasks remain transparent, portable, and fully under your control.

yatto demo

Why yatto?

  • Versioned by default - every change is committed automatically
  • Uses standard VCS remotes - GitHub, GitLab, self-hosted, etc.
  • Plain files, no lock-in - inspect, edit, or script tasks with standard tools
  • Terminal-native - fast, keyboard-driven, and scriptable
  • Offline-first - works anywhere your VCS does

Features

  • TUI interface powered by Bubble Tea
  • Local file storage (one JSON file per task)
  • Git or Jujutsu integration:
    • full task history
    • safe backup
    • multi-machine sync
  • Automatic commit on every change (optional auto-push)
  • Project-based task organization
  • Task attributes:
    • due dates
    • labels
    • priority
    • author / assignee
  • Markdown support for task descriptions
  • Non-interactive output (yatto print) for scripting and dashboards
  • Simple theme and color customization

Requirements

You need to have at least one of the supported version control systems installed:

  • Git
  • Jujutsu (jj)

Installation

Go

To install, run the following Go command.

go install github.com/handlebargh/yatto@latest
AUR

If using yay, run the following command.

yay -S yatto

Or if using paru, run this command:

paru -S yatto
Homebrew

To install, run the following brew commands.

brew tap handlebargh/yatto
brew install yatto
Eget

To install, run the following eget commands.

eget handlebargh/yatto
Scoop

To install, run the following scoop commands.

scoop bucket add scoop-handlebargh https://github.com/handlebargh/scoop-handlebargh
scoop install scoop-handlebargh/yatto
Binaries and Linux packages

Take a look at the releases for prebuilt binaries and packages.

Verifying release binaries

  1. Install cosign

  2. Verify the signed checksum file

    cosign verify-blob \
      --bundle /path/to/checksums.txt.sig.bundle \
      --certificate-identity-regexp "https://github.com/handlebargh/yatto/.*" \
      --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
      /path/to/checksums.txt
  3. Check that the binaries match the signed checksums

    sha256sum --check --ignore-missing path/to/checksums.txt

Verifying release packages

  1. Download and import the public key:

    sudo rpm --import yatto_signing_pubkey.gpg      # For RPM
    gpg --import yatto_signing_pubkey.gpg           # For DEB
  2. Verify the package:

    rpm --checksig /path/to/yatto.rpm       # RPM
    dpkg-sig --verify /path/to/yatto.deb    # DEB
  3. Install only after the signature is valid:

    sudo rpm -i /path/to/yatto.rpm       # RPM
    
    sudo dpkg -i /path/to/yatto.deb      # Deb
    or
    sudo apt install /path/to/yatto.deb  # DEB

Configuration

When you start the application for the first time, it will ask you to set up a configuration file located at: ${HOME}/.config/yatto/config.toml

See examples/config.toml as a reference with all available configuration values.

Tip

Alternatively, a config file may also be supplied by adding the --config flag:

yatto --config $PATH_TO_CONFIG_FILE

Colors and themes

User interface colors are customizable. Any color value supported by lipgloss will be accepted.

Every color accepts a light and a dark value for either light or dark terminal themes.

If you feel like sharing your theme, just post it in an issue, and I'll be happy to add it to the repository.

You can also choose from one of the predefined form themes. The following config values are supported:

  • Charm
  • Dracula
  • Catppuccin
  • Base16
  • Base

Set a theme like this:

[colors.form]
theme = 'Catppuccin'

Task Storage

At first startup, the application will also ask whether to create a task storage directory. By default, tasks are stored in:

${HOME}/.yatto

Each task is represented as a simple JSON file, and projects are stored as directories containing their related tasks.

The task storage location can be customized in the config file.

VCS remotes

To set up a remote

  1. Create a new repository on the Git host of your choice. The repository must be empty, meaning that nothing must be committed at creation (uncheck README, .gitignore and license files).

From scratch

  1. Run yatto and enter your SSH URL in the config dialog.

With existing storage directory

  1. Push the current state manually to the remote.

  2. Enable remote in the config.

    Git

    [git.remote]
    enable = true
    url = <GIT_REMOTE_URL>

    Jujutsu

    [jj.remote]
    enable = true
    url = <GIT_REMOTE_URL>

Non-interactive mode

You can print a static list of your tasks to standard output:

yatto print

# Limit to any project you want
# Get the IDs from the directory names in your storage directory
# Run this command to print all project's metadata files:
# find ${HOME}/.yatto -type f -name "project.json" -exec cat {} +
yatto print --projects "2023255a-1749-4f6c-9877-0c73ab42e5ab b5811d17-dbc7-4556-886b-92047a27e0f6"

# Filter labels with regular expression
# The next command will only show tasks that have a label "frontend"
yatto print --regex frontend

If you want to print this list whenever you run an interactive shell, open your ~/.bashrc (or ~/.zshrc) and add the following snippet:

# Print yatto task list only in interactive shells
case $- in
    *i*)
        if command -v yatto >/dev/null 2>&1; then
            yatto print
        fi
        ;;
esac

Tip

Add the --pull flag to pull from a configured remote before printing.

License

MIT - see LICENSE

Contributing

Contributions, feedback, and ideas are welcome! See how to contribute to this repository.

Acknowledgements

Huge thanks to the Charm team and their contributors for their incredible open-source libraries, which power much of this project.

About

yatto is a terminal-based CLI task manager that stores each task as a versioned JSON file. Sync, collaborate, and track your tasks using Git or Jujutsu, all from the command line.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Contributors 5