{"id":37078928,"url":"https://github.com/lyz-code/pydo","last_synced_at":"2026-01-14T09:33:30.367Z","repository":{"id":39617669,"uuid":"237477405","full_name":"lyz-code/pydo","owner":"lyz-code","description":"Command line task manager built with Python and SQLite.","archived":true,"fork":false,"pushed_at":"2023-03-18T11:43:34.000Z","size":1938,"stargazers_count":21,"open_issues_count":40,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-29T05:24:22.021Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://lyz-code.github.io/pydo","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/lyz-code.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null}},"created_at":"2020-01-31T17:07:43.000Z","updated_at":"2025-03-05T20:33:59.000Z","dependencies_parsed_at":"2023-02-01T04:01:11.953Z","dependency_job_id":null,"html_url":"https://github.com/lyz-code/pydo","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lyz-code/pydo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyz-code%2Fpydo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyz-code%2Fpydo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyz-code%2Fpydo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyz-code%2Fpydo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lyz-code","download_url":"https://codeload.github.com/lyz-code/pydo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyz-code%2Fpydo/sbom","scorecard":{"id":607679,"data":{"date":"2025-08-11","repo":{"name":"github.com/lyz-code/pydo","commit":"d974eafe8db4adb6dbb1e47d273b7cbbd24dbd7b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Info: Found linked content: .github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: .github/SECURITY.md:1","Info: Found text in security policy: .github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 1/11 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Warn: no topLevel permission defined: .github/workflows/install.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Warn: no topLevel permission defined: .github/workflows/update.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/build.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/install.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/install.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/install.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/install.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/update.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/update.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/update.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/update.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/lyz-code/pydo/update.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/build.yml:48","Warn: pipCommand not pinned by hash: .github/workflows/install.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:55","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:70","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:39","Warn: pipCommand not pinned by hash: .github/workflows/update.yml:21","Info:   0 out of  12 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of   7 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"40 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-230 / GHSA-248v-346w-9cwc","Warn: Project is vulnerable to: PYSEC-2022-42986 / GHSA-43fp-rhv2-5gv8","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: PYSEC-2024-4 / GHSA-2mqj-m65w-jghx","Warn: Project is vulnerable to: PYSEC-2023-165 / GHSA-cwvm-v4w8-q58c","Warn: Project is vulnerable to: PYSEC-2022-42992 / GHSA-hcpj-qp55-gfph","Warn: Project is vulnerable to: PYSEC-2023-137 / GHSA-pr76-5cm5-w9cj","Warn: Project is vulnerable to: PYSEC-2023-161 / GHSA-wfm5-v35h-vwf4","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: GHSA-55x5-fj6c-h6m8","Warn: Project is vulnerable to: PYSEC-2022-230 / GHSA-wrxv-2j5q-m38w","Warn: Project is vulnerable to: PYSEC-2021-878 / GHSA-qh9q-34h6-hcv9","Warn: Project is vulnerable to: PYSEC-2023-117 / GHSA-mrwq-x4v8-fh7p","Warn: Project is vulnerable to: GHSA-jh85-wwv9-24hv","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-cx63-2mw6-8hw5","Warn: Project is vulnerable to: PYSEC-2022-43012 / GHSA-r9hx-vwmv-q579","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2022-43017 / GHSA-qwmp-2cf2-g9g6","Warn: Project is vulnerable to: GHSA-jfmj-5v4g-7637","Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6","Warn: Project is vulnerable to: PYSEC-2022-301 / GHSA-8fg9-p83m-x5pq","Warn: Project is vulnerable to: PYSEC-2023-228 / GHSA-mq26-g339-26xf","Warn: Project is vulnerable to: PYSEC-2022-42969","Warn: Project is vulnerable to: PYSEC-2024-187 / GHSA-rqc4-2hc7-8c8v","Warn: Project is vulnerable to: GHSA-mr82-8j83-vxmv","Warn: Project is vulnerable to: GHSA-v9hf-5j83-6xpp","Warn: Project is vulnerable to: GHSA-2m57-hf25-phgg","Warn: Project is vulnerable to: PYSEC-2023-87 / GHSA-rrm6-wvj7-cwh2"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T01:57:44.005Z","repository_id":39617669,"created_at":"2025-08-21T01:57:44.005Z","updated_at":"2025-08-21T01:57:44.005Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28416103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T08:38:59.149Z","status":"ssl_error","status_checked_at":"2026-01-14T08:38:43.588Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-01-14T09:33:29.545Z","updated_at":"2026-01-14T09:33:30.361Z","avatar_url":"https://github.com/lyz-code.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Actions Status](https://github.com/lyz-code/pydo/workflows/Tests/badge.svg)](https://github.com/lyz-code/pydo/actions)\n[![Actions Status](https://github.com/lyz-code/pydo/workflows/Build/badge.svg)](https://github.com/lyz-code/pydo/actions)\n[![Coverage Status](https://coveralls.io/repos/github/lyz-code/pydo/badge.svg?branch=master)](https://coveralls.io/github/lyz-code/pydo?branch=master)\n\nI'm archiving the repo as I'm currently going to use Orgmode instead\n\n# Pydo\n\n`pydo` is a free software command line task manager built in\n[Python](https://en.wikipedia.org/wiki/Python_%28programming_language%29).\n\n# Why another CLI Task Manager?\n\n[Taskwarrior](https://taskwarrior.org/) has been the gold standard for CLI task\nmanagers so far. However, It has the following inconveniences:\n\n* It uses a plaintext file as data storage.\n* It stores the data in a non standard way in different files.\n* It's written in C, which I don't speak.\n* It's development has come to [code maintenance\n    only](https://github.com/GothenburgBitFactory/taskwarrior/graphs/code-frequency).\n* There are many issues with how it handles\n    [recurrence](https://taskwarrior.org/docs/design/recurrence.html).\n* It doesn't have [friendly task\n    identifiers](https://lyz-code.github.io/pydo/developing/sulids).\n* There is no way of accessing the task time tracking from the python library.\n\nAnd lacks the following features:\n\n* Native Kanban or Scrum support.\n* Task estimations.\n* Easy report creation.\n* Easy way to manage the split of a task in subtasks.\n* Freezing of recurrent tasks.\n\nMost of the above points can be addressed through the [Taskwarrior plugin\nsystem](https://taskwarrior.org/docs/3rd-party.html) or\n[udas](https://taskwarrior.org/docs/udas.html), but sometimes it's difficult to\naccess the data or as the database grows, the performance drops so quick that it\nmakes them unusable.\n\n[tasklite](https://tasklite.org) is a promising project that tackles most of the\npoints above. But as it's written in\n[Haskel](https://en.wikipedia.org/wiki/Haskell_%28programming_language%29),\nI won't be able to add support for the features I need.\n\n# A quick demonstration\n\nLet's see `pydo` in action. We'll first add three tasks to our list.\n\n```bash\n$: pydo add Buy milk\n  [+] Added task 0: Buy milk\n$: pydo add Buy eggs\n  [+] Added task 1: Buy eggs\n$: pydo add Bake cake\n  [+] Added task 2: Bake cake\n```\n\nNow let's see the list.\n\n```bash\n$: pydo list\n     ╷\n  ID │ Description\n╺━━━━┿━━━━━━━━━━━━━╸\n  0  │ Buy milk\n  1  │ Buy eggs\n  2  │ Bake cake\n     ╵\n```\n\nSuppose we bought our ingredients and wish to mark the first two tasks as done.\n\n```bash\n$: pydo do 0 1\n  [+] Closed task 0: Buy milk with state done\n  [+] Closed task 1: Buy eggs with state done\n\n$: pydo list\n     ╷\n  ID │ Description\n╺━━━━┿━━━━━━━━━━━━━╸\n  2  │ Bake cake\n     ╵\n```\n\nThose are the first three features, the `add`, `list` and `done` commands, but\nthey represent all you need to know, to get started with `pydo`.\n\nBut there are hundreds of other features, so if you learn more, you can do more.\nIt's entirely up to you to choose how you use `pydo`. Stick to the\nthree commands above, or learn about sophisticated agile support, custom reports,\nuser defined metadata and more.\n\n# Install\n\nTo install pydo, run:\n\n```bash\npip install py-do\n```\n\nThe installation method will create a new pydo database at\n`~/.local/share/pydo/database.tinydb`.\n\n`pydo` reads it's configuration from the yaml file located at\n`~/.local/share/pydo/config.yaml`. The [default\ntemplate](https://github.com/lyz-code/pydo/blob/master/assets/config.yaml) is\nprovided at installation time.\n\n# What's next?\n\nProbably the most important next step is to start using `pydo`.\nCapture your tasks, don't try to remember them. Review your task list to keep it\ncurrent. Consult your task list to guide your actions. Develop the habit.\n\nIt doesn't take long until you realize that you might want to change your\nworkflow. Perhaps you are missing due dates, and need more defined deadlines.\nPerhaps you need to make greater use of tags to help you filter tasks\ndifferently. You'll know if your workflow is not helping you as much as it\ncould.\n\nThis is when you might look closer at the\n[docs](https://lyz-code.github.io/pydo) and the recommended Best Practices.\n\nIf you want to contribute to the project follow [this\nguidelines](https://lyz-code.github.io/pydo/contributing).\n\nWelcome to `pydo`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyz-code%2Fpydo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flyz-code%2Fpydo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyz-code%2Fpydo/lists"}