Importing from Joplin¶
When to use¶
When a user imports a Joplin JEX file (.jex) or a RAW export folder. (Joplin
can also export Markdown + Front Matter — if they did that, use
importing-from-markdown instead.) You own it end to end. Read
limestone-vault-conventions, working-with-collections, and importing-from-obsidian
first.
Run the import (one tool call)¶
Call limestone_import_notebook(path, collection_name) with the .jex (or the RAW
folder). Returns the usual summary + unconverted list.
How the import works (what the tool does)¶
A JEX is a tar of flat <id>.md items (notes, notebooks, tags, links) plus a
resources/ dir. The importer reassembles them:
| Joplin | Limestone |
|---|---|
each note item (type_: 1) |
a record (title = the item's first line) |
created_time / updated_time (ISO ms) |
Created / Updated date properties |
the note's notebook (parent_id) |
a Notebook text property |
source_url |
a Source URL text property |
tags (a separate type_: 5/6 join) |
real note tags |
 / [x](:/<id>) |
the file from resources/, embedded inline as ![[filename]] |
Finalizing (your job)¶
The importing-from-obsidian playbook applies. Joplin-specific:
- Group or split by notebook. Every note lands in one collection with a
Notebookproperty. If notebooks are really distinct record types, split them into their own collections; otherwise group the table byNotebook. - To-dos. Joplin to-dos import as plain notes (the
is_todo/todo_completedmetadata isn't mapped). Add a checkbox/date property if the user tracks tasks here. - Resolve
unconverteditems (unsupported resource types, missing resources) as usual.
Evolving this skill¶
If a Joplin structure recurs badly, work out the mapping, apply it, and propose an
update here or to importers/joplin.py. Keep the two in sync.