Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dcsunset/taskwarrior-webui

Self-hosted Responsive Web UI for Taskwarrior based on Vue.js and Koa.js
https://github.com/dcsunset/taskwarrior-webui

docker self-hosted taskwarrior web-ui

Last synced: 11 days ago
JSON representation

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

Awesome Lists containing this project

README

        

# Taskwarrior-webui

[![Docker Image Size](https://badgen.net/docker/size/dcsunset/taskwarrior-webui)](https://hub.docker.com/r/dcsunset/taskwarrior-webui)

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

## Screenshots

![Screenshot 1](./screenshots/Screenshot1.png)

![Screenshot 2](./screenshots/Screenshot2.png)

## 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.)
```sh
# For taskwarrior 3
docker pull dcsunset/taskwarrior-webui:3
# For taskwarrior 2
docker pull dcsunset/taskwarrior-webui
```

Then run it with the command:
```sh
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](https://stackoverflow.com/questions/35218194/what-is-z-flag-in-docker-containers-volumes-from-option/35222815#35222815).
```
# 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:

```sh
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](https://taskwarrior.org/docs/taskserver/setup.html)
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:

```nginx
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:

```shell
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