Skip to content

Releases: mooja77/evernote-to-onenote

v1.4.3 — monorepo: CLI on shared engine + first engine publish

Choose a tag to compare

@mooja77 mooja77 released this 04 Jun 08:20

First release of the unified monorepo build.

  • evernote-to-onenote@1.4.3 (npm) — the CLI now runs on the shared evernote-onenote-engine package. No user-facing behavior change vs 1.4.2; same flags, same resumable import, same progress.json compatibility.
  • 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

Choose a tag to compare

@mooja77 mooja77 released this 18 May 16:44

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

  1. In Evernote, select a notebook and choose File -> Export Notes, saving as an .enex file.
  2. Open the app and sign in with Microsoft — your browser opens for sign-in, then the app continues on its own.
  3. Choose your .enex file, 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

Choose a tag to compare

@mooja77 mooja77 released this 17 May 20:49

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

  1. In Evernote, export your notes: File → Export Notes as .enex.
  2. Open the app and sign in with your Microsoft account — your normal browser opens for sign-in, then the app continues automatically.
  3. Choose your .enex file and pick the OneNote section to import into.
  4. 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

Choose a tag to compare

@mooja77 mooja77 released this 06 May 21:28
2e5aead

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-html now 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 every src= and data= attribute to the relative path. Each .html + .assets pair is self-contained.
  • The completion message no longer hardcodes "Your notes are in OneNote" — --output-html mode 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 .html files use relative paths — zero name: refs
  • Sibling files are valid JPEGs (verified via fileJPEG image data, 1948x2567)
  • Drops cleanly into note apps via folder drag

Compatibility

  • Same flags, same exit codes, same progress.json format 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

Choose a tag to compare

@mooja77 mooja77 released this 06 May 09:17
1ce0252

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.

  1. Auto-detect didn't find the cache file. findSqlInDir() only checked direct children of conduit-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.

  2. Evernote v11 produced cryptic errors instead of clear guidance. v11 (released 2026-01-19) replaced the v10 TKey/TValue JSON-blob shape with flat columns and dropped CacheLookaside entirely. 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-local does not support v11.
    Use --batch with 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.json format as v1.4.0
  • Test suite: 558 pass / 0 fail / 7 skipped (added 2 regression tests)
  • --batch mode 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

Choose a tag to compare

@mooja77 mooja77 released this 05 May 23:10

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-local is 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-local feature.

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

Choose a tag to compare

@mooja77 mooja77 released this 03 May 17:59

Three additive feature improvements. Every v1.2.4 flag, positional command, and progress.json file behaves unchanged — no migration required.

What's new

  • --wizard alias for --guided plus a wizard positional alias for setup (#13). Use whichever name feels more natural.
  • --reauth flag 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 / markAttachmentCompleted helpers in progress.js. Schema bump is purely additive (new optional inProgressUploads: {} field; version stays at 2). The actual >25MB upload-session integration in onenote-client.js ships 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.json files load unchanged
  • No new runtime dependencies
  • Bin path, module system, file layout: unchanged

v1.2.4

Choose a tag to compare

@mooja77 mooja77 released this 28 Apr 23:01

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

Choose a tag to compare

@mooja77 mooja77 released this 28 Apr 17:49

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

Choose a tag to compare

@mooja77 mooja77 released this 28 Apr 17:37

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.