obsidian-importer: Import from Apple Notes - $2,500

Please upvote this issue if you would like to see Apple Notes as an import format.

Bounty

See the Contribution guidelines for how to claim this bounty.

Bounty: $2,500 USD Timeframe: 21 days

Please only apply if you have taken time to explore the Importer codebase, as well as existing options such as Apple Notes Liberator and Apple Cloud Notes Parser. Provide detail about how you would approach solving it within the constraints of this Obsidian plugin.

Requirements

  • Must work on macOS — iOS is nice to have but not required for initial version
  • Properly converts files to Obsidian-flavored Markdown, including tables, to-do lists, etc
  • Support for images and attachments. Embed links converted to Markdown format !()[image.png] and placed in the user’s defined attachment location (Settings → File & links)
  • Supports internal links added in iOS17

Current solutions

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Reactions: 58
  • Comments: 26 (5 by maintainers)

Commits related to this issue

Most upvoted comments

A $2,500 bounty has been added to this project.

I have been developing & maintaining Exporter for the past 7 years. Just started using Obsidian & loving it. If there are any special requirements needed for Obsidian that aren’t being met with the current version of Exporter, please do let me know.

I would like to apply for this if possible - this seems like a fun thing to complete.

I have developed the Obsidian Homepage plugin, which is the 30th most popular in the community plugin repository. Additionally, I used to use Apple Notes as my primary note-taking solution and still use it for a few small things (though I use Obsidian for anything substantial), so I’m well-acquainted with what users expect and to test the correctness of any solution that would be developed.

I have examined the Importer code and have already developed a basic proof-of concept AppleNotesImporter that takes the Apple Notes database and decodes the note files, and intend to complete it and create a full-featured solution if this is accepted.

  • It detects any NoteStore SQLite database, which is stored in a designated location on the user’s computer. This requires Obsidian to have the Full Disk Access permission on macOS, so it would prompt the user to ensure it is enabled if they don’t have it (if their vault isn’t in a location that requires it). Unfortunately AFAIK there is no way around this.
  • Since macOS natively comes with an up-to-date version of SQLite it leverages that (with a small binding library), since using traditional SQLite node modules isn’t possible given the Obsidian plugin format. WASM could also be considered instead, but that would be a worse solution IMO (though it could be implemented as a fallback).
  • Most note data is stored in a column that is a gzipped protobuf. This contains the raw text, and then any formatting that is applied to said text. I use pako and protobuf.js to decode the note data itself.
  • Attachments and internal links aren’t currently implemented but would be if I am assigned. The former shouldn’t be too difficult as they are already stored in the filesystem, and there is prior work in this area (as you noted above). The latter would be a bit more of a challenge but should be doable.
  • It currently only works on macOS, and is disabled on iOS. Unfortunately, I believe there’s a good chance that obtaining notes on iOS isn’t possible at all given the strict permissions enforced on that platform.

Your app worked wonderfully for me @Star-Lord-XIII - Many thanks!

I have been developing & maintaining Exporter for the past 7 years. Just started using Obsidian & loving it. If there are any special requirements needed for Obsidian that aren’t being met with the current version of Exporter, please do let me know.

Huge fan of Exporter! 🙇‍♂️ Thanks for your work on that.

I have upgraded to macOS Sonoma and confirm that the internal links can be retrieved (quite easily in fact, since it builds on existing aspects of the data format). Haven’t really done too much yet as I have been quite busy lately, but I am confident I can meet the deadline barring exceptional mitigating circumstances.

Hi there, I’d like to apply for this.

My approach doesn’t ask users to grant full disk access, which I think is a bit invasive. The main point of a built-in importer is to make things easier for non-tech people, so this might put them off a bit.

It’s based on Apple JXA (JavaScript for Automation) and written in TypeScript. This PR shows how my approach works.

If this gets picked, I can work on it more to fix and iron out the bugs.

Thank you.

Acknowledged.