New features
- Added support for Supernote Atelier
.spdfiles: viewing, embedding, PNG/PDF export, zoom, and layer on/off toggling. - Rebuilt the note viewer as a reusable
<supernote-viewer>web component, shared by the full view and inline embeds, with zoom, a page thumbnail sidebar, find-in-note search, and clickable internal links. - Added a matching
<supernote-atelier-viewer>web component for.spdfiles. - Added a device auto-sync command that pulls new or changed Supernote notes and
.spdfiles into the vault. - Added SVG export for whole notes and individual pages, alongside the existing PNG and PDF export.
- Added an "Export current page as image" command and a matching toolbar button.
- Added inline embedding of
.notefiles with![[example.note]], including page-anchor links. - Added a date-picker "Import notes edited today" command with a configurable import format (images, PDF, images+text, etc.).
- Added a plugin extensibility hook so other plugins can enrich or replace recognized text during note-to-markdown conversion, with keywords, links, page ID, orientation, and recognition status exposed to it.
- Added sorting by name or date to the device file browser.
- Added a compact, reliably-selectable text view mode for reading recognized text.
Improvements
- Significantly reduced memory use and eliminated freezes when viewing or exporting long notes, by lazily loading and evicting off-screen page and thumbnail images.
- Sped up note rendering with a shared worker pool and parallel bitmap decoding.
- Gave thumbnails their own low-resolution decode path instead of downscaling full-resolution images.
- Held more nearby pages in memory and preloaded pages near the viewer for smoother scrolling.
- Replaced plain-text toolbar buttons with icons, including Obsidian's native icon set throughout.
- Replaced the page up/down buttons with an editable page-number textbox for jumping directly to a page.
- Added a completion notice with a quick link to open the file when an export finishes.
- Shortened the plugin's name and its command names for clarity.
- Reduced padding around note pages on mobile, and packed toolbar buttons to wrap tighter on narrow screens.
- Defaulted the "show export buttons" setting to off, decluttering the note view.
- Automated release publishing and clarified the beta vs. stable update channel.
Fixes
- Fixed a path-traversal security vulnerability in device auto-sync.
- Fixed dependency vulnerabilities flagged by
npm audit. - Fixed several mobile-specific bugs, including touch gestures conflicting with Obsidian's own navigation and incorrect recognized-word highlight position on non-Manta devices.
- Fixed multi-word find highlighting and text-selection bugs in the note view.
- Fixed zoom being tied to an arbitrary setting instead of the page's native resolution.
- Fixed "Fit width" zoom getting stuck at its 500% ceiling on large/high-res displays.
- Fixed exported PNG filenames to use 1-based page numbers.
- Fixed Browse & Access failing on iOS.
- Fixed crispness, zoom floor, and search on the mobile note view.
Notes:
- SVG export (#214) is included above since it's built for this release, but the PR is still open/in review as of this writing.
- Purely internal changes (CI setup, lint fixes, dependency version bumps, test infra, docs-only PRs) are omitted as not user-facing.
Commits
- Fix Browse and Access failing on iOS by using requestUrl instead of fetch by @philips in #99
- Fix exported PNG filenames to use 1-based page numbers by @philips in #101
- Add sort by name/date to device file browser by @philips in #100
- Fix picomatch vulnerabilities via npm audit fix by @philips in #98
- Scope button.mod-cta display:block rule to plugin's own UI by @philips in #102
- Fix ESLint warnings from eslint-plugin-obsidianmd by @philips in #103
- Support embedding .note files with ![[example.note]] by @philips in #109
- Fix Fit width getting stuck at 500% on large/high-res displays by @philips in #110
- Shorten plugin name to "Supernote (Unofficial)" and trim command names by @philips in #111
- Support #page=N anchors on regular links to .note files by @philips in #112
- Automate release publishing; clarify beta vs. stable channel by @philips in #114
- Never let a beta version land in main's manifest.json by @philips-clanker in #116
- Add import format dropdown to today's-notes import by @philips in #115
- Default "show export buttons" setting to off by @philips-clanker in #117
- Rename import-by-date command to "Import notes edited today" by @philips-clanker in #118
- Bump supernote-typescript submodule to pick up link/keyword parsing by @philips-clanker in #121
- Render clickable Supernote internal links in SupernoteView by @philips-clanker in #128
- Auto-sync .note files from device to vault (manual, phase 1 of #119) by @philips-clanker in #126
- Add registerPageTextProcessor hook + LLM Page OCR example plugin by @philips-clanker in #125
- Speed up note viewing: shared worker pool, parallel bitmap decode, lighter text-layer PDF by @philips-clanker in #132
- Fix zoom percentage tied to arbitrary max-image-dim setting by @philips-clanker in #133
- Bump supernote-typescript submodule to v0.5.1 by @philips-clanker in #135
- Prototype .spd (Supernote Atelier) file support by @philips-clanker in #137
- Add ![[file.spd]] embed support by @philips-clanker in #139
- Add .spd export commands (PNG, PDF) by @philips-clanker in #140
- Add layer on/off toggle to the .spd viewer by @philips-clanker in #141
- Add zoom/fit-width controls to the .spd viewer by @philips-clanker in #142
- Include .spd files in device sync and "import edited today" by @philips-clanker in #143
- Expose keywords/links/pageId/orientation/recognitionStatus to OCR plugins by @philips-clanker in #146
- Add stage-by-stage logging to the search text-layer pipeline (#147 diagnostics) by @philips-clanker in #150
- Lazy-load each page's image, not just its text layer by @philips-clanker in #151
- Reduce mobile padding around note pages by @philips-clanker in #153
- Evict scrolled-away pages' images instead of only loading lazily by @philips-clanker in #155
- Remove thumbnail sidebar's rootMargin prefetch — still crashed opening it by @philips-clanker in #156
- Reserve thumbnail box size upfront to stop layout-shift pop/reflow by @philips-clanker in #158
- Debounce thumbnail loading so a fast scroll skips transient flybys by @philips-clanker in #159
- Give thumbnails their own cheap, low-resolution load path by @philips-clanker in #162
- Pack toolbar buttons individually so they wrap tighter on narrow screens by @philips-clanker in #160
- Fix path traversal in device auto-sync (GHSA-3gx3-r874-5pp4) by @philips-clanker in #165
- Fix #154: memory blowup and freezes when viewing/exporting long notes by @philips-clanker in #170
- Fix #172: invert thumbnail colors in dark mode by @philips-clanker in #173
- Add scripts for headless Obsidian testing on Linux by @philips-clanker in #174
- Show a Notice when exports finish by @philips-clanker in #175
- Fix #171: compact, reliably-selectable text mode by @philips-clanker in #176
- Export current page as image by @philips-clanker in #178
- Add SCREENSHOTS.md gallery of the plugin's main features by @philips-clanker in #180
- Fix issue #179: thumbnail sidebar overlays instead of resizing the page view by @philips-clanker in #181
- Extract portable rendering core (issue #183, phase 1) by @philips-clanker in #184
- Add standalone web component (issue #183, phases 2-4) by @philips-clanker in #185
- Add find-in-note to , no PDF/pdf.js dependency by @philips-clanker in #187
- Add page thumbnail sidebar to (Phase 2 of #183's SupernoteView port) by @philips-clanker in #189
- Add memory eviction for off-screen pages to (Phase 5 of #183's SupernoteView port) by @philips-clanker in #190
- Add clickable link overlay + link-click event to by @philips-clanker in #191
- Add zoom to (Phase 1 of #183's SupernoteView port) by @philips-clanker in #188
- Swap SupernoteView to wrap (phase 6 of #183's port) by @philips-clanker in #193
- Replace plain-text toolbar buttons with inline SVG icons (phase 7 of #183's port) by @philips-clanker in #195
- Replace page up/down buttons with an editable page-number textbox (#194) by @philips-clanker in #196
- Add native Obsidian icons throughout SupernoteView's toolbar (#197) by @philips-clanker in #198
- Fix multi-word find highlighting + text selection in SupernoteView (#199) by @philips-clanker in #200
- Add a "Load sample note" button to the standalone demo by @philips-clanker in #201
- Fix three mobile issues in (#202) by @philips-clanker in #203
- Opt out of Obsidian's mobile navigation gestures (#204) by @philips-clanker in #205
- Fix recognized-word highlight position for non-Manta devices (#204) by @philips-clanker in #206
- Fix gesture opt-out attribute placement: host, not shadow-internal (#204) by @philips-clanker in #207
- Add web component for .spd layer toggling by @philips-clanker in #208
- Hold more pages from eviction and preload pages near the viewer by @philips-clanker in #209
- Draw text-view toolbar icon as a letter A, not three lines by @philips-clanker in #211
- Add SVG export support by @philips-clanker in #214
- Focus the search input when opening file list modals by @philips-clanker in #217
- Vector ink in PDF export (on by default, with an off toggle) by @philips-clanker in #218
- Fix word-overlay and export text-layer alignment on N6/A6X (#219) by @philips-clanker in #220
- Bump esbuild to ^0.28 to keep the lockfile npm-ci-clean by @philips-clanker in #223
- Bump fast-uri from 3.1.4 to 3.1.5 by @dependabot[bot] in #221
- Bump js-yaml from 4.3.0 to 4.3.1 by @dependabot[bot] in #222
- Add security audit plan: outbound network connections by @philips-clanker in #224
- Security audit phases 1-3: verify network egress posture, harden device path handling by @philips-clanker in #226
New Contributors
- @philips-clanker made their first contribution in #116
- @dependabot[bot] made their first contribution in #221
Full Changelog: 3.0.1...3.1.0