TaskBridge


NameTaskBridge JSON
Version 0.1.2b2 PyPI version JSON
download
home_pagehttps://taskbridge.app/
SummaryExport your Apple Reminders & Notes to NextCloud, a local folder, or CalDav - and keep them in sync!
upload_time2024-05-30 13:49:18
maintainerNone
docs_urlNone
authorPint-Sized Software
requires_python<3.13,>=3.10
licenseGPL-3.0-or-later
keywords sync note sync reminder sync cloud notes cloud reminders
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # TaskBridge

Export your Apple Reminders & Notes to NextCloud, a local folder, or CalDav - and keep them in sync!

[![Documentation Status](https://readthedocs.org/projects/taskbridge/badge/?version=latest)](https://taskbridge.readthedocs.io/en/latest/?badge=latest) ![example workflow](https://github.com/pint-sized/taskbridge/actions/workflows/python-app.yml/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/pint-sized/taskbridge/badge.svg)](https://coveralls.io/github/pint-sized/taskbridge)

Apple Notes & Reminders are great apps... as long as you're using them in the Apple ecosystem. If you need access to your 
data from Windows, Linux or an Android device, you're stuck using web apps. TaskBridge is an attempt at solving this
problem, by allowing notes and reminders to be synchronised to other cloud services which can more easily be accessed on 
multiple devices. 

> TaskBridge is in no way affiliated-with or endorsed by Apple, Inc.


![screenflow_sync.gif](https://github.com/pint-sized/taskbridge/raw/main/docs/screenflow_sync.gif)  ![screenflow_notes.gif](https://github.com/pint-sized/taskbridge/raw/main/docs/screenflow_notes.gif)  ![screenflow_reminders.gif](https://github.com/pint-sized/taskbridge/raw/main/docs/screenflow_reminders.gif)

## Current Sync Support

- Apple Notes can be synchronised with NextCloud Notes, or any other Markdown folder.
- Apple Reminders can be synchronised with NextCloud Tasks, or most CalDAV VTODO calendars.

## Documentation

- For full user documentation, see [TaskBridge User Documentation](https://docs.taskbridge.app).
- For technical documentation, see [TaskBridge on Read the Docs](https://taskbridge.readthedocs.io).

## Limitations
TaskBridge has several known limitations. Some of these limitations are due to TaskBridge being brand-new software, 
worked on by one guy, in his spare time. However, many limitations come from the closed nature of the Apple ecosystem. 
This is unfortunate, but a reality.

You should therefore be aware of the following limitations:

### Notes
- Only image and URL attachments are supported. This is due to the closed way that other attachment types are handled by Apple Notes, and the fact that NextCloud Notes does not support other attachment types.
- Todo items (i.e. items with a checkable box) are not supported, and will be converted to bullets once synchronised. This is due to the closed (and undocumented) way that Apple Notes handles these items.

### Reminders
- Alarms do not have time zone support.
- Although alarms are synchronised to NextCloud, the NextCloud Notes app will not display reminder messages. This is not a TaskBridge limitation.
- Additional notes added to reminders are synchronised, but this does not include attachments.

### Notes & Reminders
- When an item is sychronised from a remote server to the local Notes/Reminders app, the modification date of the local version is set to the date/time when sychronisation occurred. This cannot be changed by TaskBridge. This means that, on the next sync, the item will be re-uploaded to the remote server, even if no further changes have been made locally. However, this does not result in lost data - if more changes are made remotely, the remote note is correctly used as the ‘newer’ note.

## Contributing

TaskBridge is currently a one-man effort! Hopeully, this section will some day be filled with contributor's names! If you 
would like to contribute to TaskBridge, you're in the right place. 

What the project needs most:

1. **Testers**. Being a one-man effort, TaskBridge has been tested on an extremely limited number of configurations. If you
have a Mac, you too can test TaskBridge by just trying it out and [reporting any issues](https://github.com/pint-sized/taskbridge/issues).
2. **Developers**. As with any project in its early days, TaskBridge has bugs. An extra pair of eyes going over the code 
would be a huge help to continue squashing as many of them as possible. 
3. **Designers**. The TaskBridge UI and imagery could use a lot of spit and polish. If you have UI/UX or graphic design skills,
you too can make a valuable contribution.

## Developing
The project is written in Python and uses [Poetry](https://python-poetry.org) for dependency management.
Use any environment you prefer. The project is primarily built using PyCharm on macOS; A `.idea` folder is provided 
if you're using PyCharm, which has various inspection and run configurations already set. You will need to be using macOS 
and logged into iCloud for synchronisation functions to work.

1.  Install [Homebrew](https://brew.sh/).

2. Install Git:

       brew install git

3. Clone this repository:

       git clone https://github.com/pint-sized/taskbridge.git

4. Install Poetry:

       pipx install poetry

5. Active the virtual environment:

       cd /path/to/TaskBridge
       poetry shell

6. Install dependencies:

       poetry install

### Useful commands

Run TaskBridge: 

    python taskbridge/gui/TaskBridge.py

Build:

    poetry run poetry build

Update lock file (after changing `pyproject.toml`):

    poetry run poetry lock

Generate App file (alias):

    python setup.py py2app -A

Generate App file (production):

    python setup.py py2app

## FAQ

**What are the System Requirements?**

TaskBridge must run on macOS, and you must be logged into iCloud. There's no other way of getting access to your notes and 
reminders otherwise.

**How does it work?**

TaskBridge uses various AppleScript scripts to fetch your notes and reminders from the Apple apps. Notes are converted 
from HTML to Markdown, and added to your NextCloud Notes folder (or any other folder of your choice). In the case of NextCloud, 
it's then up to the [NextCloud Desktop](https://nextcloud.com/install/) app to sync these. Reminders are synchronised to NextCloud 
Tasks, or other CalDAV servers, via CalDAV.

**Does everything work?**

No. Please see the limitations. The biggest limitation is that certain elements in Apple Notes (such as checkable TODO 
items and attachments other than links or images) are undocumented and unavailable (presumably) via AppleScript.

**Do I have to keep my Mac switched on if I use scheduled reminders?**

Yes.

**Why does TaskBridge prompt me to prune completed reminders?**

For some reason, the Apple Reminders app is extremely slow to respond when there are many stored reminders. For most people, 
the majority of their reminders are in the Completed section. Clearing this out greatly improves performance. Even with just 20-or-so 
completed reminders, Reminder synchronisation takes **considerably** longer.

**Can I use TaskBridge without a GUI?**

Yes. A CLI is available for scripted/automated use. See `taskbridge/cli`.
 A [PyPi package](https://pypi.org/project/TaskBridge/) is also available. Also, see the `taskbridge/notes` 
and `taskbridge/reminders` folders in the repository.

**Why don't you use the NextCloud Notes API?**

The NextCloud Notes API is lacking some core features, such as support for adding attachments to Notes.

**Why don't you use CloudKit?**

The information available via CloudKit is limited. Moreover, Apple's EULA specifically forbids accessing CloudKit via an 
application on script.


## Disclaimer

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 
            

Raw data

            {
    "_id": null,
    "home_page": "https://taskbridge.app/",
    "name": "TaskBridge",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.13,>=3.10",
    "maintainer_email": null,
    "keywords": "sync, note sync, reminder sync, cloud notes, cloud reminders",
    "author": "Pint-Sized Software",
    "author_email": "hello@pintsized.dev",
    "download_url": "https://files.pythonhosted.org/packages/82/14/89266b8ebdd31239e40a101ca998fdc137b49a10121ebcbd27b5e503e271/taskbridge-0.1.2b2.tar.gz",
    "platform": null,
    "description": "# TaskBridge\n\nExport your Apple Reminders & Notes to NextCloud, a local folder, or CalDav - and keep them in sync!\n\n[![Documentation Status](https://readthedocs.org/projects/taskbridge/badge/?version=latest)](https://taskbridge.readthedocs.io/en/latest/?badge=latest) ![example workflow](https://github.com/pint-sized/taskbridge/actions/workflows/python-app.yml/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/pint-sized/taskbridge/badge.svg)](https://coveralls.io/github/pint-sized/taskbridge)\n\nApple Notes & Reminders are great apps... as long as you're using them in the Apple ecosystem. If you need access to your \ndata from Windows, Linux or an Android device, you're stuck using web apps. TaskBridge is an attempt at solving this\nproblem, by allowing notes and reminders to be synchronised to other cloud services which can more easily be accessed on \nmultiple devices. \n\n> TaskBridge is in no way affiliated-with or endorsed by Apple, Inc.\n\n\n![screenflow_sync.gif](https://github.com/pint-sized/taskbridge/raw/main/docs/screenflow_sync.gif)  ![screenflow_notes.gif](https://github.com/pint-sized/taskbridge/raw/main/docs/screenflow_notes.gif)  ![screenflow_reminders.gif](https://github.com/pint-sized/taskbridge/raw/main/docs/screenflow_reminders.gif)\n\n## Current Sync Support\n\n- Apple Notes can be synchronised with NextCloud Notes, or any other Markdown folder.\n- Apple Reminders can be synchronised with NextCloud Tasks, or most CalDAV VTODO calendars.\n\n## Documentation\n\n- For full user documentation, see [TaskBridge User Documentation](https://docs.taskbridge.app).\n- For technical documentation, see [TaskBridge on Read the Docs](https://taskbridge.readthedocs.io).\n\n## Limitations\nTaskBridge has several known limitations. Some of these limitations are due to TaskBridge being brand-new software, \nworked on by one guy, in his spare time. However, many limitations come from the closed nature of the Apple ecosystem. \nThis is unfortunate, but a reality.\n\nYou should therefore be aware of the following limitations:\n\n### Notes\n- Only image and URL attachments are supported. This is due to the closed way that other attachment types are handled by Apple Notes, and the fact that NextCloud Notes does not support other attachment types.\n- Todo items (i.e. items with a checkable box) are not supported, and will be converted to bullets once synchronised. This is due to the closed (and undocumented) way that Apple Notes handles these items.\n\n### Reminders\n- Alarms do not have time zone support.\n- Although alarms are synchronised to NextCloud, the NextCloud Notes app will not display reminder messages. This is not a TaskBridge limitation.\n- Additional notes added to reminders are synchronised, but this does not include attachments.\n\n### Notes & Reminders\n- When an item is sychronised from a remote server to the local Notes/Reminders app, the modification date of the local version is set to the date/time when sychronisation occurred. This cannot be changed by TaskBridge. This means that, on the next sync, the item will be re-uploaded to the remote server, even if no further changes have been made locally. However, this does not result in lost data - if more changes are made remotely, the remote note is correctly used as the \u2018newer\u2019 note.\n\n## Contributing\n\nTaskBridge is currently a one-man effort! Hopeully, this section will some day be filled with contributor's names! If you \nwould like to contribute to TaskBridge, you're in the right place. \n\nWhat the project needs most:\n\n1. **Testers**. Being a one-man effort, TaskBridge has been tested on an extremely limited number of configurations. If you\nhave a Mac, you too can test TaskBridge by just trying it out and [reporting any issues](https://github.com/pint-sized/taskbridge/issues).\n2. **Developers**. As with any project in its early days, TaskBridge has bugs. An extra pair of eyes going over the code \nwould be a huge help to continue squashing as many of them as possible. \n3. **Designers**. The TaskBridge UI and imagery could use a lot of spit and polish. If you have UI/UX or graphic design skills,\nyou too can make a valuable contribution.\n\n## Developing\nThe project is written in Python and uses [Poetry](https://python-poetry.org) for dependency management.\nUse any environment you prefer. The project is primarily built using PyCharm on macOS; A `.idea` folder is provided \nif you're using PyCharm, which has various inspection and run configurations already set. You will need to be using macOS \nand logged into iCloud for synchronisation functions to work.\n\n1.  Install [Homebrew](https://brew.sh/).\n\n2. Install Git:\n\n       brew install git\n\n3. Clone this repository:\n\n       git clone https://github.com/pint-sized/taskbridge.git\n\n4. Install Poetry:\n\n       pipx install poetry\n\n5. Active the virtual environment:\n\n       cd /path/to/TaskBridge\n       poetry shell\n\n6. Install dependencies:\n\n       poetry install\n\n### Useful commands\n\nRun TaskBridge: \n\n    python taskbridge/gui/TaskBridge.py\n\nBuild:\n\n    poetry run poetry build\n\nUpdate lock file (after changing `pyproject.toml`):\n\n    poetry run poetry lock\n\nGenerate App file (alias):\n\n    python setup.py py2app -A\n\nGenerate App file (production):\n\n    python setup.py py2app\n\n## FAQ\n\n**What are the System Requirements?**\n\nTaskBridge must run on macOS, and you must be logged into iCloud. There's no other way of getting access to your notes and \nreminders otherwise.\n\n**How does it work?**\n\nTaskBridge uses various AppleScript scripts to fetch your notes and reminders from the Apple apps. Notes are converted \nfrom HTML to Markdown, and added to your NextCloud Notes folder (or any other folder of your choice). In the case of NextCloud, \nit's then up to the [NextCloud Desktop](https://nextcloud.com/install/) app to sync these. Reminders are synchronised to NextCloud \nTasks, or other CalDAV servers, via CalDAV.\n\n**Does everything work?**\n\nNo. Please see the limitations. The biggest limitation is that certain elements in Apple Notes (such as checkable TODO \nitems and attachments other than links or images) are undocumented and unavailable (presumably) via AppleScript.\n\n**Do I have to keep my Mac switched on if I use scheduled reminders?**\n\nYes.\n\n**Why does TaskBridge prompt me to prune completed reminders?**\n\nFor some reason, the Apple Reminders app is extremely slow to respond when there are many stored reminders. For most people, \nthe majority of their reminders are in the Completed section. Clearing this out greatly improves performance. Even with just 20-or-so \ncompleted reminders, Reminder synchronisation takes **considerably** longer.\n\n**Can I use TaskBridge without a GUI?**\n\nYes. A CLI is available for scripted/automated use. See `taskbridge/cli`.\n A [PyPi package](https://pypi.org/project/TaskBridge/) is also available. Also, see the `taskbridge/notes` \nand `taskbridge/reminders` folders in the repository.\n\n**Why don't you use the NextCloud Notes API?**\n\nThe NextCloud Notes API is lacking some core features, such as support for adding attachments to Notes.\n\n**Why don't you use CloudKit?**\n\nThe information available via CloudKit is limited. Moreover, Apple's EULA specifically forbids accessing CloudKit via an \napplication on script.\n\n\n## Disclaimer\n\nTHE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n ",
    "bugtrack_url": null,
    "license": "GPL-3.0-or-later",
    "summary": "Export your Apple Reminders & Notes to NextCloud, a local folder, or CalDav - and keep them in sync!",
    "version": "0.1.2b2",
    "project_urls": {
        "Homepage": "https://taskbridge.app/",
        "Repository": "https://github.com/pint-sized/taskbridge"
    },
    "split_keywords": [
        "sync",
        " note sync",
        " reminder sync",
        " cloud notes",
        " cloud reminders"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "528f7a329352a162ccf1c1cfbc183e8d3e91cd403d3b28c4b613e201471e672b",
                "md5": "0b6ac030a6fc73175d3bd8b49316f2ec",
                "sha256": "a6e737d2d156b55c247eeb812741a39c01e72e31117292cc65bb305433a62460"
            },
            "downloads": -1,
            "filename": "taskbridge-0.1.2b2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "0b6ac030a6fc73175d3bd8b49316f2ec",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.13,>=3.10",
            "size": 7397595,
            "upload_time": "2024-05-30T13:49:05",
            "upload_time_iso_8601": "2024-05-30T13:49:05.872484Z",
            "url": "https://files.pythonhosted.org/packages/52/8f/7a329352a162ccf1c1cfbc183e8d3e91cd403d3b28c4b613e201471e672b/taskbridge-0.1.2b2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "821489266b8ebdd31239e40a101ca998fdc137b49a10121ebcbd27b5e503e271",
                "md5": "aa42ec2bc4da30268dfd45c7606c33f6",
                "sha256": "e3ce7d6620a38eb425cf03ed8f860856744dc646a37467f998b9db29ecd40b6a"
            },
            "downloads": -1,
            "filename": "taskbridge-0.1.2b2.tar.gz",
            "has_sig": false,
            "md5_digest": "aa42ec2bc4da30268dfd45c7606c33f6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.13,>=3.10",
            "size": 7362975,
            "upload_time": "2024-05-30T13:49:18",
            "upload_time_iso_8601": "2024-05-30T13:49:18.351708Z",
            "url": "https://files.pythonhosted.org/packages/82/14/89266b8ebdd31239e40a101ca998fdc137b49a10121ebcbd27b5e503e271/taskbridge-0.1.2b2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-30 13:49:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pint-sized",
    "github_project": "taskbridge",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "taskbridge"
}
        
Elapsed time: 0.52422s