Repository navigation
feat(notes): download a note, or all of a namespace's notes, as Markdown - #419
Merged
Merged
Conversation
A note's ⋯ menu in the tree has Download as Markdown, and the Notes page's ⋯
menu downloads every page of the namespace as a zip of Markdown files in
folders that follow the tree, for Obsidian and other notes apps. Each file has
front matter (title, date, filing, summary) and links to other notes as
[[Title]] wiki links. GET /api/v1/notes/{pid}/markdown and
GET /api/v1/notes/export?ns= give agents the same files.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RrY2byt5BHVeBXJUyfwWpb
…e does On a slow runner import-file's pi-episode was still being read (40s in Chromium) when entity-merge ran; its mentions of Lens and Raspberry Pi landed between the merge and its Undo, and graph-merge then found neither in the graph (Clicks and keystrokes per feature on #419). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RrY2byt5BHVeBXJUyfwWpb
Merged
16 of 22 tasks
adeelahmad
added a commit
that referenced
this pull request
Oct 15, 2026
…pages and notes as built (#424) Move usage analytics (#274) and assets and people (#273) out of the README's In progress list, and add what merged since #383: a namespace's own MCP server, chat completions and one-namespace API keys; editing and merging entities and topics with undo, from agents too; entity pages at wiki addresses; Connect with Google and rclone sign-in on the server; the notes tree, today's note, pins, search and Recently deleted; backups that keep Lens's files; and grouped, searchable settings. In progress now lists the open feature PRs (#398, #400, #402, #408, #419), and the docs index links usage analytics. Claude-Session: https://claude.ai/code/session_01HDx7PPUauyjMn1LZs8JAsS Co-authored-by: Adeel Ahmad <noreply@anthropic.com>
…-wm7xc9 # Conflicts: # CHANGELOG.md
…-wm7xc9 # Conflicts: # CHANGELOG.md
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RrY2byt5BHVeBXJUyfwWpb
…-wm7xc9 # Conflicts: # CHANGELOG.md
This was referenced Oct 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as
328E
a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Adeel · project thread
Description
Before: notes could not leave Lens as files; there was no way to take them to Obsidian or any other notes app.
After: Download as Markdown in a note's ⋯ menu in the tree saves it as a
.mdfile. Download all as Markdown in the Notes page's ⋯ menu saves every page of the namespace as a zip of Markdown files, with the notes inside a note in a folder named like it and the pages of recordings, entities and topics underPages of things. Each file starts with front matter (title, date, where it's filed, summary, what it's the page of), and links to other notes become[[Title]]wiki links (other mentions become the names they link to).How:
notebook.markdown()writes one page (front matter plus the body with mentions rewritten);notebook.export()writes the zip into a spooled temp file, naming files safely and numbering duplicates (budget (2).md).GET /api/v1/notes/{pid}/markdownandGET /api/v1/notes/export?ns=serve them with a UTF-8Content-Disposition;components/notes/download.ts(useNoteDownloads) downloads with the session token.Also: the clicks survey's
graph-mergejourney failed here (Clicks and keystrokes per feature). The failure screenshot showed neither Lens nor Raspberry Pi in the graph. The backend log showed why: import-file's pi-episode took 40 s to read in Chromium on that runner, and its analysis landed betweenentity-merge's merge and its Undo.entity-mergenow waits for the imports' jobs to finish first, asgraph-mergealready did (not counted as clicks).Motivation and Context
Part of the notes UI audit (Adeel: "notes ui is very bad and is missing tons of things"): export is in every notes app, and it keeps notes open rather than locked in.
Steps to reproduce (if appropriate):
Notes tree → ⋯ on a note → Download as Markdown. Notes page → ⋯ → Download all as Markdown → open the zip in Obsidian as a vault.
Types of changes
!in the title)Checklist:
make hookschecks it on commit).docs/accordingly.## UnreleasedinCHANGELOG.md.Done questions (AGENTS.md)
GET /api/v1/notes/{pid}/markdownandGET /api/v1/notes/export?ns=with any token that can read the namespace.zipfileonly, spooled to disk past 32 MB.test_markdown_export: front matter, wiki links follow renames, folders follow the tree, duplicate names, outsiders refused; web: tree and Notes page menus) and docs (docs/notes.mdDownloading as Markdown,docs/api.md) updated;make openapiregenerated. Local: backend 1121 passed, web 921 passed.[[wiki links]], which Obsidian and most notes apps read.🤖 Generated with Claude Code
https://claude.ai/code/session_01RrY2byt5BHVeBXJUyfwWpb