Kobo Note Sync
approvedby kennkyou
This plugin has not been manually reviewed by Obsidian staff. Import highlights and annotations from your Kobo e-reader into your notes.
Kobo Note Sync
An Obsidian plugin that imports highlights and annotations from your Kobo e-reader into Obsidian notes.
Features
- Import highlights and annotations from Kobo Desktop App's SQLite database or a custom Kobo SQLite file
- Customizable note and highlight templates using Eta.js syntax
- Append-only sync — existing highlights in Obsidian are preserved even if deleted on Kobo
- Rich metadata support (23 book variables + 5 highlight variables)
- Cross-platform: macOS and Windows
- i18n: English and Traditional Chinese (follows Obsidian language setting)
How It Works
Kobo Device / App → Kobo Cloud → Kobo Desktop App → Kobo.sqlite → This Plugin → Obsidian Notes
Kobo Device → copied KoboReader.sqlite → This Plugin → Obsidian Notes
The plugin can read the local Kobo.sqlite database created by the Kobo Desktop App, or a Kobo SQLite database file you copied to a path of your choice, and generates Markdown notes in your vault.
Installation
Manual Installation
- Download
main.jsandmanifest.jsonfrom the latest release - Create a folder
kobo-note-syncin your vault's.obsidian/plugins/directory - Copy the downloaded files into that folder
- Restart Obsidian and enable the plugin in Settings → Community Plugins
Prerequisites
- For Desktop App sync: Kobo Desktop App installed and signed in with your Kobo account
- For custom SQLite sync: copy the Kobo SQLite database file from your device, such as
.kobo/KoboReader.sqlite, to a stable local path
Usage
- In plugin settings, choose a sync source: Kobo Desktop App or Custom SQLite file
- Confirm the database path for that source. In Custom SQLite file mode on macOS or Windows, you can use Detect Kobo reader to fill the path automatically.
- Open Command Palette (
Cmd/Ctrl + P) and run Kobo Note Sync - Or click the book icon in the left sidebar
Highlights will be created as Markdown files in the configured output folder (default: Kobo Note Sync/).
Privacy
This plugin reads the local Kobo SQLite database selected in settings and creates or updates notes in your Obsidian vault. It does not send your reading data to any external server.
Third Party Notices
This plugin includes sql.js, which is licensed under the MIT License. See THIRD_PARTY_NOTICES.md.
Settings
| Setting | Description |
|---|---|
| Sync source | Choose Kobo Desktop App or a custom SQLite file |
| Kobo Desktop database path | Path to Kobo.sqlite. Auto-detected based on your OS. |
| Custom database file path | Path to a copied Kobo SQLite database, such as .kobo/KoboReader.sqlite |
| Detect Kobo reader | Finds /Volumes/*/.kobo/KoboReader.sqlite on macOS or ?:\.kobo\KoboReader.sqlite on Windows and fills the custom database path |
| Output folder | Folder in your vault for highlight notes |
| Note template | Eta.js template for each book note |
| Highlight template | Eta.js template for each highlight |
Default Database Paths
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Kobo/Kobo Desktop Edition/Kobo.sqlite |
| Windows | %LOCALAPPDATA%\Kobo\Kobo Desktop Edition\Kobo.sqlite |
Templates
Templates use Eta.js syntax: <%= it.variableName %> for output, <% if (it.condition) { %> for logic.
Note Template Variables
| Variable | Description |
|---|---|
it.bookTitle | Book title |
it.bookAuthor | Author |
it.publisher | Publisher |
it.isbn | ISBN |
it.series | Series name |
it.seriesNumber | Series number |
it.subtitle | Subtitle |
it.language | Language |
it.description | Book description (HTML stripped) |
it.progress | Reading progress % |
it.status | Reading status (unread / reading / finished) |
it.numPages | Number of pages |
it.wordCount | Word count |
it.averageRating | Average rating on Kobo |
it.ratingCount | Rating count |
it.timeSpentReading | Time spent reading (seconds) |
it.timesStartedReading | Times started reading |
it.dateAdded | Date added to library |
it.dateCreated | Book creation date |
it.lastRead | Last read date |
it.lastFinished | Finished reading date |
it.highlightCount | Number of highlights |
it.highlights | Rendered highlights content |
Highlight Template Variables
| Variable | Description |
|---|---|
it.highlightText | Highlighted text |
it.annotation | Your note/annotation |
it.dateCreated | Highlight date |
it.chapter | Chapter title |
it.chapterProgress | Progress within chapter (0-1) |
Example Templates
Note template:
---
title: "<%= it.bookTitle %>"
author: "<%= it.bookAuthor %>"
publisher: "<%= it.publisher %>"
last_read: <%= it.lastRead %>
highlight_count: <%= it.highlightCount %>
source: Kobo
---
<%= it.highlights %>
Highlight template:
*<%= it.dateCreated %>*<% if (it.chapter) { %> | <%= it.chapter %><% } %>
> <%= it.highlightText %>
<% if (it.annotation) { %>
**Note:** <%= it.annotation %>
<% } %>
---
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.