{"id":13435175,"url":"https://github.com/rafaelespinoza/notexfr","last_synced_at":"2025-03-18T02:31:07.910Z","repository":{"id":57534531,"uuid":"254257157","full_name":"rafaelespinoza/notexfr","owner":"rafaelespinoza","description":"convert, backfill note data","archived":false,"fork":false,"pushed_at":"2024-12-19T02:20:16.000Z","size":106,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-19T03:23:59.611Z","etag":null,"topics":["evernote","standardnotes"],"latest_commit_sha":null,"homepage":"","language":"Go","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/rafaelespinoza.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":"2020-04-09T02:59:56.000Z","updated_at":"2024-12-19T02:20:18.000Z","dependencies_parsed_at":"2024-04-24T01:32:52.741Z","dependency_job_id":"3eeec878-78f7-4ae6-8382-5d6bdb3ea035","html_url":"https://github.com/rafaelespinoza/notexfr","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelespinoza%2Fnotexfr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelespinoza%2Fnotexfr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelespinoza%2Fnotexfr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelespinoza%2Fnotexfr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rafaelespinoza","download_url":"https://codeload.github.com/rafaelespinoza/notexfr/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244143950,"owners_count":20405304,"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":["evernote","standardnotes"],"created_at":"2024-07-31T03:00:33.482Z","updated_at":"2025-03-18T02:31:07.902Z","avatar_url":"https://github.com/rafaelespinoza.png","language":"Go","funding_links":[],"categories":["Tools"],"sub_categories":["Importers, Exporters, and Converters"],"readme":"```\n                  __               ____\n   ____   ____ __/ /_ ___   _  __ / __/_____\n  / __ \\ / __ \\\\  __// _ \\ | |/_// /_ / ___/\n / / / // /_/ // /_ /  __/_\u003e  \u003c / __// /\n/_/ /_/ \\____/ \\__/ \\___//_/|_|/_/  /_/\n```\n\n[![](https://github.com/rafaelespinoza/notexfr/workflows/build/badge.svg)](https://github.com/rafaelespinoza/notexfr/actions)\n\n`notexfr` is a tool to convert and adapt data for transfer between note-taking services.\n\n#### What are the features?\n\n- Convert Evernote data into StandardNotes format.\n- Fetch Note, Notebook, Tag data from your Evernote account (using the EDAM API)\n  and write to local JSON files.\n- Backfill existing StandardNotes notes with Evernote Notebook metadata.\n- Inspect ENEX file (Evernote's export format).\n\n#### Why would you use it?\n\nUse the `convert` tool to transform Evernote data into _new_ StandardNotes data.\n\nIf you've already moved your data from Evernote into StandardNotes, you can use\n`backfill` to _update_ StandardNotes data. You've probably used the interface\nat https://dashboard.standardnotes.org/tools to take an ENEX (Evernote export)\nfile to convert it to StandardNotes format. Unfortunately, the ENEX format does\nnot contain any Notebook info, so it can't be preserved with the existing\nconversion tool. You'd use this if you want to preserve your Evernote Notebooks\nand their Note associations.\n\n## Getting Started\n\nMany common tasks in this repo use [just](https://just.systems/).\n\n```sh\n$ just build\n$ mv -iv bin/notexfr $GOPATH/bin\n```\n\n**TLDR**:\n\n- Set up Evernote credentials\n- Fetch Evernote data, write to local files\n- Convert or backfill StandardNotes data. Do either of the following:\n  - Convert data to StandardNotes format (create new data)\n  - Backfill data for StandardNotes (update copies of existing data)\n\n### Set up Evernote credentials\n\nYou would need a developer token with full access to your account. Visit the\n[Evernote developer documentation](https://dev.evernote.com/doc) site.\n\nRequest a *developer token* for access to your Evernote account. Typically, you\nstart with access to a sandbox account, which is for testing things out, and\nthen request access to your production account. At the time of this writing,\nit's a manual process but they are usually pretty quick.\n\nOnce you have that info, store them in an environment variable file. Create a\ntemplate file and fill it in.\n\nYou must specify a path to an environment variable file. _The information in\nthere will be equivalent to your username and password_.\n\n```\n$ notexfr edam make-env --envfile path/to/envfile\n$ chmod 600 path/to/envfile\n```\n\n### Fetch Evernote data, write to local files\n\nBy default, everything is fetched using your sandbox account. Use the\n`--production` flag to fetch data from your production Evernote account.\nRemember to specify the path to the environment variable file.\n\n```sh\n$ notexfr edam notebooks \\\n  --production \\\n  --output path/to/en_notebooks.json \\\n  --envfile path/to/envfile\n\n$ notexfr edam tags \\\n  --production \\\n  --output path/to/en_tags.json \\\n  --envfile path/to/envfile\n```\n\nTo get notes, you might consider a longer timeout value than the default.\nAnecdotally, it took about 90 seconds to download about 1550 notes. Your results\nwill vary. To be safe, set it on the higher end. Add the flag `--log-level=INFO`\nfor updates.\n\n```sh\n$ notexfr edam notes \\\n  --production \\\n  --output path/to/en_notes.json \\\n  --envfile path/to/envfile \\\n  --timeout 120s \\\n  --log-level=INFO\n```\n\n### Convert or backfill StandardNotes data\n\nAfter downloading your Evernote data to local JSON files, you're ready to\ntransform it.\n\n##### Convert data to StandardNotes format\n\n_Do this if you want to do a full conversion of Evernote data and create new\nStandardNotes data_.\n\n```sh\n$ notexfr convert edam-to-sn \\\n  --input-en-notebooks path/to/en_notebooks.json \\\n  --input-en-notes path/to/en_notes.json \\\n  --input-en-tags path/to/en_tags.json \\\n  --output path/to/sn.json\n```\n\n##### Backfill data for StandardNotes\n\n_Do this if you want to do update existing StandardNotes data_.\n\nThe `--input-sn` value would a representation of your data in StandardNotes. For\nexample, it could be the output of https://dashboard.standardnotes.org/tools.\n\n```sh\n$ notexfr backfill en-to-sn \\\n  --input-en-notebooks path/to/en_notebooks.json \\\n  --input-en-notes path/to/en_notes.json \\\n  --input-en-tags path/to/en_tags.json \\\n  --input-sn path/to/evernote-to-sn.txt \\\n  --output-notebooks path/to/sn_notebooks.json \\\n  --output-notes path/to/sn_notes.json \\\n  --output-tags path/to/sn_tags.json\n```\n\n## Development\n\nUse `just` to perform common tasks.\n\nOutput a binary\n```sh\n$ just build\n```\n\nRun tests\n```sh\n$ just test\n\n# run tests with some flags\n$ just test -v -count=1 -failfast\n\n# run tests on select package paths, override the Justfile variable PKG_PATH\n$ just PKG_PATH=./foo/bar/... test\n\n# select package path, specify some test flags\n$ just PKG_PATH=./foo/bar/... test -v -race\n```\n\nDo static checks\n```sh\n$ just vet\n```\n\nBy default, the first `go` in your PATH is used. You could specify another\ngolang version by setting the `GO` variable `just`. Example:\n\n```sh\n$ just GO=/path/to/go1.x.y/bin/go build\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelespinoza%2Fnotexfr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafaelespinoza%2Fnotexfr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelespinoza%2Fnotexfr/lists"}