Importing and Exporting Data¶
LOS provides two complementary ways of working with data outside the app:
| Way | What it is for | Where |
|---|---|---|
| Markdown exchange | Everyday work on entries in one category: adding, updating, organizing. | Import / export in a data module or Settings → Data & backups |
| JSON backup | A full account backup, restoring relations, and advanced operations. | Settings → Data |
Markdown is for everyday work on data, not for restoring the whole account.
Markdown Exchange¶
In data modules, the Import / export button opens a shared panel. It is also available in Settings → Data & backups, where you can choose a data category. It supports projects and categories, goals, tasks and task plans, habits, books, series, movies, games and milestones, user quotes, workouts and exercises, weight and measurements, tracker, dates, cleaning, meditation, the bucket list, pets, their care, and timers.
- Choose a category. In the details of a project, goal, book, series, game, or workout, the import is limited to the open item.
- Download the template, paste Markdown, or choose a
.mdfile. - Choose a mode and click Review changes. Expand an entry to see the values before and after the change. Errors block the save.
- Click Import. After the operation finishes, you can download a report.
Export¶
Data export happens in the same panel: Export .md downloads a file, and Copy Markdown copies the same content to the clipboard. The default format is a Markdown table with identifiers, meant for editing and re-importing.
In the Tasks module, the Filtered entries scope is the default: it includes all entries matching the current filters at the moment the panel is opened, including on other pages of the table. You can switch it to All entries in this category. An empty filter exports an empty table; it never switches to all data on its own. The export scope does not limit the import or the replace mode.
In the right context, the Export format field also provides:
- Book and reading plan — a book view with author, status, dates, and chapters with a completion marker. This is a review for reading or sharing; to re-import and edit identifiers, choose the table.
- Obsidian · all project tasks — in project details, a full list of its tasks, including completed and scheduled ones.
- Obsidian · unscheduled to-dos in all projects — in the projects planner, open and unscheduled tasks from all projects. With an empty list, a template is downloaded. This variant keeps the scope of an earlier export.
The Obsidian variants use names instead of IDs. Their import is under Import Obsidian checklist in the shared panel. The Import CSV compatible with older files is also available there for tasks and body measurements. Separate export buttons for the same data have been removed from the modules. The full account export in settings still uses JSON. Mind-map PNG/PDF exports are for saving the diagram and remain separate operations.
Import Modes¶
- Add new entries — the default. Rows create new entries. The
idcolumn must be empty or omitted. - Update by ID and add new entries —
idpoints to an existing entry; a missingidcreates a new one. An unknown or repeated identifier is an error. Omitted entries remain unchanged. - Replace this category / scope — updates entries with IDs, adds new ones, and deletes existing entries omitted from the document, only in the chosen category or open item. Every deletion is visible in the preview and requires checking a confirmation. An empty table in this mode deletes the entire chosen scope.
Deleting a project or another parent entry may also delete related data according to the app's rules. Exporting limited histories (weight, measurements, tracker events) covers up to 2000 records; replacing is blocked once that limit is reached, so it is not based on an incomplete history.
Tables¶
The export creates a Markdown table that you can edit and re-import. Column names match the template. Do not add columns outside the list given in the template: typos are reported as errors instead of data being ignored.
# bodyweight
| measuredOn | weightKg | note |
| --- | --- | --- |
| 2026-10-19 | 82.4 | Morning |
| 2026-10-20 | 82.1 | |
# movie
| id | name | duration | status | date |
| --- | --- | --- | --- | --- |
| 12 | Her | 126 | to-watch | 2026-10-24 |
| | Arrival | 116 | to-watch | |
The second example requires update mode: it changes movie 12 and adds a new movie.
Dates use the YYYY-MM-DD format. Timestamps use ISO 8601; timer dates
must include Z or a zone offset, e.g. 2026-10-20T10:00:00Z. Decimal
numbers use a dot, boolean values are true and false. durationHours
means hours. duration for tasks, movies, habits, and workout sessions
means minutes; in game milestones it means hours. Timers use
durationSeconds in seconds.
An empty field means "do not provide this field"; during an update it keeps
the previous value. ~ clears an optional field if the API supports clearing
it. Otherwise the preview reports an error. \e means empty text,
\~ a literal tilde, \| a vertical bar character, \n a new line, \\ a backslash,
and \s a space at the edge of a cell. The export applies these rules
automatically. The tags column, where available, contains an array of texts,
e.g. ["home"].
Parent identifiers, e.g. projectId, bookId, or trainingId, point to entries that already
exist. In item details they are filled in automatically. Import
parents first, then their items. Changing planner task links is
limited to keep synchronization; use the task editor for such
changes.
Lists and Structure¶
Tasks, project tasks, and goal tasks also accept a simple list:
- [ ] Order a countertop
- [x] Choose wall color
Lists do not contain IDs, so they add new entries. In project or goal
details the parent will be assigned automatically; outside them use a table with projectId
or goalId. A table exported with IDs is used to edit existing entries.
Series episodes accept lists like - [ ] Name #60 (2026-10-24); the number means
minutes, and [x] without a date means watched today in the user's time zone.
Book chapters can be added from Markdown headings with content. The reading plan
stores chapter names; text under a heading is not saved.
The extended heading and list format in the mind map is still used to move
project hierarchies. There too, adding is the default, and deleting requires
the Replace mode and confirmation. Obsidian import keeps adding without
deleting until replacing unscheduled tasks is chosen.
JSON Backup and Restore¶
In settings, in the data section, three actions are available:
- Export Data lets you prepare a copy (Backup) or an export for editing (Advanced export).
- Restore backup restores a copy and its relations by giving records new identifiers.
- Advanced import performs the add, update, and delete operations stored in the JSON.
Export¶
The default Backup mode covers all supported categories and blocks changing their selection. The Advanced export mode lets you choose categories and is for changing existing records on the source account. It does not replace a backup for restoring.
After choosing Prepare backup or Prepare export, the app fetches data and shows progress, the number of records in each category, the file size, and warnings. Only Download JSON starts the download. Changing the scope requires preparing a new file.
An error in any category, including mind maps, stops the preparation. An invalid
server response is not treated as an empty data list. The file itself contains a
manifest: category scope, record counts, export purpose, warnings, and
completeness information.
The history of weight measurements, body measurements, and tracker entries currently has a limit of 2000
records per server response. Reaching the limit blocks Backup, because
the completeness of the history cannot be confirmed. Advanced export lets you download
such a file as Download partial export: the name contains partial, and
manifest.complete is false. The import also shows warnings saved
in the file. Markdown exchange is blocked for such an incomplete history so it is not
confused with the full state of a category.
Categories are read one after another. While a backup is being prepared, pause editing data, including on other devices. The backup covers the categories supported by the export; it is not a copy of the whole database or of the account together with files.
The export from the movies window is for editing in that window. The export from the projects planner to Obsidian covers unscheduled, unfinished tasks. These files do not replace the backup from settings.
Restoring a Backup¶
Choose a file, check the summary, and expand the record preview. If the file has a different mode, the app suggests switching to the right operation.
Restoring requires empty categories covered by the backup. The app checks them after loading the file and again before saving. Existing account settings and shared, built-in quotes do not mean the account is taken. Your own quotes and likes are user data. If the account cannot be checked, restoring remains blocked.
Advanced Import¶
A regular export is a template of operations on existing identifiers. Before
importing, check the categories, the number of changes, and the record preview. Deleting requires
extra confirmation. Files declaring a version other than 1 are
rejected; older files without a version declaration remain supported.
Errors and Interruption¶
The whole file is validated before saving. The save itself happens record by record: a server error does not roll back earlier changes. The progress bar shows the number of processed records, including those that ended in error. Restoring relations may require extra requests.
After finishing, you can download a JSON report with a summary and a full list of errors. After a partial failure, check the report and the data on the account. Re-importing the whole file may create duplicates. Retrying is blocked in the same window.
Import does not yet have a persistent task history or automatic resume after a lost connection. The simultaneous-run lock works within the current app session; do not run an import in parallel on several devices.
The preview does not save anything. Before importing, the panel reads the data again; if it changed since the preview, it requires checking again. A network or server error during saving may leave part of the operation done. Download the report and check the data state before re-importing so as not to create duplicates. The limit of one file is 5 MB, and an import is 2000 rows.
Existing CSV imports remain available. JSON is still used for full account backups, restoring relations, and advanced operations.