[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73290":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":15,"starSnapshotCount":15,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},73290,"donetick","donetick\u002Fdonetick","Donetick an open-source, user-friendly app for managing tasks and chores, featuring customizable options to help you and others stay organized","https:\u002F\u002Fdonetick.com",null,"Go",2240,155,8,125,0,9,38,92,27,104.78,"GNU Affero General Public License v3.0",false,"develop",true,[26,27,28,29,30,31,32,33,34],"chore","docker","go","golang","react","selfhosted","task-manager","tasks","todolist","2026-06-12 04:01:08","\n# \u003Cimg src=\"assets\u002Ficon.png\" alt=\"drawing\" width=\"45\"\u002F>Donetick \n\n\n\n**Simplify Tasks & Chores, Together!**\n\nDonetick is an open-source, user-friendly app designed to help you organize tasks and chores effectively. featuring customizable options to help you and others stay organized\n\n![Screenshot](assets\u002Fscreenshot.png)\n\n\n![GitHub Workflow Status](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fdonetick\u002Fdonetick\u002Fgo-release.yml)\n![GitHub release (latest by date)](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fdonetick\u002Fdonetick)\n![Docker Pulls](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fpulls\u002Fdonetick\u002Fdonetick)\n\n\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1272383484509421639)](https:\u002F\u002Fdiscord.gg\u002F6hSH6F33q7)\n[![Reddit](https:\u002F\u002Fimg.shields.io\u002Freddit\u002Fsubreddit-subscribers\u002Fdonetick)](https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fdonetick)\n\n---\n\n## Features\n\n### Task & Chore Management\n**Collaborative**: Create and manage tasks either solo or with family and friends. You can create a group and share or assign some of the tasks or chores with others.\n\n**Natural Language Task Creation**: Describe what you need to do in plain English. Donetick automatically extracts dates, times, and recurrence patterns from phrases like “Change water filter every 6 months” or “Take the trash out every Monday and Tuesday at 6:15 pm.”\n\n**Task Advanced Scheduling**: \n- Supports flexible scheduling: daily, weekly, monthly, yearly, specific months, specific days of the week, or even adaptive scheduling — where Donetick learns from historical completions to suggest due dates automatically.\n- Due Date vs Completion Date Based Recurrence: Choose whether recurring tasks should be scheduled from the previous due date (ideal for a consistent cadence) or from the actual completion date (useful when tasks are often delayed).\n- Assignee Rotation: Automatically rotate task assignments based on who has completed the fewest tasks, randomly, or in turns(round-robin) order.\n- Time Tracking & Session Insights: Track how much time you spend on a task whether in a single session or across multiple.\n  \n**Subtasks with Smart Reset**: Break tasks into smaller steps with subtasks, each trackable on its own. For recurring tasks, subtasks automatically reset when the main task is completed. subtasks can be nested as well!\n\n**Organize with Priorities and Labels**: Organize everything using custom labels and priorities. Labels can be shared across your group, making it easy to filter and sort tasks by category. Priorities help you stay focused  Donetick supports five levels: P1, P2, P3, P4, and No Priority.\n\n**Add Photos**: Attach photos directly to tasks. Supports local storage (WIP) or cloud providers including AWS S3, Cloudflare R2, MinIO, and other S3-compatible services.\n\n**Things**: A unique feature in Donetick. “Things” let you track data that isn’t a task. A Thing can be a number, boolean (true\u002Ffalse), or plain text. You can also mark tasks as done automatically when a Thing changes to a certain value.\n\n**NFC Tag Support**: Create physical triggers by writing NFC tags that instantly mark tasks as complete when scanned.\n\n### Gamification & Progress\n**Points System**: Built-in points system that rewards task completion and tracks your progress over time.\n\n**Completion Restrictions** : You can restrict task completion until a certain time, for example, make a task completable only within the last X hours before its due date. This helps prevent marking tasks as \"done\" too early.\n\n**Comprehensive Analytics**: See task breakdowns by label, completion status, and other helpful graphs.\n\n### Security & Authentication\n**Multi-Factor Authentication**: Supports TOTP-based MFA.\n\n**Multiple Sign-In Options**: Choose from local accounts or any OAuth2 provider that supports OIDC, like Keycloak, Authentik, Authelia, etc. (Tested with Authentik.)\n\n### Notifications & Integrations\n\n**Dashboard View**: If you’re on a larger screen (like a laptop or tablet) and logged in as an admin, Donetick shows a mount-friendly dashboard layout. a full task list, calendar, and recent activity all in one place. Perfect for wall-mounted displays or shared tablets. With the ability for any user to pick their account and complete a task on the go!\n\n**Realtime Sync**: Enable realtime sync to instantly reflect task changes across all connected devices and users.  whether you are adding, editing, or completing a task. It reflects immediately on enabled devices!\n\n**Offline Support**: You can access donetick if you lose connection and navigate some areas, but this is very limited functionality at the moment. \n\n**Multi-Platform Notifications**: Get reminders through the mobile app (we have an alpha iOS app on TestFlight, and the Android APK is available in releases), as well as via Telegram, Discord, or Pushover.\n\n**Home Assistant Integration**: Manage and view tasks directly within Home Assistant using the official integration. It creates separate to-do lists for each Donetick user. Donetick Home Assistant Integration\n\n### Developer & API Features\n**REST API**: Full access to Donetick’s features through a REST API, great for custom automations and integrations. (For external use, we recommend using the eAPI, which offers limited access intended for long-lived access tokens.)\n\n**Webhook System**: Connect Donetick to external systems using flexible webhook support good for custom notification flows or automations.\n\n---\n\n## Quick Start\n> [!NOTE]\n> Before running the application, ensure you have a valid `selfhosted.yaml` configuration file. \n> If you don't have one, create a `selfhosted.yaml` file based on the example provided [here](https:\u002F\u002Fgithub.com\u002Fdonetick\u002Fdonetick\u002Fblob\u002Fmain\u002Fconfig\u002Fselfhosted.yaml).\n> Place the `selfhosted.yaml` file in the `\u002Fconfig` directory within your application's root directory \n\n\n\n### Using Docker\n1. **Pull the latest image:**\n   ```bash\n   docker pull donetick\u002Fdonetick\n   ```\n2. **Run the container:** Replace `\u002Fpath\u002Fto\u002Fhost\u002Fdata` and `\u002Fpath\u002Fto\u002Fhost\u002Fconfig`:\n   ```bash\n   docker run \\\n     -v \u002Fpath\u002Fto\u002Fhost\u002Fdata:\u002Fdonetick-data \\\n     -v \u002Fpath\u002Fto\u002Fhost\u002Fconfig:\u002Fconfig \\\n     -p 2021:2021 \\\n     -e DT_ENV=selfhosted \\\n     -e DT_SQLITE_PATH=\u002Fdonetick-data\u002Fdonetick.db \\\n     -e TZ=Etc\u002FUTC \\  \n     --health-cmd \"wget --no-verbose --tries=1 --spider http:\u002F\u002Flocalhost:2021\u002Fapi\u002Fv1\u002Fhealth || exit 1\" \\\n     --health-start-period 1m \\\n     --health-timeout 5s \\\n     --health-interval 1m \\\n     --health-retries 3 \\\n     donetick\u002Fdonetick\n   ```\n\n### Using Docker Compose\nUse this template to set up Donetick with Docker Compose:\n```yaml\nservices:\n  donetick:\n    image: donetick\u002Fdonetick\n    container_name: donetick\n    restart: unless-stopped\n    ports:\n      - 2021:2021\n    volumes:\n      - .\u002Fdata:\u002Fdonetick-data\n      - .\u002Fconfig:\u002Fconfig\n    environment:\n      - DT_ENV=selfhosted\n      - DT_SQLITE_PATH=\u002Fdonetick-data\u002Fdonetick.db\n      - TZ=Etc\u002FUTC\n    healthcheck:\n      test: wget --no-verbose --tries=1 --spider http:\u002F\u002Flocalhost:2021\u002Fapi\u002Fv1\u002Fhealth || exit 1\n      start_period: 1m\n      timeout: 5s\n      interval: 1m\n      retries: 3\n      \n```\n\n\n### Using the Binary\n1. **Download the latest release** from the [Releases](https:\u002F\u002Fgithub.com\u002Fdonetick\u002Fdonetick\u002Freleases) page.\n2. **Extract the file** and navigate to the folder:\n   ```bash\n   cd path\u002Fto\u002Fextracted-folder\n   ```\n3. **Run Donetick:**\n   ```bash\n   DT_ENV=selfhosted .\u002Fdonetick \n   ```\n\n---\n\n\n\n## Development Environment\n\n### Build the frontend\n\n1. Clone the frontend repository:\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fdonetick\u002Ffrontend.git donetick-frontend\n   ```\n2. Navigate to the frontend directory:\n   ```bash\n   cd donetick-frontend\n   ```\n3. Install dependencies:\n   ```bash\n   npm install\n   ```\n4. Build the frontend:\n   ```bash\n   npm run build-selfhosted\n   ```\n5. If you want to work on the frontend you can run:\n   ```bash\n   npm start\n   ```\n\n\n### Build the application\n\n1. Clone the repository:\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fdonetick\u002Fdonetick.git\n   ```\n2. Navigate to the project directory:\n   ```bash\n   cd donetick\n   ```\n3. Install dependencies:\n   ```bash\n   go mod download\n   ```\n4. Copy the frontend build to the application:\n   ```bash\n   rm -rf .\u002Ffrontend\u002Fdist\n   cp -r ..\u002Fdonetick-frontend\u002Fdist .\u002Ffrontend\n   ```\n5. Set a valid JWT secret in `config\u002Fselfhosted.yaml`. It must be a 32 characters long string.\n6. Run the app locally:\n   ```bash\n   go run .\n   ```\n   Or build the application:\n   ```bash\n   go build -o donetick .\n   ```\n\n### Build the development Docker image\n\n> Make sure to build the frontend and the app first before building the Docker image.\n\n1. Build the Docker image:\n   ```bash\n   docker build -t donetick\u002Fdonetick -f Dockerfile.dev .\n   ```\n\n---\n\n## Single-Circle Instance Mode & OIDC Group-Based Roles\n\nThese features are designed for self-hosted single-household deployments where circle management should be hidden from end users and roles should be managed via your OIDC identity provider.\n\n### Environment Variables\n\n| Variable | Type | Default | Description |\n|---|---|---|---|\n| `DT_SINGLE_CIRCLE_INSTANCE` | bool | `false` | Hides circle-management UI and disables join\u002Fleave\u002Fdelete-member\u002Faccept-request endpoints. New OIDC users are added to a shared household circle (ID 1) instead of getting a personal circle. |\n| `DT_OAUTH2_ADMIN_GROUPS` | comma-separated strings | *(empty)* | OIDC group names that grant the `admin` role. |\n| `DT_OAUTH2_MANAGER_GROUPS` | comma-separated strings | *(empty)* | OIDC group names that grant the `manager` role. |\n\n### Role Resolution Rules\n\nRole sync runs **on every OIDC login** (not just first-time user creation), so your IdP is the source of truth. Removing someone from the admin group in your IdP will demote them on their next login.\n\n- If user is in any **admin group** -> `admin` (admin takes priority over manager)\n- Else if user is in any **manager group** -> `manager`\n- Else -> `member`\n- If **neither** `DT_OAUTH2_ADMIN_GROUPS` **nor** `DT_OAUTH2_MANAGER_GROUPS` is configured, roles are not modified at all (preserves existing behavior).\n\nGroup matching is **exact-string and case-sensitive**.\n\n### Example: Authentik Configuration\n\n1. Create groups in Authentik (e.g., `donetick-admins`, `donetick-managers`).\n2. Ensure your Authentik OAuth2 provider includes the `groups` scope and that the `groups` claim is returned in the userinfo endpoint.\n3. Set the environment variables:\n   ```yaml\n   environment:\n     - DT_SINGLE_CIRCLE_INSTANCE=true\n     - DT_OAUTH2_ADMIN_GROUPS=donetick-admins\n     - DT_OAUTH2_MANAGER_GROUPS=donetick-managers\n   ```\n\n---\n\n## Contributing\nContributions are welcome! If you want to work on something that is not already listed as an open, tagged issue, please open a [Discussion](https:\u002F\u002Fgithub.com\u002Fdonetick\u002Fdonetick\u002Fdiscussions)  or reach out on [Discord](https:\u002F\u002Fdiscord.gg\u002FyyRDcwd3) first to ensure it aligns with our goals and to avoid any unnecessary effort.\n\n**Please note:** Pull Requests that are submitted without prior discussion or do not address an existing tagged issue will be deprioritized in the review queue.\n\n## Code Formatting and Linting\n\nWe use `golangci-lint` and `ruleguard` for linting and formatting. CI enforces lint checks on all pull requests.\n\nTo run lint checks locally, install the pinned version:\n```\ngo install github.com\u002Fgolangci\u002Fgolangci-lint\u002Fcmd\u002Fgolangci-lint@v1.64.8\ngo install github.com\u002Fquasilyte\u002Fgo-ruleguard\u002Fcmd\u002Fruleguard@v0.4.5\n```\n\nRun lint checks:\n```\ngolangci-lint run\n```\n\nApply safe fixes:\n```\ngolangci-lint run --fix\n```\n\n---\n\n## License\n\nThis project is licensed under the **AGPLv3**. See the [LICENSE](LICENSE.md) file for more details.\n\n---\n\n## Join the Discussion\nFor ideas or feature requests, please use GitHub Discussions. We also have a Discord server and a subreddit for those who prefer those platforms!\n\n\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1272383484509421639)](https:\u002F\u002Fdiscord.gg\u002F6hSH6F33q7)\n[![Reddit](https:\u002F\u002Fimg.shields.io\u002Freddit\u002Fsubreddit-subscribers\u002Fdonetick)](https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fdonetick)\n\n[![Github Discussion](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdiscussions\u002Fdonetick\u002Fdonetick)](https:\u002F\u002Fgithub.com\u002Fdonetick\u002Fdonetick\u002Fdiscussions)\n\n---\n\n## Support Donetick\n\n If you find it helpful, consider supporting us by starring the repository, contributing code, or sharing feedback!  \n\n---\n","Donetick 是一个开源且用户友好的任务和家务管理应用，旨在帮助个人或团队有效组织日常事务。其核心功能包括自然语言任务创建、高级任务调度（如灵活的周期性设置、基于完成日期或到期日期的重复任务）、子任务智能重置、优先级与标签自定义以及照片附件等。此外，Donetick 还支持通过 NFC 标签触发任务，并提供了一种称为“Things”的独特数据跟踪方式。该应用采用 Go 语言开发，前端使用 React 构建，适合需要高效协作的家庭、小型团队或个人在日常生活中使用以提高组织效率。",2,"2026-06-11 03:44:51","high_star"]