├── .gitignore ├── README.md ├── babel.config.js ├── blog ├── 2021-03-02-shared-lists-are-coming.md ├── 2021-03-06-tasks-v11.6.md ├── 2021-03-10-tasks-v11.7.md └── 2021-03-17-tasks-v11.8.md ├── docs ├── about.md ├── assets │ ├── bitcoin.svg │ ├── davx5_3_3_2-announcement.png │ └── monero.svg ├── backups.md ├── beta.md ├── donate.md ├── filters.md ├── intents.md ├── location.md ├── manual_sort_mode.md ├── markdown.md ├── notifications.md ├── privacy.md ├── recurrence.md ├── sharing.md ├── subscribe.md ├── sync.md ├── sync_caldav.md ├── sync_davx5.md ├── sync_decsync.md ├── sync_etesync.md ├── sync_google_tasks.md ├── sync_tasks_org.md ├── tasker.md ├── themes.md ├── translations.md └── troubleshooting_notifications.md ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src ├── css │ └── custom.css └── pages │ ├── index.js │ └── styles.module.css ├── static ├── .htaccess ├── .nojekyll └── img │ ├── favicon.png │ ├── logo.svg │ ├── undraw_Powerful_re_frhr.svg │ ├── undraw_agreement_aajr.svg │ ├── undraw_personal_settings_kihd.svg │ ├── undraw_safe_bnk7.svg │ ├── undraw_synchronize_ccxk.svg │ └── undraw_version_control_9bpv.svg ├── translations.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | .idea 18 | 19 | npm-debug.log* 20 | yarn-debug.log* 21 | yarn-error.log* 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Website 2 | 3 | This website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator. 4 | 5 | ## Installation 6 | 7 | ```console 8 | yarn install 9 | ``` 10 | 11 | ## Local Development 12 | 13 | ```console 14 | yarn start 15 | ``` 16 | 17 | This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server. 18 | 19 | ## Build 20 | 21 | ```console 22 | yarn build 23 | ``` 24 | 25 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 26 | 27 | ## Deployment 28 | 29 | ```console 30 | GIT_USER= USE_SSH=true yarn deploy 31 | ``` 32 | 33 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. 34 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /blog/2021-03-02-shared-lists-are-coming.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: shared-lists-are-coming 3 | title: Shared lists are coming! 4 | tags: [tasks.org, caldav, etesync] 5 | --- 6 | 7 | Shared lists are coming to Tasks! Starting with v11.6, the next several 8 | releases will focus on shared list support. You will soon be able to add and 9 | remove shared users, adjust read and write permissions, and communicate with 10 | shared list members. Best of all, these features will be completely open source 11 | and self-hostable! 12 | 13 | Sharing features will only be available for the following sync methods: 14 | * Tasks.org 15 | * [CalDAV](https://tasks.org/caldav)¹ 16 | * [EteSync](https://tasks.org/etesync) 17 | 18 | Due to technical limitations, sharing is not available for Google Tasks, DAVx⁵, 19 | and the EteSync Android client. Sharing is also not available for DecSync CC or 20 | EteSync v1 21 | 22 | [Sign up for beta testing](https://tasks.org/docs/beta) to try out the latest 23 | features now! 24 | 25 | --- 26 | 27 | ¹: Nextcloud, ownCloud, or sabre/dav server required 28 | -------------------------------------------------------------------------------- /blog/2021-03-06-tasks-v11.6.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: tasks-v11-6 3 | title: Tasks v11.6 4 | tags: [release, caldav] 5 | --- 6 | 7 | Tasks v11.6 is rolling out to Google Play users. This is the first in a series 8 | of releases bringing [shared list 9 | support](/blog/shared-lists-are-coming) to Tasks! 10 | 11 | * If you synchronize with Tasks.org or use Tasks' native CalDAV support¹: 12 | * An indicator is displayed next to shared lists 13 | * Tasks will not upload changes to read-only lists 14 | ([#931](https://github.com/tasks/tasks/issues/931)) 15 | * Unnecessary icon mirroring has been removed for right-to-left device locales 16 | ([#1385](https://github.com/tasks/tasks/issues/1385) and 17 | [#1391](https://github.com/tasks/tasks/pull/1391)) 18 | 19 | --- 20 | 21 | ¹: Nextcloud, ownCloud, sabre/dav, or OpenXchange server required. Due to 22 | technical limitations sharing not available for DAVx⁵ 23 | -------------------------------------------------------------------------------- /blog/2021-03-10-tasks-v11.7.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: tasks-v11-7 3 | title: Tasks v11.7 4 | tags: [release, caldav] 5 | --- 6 | 7 | Tasks v11.7 is rolling out to Google Play users. This is the second in a series 8 | of releases bringing [shared list support](/blog/shared-lists-are-coming) to 9 | Tasks! 10 | 11 | * If you synchronize with Tasks.org or use Tasks' native CalDAV support¹: 12 | * The list settings screen will display shared list members 13 | * List owners can remove shared list members from the list 14 | * Fixed a time zone issue when selecting a 'Repeat until' date in the 15 | recurrence picker 16 | 17 | --- 18 | 19 | ¹: Nextcloud, ownCloud, or sabre/dav server required. Due to 20 | technical limitations sharing not available for DAVx⁵ 21 | -------------------------------------------------------------------------------- /blog/2021-03-17-tasks-v11.8.md: -------------------------------------------------------------------------------- 1 | --- 2 | slug: tasks-v11-8 3 | title: Tasks v11.8 4 | tags: [release, caldav] 5 | --- 6 | 7 | Tasks v11.8 is rolling out to Google Play users. This is the third in a series 8 | of releases bringing [shared list support](/blog/shared-lists-are-coming) to 9 | Tasks. 10 | 11 | * You can now invite other users to collaborate on shared lists! This 12 | functionality requires a Tasks.org account or Tasks' native CalDAV support 13 | with a compatible server¹. [More information](/docs/sharing) 14 | * Support for Android 6.0 has been dropped. Tasks now requires Android 7+ 15 | * EteSync v1 support has been deprecated and will be removed soon! This release 16 | removes the ability to create new lists, rename lists, change list colors, 17 | and delete lists. Please [migrate to EteSync 18 | v2](https://www.etesync.com/user-guide/migrate-v2/), or use the EteSync 19 | Android client to continue synchronizing EteSync v1 data with Tasks 20 | * Fixed a time zone issue when selecting a 'Repeat until' date in the 21 | recurrence picker 22 | 23 | --- 24 | 25 | ¹: Nextcloud, ownCloud, or sabre/dav server required. Due to 26 | technical limitations sharing not available for DAVx⁵ 27 | -------------------------------------------------------------------------------- /docs/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: about 3 | title: Welcome 4 | slug: / 5 | --- 6 | 7 | Astrid [[Wikipedia](https://en.wikipedia.org/wiki/Astrid_(application))] was a popular cross-platform productivity service. In 2013 Yahoo purchased Astrid, later announcing that the service would be discontinued. 8 | 9 | The source code from Astrid's open-source Android app serves as the basis for Tasks. Tasks is not affiliated with Astrid or Yahoo. 10 | -------------------------------------------------------------------------------- /docs/assets/bitcoin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | -------------------------------------------------------------------------------- /docs/assets/davx5_3_3_2-announcement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tasks/docs/d120a4dfa9a93bcb4a9fa97cc856b7a205ca6487/docs/assets/davx5_3_3_2-announcement.png -------------------------------------------------------------------------------- /docs/backups.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: backups 3 | title: Backups 4 | --- 5 | 6 | ## Automatic backups 7 | 8 | Tasks creates daily backup files at midnight. Tasks will prune automatic backup 9 | files, keeping only the latest seven files 10 | 11 | ## Manual backups 12 | 13 | Select `Export tasks` to create a manual backup file. Manual backup files will 14 | not be pruned 15 | 16 | ## Copy to Google Drive 17 | 18 | Tasks can upload your backup files to Google Drive. Tasks will only upload 19 | files created after this option is enabled, it will not upload files created 20 | prior to enabling this option 21 | 22 | This feature requires you to grant the OAuth 2.0 scope 23 | [`drive.files`](https://developers.google.com/drive/api/v2/about-auth). This 24 | permission grants Tasks access to files that are created or opened by the app. 25 | Tasks will not have access to any other files on your Google Drive. You may 26 | revoke this permission by visiting your Google [security 27 | settings](https://myaccount.google.com/permissions) 28 | 29 | ## Android Backup Service 30 | 31 | If your device is opted in to the Android Backup Service then Tasks will 32 | automatically upload your latest backup file when Android runs the backup 33 | service. When you re-install Tasks this backup file will be imported 34 | automatically 35 | 36 | ## Backup location 37 | 38 | Backup files are stored in Tasks' [private 39 | directory](https://developer.android.com/training/data-storage/files.html#PrivateFiles). 40 | **Android will delete this directory if Tasks is uninstalled!** Choose a 41 | `Backup location` outside of Tasks' private directory to prevent Android from 42 | deleting your backup files 43 | 44 | ## Attachments 45 | 46 | File attachments are not backed up, however this functionality is planned for a 47 | future release 48 | -------------------------------------------------------------------------------- /docs/beta.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: beta 3 | title: Early access 4 | sidebar_label: Beta testing 5 | --- 6 | 7 | New releases for Tasks are available to beta testers before they are released publicly 8 | 9 | * After registering to become a pre-release tester it can take several hours to begin receiving pre-release versions from the Google Play Store 10 | * If you have multiple Google accounts make sure you opt-in with the same Google account that you used to download Tasks 11 | 12 | ### To join the beta test channel 13 | 14 | Visit [here](https://play.google.com/apps/testing/org.tasks) and click 'Become a tester' 15 | 16 | ### To leave the beta test channel 17 | 18 | Visit [here](https://play.google.com/apps/testing/org.tasks) and click 'Leave the program' 19 | -------------------------------------------------------------------------------- /docs/donate.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: donate 3 | title: Donate 4 | --- 5 | 6 | If you would like to provide a financial contribution to Tasks please consider a 7 | [Google Play subscription](subscribe.md) or [GitHub sponsorship](https://github.com/sponsors/abaker). If you have already subscribed, or would rather 8 | not subscribe, there are a few alternative methods of providing financial 9 | support: 10 | 11 | * [Liberapay](https://liberapay.com/tasks) 12 | * [Patreon](https://www.patreon.com/tasks) 13 | * [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=alex@tasks.org) 14 | * Send bitcoin to [136mW34jW3cmZKhxuTDn3tHXMRwbbaRU8s](bitcoin:136mW34jW3cmZKhxuTDn3tHXMRwbbaRU8s) 15 | * Send monero to [83oTCAmWtvmTLtjrYLSK117FymxavyHkM5qWgYrFM2HRh6ZixN48UgpfWPAkRUNSp1XVvywFiGinzDNZQw5vXv4ETMV3Kqg](monero:83oTCAmWtvmTLtjrYLSK117FymxavyHkM5qWgYrFM2HRh6ZixN48UgpfWPAkRUNSp1XVvywFiGinzDNZQw5vXv4ETMV3Kqg) 16 | 17 | | Bitcoin | 18 | |:-------:| 19 | | [![Bitcoin](assets/bitcoin.svg)](bitcoin:136mW34jW3cmZKhxuTDn3tHXMRwbbaRU8s) | 20 | 21 | | Monero | 22 | |:------:| 23 | | [![Monero](assets/monero.svg)](monero:83oTCAmWtvmTLtjrYLSK117FymxavyHkM5qWgYrFM2HRh6ZixN48UgpfWPAkRUNSp1XVvywFiGinzDNZQw5vXv4ETMV3Kqg) | 24 | -------------------------------------------------------------------------------- /docs/filters.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: filters 3 | title: Custom filters 4 | sidebar_label: Filters 5 | --- 6 | 7 | Tasks offers the ability to create custom filters based on due dates, 8 | priorities, titles, tags, and lists 9 | 10 | ### Adding a filter 11 | 12 | Click on 'Add filter' to create a new custom filter, or select from the list of 13 | pre-defined filters 14 | 15 | ### Editing filters 16 | 17 | Click on 'Add criteria' to create additional custom filter criteria 18 | 19 | * To rearrange: long press on the criteria, drag it to the desired location, 20 | and drop it 21 | * To remove: swipe criteria to the left or right 22 | 23 | ### AND, NOT, and OR 24 | 25 | Click on a criteria row to configure the criteria operator 26 | 27 | **AND** will include tasks that match the criteria 28 | 29 | **NOT** will include tasks that **do not** match the criteria 30 | 31 | **OR** starts a new set of criteria. This new set of criteria will be 32 | independent of the previous criteria 33 | -------------------------------------------------------------------------------- /docs/intents.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: intents 3 | title: Missing intents 4 | sidebar_label: Intents 5 | --- 6 | 7 | Android allows apps to handle requests from other apps. For example, web links 8 | are handled by your browser app. 9 | 10 | Tasks relies on third-party apps to capture images from your camera, record 11 | audio from your microphone, play back audio, select images from a gallery, and 12 | perform speech recognition. 13 | 14 | This improves the privacy and security of Tasks because it does not need access 15 | to your camera or microphone. These specialized apps are also able to provide 16 | more features and a better user experience. 17 | 18 | ### Audio recorder 19 | 20 | In order to attach an audio note to a task your device must have an audio 21 | recorder that responds to the 22 | [`android.provider.MediaStore.RECORD_SOUND`](https://developer.android.com/reference/android/provider/MediaStore.Audio.Media#RECORD_SOUND_ACTION) 23 | intent. If your device does not include a preinstalled audio recorder you may 24 | find one on the Play Store or F-Droid 25 | 26 | ### Camera 27 | 28 | ### Gallery 29 | 30 | ### Speech recognizer 31 | 32 | -------------------------------------------------------------------------------- /docs/location.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: location 3 | title: Location 4 | --- 5 | 6 | Tasks offers several location-based features 7 | 8 | * Location-based reminders 9 | * Remind on arrival 10 | * Remind on departure 11 | * Organize your tasks by places 12 | * Search for places by name 13 | * Look up places on a map 14 | 15 | Your location is never transmitted to Tasks.org or shared with third-parties. 16 | Some place search and reverse geocoding API calls are proxied through 17 | Tasks.org. For more information visit [Task.org's privacy policy](privacy.md) 18 | 19 | ### Map tiles 20 | 21 | * If Google Play Services are available then Tasks will use Google Maps tiles 22 | * If Google Play Services are unavailable then OpenStreetMap tiles will be used 23 | 24 | ### Reverse geocoding 25 | 26 | * If Tasks is installed from the Play Store it will use Mapbox for reverse 27 | geocoding 28 | * If Tasks is installed from F-Droid it will use Nominatim for reverse 29 | geocoding 30 | 31 | ### Location search 32 | 33 | Location search will be biased towards the center of the visible map area 34 | 35 | * If you have a Tasks.org account then Tasks will use Google Places. Google 36 | Places results include business phone numbers and website URLs, which will be 37 | provided as shortcuts 38 | * If you do not have a Tasks.org account then Tasks will use Mapbox 39 | 40 | ### Location-based reminders 41 | 42 | Tasks can notify you when you arrive and/or depart from a location. You must 43 | grant Tasks permission to access your location in order to use location-based 44 | reminders 45 | 46 | * If Google Play Services are available then Tasks will use Google Play 47 | Location Services to set up geofences 48 | * If Google Play Services are unavailable then Tasks will use the [Android 49 | LocationManager](https://developer.android.com/reference/android/location/LocationManager) 50 | to set up geofences. Some Android devices may not support LocationManager 51 | geofencing 52 | -------------------------------------------------------------------------------- /docs/manual_sort_mode.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: manual_sort_mode 3 | title: Manual sorting 4 | --- 5 | 6 | `My order` sort mode allows you to manually rearrange your tasks in a 7 | particular task list. Select a task list, open the overflow menu sort options, 8 | choose `My order`. Then long press to initiate a drag-and-drop gesture, then 9 | move your task up or down to re-arrange it, or move it to the side to turn it 10 | into a subtask 11 | 12 | `My order` is supported for: 13 | 14 | * Local lists 15 | * Google Task lists 16 | * CalDAV lists 17 | * EteSync lists 18 | * DAVx⁵ lists 19 | 20 | `My order` is not yet supported for: 21 | 22 | * Tags 23 | * Filters 24 | 25 | ### Google Tasks 26 | 27 | You must toggle on `☰ > Synchronization > Google Tasks > Custom order 28 | synchronization fix` to workaround a [long-standing 29 | bug](https://issuetracker.google.com/issues/132432317) in the Google Tasks API. 30 | This setting will force Tasks to always perform a full synchronization of your 31 | custom ordering and subtask information 32 | 33 | ### CalDAV, DAVx⁵, and EteSync lists 34 | 35 | Tasks implements `My order` using `x-apple-sort-order`, a non-standard 36 | extension to the iCalendar protocol. This sort order is compatible with Apple 37 | Reminders and Nextcloud Tasks. 38 | 39 | ### Astrid manual sorting 40 | 41 | Tasks supports Astrid's legacy manual sort mode for 'My Tasks', 'Today', and 42 | tags 43 | 44 | * This sort mode will be replaced in a future release 45 | * Toggle on `☰ > Advanced > Astrid manual sorting` to enable this sort mode 46 | * `Show hidden` and `Show completed` toggles are not supported 47 | * Manual order changes in this sort mode are not reflected in `My order` 48 | * Subtasks created in this sort mode are not visible in the edit screen 49 | * Subtasks created in this sort mode are not visible in other sort modes 50 | * Subtasks created in this sort mode are not collapsible 51 | 52 | -------------------------------------------------------------------------------- /docs/markdown.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: markdown 3 | title: Markdown 4 | --- 5 | 6 | Markdown ([Wikipedia](https://en.wikipedia.org/wiki/Markdown)) is a human 7 | readable markup language 8 | 9 | ## Enable Markdown 10 | 11 | Navigate to `☰ > Settings > Look and feel` and toggle on `Edit screen options > 12 | Markdown` 13 | 14 | You may also want to toggle on `Task list options > Show full 15 | description` 16 | 17 | ## Behavior 18 | 19 | * **Task list**: Markdown will be rendered in the title and description. Links 20 | will be clickable 21 | * **Edit screen**: Markdown syntax in the title and description will be 22 | highlighted 23 | * **Widgets & notifications**: Due to technical limitations only strikethrough 24 | is supported. Other features will be rendered as plain text with Markdown 25 | syntax removed. Links cannot be clicked 26 | 27 | ## Supported features 28 | 29 | ### Emphasis 30 | 31 | `*italic*` or `_italic_` -> *italic* 32 | 33 | `**bold**` or `__bold__` -> **bold** 34 | 35 | ### Typography 36 | 37 | `~~strikethrough~~` -> ~~strikethrough~~ 38 | 39 | ### Links 40 | 41 | `[Link](https://tasks.org)` -> [Link](https://tasks.org) 42 | 43 | ### Ordered list 44 | ``` 45 | 1. Item 1 46 | 2. Item 2 47 | 1. Sub item 48 | ``` 49 | 1. Item 1 50 | 2. Item 2 51 | 1. Sub item 52 | 53 | ### Unordered list 54 | 55 | ``` 56 | - Item 1 57 | - Item 2 58 | - Sub item 59 | ``` 60 | - Item 1 61 | - Item 2 62 | - Sub item 63 | 64 | ### Blockquotes 65 | 66 | ``` 67 | > This is a blockquote 68 | >> with nesting 69 | ``` 70 | > This is a blockquote 71 | >> with nesting 72 | 73 | ### Tasks 74 | 75 | ``` 76 | - [ ] Task 77 | - [ ] Subtask 78 | - [x] Completed task 79 | ``` 80 | - [ ] Task 81 | - [ ] Subtask 82 | - [x] Completed task 83 | 84 | ### Thematic break 85 | 86 | `***` 87 | *** 88 | 89 | ### Headings 90 | 91 | `# h1`

