Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Join the community
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Kobo Highlights Importer

ogkevinogkevin11k downloads

Import highlights from Kobo devices.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates25

This plugin aims to make highlight import from Kobo devices easier.

  • Obsidian Kobo Highlight Importer
    • How to use
    • Templating
      • Variables
      • Template Syntax
    • Helping Screenshots
    • Contributing

How to use

Once installed, the steps to import your highlights directly into the vault are:

  1. Connect your Kobo device to PC using a proper USB cable
  2. Check if it has mounted automatically, or mount it manually (e.g. open the root folder of your Kobo using a file manager)
  3. Open the import window using the plugin button
  4. Locate KoboReader.sqlite in the .kobo folder ( this folder is hidden, so if you don't see it you should enable hidden files view from system configs )
  5. Extract

Templating

The plugin uses Eta.js for templating. You can fully customize the output using Eta's template syntax. See the Eta.js template syntax documentation for details.

The default template is:

---
title: "<%= it.bookDetails.title %>"
author: <%= it.bookDetails.author %>
publisher: <%= it.bookDetails.publisher ?? '' %>
dateLastRead: <%= it.bookDetails.dateLastRead?.toISOString() ?? '' %>
readStatus: <%= it.bookDetails.readStatus ? it.ReadStatus[it.bookDetails.readStatus] : it.ReadStatus[it.ReadStatus.Unknown] %>
percentRead: <%= it.bookDetails.percentRead ?? '' %>
isbn: <%= it.bookDetails.isbn ?? '' %>
series: <%= it.bookDetails.series ?? '' %>
seriesNumber: <%= it.bookDetails.seriesNumber ?? '' %>
timeSpentReading: <%= it.bookDetails.timeSpentReading ?? '' %>
---

# <%= it.bookDetails.title %>

## Description

<%= it.bookDetails.description ?? '' %>

## Highlights

<% it.chapters.forEach(([chapterName, highlights]) => { -%>
## <%= chapterName.trim() %>

<% highlights.forEach((highlight) => { -%>
<%= highlight.text %>

<% if (highlight.note) { -%>
**Note:** <%= highlight.note %>

<% } -%>
<% if (highlight.dateCreated) { -%>
*Created: <%= highlight.dateCreated.toISOString() %>*

<% } -%>
<% }) -%>
<% }) %>

Variables

The following variables are available in your template:

Variable Type / Structure Description
bookDetails Object Book metadata:
title, author, publisher, dateLastRead, readStatus, percentRead, isbn, series, seriesNumber, timeSpentReading, description
chapters Array of [chapterName, highlights] Each highlights is an array of bookmarks for that chapter
ReadStatus Enum mapping Maps read status values to their string labels
highlight Object Each highlight/bookmark:
- bookmarkId: Unique ID
- text: The raw highlight text
- contentId: Content identifier
- note: Optional note/annotation (if any)
- dateCreated: Date when the highlight was created

Example usage

<% it.chapters.forEach(([chapterName, highlights]) => { -%>
## <%= chapterName %>
<% highlights.forEach(h => { -%>
<%= h.text %>
<% if (h.note) { -%>
**Note:** <%= h.note %>
<% } -%>
<% if (h.dateCreated) { -%>
*Created: <%= h.dateCreated.toISOString() %>*
<% } -%>
<% }) -%>
<% }) %>

Date formatting examples

<!-- YYYY-MM-DD format -->
*Created: <%= h.dateCreated.getFullYear() %>-<%= String(h.dateCreated.getMonth() + 1).padStart(2, '0') %>-<%= String(h.dateCreated.getDate()).padStart(2, '0') %>*

<!-- Localized date -->
*Created: <%= h.dateCreated.toLocaleDateString() %>*

<!-- Localized date and time -->
*Created: <%= h.dateCreated.toLocaleString() %>*

For more advanced syntax, see the Eta.js template syntax documentation.

Helping Screenshots

Contributing

Please feel free to test, send feedbacks using Issues and open Pull Requests to improve the process.

79%
HealthExcellent
ReviewCaution
About
Import highlights and notes from a Kobo device's KoboReader.sqlite directly into your vault. Customize output with Eta.js templates to include book metadata, chapters, creation dates and personal notes, and generate Markdown-ready files for each book.
ImportTemplatingFiles
Details
Current version
5.0.0
Last updated
3 months ago
Created
4 years ago
Updates
25 releases
Downloads
11k
Compatible with
Obsidian 0.15.9+
License
MIT
Report bugRequest featureReport plugin
Author
ogkevinogkevin
github.com/OGKevin
GitHubogkevin
  1. Community
  2. Plugins
  3. Import
  4. Kobo Highlights Importer

Related plugins

Kindle Highlights

Sync your Kindle book highlights using your Amazon login or uploading your My Clippings file.

QuickAdd

Quickly add new notes or content to your vault.

Telegram Sync

Transfer messages and files from Telegram to Obsidian.

Media DB

Query multiple APIs for movies, series, anime, games, music releases and wiki articles, and import them into your vault.

Weread

Sync Tencent Weread highlights and annotations.

Templater

Create and use dynamic templates.

Importer

Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, and HTML files.

Recent Files

Display a list of recently opened files.

Omnisearch

Intelligent search for your notes, PDFs, and OCR for images.

Zotero Integration

Insert and import citations, bibliographies, notes, and PDF annotations from Zotero.