taskwarrior webui

Self-hosted Responsive Web UI for Taskwarrior based on Vue.js and Koa.js

191
24
Vue

Taskwarrior-webui

Docker Image Size

Responsive Web UI for Taskwarrior based on Vue.js and Koa.js.

Screenshots

Screenshot 1

Screenshot 2

Features

  • Responsive layouts
  • Material Design UI
  • PWA support
  • Easy to deploy (using Docker)
  • Support for multiple types of tasks
  • Support for light and dark themes
  • Sync with a taskserver

Deployment

Using docker (recommended)

First pull the docker image:
(Note that taskwarrior v2 and v3 are not compatible with each other.
Choose based on your current data version.)

# For taskwarrior 3
docker pull dcsunset/taskwarrior-webui:3
# For taskwarrior 2
docker pull dcsunset/taskwarrior-webui

Then run it with the command:

docker run -d -p 8080:80 --name taskwarrior-webui \
	-v $HOME/.taskrc:/.taskrc -v $HOME/.task:/.task \
	dcsunset/taskwarrior-webui:3

Finally, open http://127.0.0.1:8080 with your browser (replace 127.0.0.1 with your ip address if running on a remote server).

If you want to use already existing taskwarrior data in another container, use :z or :Z labels. See
here.

# e.g.
docker run -d -p 8080:80 --name taskwarrior-webui \
	-v $HOME/.taskrc:/.taskrc:z -v $HOME/.task:/.task:z \
	dcsunset/taskwarrior-webui

If your configuration file contains absolute path to your home directory like /home/xxx/ca.cert.pem,
you may want to mount files to the same paths in the container using the following command:

docker run -d -p 8080:80 --name taskwarrior-webui \
	-e TASKRC=$HOME/.taskrc -e TASKDATA=$HOME/.task \
	-v $HOME/.taskrc:$HOME/.taskrc -v $HOME/.task:$HOME/.task \
	dcsunset/taskwarrior-webui

Configurations

The following environment variables may be set:

  • TASKRC - the location of the .taskrc file, /.taskrc by default when run in production mode
  • TASKDATA - the location of the .task directory, /.task by default when run in production mode

Remember to mount your files to the corresponding locations when you set TASKRC or TASKDATA to a different value.

Manually deploy

First build the frontend:

cd frontend
npm install
npm run build
npm run export

Then build and start the backend:

cd backend
npm install
npm run build
npm start

Then install nginx or other web servers
to server frontend and proxy requests to backend
(you can refer to nginx/nginx.conf).

Development

First start the server at backend:

cd backend
npm install
npm run dev

Then start the dev server at frontend:

cd frontend
npm install
npm run dev

Then the frontend will listen at port 8080.

Contributing

Contributions are very welcome!
Please create or comment on an issue to discuss your ideas first before working on any PR.

I’ve been very busy recently and may not be able to handle every issue timely.
So I’m also looking for maintainers who are interested in this project.
Feel free to open an issue if you have any interest.

FAQ

Sync with a taskserver

This Web UI supports auto sync with a taskd server
by calling the task sync command periodically.
In order to use this function,
first you need to follow the instructions
to configure both the taskserver and client manually until the task sync can be executed successfully.
Then remember to map the client configurations (.taskrc and .task) into the container.

Authentication

Though authentication is not supported directly,
it is possible to use basic auth by configuring nginx (or you can even use your own reverse-proxy to do it).

For example, you can modify the file nginx/server.conf as below:

server {
  listen 80;
  listen [::]:80;

  # add auth
  auth_basic           "Protected page";
  auth_basic_user_file /etc/htpasswd;

  # remaining part unchanged
  ...
}

Then mount the file and htpasswd file:

docker run -d -p 8080:80 --name taskwarrior-webui \
	-v $HOME/.taskrc:/.taskrc -v $HOME/.task:/.task \
    -v $PWD/server.conf:/etc/nginx/conf.d/default.conf \
    -v $PWD/htpasswd:/etc/htpasswd \
	dcsunset/taskwarrior-webui

License

GPL-3.0 License