Tasks.md — Self-Hosted, Open-Source

A self-hosted, file based task management board that supports Markdown syntax.

License: MIT. Built with: JavaScript, CSS, Shell, HTML, Dockerfile. Source: https://github.com/BaldissaraMatheus/Tasks.md.

Features

Installation

docker run -d \ --name tasks.md \ -e PUID=1000 \ -e PGID=1000 \ -e TITLE="" \ -e BASE_PATH="" \ -e LOCAL_IMAGES_CLEANUP_INTERVAL=1440 \ -p 8080:8080 \ -v /path/to/tasks/:/tasks/ \ -v /path/to/config/:/config/ \ --restart unless-stopped \ baldissaramatheus/tasks.md ``` Remove the environment variables you don't want to keep (all of them are optional, PUID and PGID are recommended), replace `/path/to/something` with directories that exist in your filesystem and then execute it. The environment variables are the following: - `PUID` and `PGID`: User ID and group ID that owns the files and directories. On linux distros you can find your user's UID and GID running `id` in the terminal, but it's usually `1000` for both variables. If no value is assigned for those variables, docker will create all the files and directories as root. You can read more about it [here](https://docs.linuxserver.io/general/understanding-puid-and-pgid/). - `TITLE`: A given name that shows below the header and in the browser tab when accessing root path; - `BASE_PATH`: Base path in the url. Use this variable if you are going to run the app under a subpath based reverse-proxy. Be aware that PWA does not work when BASE_PATH is set with anything other than "/"; - `LOCAL_IMAGES_CLEANUP_INTERVAL`: After a given interval the app will remove all local images that aren't present in any task. This variable control the duration in minutes of this interval. The default value is 1440 (exactly 24h). Set it as 0 to disable it. ### docker-compose ``` version: "3" services: tasks.md: image: baldissaramatheus/tasks.md container_name: tasks.md environment: - PUID=1000 - PGID=1000 volumes: - /path/to/tasks:/tasks - /path/to/config:/config restart: unless-stopped ports: - 8080:8080

Why self-host Tasks.md

Self-hosting gives you three things SaaS can’t: data ownership (the files live on disks you control), cost predictability (a one-time setup vs. recurring per-seat fees that grow with your household or team), and longevity (open-source means the app keeps working even if the maintainers move on, since you can pin a working version). The trade-off is that you take on the operational work of running a server, applying updates, and handling backups.

What hardware do you need

Most self-hosted apps run comfortably on modest hardware — a Raspberry Pi 4, a mini PC, a NAS with Docker support, or a small VPS is usually enough for personal or family use. CPU and RAM requirements scale with how many simultaneous users or how much data you push through Tasks.md. Storage requirements depend on the kind of data you keep; check the README for guidance on data retention.

Where to go from here

Last verified: 2026-05-01