{"id":15013772,"url":"https://github.com/hamburgchimps/apple-notes-liberator","last_synced_at":"2025-04-12T15:42:13.739Z","repository":{"id":147934538,"uuid":"619002018","full_name":"HamburgChimps/apple-notes-liberator","owner":"HamburgChimps","description":"Free your Apple Notes data from Notes.app","archived":false,"fork":false,"pushed_at":"2023-09-24T14:03:02.000Z","size":176,"stargazers_count":992,"open_issues_count":16,"forks_count":24,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-03T16:12:16.328Z","etag":null,"topics":["apple-notes","picocli","quarkus"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HamburgChimps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-26T00:54:17.000Z","updated_at":"2025-04-02T04:21:47.000Z","dependencies_parsed_at":"2024-05-30T05:09:43.730Z","dependency_job_id":"901d8e53-e089-466a-99a7-80fdf120b4a1","html_url":"https://github.com/HamburgChimps/apple-notes-liberator","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamburgChimps%2Fapple-notes-liberator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamburgChimps%2Fapple-notes-liberator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamburgChimps%2Fapple-notes-liberator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HamburgChimps%2Fapple-notes-liberator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HamburgChimps","download_url":"https://codeload.github.com/HamburgChimps/apple-notes-liberator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248590906,"owners_count":21129909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple-notes","picocli","quarkus"],"created_at":"2024-09-24T19:44:45.741Z","updated_at":"2025-04-12T15:42:13.703Z","avatar_url":"https://github.com/HamburgChimps.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Apple Notes Liberator\n\nFree your Apple Notes data from Notes.app.\n\n## Credit where credit is due\n\nThis project would absolutely not be possible without the incredibly difficult and amazing work by [threeplanetssoftware][2]. Their code, [their protobuf definitions][3], and [their blog posts regarding Apple Notes][4], were invaluable. There's no way I would have been able to figure out any of the Apple Notes structure without it. Furthermore, their tool supports much more than mine! So if you want a more feature-rich Notes extractor, use theirs.\n\n## Motivations\n\n- To \"scratch my own itch\" of getting data out of Apple Notes so I can use and edit it other places\n- Learn more about Quarkus\n\n## Usage\n\n### With JBang\n\nPerhaps the most comfortable way to use this application is install it with [JBang][5]. Jbang is a really cool tool that enables easy execution of java applications without having to hassle with manually downloading jars or compiling yourself first.\n\nFor example, if you have JBang installed, you can install `apple-notes-liberator` by executing the following command:\n\n```bash\njbang app install apple-notes-liberator@hamburgchimps\n```\n\nYou will then be greeted with the following message:\n\n```bash\n[jbang] https://github.com/hamburgchimps/apple-notes-liberator/releases/latest/download/apple-notes-liberator.jar is not from a trusted source thus not running it automatically.\n\nIf you trust the url to be safe to run you can do one of the following\n\n(1) Trust once: Add no trust, just download this time (can be run multiple times while cached)\n(2) Trust limited url in future: https://github.com/hamburgchimps/apple-notes-liberator/releases/latest/download/\n(3) Trust organization url in future: https://github.com/hamburgchimps/apple-notes-liberator/releases/latest/\n(0) Cancel\n\n[jbang] Type in your choice and hit enter. Will automatically select option (0) after 30 seconds.\n```\n\nSelect option `2`, which will allow you to always execute the latest version of `apple-notes-liberator`.\n\nYou should then see the following output in your terminal:\n\n```bash\n[jbang] Adding [https://github.com/hamburgchimps/apple-notes-liberator/releases/latest/download/] to /Users/YOUR_USER/.jbang/trusted-sources.json\n[jbang] Command installed: apple-notes-liberator\n```\n\nRun `apple-notes-liberator --help` from your terminal. You should see the following output:\n\n```bash\nUsage: \u003cmain class\u003e [-hjmV] [-f=\u003cnoteStoreDb\u003e]\nFree your data from Apple Notes.\n  -f, --file=\u003cnoteStoreDb\u003e   Path to Apple Notes sqlite file\n  -h, --help                 Show this help message and exit.\n  -j, --json                 Generate JSON\n  -m, --markdown             Generate markdown (in early development, please\n                               report bugs and request features here -\u003e https:\n                               //github.\n                               com/HamburgChimps/apple-notes-liberator/issues)\n  -V, --version              Print version information and exit.\n```\n\nYou're now ready to use the application!\n\nRunning the application via JBang in this manner has the added benefit that you will always be running the latest version.\n\n### With Nix Shell\n\nIf you have nix installed on your computer, you can run `nix-shell` which will download a JAR from the releases page and put you into an isolated shell with Java 19.\n\nFrom there you can run `apple-notes-liberator`.\n\n### Downloading and executing a release jar\n\nIf you don't want to use JBang or don't use Nix shell, then you will need to already have Java installed on your system such that you can run `java -version` from your terminal of choice. Then, download a release jar from the [releases][6] page. Execute the program by running `java -jar apple-notes-liberator.jar`.\n\n## What does this application do?\n\nThis application will attempt to locate the notes database on your computer, copy it, and parse what it can. If the application cannot locate your notes database, it will print an error to the terminal and exit. In that case, you can specify the `-f` or `--file` option, passing the path to the notes database you want the application to extract data from.\n\nThe application will generate JSON and/or markdown from your Notes.app data depending on the options you specify. You must specify at least one of either `-j (--json)` or `-m (--markdown)` for the application to do anything. If you do not specify at least one of these options, the application will output its usage information to the terminal and exit.\n\nIf the program exits with no output to the terminal, then everything should have gone well and you should have a `liberated-notes` directory inside of the directory from which you executed the program. The `liberated-notes` directory will contain the following things depending on the options you provided:\n\n- A `notes.json` file. This is a JSON representation of all extracted notes. This is present when the `-j` or `--json` option was specified.\nSee [JSON Output Format][7] for more information on how this JSON is structured.\n\n- A `markdown/` directory containing a markdown file for each note in your Notes.app database. This is present when the the `-m` or `--markdown` option was specified.\n- Copies of all embedded files that could be extracted from your notes data. These will be referenced in the `notes.json` file and the generated markdown files.\n- A `notes.sqlite` file. This is a copy of your Notes.app SQLite database.\n\nNote that when using a third-party terminal app, such as iTerm, you may need to enable \"Full Disk Access\", otherwise the program will probably exit with the following error:\n\n\u003e Cannot copy notes database, do you have read and execute permissions for /Users/xxx/Library/Group Containers/group.com.apple.notes/notestore.sqlite?\n\nThis is because in MacOS 10.13 and later, the storage location for the notes database is protected by Apple's security sandbox.\n\nTo grant \"Full Disk Access\" to your terminal app, open up the Control Panel-\u003ePrivacy and Security-\u003eFull Disk Access window and enable it for you terminal app:\n\n\u003cimg width=\"701\" alt=\"image\" src=\"https://user-images.githubusercontent.com/3091714/228573691-60ce13cf-d5f1-46a1-a740-ef2f14786916.png\"\u003e\n\n**This application does NOT perform any sort of read or modification operation on your actual notes database, rather it makes a copy of it and reads from its copy.**\n\n### Enable Logging\n\nIf something isn't working, it might help to see what the application is doing. You can do so by setting the environment variable `QUARKUS_PROFILE=debug` before running the application:\n\n```bash\nQUARKUS_PROFILE=debug apple-notes-liberator\n```\n\nIf you didn't install the application with JBang, but instead downloaded a release jar, you can also use a JVM argument:\n\n```bash\njava -Dquarkus.profile=debug -jar apple-notes-liberator.jar\n```\n\nThis will result in a log file named `apple-notes-liberator.log` being generated in the `liberated-notes` directory.\n\n## JSON Output format\n\nThe `notes.json` file will contain an array of objects, where each object represents an Apple Note, and will contain the following fields:\n\n| Field Name | Description |\n| --- | --- |\n| `title` | The title extracted from the note |\n| `folder` | The name of the folder that the note is located in |\n| `text` | The plain text extracted from the note |\n| `embeddedObjects` | A list of the embedded note objects that were extracted from the note |\n| `links` | A list of links that were extracted from the note. Each object in the `links` list has a `text` and `url` property. |\n\nEach item in the `embeddedObjects` list will contain at minimum the following fields:\n\n| Field Name | Description |\n| ---  | --- |\n| `type` | The type of embedded object, either `TABLE` or `FILE`. |\n| `data` | [Embedded object data representation][8] |\n\n## Embedded object data representation\n\nThe structure of the `data` field will vary depending on the type of the embedded object. This section describes the structure of the `data` field for each type of embedded object.\n\n### Table\n\nA two-dimensional array represending the rows and columns of the table. Each item in the outer array represents a row in the table, and each element of an inner array represents a column.\n\nFor example, say you had the following table in your original Apple Note:\n\n| Animal | Cuteness Factor |\n| --- | --- |\n| Giraffe | 8 |\n| Dog | 11 |\n| Cat | 10 |\n\nThen the `data` field would contain the following two-dimensional array:\n\n```\n[\n  [ 'Animal', 'Cuteness Factor' ],\n  [ 'Giraffe', '8' ],\n  [ 'Dog', '11' ],\n  [ 'Cat', '10' ]\n]\n```\n\n### File\n\nA string containing the name of the extracted file. You can then find this file in the `liberated-notes` directory.\n\nFor example, if the `data` field contained the string `\"cat-pic.png\"`, then you will find a file named `cat-pic.png` in the `liberated-notes` directory.\n\n[0]: https://github.com/HamburgChimps/apple-notes-liberator/issues\n[1]: https://github.com/HamburgChimps/apple-notes-liberator/pulls\n[2]: https://github.com/threeplanetssoftware/apple_cloud_notes_parser\n[3]: https://github.com/HamburgChimps/apple-notes-liberator/blob/main/src/main/proto/notestore.proto\n[4]: https://www.ciofecaforensics.com/categories/#Apple%20Notes\n[5]: https://www.jbang.dev\n[6]: https://github.com/hamburgchimps/apple-notes-liberator/releases\n[7]: #json-output-format\n[8]: #embedded-object-data-representation\n[9]: #what-does-this-application-do\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhamburgchimps%2Fapple-notes-liberator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhamburgchimps%2Fapple-notes-liberator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhamburgchimps%2Fapple-notes-liberator/lists"}