h1

92 | 93 | `## h2`

h2

94 | 95 | `### h3`

h3

96 | 97 | `#### h4`

h4

98 | 99 | `##### h5`
h5
100 | 101 | `###### h6`
h6
102 | 103 | ### Tables 104 | 105 | ``` 106 | | Column 1 | Column 2 107 | | --- | --- 108 | | 1A | 1B 109 | | 2A | 2B 110 | ``` 111 | | Column 1 | Column 2 112 | | --- | --- 113 | | 1A | 1B 114 | | 2A | 2B 115 | 116 | ### Code 117 | 118 | ``Example `inline` code`` -> Example `inline` code 119 | 120 | ``` 121 | ``` 122 | Example code block 123 | ``` 124 | ``` 125 | 126 | ``` 127 | Example code block 128 | ``` 129 | -------------------------------------------------------------------------------- /docs/notifications.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: notifications 3 | title: Notifications 4 | --- 5 | 6 | ## Recurring reminders 7 | 8 | Use recurring reminders when you want a task to notify you repeatedly until it is completed. 9 | 10 | Tap on `+` to create a new task, tap on `Add reminder`, then tap on `Custom...`. On the first screen 11 | you will configure the initial reminder. For example, `0 minutes before due` will notify you at the due time. 12 | 13 | Now tap on `Does not repeat`. On this screen you will configure the repeating reminder interval and the repeating 14 | reminder limit. For example, `Repeats every 15 minutes, 4 times` will generate new notifications every 15 minutes 15 | for one hour after the task is due. 16 | -------------------------------------------------------------------------------- /docs/privacy.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: privacy 3 | title: Privacy Policy 4 | --- 5 | 6 | ### TL;DR 7 | 8 | * **If you have a Tasks.org account:** 9 | * Your user data is stored in order to provide synchronization service. It is 10 | not used for any other purpose, and it is not shared with anyone 11 | * Your e-mail address is stored in order to send important service 12 | announcements. It is not used for any other purpose, and it is not shared 13 | with anyone 14 | * **If you do not have a Tasks.org account:** 15 | * Your user data is not collected, stored, or shared with anyone 16 | * No personally identifiable information is collected, stored, or shared 17 | * Tasks.org does not share data with any third parties 18 | * Tasks.org collects anonymous usage statistics (see below) 19 | * Some features are subject to third party privacy policies (see below) 20 | 21 | If you have any questions or concerns please contact support@tasks.org 22 | 23 | --- 24 | 25 | ### Current location 26 | 27 | You can give Tasks permission to find your current location on a map. Your 28 | location is not transmitted to Tasks.org or shared with third parties 29 | 30 | ### Background location 31 | 32 | You can give Tasks permission to access your location in the background in 33 | order to trigger location-based reminders. Your location is not transmitted to 34 | Tasks.org or shared with third parties 35 | 36 | Google Play only: Use of Google Play Location Services is subject to [Google's 37 | privacy policy](https://policies.google.com/privacy?hl=en-US) 38 | 39 | ### Google Tasks 40 | 41 | If you enable Google Task synchronization: Tasks will download your Google 42 | Tasks data directly to your device. Your Google Task data is not transmitted to 43 | Tasks.org or shared with third parties 44 | 45 | Use of Google Tasks is subject to [Google's privacy 46 | policy](https://policies.google.com/privacy?hl=en-US) 47 | 48 | ### Google Drive backups 49 | 50 | If you enable Google Drive backups: Tasks will upload nightly backup files to 51 | Google Drive. Tasks does not have access to any other files stored on your 52 | Google Drive. Your Google Drive data is not transmitted to Tasks.org or shared 53 | with third parties 54 | 55 | Use of Google Drive is subject to [Google's 56 | privacy policy](https://policies.google.com/privacy?hl=en-US) 57 | 58 | ### Mapbox search 59 | 60 | Mapbox search results are not transmitted to Tasks.org or shared with third 61 | parties 62 | 63 | Use of Mapbox is subject to [Mapbox's privacy 64 | policy](https://www.mapbox.com/legal/privacy) 65 | 66 | ### Google Places 67 | 68 | Google Places search requests are proxied through Tasks.org in order to 69 | restrict usage to Tasks.org account holders. Your search results are not stored 70 | or shared with third-parties 71 | 72 | Use of Google Places is subject to [Google's privacy 73 | policy](https://policies.google.com/privacy?hl=en-US) 74 | 75 | ### OpenStreetMaps 76 | 77 | Use of OpenStreetMap tiles are subject to [OpenStreetMaps's privacy 78 | policy](https://wiki.osmfoundation.org/wiki/Privacy_Policy) 79 | 80 | --- 81 | 82 | ## Google Play 83 | 84 | ### Mapbox reverse geocoding 85 | 86 | Mapbox reverse geocoding results are not transmitted to Tasks.org or shared 87 | with third parties 88 | 89 | Use of Mapbox is subject to [Mapbox's privacy 90 | policy](https://www.mapbox.com/legal/privacy) 91 | 92 | ### Google Maps 93 | 94 | Use of Google Maps is subject to [Google's privacy 95 | policy](https://policies.google.com/privacy?hl=en-US) 96 | 97 | ### Firebase 98 | 99 | Tasks uses Google Analytics for Firebase to collect anonymous usage statistics 100 | and crash reports 101 | 102 | * Firebase anonymizes your IP address 103 | * Firebase does not collect your 'Advertising ID' 104 | * Firebase does not collect your 'Android ID' 105 | * You may opt-out of usage statistics through the 'Help & feedback' menu 106 | 107 | --- 108 | 109 | ## F-Droid 110 | 111 | ### Nominatim reverse geocoding 112 | 113 | Nominatim reverse geocoding requests are proxied through Tasks.org in order to 114 | comply with the [Nominatim usage 115 | policy](https://operations.osmfoundation.org/policies/nominatim/). Tasks.org 116 | does not store your reverse geocoding results or share them with third parties 117 | 118 | Use of Nominatim reverse geocoding is subject to [OpenStreetMaps's privacy 119 | policy](https://wiki.osmfoundation.org/wiki/Privacy_Policy) 120 | 121 | --- 122 | 123 | Last updated: March 2, 2021 124 | -------------------------------------------------------------------------------- /docs/recurrence.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: recurrence 3 | title: Recurring tasks 4 | --- 5 | 6 | Tasks.org supports recurring tasks _and_ [recurring reminders](notifications#recurring-reminders). These two features 7 | can be used together, but they serve different purposes! 8 | 9 | Some tasks must be completed at a regular interval, like taking your trash to the curb Wednesday nights, 10 | or paying a bill on the first of the month. For these you will want to set up a recurring task. 11 | 12 | Tap on `+` to create a new task, then tap on `Does not repeat`. This will bring up a dialog 13 | offering some preset recurrence options. You can tap on `Custom...` if you want to set up more 14 | advanced recurrence. 15 | 16 | ### Repeats every X minutes/hours/days/weeks/months/years 17 | 18 | You can configure a task to repeat after a given interval 19 | 20 | ### Weekly recurrence 21 | 22 | When the weekly interval is selected you can optionally configure which days of the week to recur on. 23 | 24 | A common use case is a task performed every day at work. To set this up choose `Repeats every 1 week`, 25 | then toggle on the bubbles for each day of your work week. 26 | 27 | ### Monthly recurrence 28 | 29 | When the monthly interval is selected you are given additional options based on the selected due date 30 | 31 | ### Ends 32 | 33 | Tasks can repeat forever, or they can be configured to end in the future. 34 | * **Never:** The task will repeat indefinitely 35 | * **On \:** The task will not repeat after the given date 36 | * **After \ occurrences:** The task will end after it is completed X times 37 | 38 | ### Repeats from due date or completion date 39 | 40 | Recurring tasks _must_ have a due date. If you do not select a due date before configuring 41 | recurrence then the app will set a due date for you. 42 | 43 | Recurring tasks can be configured to calculate the next due date based on either the original due date, 44 | or the date when you completed the task 45 | 46 | Some recurring tasks must be performed at a specific interval after the previous task was completed, not after 47 | the previous task was originally due. If you want to `Get a haircut` every four weeks, but you get your hair cut 48 | three weeks late, you don't want to get another hair cut in one week. If you configure this task as 49 | `Repeats from completion date`, then your next hair cut will always be four weeks after your previous 50 | hair cut. 51 | -------------------------------------------------------------------------------- /docs/sharing.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sharing 3 | title: Sharing 4 | sidebar_label: Sharing 5 | --- 6 | Tasks' sharing features are under active development! 7 | 8 | ### Tasks.org account 9 | 10 | Currently lists can only be shared with other Tasks.org accounts. In the near 11 | future you will be able to share lists with anyone, even if they don't use 12 | Tasks! 13 | 14 | ### Google Tasks, DAVx⁵, and the EteSync Android client 15 | 16 | Sharing features not supported due to technical limitations 17 | 18 | ### Nextcloud, ownCloud, and sabre/dav 19 | 20 | Sharing features are available when your account is configured to use Tasks' 21 | native CalDAV synchronization 22 | 23 | ### EteSync 24 | 25 | Sharing features will be available for native EteSync synchronization in a 26 | future update 27 | 28 | ### OpenXchange 29 | 30 | Some list sharing features are available for OpenXchange servers. More features 31 | will be added in a future release if possible 32 | 33 | ### Other CalDAV servers 34 | 35 | Sharing support for other CalDAV services may be possible. If you're familiar 36 | with how sharing is implemented in your preferred CalDAV server, please submit 37 | a feature request with the details on [Tasks' issue 38 | tracker](https://github.com/tasks/tasks/issues) 39 | 40 | -------------------------------------------------------------------------------- /docs/subscribe.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: subscribe 3 | title: Subscribe 4 | --- 5 | 6 | Tasks is [free and open-source 7 | software](https://en.wikipedia.org/wiki/Free_and_open-source_software) that 8 | does not display advertisements or sell your personal information. In order to 9 | support development some features require a subscription 10 | 11 | Google Play subscriptions come with a 7-day free trial. You can upgrade, 12 | downgrade, or cancel your subscription at any time 13 | 14 | ### Choose your own subscription price 15 | 16 | Tasks offers the ability to choose your own subscription price. You can 17 | unlock all in-app features for as little as $0.99 USD/year, however you will not 18 | have access to the Tasks.org synchronization service 19 | 20 | ### Synchronization with Tasks.org 21 | 22 | In order to synchronize your data with Tasks.org's synchronization service you must maintain one of the following: 23 | 24 | * Google Play subscription for $2.99/month or $29.99/year 25 | * [GitHub sponsorship](https://github.com/sponsors/abaker) for $3/month 26 | 27 | ### One-time purchases 28 | 29 | I know you hate subscriptions. I don't like them either. 30 | 31 | Mobile apps must be maintained and supported forever, and one-time purchases 32 | are not an effective method of funding development¹. When one-time sales dry up 33 | then developers abandon the app. Subscriptions give them an incentive to 34 | keep you happy. 35 | 36 | Tasks does not offer a one-time purchase option, however there is a "hack" to 37 | unlock the app for many years: 38 | 39 | 1. Tap on `☰ > Settings` 40 | 2. Tap on `Upgrade to pro > More options`, and choose a price. Every $1 will 41 | unlock the app for approximately one year, i.e. $4.99 ≈ 5 years, $9.99 ≈ 10 42 | years, $24.99 ≈ 25 years 43 | * **Note:** You must wait until your trial period ends and your account is 44 | charged before continuing with step 3 45 | 3. Tap on `Modify subscription > More options` and choose `$0.99/year`. Google 46 | will apply your existing balance towards the new subscription. The Google 47 | Play purchase pop-up will confirm your new expiration date 48 | 4. Feel free to cancel your new subscription so that it does not auto-renew 49 | 50 | ¹ I'm making a broad generalization, but my Play Store purchase history is 51 | littered with one-time purchases that were abandoned by their developers years 52 | ago 53 | 54 | ### F-Droid 55 | 56 | F-Droid users do not require a subscription to unlock all in-app features. 57 | [Donations](donate.md) are highly appreciated! 58 | 59 | F-Droid users who wish to synchronize their data with Tasks.org's 60 | synchronization service require a GitHub sponsorship or Google Play 61 | subscription. 62 | -------------------------------------------------------------------------------- /docs/sync.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sync 3 | title: Synchronization 4 | sidebar_label: Overview 5 | --- 6 | 7 | Tasks can be used offline, synchronized with Tasks.org, or synchronized 8 | with a variety of third-party apps and services 9 | 10 | Tasks synchronization options, with the exception of Google Tasks, are based on 11 | the [iCalendar standard](https://en.wikipedia.org/wiki/ICalendar). 12 | 13 | The following tables provide a comparison of services and features supported by Tasks 14 | 15 | | | Tasks.org | [Google Tasks](sync_google_tasks) | [DAVx⁵](sync_davx5) | [CalDAV](sync_caldav) | [EteSync app](sync_etesync) | [EteSync](sync_etesync) | [DecSync CC](sync_decsync) | 16 | | -:|:---:|:------------:|:-----:|:------:|:--------------:|:-------:|:------------:| 17 | | In-app subscription required | Yes¹ | No² | Yes | Yes | Yes | Yes | Yes | 18 | | Third-party service cost | | Free | Free/Paid | Free/Paid | Paid | Paid | | 19 | | Open-source self-hosting | | | Free | Free | Free | Free | | 20 | | Subtasks | Multi-level | Single-level | Multi-level | Multi-level | Multi-level | Multi-level | Multi-level | 21 | | Web interface | | ✓ | ✓³ | ✓³ | ✓ | ✓ | | 22 | | [Sharing](sharing.md) | ✓ | | | ✓ | | ✓ | | 23 | | [Manual sorting](manual_sort_mode.md) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 24 | | Create lists | ✓ | ✓ | | ✓ | | ✓ | | 25 | | Rename lists | ✓ | ✓ | | ✓ | | ✓ | | 26 | | Delete lists | ✓ | ✓ | | ✓ | | ✓ | | 27 | | Change list color | ✓ | | | ✓ | | ✓ | | 28 | | End-to-end encryption | | | | | ✓ | ✓ | | 29 | 30 | Not all task information synchronizes with third party services. The following 31 | table lists the metadata currently synchronized with each service 32 | 33 | | | Tasks.org | Google Tasks | DAVx⁵ / EteSync app / DecSync CC| CalDAV | EteSync | 34 | | -:|:---:|:------------:|:-----------:|:-------:|:------:| 35 | | Title | ✓ | ✓ | ✓ | ✓ | ✓ | 36 | | Due date | ✓ | ✓ | ✓ | ✓ | ✓ | 37 | | Due time | ✓ | | ✓ | ✓ | ✓ | 38 | | Start time | ✓ | | ✓ | ✓ | ✓ | 39 | | Creation date | ✓ | ✓ | ✓ | ✓ | ✓ | 40 | | Modification date | ✓ | ✓ | ✓ | ✓ | ✓ | 41 | | Completion date | ✓ | ✓ | ✓ | ✓ | ✓ | 42 | | Subtasks | ✓ | ✓ | ✓ | ✓ | ✓ | 43 | | Description | ✓ | ✓⁴ | ✓ | ✓ | ✓ | 44 | | Priority | ✓ | | ✓ | ✓ | ✓ | 45 | | Location | ✓ | | ✓ | ✓ | ✓ | 46 | | Tags | ✓ | | ✓ | ✓ | ✓ | 47 | | Recurrence | ✓ | | ✓ | ✓ | ✓ | 48 | | Reminders | ✓ | | ✓ | ✓ | ✓ | 49 | | Random reminders | | | | | | 50 | | Location reminders | | | | | | 51 | | Repeat after completion | | | | | | 52 | | Attachments | | | | | | 53 | | Calendar event | | | | | | 54 | | Timer | | | | | | 55 | | Comments | | | | | | 56 | 57 | ¹ Google Play subscription or [GitHub 58 | sponsorship](https://github.com/sponsors/abaker) required 59 | 60 | ² In-app subscription required to add two or more Google Task accounts 61 | 62 | ³ Support varies by CalDAV service 63 | 64 | ⁴ Limited to 8192 characters 65 | 66 | ### Sync Conditions 67 | 68 | Tasks synchronizes under the following conditions: 69 | 70 | * When the app is opened 71 | * One minute after creating/updating items 72 | * Once per hour when the app isn't open 73 | * When you pull to sync 74 | -------------------------------------------------------------------------------- /docs/sync_caldav.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sync_caldav 3 | title: CalDAV 4 | --- 5 | 6 | CalDAV [[Wikipedia](https://en.wikipedia.org/wiki/CalDAV)] is an open Internet 7 | standard for synchronizing calendar events and task lists. Tasks can 8 | synchronize with a variety of CalDAV servers. Set up a free or paid account 9 | with a third party service, or host your own from a selection of open-source 10 | servers 11 | 12 | The following is not an exhaustive list of compatible services. If any services 13 | are missing, outdated, or incorrect, please [send me an e-mail](mailto:support@tasks.org), or open a pull request at 14 | [github.com/tasks/docs](https://github.com/tasks/docs) 15 | 16 | | | Hosting | Self-hosting | List sharing | Web interface | 17 | | -:|:-------:|:------------:|:------------:|:-------------:| 18 | | [Nextcloud](https://nextcloud.com/providers/) | Free/Paid | ✓ | ✓ [1] | ✓ | 19 | | [Owncloud](https://owncloud.com/partners/find-a-partner/) | Free/Paid | ✓ | ✓ [1] | ✓ | 20 | | [Fastmail](https://fastmail.com/) | Paid | | | | 21 | | [Mailbox.org](https://mailbox.org) | Paid | | | ✓ | 22 | | [fruux](https://fruux.com) | Free/Paid | | ✓ [2] | ✓ | 23 | | [Vikunja](https://vikunja.io/docs/caldav/) | Free/Paid | ✓ | | ✓ | 24 | | [xandikos](https://xandikos.org) | | ✓ | | | 25 | | [Radicale](https://radicale.org) | | ✓ | | | 26 | | [Baïkal](http://sabre.io/baikal/) | | ✓ | | ✓ | 27 | | [sabre/dav](http://sabre.io/) | | ✓ | | | 28 | | [Synology Calendar](https://www.synology.com/en-us/dsm/feature/calendar) | | ✓ | | | 29 | | [Apple CalendarServer](https://www.calendarserver.org/) | | ✓ | | | 30 | | Microsoft Exchange | Paid [3] | | | | 31 | | [Office 365](https://office365.com) | Free [3] | | ✓ | ✓ | 32 | 33 | [1]: Not all hosting providers support sharing 34 | 35 | [2]: Requires paid account 36 | 37 | [3]: Requires a [DavMail Gateway](http://davmail.sourceforge.net/) 38 | 39 | 40 | For more details about Tasks' CalDAV synchronization capabilities, visit 41 | [tasks.org/sync](sync.md) 42 | 43 | ### Adding an account 44 | 45 | Select ```Tasks settings > Synchronization > Add account > CalDAV``` and enter 46 | the following details: 47 | 48 | * **User** for authentication with your CalDAV server 49 | * **Password** for authentication with your CalDAV server 50 | * Android 6+: Passwords will be encrypted with the Android KeyStore 51 | * Android 4 and 5: Passwords will be stored in **plain text** 52 | * **URL** to your CalDAV home set 53 | * Tasks will follow the ```/.well-known/caldav``` redirect for URLs that use 54 | SSL. As an example you can enter ```https://my.owndrive.com``` and Tasks 55 | will find your home set 56 | * For servers that do not provide a redirect you will need to enter the home 57 | set URL yourself. This URL will vary by server, but will look something 58 | like ```https://example.com/remote.php/caldav/calendars/myusername/``` 59 | * **Server type** 60 | -------------------------------------------------------------------------------- /docs/sync_davx5.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sync_davx5 3 | title: DAVx⁵ 4 | --- 5 | [DAVx⁵](https://play.google.com/store/apps/details?id=at.bitfire.davdroid) can 6 | be used to synchronize your CalDAV data with Tasks 7 | 8 | ### DAVx⁵ vs CalDAV 9 | 10 | Both options provide nearly identical functionality, with the exception that 11 | Tasks cannot create, rename, colorize, or delete your CalDAV lists when 12 | synchronizing with DAVx⁵. 13 | 14 | Tasks will ignore your DAVx⁵ data if you have set up CalDAV synchronization for 15 | the same account. 16 | 17 | ### Adding an account 18 | 19 | Your data will automatically appear in Tasks after setting up DAVx⁵. Refer to 20 | the following DAVx⁵ infographic for setup instructions. 21 | 22 | ![DAVx⁵ setup](assets/davx5_3_3_2-announcement.png) 23 | 24 | ### Troubleshooting 25 | 26 | Make sure DAVx⁵ integration is configured properly 27 | 28 | 1. Open the DAVx⁵ app 29 | 2. Tap `☰ > Settings` 30 | * Make sure `App permissions > Tasks permissions` is toggled on 31 | * Make sure `Integration > Tasks app > Tasks` is checked 32 | 33 | Make sure at least one task list is synchronized 34 | 35 | 1. Open the DAVx⁵ app 36 | 2. Tap on your account 37 | 3. Tap on the `CALDAV` tab 38 | 4. Tap `⋮ > Refresh calendar list` 39 | 5. Check at least one task list 40 | 6. Tap on `🗘` to initiate synchronization 41 | 42 | -------------------------------------------------------------------------------- /docs/sync_decsync.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sync_decsync 3 | title: DecSync CC 4 | --- 5 | DecSync (Decentralized Synchronization) can be used to synchronize your tasks 6 | without a server. 7 | 8 | The DecSync CC app, [available from 9 | F-Droid](https://f-droid.org/packages/org.decsync.cc/), will synchronize your 10 | tasks with iCalendar files on your device's internal storage. You are 11 | responsible for synchronizing the DecSync directory with other devices. One 12 | solution is to use [Syncthing](https://syncthing.net/) 13 | 14 | Your DecSync lists will automatically appear in Tasks after setting up DecSync 15 | CC 16 | 17 | You can read more about DecSync at 18 | [github.com/39aldo39/DecSync](https://github.com/39aldo39/DecSync) 19 | 20 | ### Troubleshooting 21 | 22 | Make sure DecSync CC is configured properly 23 | 24 | 1. Open DecSync CC 25 | 2. Tap `⋮ > Settings` 26 | * Make sure `Tasks > Task app` is set to `Tasks` 27 | 28 | Make sure at least one task list is synchronized 29 | 30 | 1. Open DecSync CC 31 | 2. Check at least one task list 32 | * Tap `+` to create a new task list if necessary 33 | 3. Allow DecSync CC to Tasks permission 34 | 4. Tap on `🗘` to initiate synchronization 35 | 36 | -------------------------------------------------------------------------------- /docs/sync_etesync.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sync_etesync 3 | title: EteSync 4 | --- 5 | 6 | [EteSync](https://www.etesync.com) is a secure, end-to-end encrypted, 7 | and privacy respecting sync for your contacts, calendars and tasks. It's 8 | fully open-source (clients and server), with clients available for 9 | Android, iOS, the desktop and the web. 10 | 11 | In order to use EteSync sync you need to have an account with EteSync (paid 12 | hosting), or [run your own instance](https://github.com/etesync/server) (free 13 | and open source). Check out [the EteSync website](https://www.etesync.com/) 14 | for more information. 15 | 16 | ### Setup 17 | 18 | The [EteSync Android 19 | client](https://play.google.com/store/apps/details?id=com.etesync.syncadapter) 20 | can populate Tasks with data, or you can enter your credentials into Tasks and 21 | synchronize directly with your EteSync host. 22 | 23 | Once your account is signed-in, Tasks will create a Category with your username in the sidebar. Your etesync lists will be kept separately from your local lists. In order to upload your existing lists to etesync, you have to use multi-select + select all + move to migrate the data for each list. For more info, see: [issue #1597](https://github.com/tasks/tasks/issues/1597). 24 | -------------------------------------------------------------------------------- /docs/sync_google_tasks.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sync_google_tasks 3 | title: Google Tasks 4 | sidebar_label: Google Tasks 5 | --- 6 | 7 | [Google Tasks](https://support.google.com/calendar/answer/106237) is a basic 8 | task list service provided by Google. Google Tasks can be accessed from GMail, 9 | Google Calendar, or a variety of third party clients. 10 | 11 | Tasks can synchronize a portion of its data through Google Tasks. Given the 12 | limited amount of information supported by Google Tasks you will only be able 13 | to synchronize the following: 14 | 15 | * Title 16 | * Due date ([without time of day](https://issuetracker.google.com/issues/128979662)) 17 | * Description 18 | 19 | No other data can be synchronized through Google Tasks 20 | 21 | **Please note:** Tasks.org will be flagged in your Google Security Checkup 22 | because I am an unverified developer. It costs $15,000-75,000 USD to get verified, 23 | which is cost prohibitive. Tasks.org synchronizes directly with Google Tasks' servers, 24 | and I never have access to your Google Tasks data. 25 | 26 | ### Recurrence, reminders, and due times 27 | 28 | Recurrence, reminders, and due times were added to the Google Tasks service in 29 | early 2019. Unfortunately the third-party Google Tasks API did not receive a 30 | similar update, so this data is not available to third-party clients like Tasks. 31 | 32 | You can read more on Google's public issue tracker 33 | [here](https://issuetracker.google.com/issues/128979662) and 34 | [here](https://issuetracker.google.com/issues/36759725) 35 | 36 | ### Additional features 37 | 38 | * Re-order tasks and create subtasks using [manual sort 39 | mode](manual_sort_mode.md) 40 | * Create, rename, and delete Google Task lists 41 | * Move tasks between Google Task lists 42 | 43 | ### Adding an account 44 | 45 | To get started tap on ```☰ > Settings > Synchronization > Add account > 46 | Google Tasks``` 47 | 48 | ### Grant the contacts permission (Android 6 + 7 only) 49 | 50 | Tasks requires the `contacts` permission on versions of Android prior to 8.0. 51 | This permission is needed to access the Google accounts registered on your 52 | device. 53 | 54 | ### Choose an account 55 | 56 | Select the Google account that you would like to synchronize with. A 57 | [subscription](subscribe.md) is required to synchronize with two or more Google 58 | accounts. 59 | 60 | ### Grant OAuth 2.0 access 61 | 62 | Tasks requires permission to use the Google Task web API with your account. If 63 | you no longer use Google Task synchronization you may revoke this permission by 64 | visiting your Google [security 65 | settings](https://myaccount.google.com/permissions). 66 | 67 | -------------------------------------------------------------------------------- /docs/sync_tasks_org.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: sync_tasks_org 3 | title: Tasks.org 4 | --- 5 | The Tasks.org synchronization service is powered by the open CalDAV protocol, 6 | which means it is compatible with third-party task and calendar apps! You must 7 | generate a username and password to sign in to Tasks.org with apps like 8 | Outlook, Thunderbird, or Apple Reminders. 9 | 10 | These credentials grant complete access to the tasks and calendars in your 11 | Tasks.org account. Generate as many passwords as you need, but do not write 12 | them down or share them with anyone! 13 | 14 | #### To generate an app password: 15 | 16 | 1. Open your account settings by tapping on `☰ > Settings > Tasks.org` 17 | 2. Tap on `Generate new password` 18 | 3. (Optional) Enter a description for this password, like 'Outlook on my 19 | laptop' 20 | 4. Tap `OK` 21 | 5. Enter the URL, username, and password into your third-party app before 22 | dismissing the dialog. _These credentials cannot be displayed after 23 | dismissing the dialog!_ 24 | 25 | #### To delete an app password: 26 | 27 | 1. Open your account settings by tapping on `☰ > Settings > Tasks.org` 28 | 2. Tap the trashcan icon next to the password you would like to delete 29 | 3. Tap 'OK' to confirm. Any apps that were configured with this password will 30 | no longer have access to Tasks.org 31 | 32 | -------------------------------------------------------------------------------- /docs/tasker.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: tasker 3 | title: Tasker Plugins 4 | --- 5 | 6 | [Tasker](https://tasker.joaoapps.com/) is an Android app used for performing automated actions based on contexts such as time and location. Tasker plugins may also be used with [Automate](http://llamalab.com/automate/) 7 | 8 | ## List Notification 9 | 10 | Work in progress 11 | 12 | ## Create task 13 | 14 | [Tasker variables](https://tasker.joaoapps.com/userguide/en/variables.html) may be used in all available fields. At present you can only set the title, due date, due time, priority, and description from Tasker. Support for additional fields will be added in the future. 15 | 16 | * **Due date** in ISO-8601 extended format, e.g. `2017-12-28` 17 | * **Due time** in ISO-8601 extended format, e.g. `13:45`. If the due time field is set but the due date field is blank then Tasks will use the current date 18 | * **Priority** can be set from `0` (highest) to `3` (lowest) 19 | 20 | *** 21 | 22 | One easy way to work with dates and times is to use a 'Run Shell' action with `date`, storing the output in a variable. If you need to refer to a date in the future you can use a Tasker variable set with math. Keep in mind that the global %TIMES variable is a UTC timestamp and that Tasks expects values in your local time. 23 | 24 | * Current local date: `date +%Y-%m-%d` 25 | * Current local time: `date +%H:%M` 26 | * Current local timestamp: `date +%s` 27 | * Date from timestamp: `date -d @%mytimestamp +%Y-%m-%d` 28 | * Time from timestamp: `date -d @%mytimestamp +%H:%M` 29 | -------------------------------------------------------------------------------- /docs/themes.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: themes 3 | title: Themes 4 | --- 5 | 6 | Tasks offers many options for customizing the appearance of the app 7 | 8 | ### Theme 9 | 10 | You may select one base theme from the following list: 11 | 12 | * Light 13 | * Black 14 | * Dark 15 | * Wallpaper 16 | * Day/night 17 | * System default 18 | 19 | Day/Night will switch to light mode during the day and dark mode at night 20 | * With location permissions: the theme will change at sunrise and sunset 21 | * Without location permissions: the theme will change at 6AM and 10PM 22 | 23 | ### Colors 24 | 25 | You may choose colors for your default theme, each of your tags, filters, 26 | Google Task, CalDAV, and EteSync lists, as well as each of your home screen 27 | widgets. Tasks offers 42 predefined colors as well as a color wheel for 28 | selecting a custom color 29 | 30 | The 42 predefined colors will be desaturated when using a dark theme. Custom 31 | colors chosen with the color wheel will **not** be desaturated. 32 | 33 | ### Accents 34 | 35 | Tasks offers a choice of 17 accent colors. Accent colors are used to highlight 36 | important user interface elements in Android. Only one accent color may be 37 | selected at a time. Accent colors will be desaturated in dark themes 38 | 39 | ### Icons 40 | 41 | You can choose from 130+ icons to assign to each of your tags, custom filters, 42 | Google Task, CalDAV, and EteSync lists 43 | 44 | ### Launcher icon 45 | 46 | You may choose from 20 different colors for your launcher icon 47 | 48 | ### Home Screen Widget 49 | 50 | When setting up a home screen widget you may combine the light, black, or dark 51 | theme, along with a predefined or custom color 52 | 53 | ### Shortcut widget 54 | 55 | You may choose from 20 different colors for shortcut widgets 56 | -------------------------------------------------------------------------------- /docs/translations.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: translations 3 | title: Translations 4 | --- 5 | 6 | Anyone can help out with translations for Tasks. Please visit [tasks.org/weblate](https://tasks.org/weblate) to get involved. Feel free to add your language if it does not already exist 7 | 8 | **Note:** Some strings contain special formatting characters such as '%s', '\n', and '%1$s' that need to be preserved. For example in the string "Task Saved: due %s," %s is a placeholder for the task due date. If you remove these special formatting characters then Tasks will not be able to plug in the necessary values. 9 | -------------------------------------------------------------------------------- /docs/troubleshooting_notifications.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: troubleshooting_notifications 3 | title: Notification troubleshooting 4 | sidebar_label: Notifications 5 | --- 6 | 7 | The most common causes of notification trouble are listed below. If your 8 | problem isn't solved here please send me an e-mail by tapping on `☰ > Help & 9 | feedback > Contact developer` and I will help you out! 10 | 11 | ### Perform a quick notification test 12 | 13 | You can perform a quick test to ensure notifications are enabled and working 14 | when the app is in the foreground 15 | 16 | 1. Tap on `+` to create a new task 17 | 2. Set the due date to `Yesterday` 18 | 3. Add a `When due` reminder 19 | 4. Tap save 20 | 21 | A few moments later you should receive a notification 22 | 23 | ### Missed notifications appear when I open the app 24 | 25 | Some manufacturers terminate background apps to conserve battery. Please visit 26 | [dontkillmyapp.com](https://dontkillmyapp.com) for help disabling your 27 | manufacturer's battery restrictions 28 | 29 | ### Notifications are late (Android 6+) 30 | 31 | Android can delay notifications to conserve battery while your device is idle. 32 | To prevent Android from delaying Tasks' notifications: 33 | 34 | 1. Tap on `☰ > Settings > Notifications > Disable battery optimizations` 35 | 2. Tap on the dropdown and select "All apps" 36 | 3. Tap on "Tasks" and select "Don't optimize" 37 | 38 | ### I disabled battery optimizations and notifications are still late 39 | 40 | Please visit [dontkillmyapp.com](https://dontkillmyapp.com) and make sure you 41 | have disabled your manufacturer's battery restrictions 42 | 43 | ### Notifications only appear while the app is open 44 | 45 | Please visit [dontkillmyapp.com](https://dontkillmyapp.com) and make sure you 46 | have disabled your manufacturer's battery restrictions 47 | 48 | ### Notifications are silent or do not appear at all (Android 8+) 49 | 50 | It is easy to inadvertently silence or disable reminders from the notification 51 | shade. To check your settings tap on `☰ > Settings > Notifications > More 52 | settings` and make sure `Notifications` are toggled on. 53 | 54 | ### Notifications don't appear on my watch 55 | 56 | Wearable devices will not display persistent reminders. Toggle off `☰ > 57 | Settings > Notifications > Persistent reminders` 58 | 59 | ### Notifications don't appear on my lock screen 60 | 61 | Some lock screens exclude persistent reminders. Toggle off `☰ > Settings > 62 | Notifications > Persistent reminders` 63 | 64 | ### Notifications are not persistent anymore 65 | 66 | As noted in the [release notes](https://developer.android.com/about/versions/14/behavior-changes-all#non-dismissable-notifications) 67 | of Android 14, persistent/sticky/non-dismissable notifications are no longer 68 | supported. There is a new "swipe to snooze" feature which can be configured to recreate 69 | a notification immediately after it is dismissed. 70 | 71 | ### Notifications still don't work!!! 72 | 73 | Open up the navigation drawer, tap on `☰ > Help & feedback > Contact developer` and 74 | let me know! 75 | -------------------------------------------------------------------------------- /docusaurus.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | title: 'Tasks.org', 3 | tagline: 'Open-source To-Do Lists & Reminders', 4 | url: 'https://tasks.org', 5 | baseUrl: '/', 6 | onBrokenLinks: 'throw', 7 | onBrokenMarkdownLinks: 'warn', 8 | favicon: 'img/favicon.png', 9 | organizationName: 'tasks', // Usually your GitHub org/user name. 10 | projectName: 'tasks', // Usually your repo name. 11 | themeConfig: { 12 | navbar: { 13 | title: 'Tasks.org', 14 | logo: { 15 | alt: 'My Site Logo', 16 | src: 'img/logo.svg', 17 | }, 18 | items: [ 19 | { 20 | to: 'docs/', 21 | activeBasePath: 'docs', 22 | label: 'Docs', 23 | position: 'left', 24 | }, 25 | {to: 'blog', label: 'Blog', position: 'left'}, 26 | { 27 | href: 'https://github.com/tasks/tasks', 28 | label: 'GitHub', 29 | position: 'left', 30 | }, 31 | ], 32 | }, 33 | footer: { 34 | style: 'dark', 35 | links: [ 36 | { 37 | title: 'Docs', 38 | items: [ 39 | { 40 | label: 'Synchronization', 41 | to: 'docs/sync', 42 | }, 43 | { 44 | label: 'Donate', 45 | to: 'docs/donate', 46 | }, 47 | { 48 | label: 'Translations', 49 | to: 'docs/translations', 50 | }, 51 | ], 52 | }, 53 | { 54 | title: 'Social', 55 | items: [ 56 | { 57 | html: ` 58 | 59 | 60 | 61 | `, 62 | }, 63 | { 64 | html: ` 65 | 66 | 67 | 68 | ` 69 | }, 70 | ], 71 | }, 72 | { 73 | title: 'More', 74 | items: [ 75 | { 76 | label: 'Changelog', 77 | to: 'https://github.com/tasks/tasks/blob/main/CHANGELOG.md' 78 | }, 79 | { 80 | label: 'Privacy policy', 81 | to: 'docs/privacy', 82 | }, 83 | ], 84 | }, 85 | ], 86 | copyright: `Copyright © ${new Date().getFullYear()} Alex Baker`, 87 | }, 88 | }, 89 | presets: [ 90 | [ 91 | '@docusaurus/preset-classic', 92 | { 93 | docs: { 94 | sidebarPath: require.resolve('./sidebars.js'), 95 | // Please change this to your repo. 96 | editUrl: 97 | 'https://github.com/tasks/docs/edit/master/', 98 | }, 99 | blog: { 100 | showReadingTime: true, 101 | // Please change this to your repo. 102 | editUrl: 103 | 'https://github.com/tasks/docs/edit/master/', 104 | }, 105 | theme: { 106 | customCss: require.resolve('./src/css/custom.css'), 107 | }, 108 | }, 109 | ], 110 | ], 111 | }; 112 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tasks-org", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "serve": "docusaurus serve", 12 | "clear": "docusaurus clear" 13 | }, 14 | "dependencies": { 15 | "@docusaurus/core": "3.6.1", 16 | "@docusaurus/preset-classic": "3.6.1", 17 | "@mdx-js/react": "^3.1.0", 18 | "clsx": "^2.1.1", 19 | "react": "^18.3.1", 20 | "react-dom": "^18.3.1" 21 | }, 22 | "browserslist": { 23 | "production": [ 24 | ">0.5%", 25 | "not dead", 26 | "not op_mini all" 27 | ], 28 | "development": [ 29 | "last 1 chrome version", 30 | "last 1 firefox version", 31 | "last 1 safari version" 32 | ] 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /sidebars.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | someSidebar: { 3 | "Documentation": ['about', 'subscribe', 'donate', 'beta', 'translations', 'privacy'], 4 | "Synchronization": ['sync', 'sync_tasks_org', 'sync_google_tasks', 'sync_davx5', 'sync_caldav', 'sync_etesync', 'sync_decsync', 'sharing'], 5 | "Usage guide": ['recurrence', 'notifications', 'backups', 'markdown', 'filters', 'location', 'manual_sort_mode', 'themes', 'tasker'], 6 | Troubleshooting: ['troubleshooting_notifications', 'intents'], 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /src/css/custom.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable docusaurus/copyright-header */ 2 | /** 3 | * Any CSS included here will be global. The classic template 4 | * bundles Infima by default. Infima is a CSS framework designed to 5 | * work well for content-centric websites. 6 | */ 7 | 8 | /* You can override the default Infima variables here. */ 9 | :root { 10 | --ifm-color-primary: #2196f3; 11 | --ifm-color-primary-dark: rgb(33, 175, 144); 12 | --ifm-color-primary-darker: rgb(31, 165, 136); 13 | --ifm-color-primary-darkest: rgb(26, 136, 112); 14 | --ifm-color-primary-light: rgb(70, 203, 174); 15 | --ifm-color-primary-lighter: rgb(102, 212, 189); 16 | --ifm-color-primary-lightest: rgb(146, 224, 208); 17 | --ifm-code-font-size: 95%; 18 | } 19 | 20 | .docusaurus-highlight-code-line { 21 | background-color: rgb(72, 77, 91); 22 | display: block; 23 | margin: 0 calc(-1 * var(--ifm-pre-padding)); 24 | padding: 0 var(--ifm-pre-padding); 25 | } 26 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import clsx from 'clsx'; 3 | import Layout from '@theme/Layout'; 4 | import Link from '@docusaurus/Link'; 5 | import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; 6 | import useBaseUrl from '@docusaurus/useBaseUrl'; 7 | import styles from './styles.module.css'; 8 | 9 | const features = [ 10 | { 11 | title: 'Open source', 12 | imageUrl: 'img/undraw_version_control_9bpv.svg', 13 | description: ( 14 | <> 15 | Tasks is free software, licensed under the GNU GPLv3 16 | 17 | ), 18 | }, 19 | { 20 | title: 'Open protocols', 21 | imageUrl: 'img/undraw_agreement_aajr.svg', 22 | description: ( 23 | <> 24 | Tasks.org is compatible with Outlook, Thunderbird, Apple Reminders, and 25 | more! 26 | 27 | ), 28 | }, 29 | { 30 | title: 'Powerful and flexible', 31 | imageUrl: 'img/undraw_Powerful_re_frhr.svg', 32 | description: ( 33 | <> 34 | Filters, tags, lists, infinite-depth subtasks, manual 35 | sorting. Tasks works with nearly any productivity system! 36 | 37 | ), 38 | }, 39 | { 40 | title: 'Customizable and mutilingual', 41 | imageUrl: 'img/undraw_personal_settings_kihd.svg', 42 | description: ( 43 | <> 44 | Extensive options for customizing the look and feel of Tasks. Use Tasks in your language 45 | 46 | ), 47 | }, 48 | { 49 | title: 'Multiple sync options', 50 | imageUrl: 'img/undraw_synchronize_ccxk.svg', 51 | description: ( 52 | <> 53 | Synchronize with Tasks.org, Google Tasks, DAVx⁵, CalDAV, EteSync, 54 | or DecSync CC 55 | 56 | ), 57 | }, 58 | { 59 | title: 'Private', 60 | imageUrl: 'img/undraw_safe_bnk7.svg', 61 | description: ( 62 | <> 63 | Use offline, self-host, or setup EteSync for end-to-end 64 | encryption. There are no ads and your data is never shared with 65 | anyone 66 | 67 | ), 68 | }, 69 | ]; 70 | 71 | function Feature({imageUrl, title, description}) { 72 | const imgUrl = useBaseUrl(imageUrl); 73 | return ( 74 |
75 | {imgUrl && ( 76 |
77 | {title} 78 |
79 | )} 80 |

