{"id":46265621,"url":"https://github.com/tmahmood/taskwarrior-web","last_synced_at":"2026-03-04T02:02:52.457Z","repository":{"id":245999202,"uuid":"815443671","full_name":"tmahmood/taskwarrior-web","owner":"tmahmood","description":"Minimalistic web UI for Task warrior","archived":false,"fork":false,"pushed_at":"2026-02-21T16:30:07.000Z","size":8730,"stargazers_count":185,"open_issues_count":12,"forks_count":9,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-02-21T22:11:48.252Z","etag":null,"topics":["task-manager","taskwarrior"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tmahmood.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-15T07:14:47.000Z","updated_at":"2026-02-21T16:30:10.000Z","dependencies_parsed_at":"2025-03-03T22:25:50.199Z","dependency_job_id":"56c15b12-5cc3-42c9-b91f-9f6f9a3ad131","html_url":"https://github.com/tmahmood/taskwarrior-web","commit_stats":null,"previous_names":["tmahmood/taskwarrior-web"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/tmahmood/taskwarrior-web","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmahmood%2Ftaskwarrior-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmahmood%2Ftaskwarrior-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmahmood%2Ftaskwarrior-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmahmood%2Ftaskwarrior-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tmahmood","download_url":"https://codeload.github.com/tmahmood/taskwarrior-web/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmahmood%2Ftaskwarrior-web/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30069236,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T01:03:42.280Z","status":"online","status_checked_at":"2026-03-04T02:00:07.464Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["task-manager","taskwarrior"],"created_at":"2026-03-04T02:02:51.906Z","updated_at":"2026-03-04T02:02:52.446Z","avatar_url":"https://github.com/tmahmood.png","language":"Rust","readme":"\n\n# Current Update\n\nHey! \nSmall bug fixes, code cleanup, and support for auto-reload using `systemfd` during development.  Not suggested for daily usage.\n\n\n[I would appreciate if you can support the development effort](https://tmahmood.gumroad.com/coffee)\n\n\nPlease report any bugs, contributions are welcome.\n\n# What is this?\n\nA Minimalistic Web UI for Task Warrior focusing on Keyboard navigation.\n\nIt's completely local. No intention to have any kind of online interactions.\nFont in the screenshot is [Maple Mono NF](https://github.com/subframe7536/maple-font)\n\n## Stack\n\n- [Rust](https://www.rust-lang.org/) [nightly, will fail to build on stable]\n- [axum](https://github.com/tokio-rs/axum)\n- [tera](https://github.com/Keats/tera)\n- [TailwindCSS](https://tailwindcss.com/)\n- [daisyUI](https://daisyui.com/)\n- [HTMX](https://htmx.org)\n- [hotkeys](https://github.com/jaywcjlove/hotkeys-js)\n- [rollup](https://rollupjs.org/)\n- [Taskwarrior](https://taskwarrior.org/) (obviously :))\n- [Timewarrior](https://timewarrior.net)\n\nStill work in progress. But in the current stage it is pretty usable. You can see the list at the bottom, for what I intend to add, and what's been done.\n\n![Application](./screenshots/full_page.png)\n\n# Using Release Binary\n\nLatest release binaries are now available. Check the release tags on the sidebar\n\n# Using Docker\n\nDocker image is provided. A lot of thanks go to [DCsunset](https://github.com/DCsunset/taskwarrior-webui)\nand [RustDesk](https://github.com/rustdesk/rustdesk/)\n\n```shell\ndocker build -t taskwarrior-web-rs . \\\n\u0026\u0026 docker run --init -d -p 3000:3000 \\\n-v ~/.task/:/app/taskdata/ \\\n-v ~/.taskrc:/app/.taskrc \\\n-v ~/.timewarrior/:/app/.timewarrior/ \\\n--name taskwarrior-web-rs taskwarrior-web-rs\n```\n\nAs a service, every push to the `main` branch of this repository will provide automatic a docker image and can be pulled via\n\n```shell\ndocker pull ghcr.io/tmahmood/taskwarrior-web:main\n```\n\nThat should do it.\n\n## Volumes\n\nThe docker shares following directories as volumes to store data:\n\n| Volume path                  | Purpose                                        |\n| -----------------            | ---------------------------------------------- |\n| /app/taskdata                | Stores task data (mostly taskchampion.sqlite3) |\n| /app/.timewarrior            | Stores timewarrior data                        |\n| /app/.config/taskwarrior-web | Stores taskwarrior-web configuration file      |\n\nIt is recommend to specify the corresponding volume in order to persist the data.\n\n## Ports\n\n`taskwarrior-web` is by default internally listening on port `3000`:\n\n| Port | Protocol | Purpose                          |\n| ---- | -------- | -------------------------------- |\n| 3000 | tcp      | Main webserver to serve the page |\n\n## Environment variables\n\nIn order to configure the environment variables and contexts for `timewarrior-web`, docker environments can be specified:\n\n| Docker environment               | Shell environment       | Purpose                                                  |\n|----------------------------------| ----------------------- |----------------------------------------------------------|\n|                                  | TWK_SERVER_ADDR         | Specifies the server addr                                |\n| TASK_WEB_TWK_SERVER_PORT         | TWK_SERVER_PORT         | Specifies the server port (see \"Ports\")                  |\n| TASK_WEB_DISPLAY_TIME_OF_THE_DAY | DISPLAY_TIME_OF_THE_DAY | Displays a time of the day widget in case of value `1`   |\n| TASK_WEB_TWK_USE_FONT            | TWK_USE_FONT            | Font to be used. If not, browsers default fonts are used |\n| TASK_WEB_TWK_THEME               | TWK_THEME               | Defines the theme to be used (see \"Themes\")              |\n\n## Hooks\n\nNOTE: If you have any hooks\n(eg. Starting time tracking using time-warrior when we start a task,\nyou'll need to install the required application in in the docker, also the config files)\n\nBy default, the `timewarrior` on-modify hook is installed.\n\n# Manual Installation\n\n## Requirements\n\n- rust nightly\n- npm\n\n### Installing rust nightly\n\nShould be installable through `rustup`\nhttps://rustup.rs/\n\n### Building and Running\n\n1. Clone the latest version from GitHub.\n2. `cargo run --release`\n\nThat should be it! Now you have the server running at `localhost:3000` accessible by your browser.\n\n### Troubleshooting\n\nBy default the log level is set to `INFO`. If a more detailed log is required, the application can be run with DEBUG or even TRACE messages.\nFor debug messages, just set the environment \"RUST_LOG\" to \"DEBUG\":\n```shell\nenv RUST_LOG=\"DEBUG\" cargo run\n```\n\nIf a fine granular configuration is desired - the application log itself is captured with the name `taskwarrior_web`.\n\n## Customizing\n\n### Customizing the port\n\nBy default, the program will use 3000 as port,\nyou can customize through `.env` file or enviornment variable, check `env.example`\n\nvariable name: `TWK_SERVER_PORT`\n\n### Displaying `time of the day` widget\n\nBy default the \"time of the day\" widget is not visible, to display it put\n\n`DISPLAY_TIME_OF_THE_DAY=1`\n\nin the `.env` file\n\n### Font customization\n\nPreviously the app used `Departure Mono` as default font, which was also included in the repo.\nIt's now removed.\nAnd the font can be set using env variable.\n\nAdd the following to change default font:\n\n`TWK_USE_FONT='Maple Mono'`\n\n### Themes\n\nBy default, `taskwarrior-web` provides two themes:\n\n1. taskwarrior-dark (intended for dark mode)\n2. taskwarrior-light (intended for light mode)\n\n`taskwarrior-web` decides automatically based on the operating system and [browser preferences](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) whether the light or the dark theme should be shown.\n\nIf a specific theme should be set fixed, the theme can be set as following in the environment:\n\n`TWK_THEME=taskwarrior-dark` (for dark-mode)\n\n# Using the app\n\nYou can use Mouse or Keyboard to navigate.\n\n![Top bar](./screenshots/top_bars.png)\n\n- All the keyboard mnemonics are underlined.\n- The `Cmd Bar` needs to be focused (`Ctrl + Shift + K`) for the keyboard shortcuts to work\n\n## Project and Tag selection\n\nKeyboard shortcut is `t`\n\nFor selecting tag, once you enter tag selection mode, the `tag bar` is visible,\ntag mnemonics are displayed on the tags, in red boxes, typing the mnemonics will immediately set the tag/project,\n\nNote: selecting the tag/project again will remove the tag from filter.\n\n![Search bar](./screenshots/tag-search.png)\n\n## Creating new task\n\nKeyboard shortcut is `n`\n\nWhich should bring up the new task dialog box. It will use the current tags and project to create the task\n![New task](./screenshots/new-task.png)\n\n## Marking task as done or displaying task details\n\nCall up task search: `s`\nThis should update top bar with the following, and also the task mnemonics are displayed with the id, in red boxes.\nTyping the mnemonics will immediately mark the task as done,\nor display the details of the task depending on mnemonics typed\n\n![Task search bar](./screenshots/task_search_by_id_text_box.png)\n\nIn Task Details window, you can mark task as done[d] and start/stop [s] timer.\nAlso, denotate task using [n]\nYou can use task command to modify the task.\nYou only need to enter the modifications.\n\n![Task details window](./screenshots/task_details.png)\n\nOnce you start a timer it will be highlighted on the list\n![Task active](./screenshots/active_task.png)\n\n## Undo\n\nKeyboard shortcut is `u`\n\nThis will bring up undo confirmation dialog\n![Undo](./screenshots/undo.png)\n\n## Custom queries\n\nTask organization is a pretty personal thing. And depending on the project or individual base, custom workflows and reportings are required.\nCreate a configuration file under Linux in `$HOME/.config/taskwarrior-web/config.toml` or under Windows in `%APPDATA%\\taskwarrior-web\\config.toml` and add custom queries.\n\nA configuration file can look like:\n\n```toml\n[custom_queries]\n\n[custom_queries.completed_last_week]\nquery = \"end.after:today-1wk and status:completed\"\ndescription = \"completed last 7days\"\n\n[custom_queries.due_today]\nquery = \"due:today\"\ndescription = \"to be done today\"\nfixed_key = \"ni\" # this will override randomly generated key\n```\n\nFollowing options for each query definition is available:\n| property    | mandatory | meaning                                                                |\n| ----------- | --------- | ---------------------------------------------------------------------- |\n| query       |     X     | specifies the query to be executed on `taskwarrior`.                   |\n| description |     X     | description to be shown in the Web-UI for recognizing the right query. |\n| fixed_key   |           | Can be specified as two characters which will hardcode the shortcut.   |\n\nThe query can be selected via keyboard shortcuts or via click on the right buttons.\nIn order to select custom queries with the keyboard, first type in `q` as key for queries.\nA list is shown with available custom queries:\n![Custom query selections](./screenshots/custom_queries_selection.png)\n\nOn each custom query, either a pre-defined shortcut key is shown or an automatic and cached shortcut is shown.\nThe right one is typed and automatically the custom query is set:\n\n![Custom query list](./screenshots/custom_queries_list.png)\n\nAs soon as one of the other reports like `next`, `pending` or others are selected, the custom query is unset and `taskwarrior-web` standard reports are shown.\n\nBeside of a configuration file, it is possible to configure via environment variables as well:\n```shell\nenv TWK_custom_queries__one_query__fixed_key=ni TWK_custom_queries__one_query__query=\"end.after:today-1wk and status:completed\" TWK_custom_queries__one_query__description=\"completed last 7days\" cargo run\n```\n\nThe same way it is possible to configure the docker container accordingly.\n\n## Switch theme\n\nIt is possible to switch the theme, which is saved in local storage too.\n\nFor this following three symbols are used (left of the command bar):\n\n| Symbol | Purpose                              |\n| ------ | ------------------------------------ |\n| ⚹      | Auto Mode or forced mode from server |\n| ☽      | Dark mode                            |\n| 🌣      | Light mode                           |\n\n# WIP warning\n\nThis is a work in progress application, many things will not work,\nthere will be errors, as no checks, and there may not be any error messages in case of error.\n\n# Past Updates\n\nNow the program is MIT licensed. Thanks to [monofox](https://github.com/monofox) for reminding me of it. And I appreciate his awesome contributions!\n\n\nEven though currently the program is not being updated, I have not given up on it. I will try to get some updates in eventually. Meantime, I may not be able to rectify any issues, but will do my best to give suggestions.\n\nI will be working on \n- UI update on Sync\n- Respecting context set in TW\n\n- Updated to tailwindcss 4 and using daisyui for UI components.\n- Cleaned-up code a bit to make it easier to manage\n\n## Planned\n\n- [ ] Better configuration\n- [ ] Usability improvements on a long task list\n  - [x] Hiding empty columns\n  - [ ] Temporary highlight last modified row, if visible\n- [x] Make the mnemonics same for tags on refresh\n- [x] Modification\n  - [x] Deleting\n- [ ] Following Context\n- [ ] Error handling\n  - [x] Retaining input in case of error\n  - [ ] Finetune error handling\n- [ ] Add more tests\n- [ ] Convert to desktop app using Tauri\n- [ ] Reporting\n  - [ ] Project wise progress\n  - [ ] Burndown reports\n- [ ] Column customization\n- [ ] Color customization\n- [ ] Time warrior integration, and time reporting\n- [ ] Searching by tag name\n\n## Issues\n\n- [ ] Not able to select and copy tags, maybe add a copy button\n- [ ] Keyboard shortcut applied when there is a shortcut key and I use a mnemonic\n- [x] When marking task as done stop if active\n\n![Change Log](CHANGELOG.md)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmahmood%2Ftaskwarrior-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftmahmood%2Ftaskwarrior-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftmahmood%2Ftaskwarrior-web/lists"}