Release Notes 0.6.0
New Features
Zotero Child Note Editing
You can now create and edit Zotero child notes directly within Obsidian. Notes are converted between Zotero's HTML format and Markdown in real time, so edits sync seamlessly back to Zotero.
Two ways to edit child notes:
- Standalone Note Editor — Double-click a note item in the Zotero Tree View to open it in a dedicated markdown editor tab. Edits are auto-saved (2-second debounce) and synced to Zotero on the next sync.
- Inline Editable Regions — Child notes embedded in source notes are wrapped in editable regions. Unlock the region by clicking the lock icon in the gutter, then edit the note content directly inside the source note.
Creating notes:
- Right-click any item in the Tree View → Create child note to create a new empty child note and open it in the editor.
- Newly created notes appear immediately in the tree and are pushed to Zotero on the next sync.
Live cross-view sync:
- Editing a note in the standalone editor automatically updates the corresponding editable region in any open source note (and vice versa).
- The tree view refreshes when notes are created or modified.
Editable Regions in Source Notes
Source notes now contain marked editable zones for child notes and annotation comments. Each region is delimited by HTML comment markers and protected by a lock/unlock toggle:
- Locked (default): The region is read-only — you won't accidentally modify note content while reading.
- Unlocked: Click the lock icon to unlock and edit. Changes are saved back to the underlying note automatically.
A new setting, Lock Editable Regions by Default, controls whether regions start locked or unlocked when opening a file.
Item Note Integration
By default, the library source note template does not include editable regions, but you can easily add them using the wrap_editable filter in your templates (see below).
{%- if item.notes.length > 0 -%}
{%- for note in item.notes -%}
{{ note.note | html2md | wrap_editable: "NOTE", note.key }}
{%- endfor -%}
{%- endif -%}Annotation Comment Integration
You could also use the same wrap_editable filter to create editable regions for annotation comments, allowing you to edit annotation comments directly in the source note. For example:
## Annotations
{%- for attachment in item.attachments -%}
{%- if attachment.annotations.length > 0 -%}
### {{ attachment.filename }}
{%- for annotation in attachment.annotations -%}
> [!zotflow-{{ annotation.type }}-{{ annotation.color }}] [{{ attachment.filename }}, p.{{ annotation.pageLabel }}](obsidian://zotflow?type=open-attachment&libraryID={{ attachment.libraryID }}&key={{ attachment.key }}&navigation={{ annotation.key | process_nav_info}})
{%- if annotation.type == "ink" or annotation.type == "image"-%}
> > ![[{{settings.annotationImageFolder}}/{{ annotation.key }}.png]]
{%- else -%}
> > {{ annotation.text | replace: newline, quote_string_2 }}
{%- endif -%}
>
> {{ annotation.comment | wrap_editable: "ANNO", annotation.key | replace: newline, quote_string }}
^{{ annotation.key }}
{%- endfor -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
Bidirectional HTML ↔ Markdown Conversion
A full conversion pipeline powers the note editing feature, built on unified.js and running entirely in the Web Worker:
| Direction | Pipeline |
|---|---|
| HTML → Markdown | rehype-parse → hast cleanup → rehype-remark with schema-driven handlers → remark-stringify
|
| Markdown → HTML | remark-parse → remark-rehype → Zotero element restoration → rehype-stringify
|
Supported elements:
- Standard Markdown (headings, lists, blockquotes, code blocks, links, images)
- GFM extensions (tables, strikethrough, autolinks)
- Math (inline
$...$and display$$...$$) - Zotero-specific elements: citations, highlights, ink/image annotations, subscript/superscript, text color, underlines
The pipeline preserves Zotero's note schema metadata through round-trips, ensuring no data loss when editing in Obsidian and syncing back.
Improvements
Read-Only Reader for Read-Only Libraries
When a library's sync mode is set to readonly, the built-in PDF/EPUB reader now opens in read-only mode — annotation tools are disabled, preventing accidental edits to read-only libraries.
Event-Driven UI Updates
The Tree View and Note Editor now use an event bus for reactive updates instead of polling. When notes or annotations change, only the affected components re-render, keeping the UI responsive.
New Settings
| Setting | Default | Description |
|---|---|---|
| Lock Editable Regions by Default | On | Whether editable regions in source notes start locked (read-only) or unlocked (editable) when a file is opened |
Documentation
- New Conversion Pipeline — Technical reference for the HTML ↔ Markdown conversion system, including supported elements, round-trip guarantees, and extension points.