Skip to content

ghnmqdtg/Kobo2Notion

Repository files navigation



Kobo2Notion is an Electron application built with TypeScript and React that extracts bookmark data from Kobo e-readers and seamlessly uploads it into your Notion database. Additionally, it can summarize bookmarks using Google Gemini. This project offers a cost-free alternative to existing solutions like Readwise, providing users with greater control over their reading data.

Table of Contents

Features

  • Extract bookmarks from Kobo e-readers
  • Upload bookmarks to a Notion database
  • Summarize bookmarks using Google Gemini AI
  • Modern desktop interface built with Electron
  • Free and open-source

Prerequisites

  • Node.js 18 or later (tested on v22.2.0)
  • Kobo e-reader
  • Notion account
  • Google Cloud account (for Gemini API access)

Installation

If you're a windows user, you can just download the latest released .exe file from the Releases page.

  1. Clone the repository:

    git clone https://github.com/ghnmqdtg/Kobo2Notion.git
    cd Kobo2Notion
  2. Install dependencies:

    npm install

Usage

  1. Start the application in development mode:

    npm run dev

    Or build and run the production version:

    npm run build
    npm start
  2. When you first launch the app, you'll be prompted to enter your configuration in the Settings page:

    • Kobo Highlights File Path (e.g., /Volumes/KOBOeReader/.kobo/KoboReader.sqlite on MacOS)
    • Notion API Key
    • Notion Database ID
    • Gemini API Key (optional, for bookmark summarization)

    How can I get these values? Please refer to the Config section.

  3. After saving your settings, the application will display your Kobo library. Select the books you want to export and click the export button.

  4. Check your Notion database to see the exported bookmarks and summaries.

    1. The overview of the library. You can see all the books you purchased.

    2. Once you select and export a book, the application will start to extract the bookmarks and upload them to Notion.

    3. The detail of the book. The original highlight is saved in Highlight page, and the summary is saved in the main page.

How can I get the values for the configuration?

Click to read the details
  1. The path of the KoboReader.sqlite file

    • MacOS: /Volumes/KOBOeReader/.kobo/KoboReader.sqlite
    • Windows: Usually under the drive letter assigned to your Kobo device, e.g., E:\.kobo\KoboReader.sqlite
  2. Notion API key

    1. Go to Notion Integrations

    2. Create a new integration named kobo-export and set associated workspace to your workspace.

    3. Click Save.

    4. Click Show and copy the SECRET value.

  3. Notion Database ID

    1. Duplicate the database template here to your workspace.

    2. Click Share and copy the link.

    3. Extract the Notion Database ID from the URL.

      For example, if the URL is https://www.notion.so/ghnmqdtg/4978bcc5eda847a59940f5cb4aff32d9?v=28a249bcfa92488889f3505127a8e1ef&pvs=4, the Notion Database ID is 4978bcc5eda847a59940f5cb4aff32d9.

  4. Connect the your database to the kobo-export integration.

  5. Google Gemini API key here (optional)

    This is an optional feature if you want to summarize your bookmarks. The API for gemini-1.5-flash is free on Google AI Studio.

Building for Distribution

You can build the app by running:

# Build for MacOS
npm run build:mac

# Build for Windows
npm run build:win

# Build for Linux
npm run build:linux

I haven't signed the macOS app yet because my Apple Developer Program membership has expired, and I don't have a budget to renew it. Therefore, I cannot distribute the app on the macOS. If you want to use the app, you can build it yourself, or just run the app in development mode.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Contact

For questions or support, please open an issue on the GitHub repository.

License

This project is licensed under the MIT License.

Acknowledgements

Buy me a coffee

If you like this app, please consider buying me a coffee and save this poor guy ;(

Buy Me A Coffee