{"id":13857216,"url":"https://github.com/agateau/yokadi","last_synced_at":"2025-06-21T06:04:53.101Z","repository":{"id":404679,"uuid":"23262","full_name":"agateau/yokadi","owner":"agateau","description":"Command line oriented, sqlite powered, todo list","archived":false,"fork":false,"pushed_at":"2024-11-06T08:13:03.000Z","size":1946,"stargazers_count":134,"open_issues_count":4,"forks_count":19,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-27T15:06:58.268Z","etag":null,"topics":["commandline","gtd","python","sqlite","todo"],"latest_commit_sha":null,"homepage":"http://yokadi.github.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agateau.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"agateau","ko_fi":"agateau","liberapay":"agateau","custom":"https://agateau.com/support/"}},"created_at":"2008-06-07T19:24:12.000Z","updated_at":"2025-05-26T10:26:56.000Z","dependencies_parsed_at":"2024-11-04T19:24:08.145Z","dependency_job_id":"f3cd2278-f79a-444c-9687-1be16a6dbbf9","html_url":"https://github.com/agateau/yokadi","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/agateau/yokadi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agateau%2Fyokadi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agateau%2Fyokadi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agateau%2Fyokadi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agateau%2Fyokadi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agateau","download_url":"https://codeload.github.com/agateau/yokadi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agateau%2Fyokadi/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261073295,"owners_count":23105637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["commandline","gtd","python","sqlite","todo"],"created_at":"2024-08-05T03:01:30.286Z","updated_at":"2025-06-21T06:04:48.087Z","avatar_url":"https://github.com/agateau.png","language":"Python","funding_links":["https://github.com/sponsors/agateau","https://ko-fi.com/agateau","https://liberapay.com/agateau","https://agateau.com/support/"],"categories":["Python"],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/agateau/yokadi.png?branch=master)](https://travis-ci.org/agateau/yokadi)\n[![Coverage Status](https://coveralls.io/repos/agateau/yokadi/badge.png)](https://coveralls.io/r/agateau/yokadi)\n\n## What is it?\n\nYokadi is a command-line oriented, SQLite powered, TODO list tool.  It helps\nyou organize all the things you have to do and must not forget. It aims to be\nsimple, intuitive and very efficient.\n\nIn Yokadi you manage projects, which contain tasks. At the minimum, a task has\na title, but it can also have a description, a due date, an urgency or\nkeywords. Keywords can be any word that help you find and sort your tasks.\n\n## Dependencies\n\nYokadi should run on any Unix-like systems. There is also some support for\nWindows but it is not as tested.\n\nYokadi requires Python 3.4 or more and a few other modules, which you can install with:\n\n    pip install -r requirements.txt\n\nIt can also make use of other modules listed in extra-requirements.txt. You can\ninstall them with:\n\n    pip install -r extra-requirements.txt\n\nThese modules are needed for the Yokadi Daemon.\n\n## Quickstart\n\nHere is an example of a short Yokadi session:\n\nStart Yokadi:\n\n    ./bin/yokadi\n    Creating database\n    Added keyword '_severity'\n    Added keyword '_likelihood'\n    Added keyword '_bug'\n    Added keyword '_note'\n\nCreate your first task:\n\n    yokadi\u003e t_add birthday Buy food and drinks\n    Project 'birthday' does not exist, create it (y/n)? y\n    Added project 'birthday'\n    Added task 'Buy food and drinks' (id=1)\n\nAdd two other tasks, you can use _ to refer to last project used:\n\n    yokadi\u003e t_add _ Invite Bob\n    Added task 'Invite Bob' (id=2)\n    yokadi\u003e t_add _ Invite Wendy\n    Added task 'Invite Wendy' (id=3)\n\nList tasks for project \"birthday\":\n\n    yokadi\u003e t_list birthday\n                                             birthday\n    ID |Title                                                       |U  |S|Age    |Due date\n    --------------------------------------------------------------------------------------------------\n    1  |Buy food and drinks                                         |0  |N|1m     |\n    2  |Invite Bob                                                  |0  |N|0m     |\n    3  |Invite Wendy                                                |0  |N|0m     |\n\nOnce you have called Bob, you can mark task 2 as done:\n\n    yokadi\u003e t_mark_done 2\n    Task 'Invite Bob' marked as done\n\n    yokadi\u003e t_list birthday\n                                             birthday\n    ID |Title                                                       |U  |S|Age    |Due date\n    --------------------------------------------------------------------------------------------------\n    1  |Buy food and drinks                                         |0  |N|2m     |\n    3  |Invite Wendy                                                |0  |N|1m     |\n\nTask 2 has not disappeared, but `t_list` skips done tasks by default. To list\nall tasks use:\n\n    yokadi\u003e t_list birthday --all\n                                             birthday\n    ID |Title                                                       |U  |S|Age    |Due date\n    --------------------------------------------------------------------------------------------------\n    1  |Buy food and drinks                                         |0  |N|2m     |\n    2  |Invite Bob                                                  |0  |D|1m     |\n    3  |Invite Wendy                                                |0  |N|1m     |\n\nTo list only tasks marked as done today:\n\n    yokadi\u003e t_list birthday --done today\n                                             birthday\n    ID |Title                                                       |U  |S|Age    |Due date\n    --------------------------------------------------------------------------------------------------\n    2  |Invite Bob                                                  |0  |D|1m     |\n\nYou may want to attach your grocery list to task 1. This can be done with\n`t_describe`.\n\n    yokadi\u003e t_describe 1\n\nThis will start the editor specified in $EDITOR (or `vi` if not set) to enter\na longer text, attached to the task.\n\nYou can now display details of task 1:\n\n    yokadi\u003e t_show 1\n     Project: birthday\n       Title: Buy food and drinks\n          ID: 1\n     Created: 2009-01-09 08:57:33\n         Due: None\n      Status: new\n     Urgency: 0\n  Recurrence: None\n    Keywords:\n\n    - Orange juice\n    - Coke\n    - Beer\n    - Cookies\n    - Pizzas\n\nNote: `t_show` is not mandatory, just entering the task number will display its\ndetails.\n\n`t_list` indicates tasks which have a longer description with a `*` character:\n\n    yokadi\u003e t_list birthday\n                                             birthday\n    ID |Title                                                       |U  |S|Age    |Due date\n    --------------------------------------------------------------------------------------------------\n    1  |Buy food and drinks                                        *|0  |N|3m     |\n    3  |Invite Wendy                                                |0  |N|2m     |\n\nThere is much more, we only scratched the surface, but this should get you\nstarted. You can get a list of all commands by typing `help` and get the\ndetailed documentation of a command with `help \u003ccommand\u003e`.\n\n## Advanced stuff\n\n### Quick access to last task\n\nWhen you execute multiple commands on the same task, you can use `_` as a\nshortcut to the last task id. Assuming you created a task like this:\n\n    yokadi\u003e t_add home Buy chocolate\n    Added task 'Buy chocolate' (id=1069)\n\nThen the following commands are equivalents (until you work on another task):\n\n    yokadi\u003e t_edit 1069\n    yokadi\u003e t_edit _\n\n### Due dates\n\nYou can define due dates for your tasks with `t_due`. This can be done with a\nrelative or absolute date:\n\n    yokadi\u003e t_due 21 +3d\n    Due date for task 'Buy chocolate' set to Sat Jul 11 17:16:20 2009\n\n    yokadi\u003e t_due 21 23/07 10:30\n    Due date for task 'Buy chocolate' set to Thu Jul 23 10:30:00 2009\n\nDue dates are shown by `t_list`. Due date is colored according to time left. If\nyou want to be reminded when a task is due, you can use the Yokadi Daemon for\nthat. See below for details.\n\n### Periodic tasks\n\nIf you have periodic tasks, you can tell it to Yokadi with `t_recurs`:\n\n    yokadi\u003e t_recurs 1 weekly monday 21:30\n    yokadi\u003e t_recurs 1 monthly 3 11:00\n    yokadi\u003e t_recurs 1 monthly last saturday 11:00\n    yokadi\u003e t_recurs 1 yearly 23/2 14:00\n\nType `help t_recurs` to see all possible syntaxes.\n\n### Tasks range and magic __ keyword\n\n`t_apply` is a very powerful function but sometimes you have to use it on\nnumerous tasks.  First, you can use task range like this:\n\n    yokadi\u003e t_apply 1-3 t_urgency 10\n    Executing: t_urgency 1 10\n    Executing: t_urgency 2 10\n    Executing: t_urgency 3 10\n    yokadi\u003e\n\nBut sometimes tasks are not consecutive and you would like to use wonderful\n`t_list` options to select your tasks.  Here's the trick: each time you display\ntasks with `t_list`, Yokadi stores the id list in the magic keyword `__` that\nyou can give to `t_apply` like this:\n\n    yokadi\u003e t_list @keyword myProject\n    (...)\n    yokadi\u003e t_apply __ t_urgency 35\n\nOh, by the way, one Yokadi dev uses the following alias which is quite self\nexplanatory:\n\n    yokadi\u003e a_list\n    procrastinate =\u003e t_apply __ t_due +1d\n\n### Mass editing tasks\n\n`t_medit` lets you edit all tasks of a project at once by opening a text editor\nwith all the tasks and let you editing them, applying the changes when you\nquit.  If you are familiar with `git`, this is similar to the way the `git\nrebase --interactive` command works.\n\nFor example to edit all the tasks of the \"birthday\" project do the following:\n\n    yokadi\u003e t_medit birthday\n\nMake adjustments to the task list (the syntax is documented as comments in the\ntext opened in the editor), then save the file and quit to apply the changes.\n\nYokadi provides Vim syntax highlighting files to make mass edit more\nconvenient. You can find them in `editors/vim`. To install them, run the\nfollowing:\n\n    cd place/to/editors/vim\n    mkdir -p ~/.vim/ftdetect\n    mkdir -p ~/.vim/syntax\n    cp ftdetect/medit.vim ~/.vim/ftdetect\n    cp syntax/medit.vim ~/.vim/syntax\n\nIf you use another editor and can provide support for highlighting files, your\ncontribution is very welcome! Get in touch so that we can add your work to the\nnext version of Yokadi.\n\n## Integration\n\n### Database location\n\nBy default, Yokadi creates a database in `$HOME/.local/share/yokadi/yokadi.db`,\nbut you can specify an alternative directory with the `--datadir` option.\n\nA convenient way to start Yokadi is by creating an alias in your `.bashrc` file\nlike this:\n\n    alias y=yokadi\n\nThe single letter `y` will start Yokadi with your favorite database from\nwherever you are.\n\n### History location\n\nBy default, Yokadi will store input history in `$HOME/.cache/yokadi/history`.\nThis file stores commands used in Yokadi for future use and reference.\n\nIf you do now want to use the default history file location, you can define\nthe `YOKADI_HISTORY` environment variable to point to your history file:\n\n    export YOKADI_HISTORY=$HOME/.hist/yokadi_history\n\n### Yokadid, the Yokadid daemon\n\nIf you want to be automatically reminded of due tasks, you can use the Yokadi\ndaemon.\n\nThe Yokadi daemon can be launched via desktop autostart services. In most\ndesktop environments, you just need to create a symbolic link to yokadid (or a\nshell script that calls it) in `$HOME/.config/autostart/`:\n\n    ln -s `which yokadid` $HOME/.config/autostart/\n\n## Contact\n\nThe project is hosted on \u003chttp://yokadi.github.io\u003e.\n\nAll discussions happen on Yokadi mailing-list, hosted by our friends from the\nSequanux LUG. To join, visit\n\u003chttp://sequanux.org/cgi-bin/mailman/listinfo/ml-yokadi\u003e.\n\nYou can also find some of us on #yokadi, on the Freenode IRC network.\n\n## Authors\n\nYokadi has been brought to you by:\n\n- Aurélien Gâteau \u003cmail@agateau.com\u003e: Developer, founder\n- Sébastien Renard \u003csebastien.renard@digitalfox.org\u003e: Developer\n- Benjamin Port \u003cbenjamin.port@brobase.fr\u003e: Developer\n\nOther people contributed to Yokadi:\n\n- Olivier Hervieu \u003colivier.hervieu@wallix.com\u003e: first working setup.py release\n- Marc-Antoine Gouillart \u003cmarsu_pilami@msn.com\u003e: Windows port\n- Kartik Mistry \u003ckartik@debian.org\u003e: man pages\n- Jonas Christian Drewsen \u003cjdrewsen@gmail.com\u003e: quarterly recurrence feature\n\n\u003c!-- vim: set ts=4 sw=4 et: --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagateau%2Fyokadi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagateau%2Fyokadi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagateau%2Fyokadi/lists"}