Releases: mooja77/evernote-to-onenote
Release list
v1.4.3 — monorepo: CLI on shared engine + first engine publish
First release of the unified monorepo build.
evernote-to-onenote@1.4.3(npm) — the CLI now runs on the sharedevernote-onenote-enginepackage. No user-facing behavior change vs 1.4.2; same flags, same resumable import, sameprogress.jsoncompatibility.evernote-onenote-engine@1.0.0(npm) — first publish of the shared engine (ENEX parsing, ENML→HTML, OneNote Graph client, resumable ledger, event-emitting import core), consumed by both the CLI and the desktop app.
Both verified with a clean npm install (the CLI resolves the engine dependency from npm and runs).
The desktop app remains at v1.0.4 (see that release for the Windows installer).
🤖 Generated with Claude Code
Evernote to OneNote v1.0.4
A Windows desktop app that migrates an Evernote .enex export into Microsoft OneNote. Download, install, sign in, pick your file, click go.
v1.0.4 — world-class UI/UX redesign. The visual layer was rebuilt from the ground up — calmer, more professional, and easier for non-technical users to follow. The import engine, sign-in, and wizard flow are unchanged from v1.0.3.
- A refined design system: considered colour and spacing, depth and soft shadows, a smooth fade-in as each step appears.
- The 5-step progress bar now has a connecting track that fills as you go, with check marks on completed steps.
- An app brand mark, a gradient progress bar, polished buttons, inputs, and the notebook picker.
Download
- EvernoteToOneNote-Setup.exe — installer (recommended).
- EvernoteToOneNote-Portable.zip — no install needed; unzip and run
Evernote to OneNote.exe.
The build is not code-signed, so Windows SmartScreen shows an "unknown publisher" warning. Choose More info -> Run anyway.
How to use
- In Evernote, select a notebook and choose File -> Export Notes, saving as an
.enexfile. - Open the app and sign in with Microsoft — your browser opens for sign-in, then the app continues on its own.
- Choose your
.enexfile, pick the OneNote section to import into, and start.
Every note becomes a page in that section. The import is resumable — if it stops part-way, run it again and finished notes are skipped.
Evernote to OneNote v1.0.3
A Windows desktop app that migrates an Evernote .enex export into Microsoft OneNote. Download, install, sign in, pick your file, click go.
v1.0.3 — third round of UX fixes:
- A failed import now offers Try again (re-runs the same import) instead of an irrelevant "Open OneNote".
- The live "failed" counter during an import turns red when notes fail, so problems are noticed straight away.
- Notebook headers are screen-reader friendly (
aria-expanded). - Invalid section-name characters are caught with a clear message naming the problem.
Download
- EvernoteToOneNote-Setup.exe — installer (recommended).
- EvernoteToOneNote-Portable.zip — no install needed; unzip and run
Evernote to OneNote.exe.
The build is not code-signed, so Windows SmartScreen shows an "unknown publisher" warning. Choose More info → Run anyway.
How to use
- In Evernote, export your notes: File → Export Notes as
.enex. - Open the app and sign in with your Microsoft account — your normal browser opens for sign-in, then the app continues automatically.
- Choose your
.enexfile and pick the OneNote section to import into. - The import runs note by note. It is resumable — if interrupted, run it again and notes already imported are skipped.
Windows 10 / 11, 64-bit.
v1.4.2 — fix --output-html broken image references
Bug fix (please upgrade from v1.4.0 / v1.4.1 if you use --output-html)
--output-html mode was emitting Microsoft Graph multipart-form placeholders (<img src=\"name:part1\" />) into the static HTML, leaving images and attachments broken in every browser, OneNote desktop, Notion, Obsidian, Apple Notes, etc. Discovered by running v1.4.1 against a real 2073-note Evernote export — 12% of output files had broken image refs.
What's fixed
--output-htmlnow writes each used resource to a sibling<noteName>.assets/<partN>.<ext>file (extension picked from MIME — covers common image, audio, video, and PDF types) and rewrites everysrc=anddata=attribute to the relative path. Each.html+.assetspair is self-contained.- The completion message no longer hardcodes "Your notes are in OneNote" —
--output-htmlmode now reports the actual output folder + a brief drag-this-into-your-note-app hint.
Why this matters
--output-html is the no-Microsoft-account path through the tool. v1.4.0 and v1.4.1 silently produced broken HTML for any note with an inline image — making the tool unusable as an Evernote-to-anything converter for image-heavy users. v1.4.2 makes the output actually portable.
End-to-end verified
Tested against a real 87-note Moores Jewellers ENEX export:
- 24
.assets/folders created (notes with attachments) - All 87
.htmlfiles use relative paths — zeroname:refs - Sibling files are valid JPEGs (verified via
file—JPEG image data, 1948x2567) - Drops cleanly into note apps via folder drag
Compatibility
- Same flags, same exit codes, same
progress.jsonformat as v1.4.1 --batch(Microsoft Graph) path unchanged- Test suite: 559 pass / 0 fail / 7 skipped (+1 regression test on top of 1.4.1)
Install / upgrade
```sh
npm install -g evernote-to-onenote@1.4.2
```
🤖 Caught by integration testing on a real-world ENEX export.
v1.4.1 — fix --from-local on Evernote v11 + auto-detect
Bug fixes (supersedes v1.4.0)
v1.4.0's --from-local mode shipped two bugs that surfaced on first real test against an actual Evernote v11 install. Anyone on v1.4.0 should upgrade.
-
Auto-detect didn't find the cache file.
findSqlInDir()only checked direct children ofconduit-storage/, but real installs put the SQL files one level deeper inside a per-host subfolder (https%3A%2F%2Fwww.evernote.com). Now recurses one level. -
Evernote v11 produced cryptic errors instead of clear guidance. v11 (released 2026-01-19) replaced the v10
TKey/TValueJSON-blob shape with flat columns and droppedCacheLookasideentirely. Bodies are stored as plain text only — the HTML/ENML this importer needs is fetched on-demand and not cached locally. v1.4.1 detects v11 at runtime and refuses with:Evernote v11 desktop cache detected —
--from-localdoes not support v11.
Use--batchwith an ENEX export instead.…instead of
Unexpected Nodes_Note schema (no recognised id/value columns)which left users stuck.
Updated guidance
--from-local is v10-only. README's "Which mode should I use?" decision tree now flags this explicitly. v11 users must use --batch <enex-folder> with an ENEX export — that path is unaffected and works on every Evernote tier.
Compatibility
- Same flags, same exit codes, same
progress.jsonformat as v1.4.0 - Test suite: 558 pass / 0 fail / 7 skipped (added 2 regression tests)
--batchmode is unchanged
Install / upgrade
npm install -g evernote-to-onenote@1.4.1🤖 Caught by post-publish testing on a real Evernote v11 install. Plan #47's pre-implementation BLOCKERS B1/B2 (verify schema before coding) had explicitly called this out — v1.4.1 closes the gap.
v1.4.0 — --from-local SQLite cache mode
Highlights
--from-local mode — read notes directly from Evernote desktop's local SQLite cache. Skips the manual ENEX export step on machines with Evernote v10/v11 installed.
This is the primary escape hatch for users hit by Evernote's API key issuance suspension (active since 2026-01-22). The local cache contains the full HTML body and bypasses the API entirely — no key, no OAuth, no rate limits.
What's new
evernote-to-onenote --from-local— auto-detects the cache on Windows + macOS (non-sandboxed), opens read-only, imports notes through the existing pipeline--cache-path <path>— explicit override for non-standard installs- macOS App Store (sandboxed) builds are detected and refused with a specific error pointing users at Evernote Legacy
- Resumable via the existing
progress.json/--resume - Comprehensive test coverage: +59 tests across parser unit, CLI, integration, resumability
Known limits (v1)
- Local cache only contains notes the user has opened in v10 or marked Available offline. Partial caches surface a clear "make these notebooks offline and rerun" message.
- Text-only: in-line images and attachments are replaced with
[image not included]markers. Use--batch <enex-folder>for full fidelity.
Compatibility
- Node.js ≥20
- Existing flags (
--batch,--wizard,--auth,--resume, etc.) behave identically.--from-localis opt-in and mutually exclusive with--batch/ positional ENEX paths. - 556 / 0 fail / 7 skipped — same passing baseline as v1.3.0, plus 59 new tests for the
--from-localfeature.
Install / upgrade
npm install -g evernote-to-onenote@1.4.0🤖 Release prepared via the JMS Dev Lab agent harness (plan #47 build, plan #48 recovery, manual review #26178 PASS).
v1.3.0
Three additive feature improvements. Every v1.2.4 flag, positional command, and progress.json file behaves unchanged — no migration required.
What's new
--wizardalias for--guidedplus awizardpositional alias forsetup(#13). Use whichever name feels more natural.--reauthflag clears the saved Microsoft session (.access-token+msal-cache.json) and re-runs sign-in (#13). The most common 'something's wrong' state — expired token — is now one command instead of three.- ENML edge-case hardening (#12):
<en-codeblock language="X">→<pre><code class="language-X">- Nested tables in
<td>flattened to pipe-separated text (OneNote can't render them; v1.2.4 left them visually broken) - Footnote refs →
<sup>[N]</sup>; back-links stripped;<section.footnotes>→<div.endnotes> <en-media>style/width/height preserved on<img>/<object>(v1.2.4 dropped them)<en-crypt>placeholder reworded with actionable guidance- Unknown
<en-*>elements emit[unsupported: en-foo]markers instead of silent pass-through
- Resume primitives for OneDrive chunked uploads (#14):
markAttachmentInProgress/getActiveUploadSession/markAttachmentCompletedhelpers inprogress.js. Schema bump is purely additive (new optionalinProgressUploads: {}field;versionstays at2). The actual>25MBupload-session integration inonenote-client.jsships as a follow-up patch.
Verification
npm test: 497 tests, 490 passing, 0 failing, 7 skipped (vs 448/441 in v1.2.4 — +49 new tests across the three features)- CI green on Node 20+22 across Ubuntu+Windows on each merged PR
Backwards compatibility
- Every v1.2.4 surface (
setup,--guided,--auth,--doctor,--batch,--resume,--verify, etc.) works identically - v2
progress.jsonfiles load unchanged - No new runtime dependencies
- Bin path, module system, file layout: unchanged
v1.2.4
Patch release focused on non-technical first-run recovery.
- Adds clearer guidance when a --batch folder path is wrong.
- Adds step-by-step Evernote ENEX export instructions when a selected folder contains no .enex files.
- Keeps the safe dry-run workflow unchanged.
Verification:
- npm test: 448 tests, 441 passing, 0 failing, 7 skipped.
- npm pack --dry-run: 14 files, no private migration data.
v1.2.3
What changed
- Added �vernote-to-onenote doctor for a non-destructive local preflight check.
- Doctor reports Node.js version, Microsoft sign-in state, current command folder, and progress-file status.
- Clarified guided/setup progress wording so existing progress.json is tied to the current command folder.
- Updated README help examples for setup and doctor.
Verification
- Local
pm test: 446 tests, 439 passed, 0 failed, 7 skipped. - Local
pm run pack:check: passed. - GitHub CI: Node 20/22 on Ubuntu and Windows passed.
v1.2.2
What changed
- Added �vernote-to-onenote setup as the beginner-friendly entry point.
- Added Node.js, Microsoft sign-in, and OneDrive preflight guidance to guided mode.
- Added synthetic terminal screenshots to the README so non-technical users can see the expected flow before installing.
- Kept the default guided path preview-first: no data is written to OneNote during setup.
Verification
- Local
pm test: 445 tests, 438 passed, 7 skipped, 0 failed. - Local
pm run pack:check: passed, no private migration data included. - GitHub CI: green on Node 20/22 across Ubuntu and Windows.