Skip to content

Importing from Logseq

When to use

When a user asks to import a Logseq graph (a folder with journals/, pages/, and a .logseq/ config). The Import tab hands the task straight to you: you own it end to end. Read limestone-vault-conventions and working-with-collections first. The core mapping is the same as importing-from-obsidian (read that too); this note only covers Logseq's differences.

Run the import (one tool call)

Call limestone_import_notebook(path, collection_name) with the graph folder. It returns the usual summary + unconverted list. Never import notes one at a time.

What the tool does (Logseq specifics)

Logseq is a folder of Markdown, imported like Obsidian, with two extra transforms:

Logseq Limestone
every line is an outline - block top-level blocks flatten to prose; nested blocks stay Markdown lists
page metadata as key:: value (first block) lifted into the same properties/tags as YAML frontmatter would be
journals/YYYY_MM_DD.md, pages/*.md one record each (journals and pages land in the one collection)
#tag, [[Page]], ((block-ref)) #tag/[[Page]] map as usual; ((block-ref)) is left as-is

Finalizing (your job)

Same as importing-from-obsidian: promote preserved frontmatter, retype properties, split/rename if needed, and resolve unconverted items. Logseq-specific cleanup:

  • Block references ((uuid)) don't resolve to anything in Limestone. If a note leans on them, replace with a real [[Page]] link or inline the referenced text.
  • Leftover key:: value lines deeper in a body (block properties, not page properties) are left in place — lift any the user cares about into properties.
  • If journals should be their own collection separate from pages, split them.

Evolving this skill

If a recurring Logseq structure imports badly, work out the mapping, apply it, and propose an update to this file or flag importers/markdown_folder.py (LogseqImporter). Keep the two in sync.