{title}

81 |

{description}

82 |
83 | ); 84 | } 85 | 86 | function Home() { 87 | const context = useDocusaurusContext(); 88 | const {siteConfig = {}} = context; 89 | return ( 90 | 93 |
94 |
95 |

{siteConfig.title}

96 |

{siteConfig.tagline}

97 |
98 | Get it on Google Play 99 | Get it on F-Droid 100 |
101 |
102 |
103 |
104 | {features && features.length > 0 && ( 105 |
106 |
107 |
108 | {features.map((props, idx) => ( 109 | 110 | ))} 111 |
112 |
113 |
114 | )} 115 |
116 |
117 | ); 118 | } 119 | 120 | export default Home; 121 | -------------------------------------------------------------------------------- /src/pages/styles.module.css: -------------------------------------------------------------------------------- 1 | /* stylelint-disable docusaurus/copyright-header */ 2 | 3 | /** 4 | * CSS files with the .module.css suffix will be treated as CSS modules 5 | * and scoped locally. 6 | */ 7 | 8 | .heroBanner { 9 | padding: 4rem 0; 10 | text-align: center; 11 | position: relative; 12 | overflow: hidden; 13 | } 14 | 15 | @media screen and (max-width: 966px) { 16 | .heroBanner { 17 | padding: 2rem; 18 | } 19 | } 20 | 21 | .buttons { 22 | display: flex; 23 | align-items: center; 24 | justify-content: center; 25 | } 26 | 27 | .features { 28 | display: flex; 29 | align-items: center; 30 | padding: 2rem 0; 31 | width: 100%; 32 | } 33 | 34 | .featureImage { 35 | height: 200px; 36 | width: 200px; 37 | } 38 | -------------------------------------------------------------------------------- /static/.htaccess: -------------------------------------------------------------------------------- 1 | Redirect /subscribe /docs/subscribe 2 | Redirect /privacy.html /docs/privacy 3 | Redirect /donate /docs/donate 4 | Redirect /translations /docs/translations 5 | Redirect /help/tasker /docs/tasker 6 | Redirect /help /docs 7 | Redirect /caldav /docs/caldav_intro 8 | Redirect /etesync /docs/etesync_intro 9 | Redirect /changelog https://github.com/tasks/tasks/blob/main/CHANGELOG.md 10 | Redirect /source https://github.com/tasks/tasks 11 | Redirect /weblate https://hosted.weblate.org/projects/tasks/ 12 | Redirect /sync /docs/sync 13 | Redirect /notifications /docs/notifications 14 | Redirect /intents /docs/intents 15 | Redirect /filters /docs/filters 16 | Redirect /davx5 /docs/davx5 17 | Redirect /backups /docs/backups 18 | Redirect /.well-known/caldav https://caldav.tasks.org 19 | Redirect /decsync /docs/decsync 20 | Redirect /passwords /docs/app_passwords 21 | Redirect /sharing /docs/sharing 22 | -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tasks/docs/d120a4dfa9a93bcb4a9fa97cc856b7a205ca6487/static/.nojekyll -------------------------------------------------------------------------------- /static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tasks/docs/d120a4dfa9a93bcb4a9fa97cc856b7a205ca6487/static/img/favicon.png -------------------------------------------------------------------------------- /static/img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /static/img/undraw_Powerful_re_frhr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/img/undraw_agreement_aajr.svg: -------------------------------------------------------------------------------- 1 | agreement -------------------------------------------------------------------------------- /static/img/undraw_personal_settings_kihd.svg: -------------------------------------------------------------------------------- 1 | personal settings -------------------------------------------------------------------------------- /static/img/undraw_safe_bnk7.svg: -------------------------------------------------------------------------------- 1 | safe -------------------------------------------------------------------------------- /static/img/undraw_synchronize_ccxk.svg: -------------------------------------------------------------------------------- 1 | synchronize -------------------------------------------------------------------------------- /static/img/undraw_version_control_9bpv.svg: -------------------------------------------------------------------------------- 1 | version control -------------------------------------------------------------------------------- /translations.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: translations 3 | title: Translations 4 | --- 5 | 6 | Anyone can help out with translations for Tasks. Please visit [tasks.org/weblate](https://tasks.org/weblate) to get involved. Feel free to add your language if it does not already exist 7 | 8 | **Note:** Some strings contain special formatting characters such as '%s', '\n', and '%1$s' that need to be preserved. For example in the string "Task Saved: due %s," %s is a placeholder for the task due date. If you remove these special formatting characters then Tasks will not be able to plug in the necessary values. 9 | --------------------------------------------------------------------------------