Syncs your Hardcover library to your Obsidian vault, creating one note per book with metadata stored in frontmatter properties.
v2.0.0 introduces customizable note templates and splits book/edition fields. Your settings will be automatically migrated. See migration docs if you're curious.
[!WARNING] While the delimiter system protects your content during syncs, regular backups of your vault are still recommended. I am not responsible for any data loss.
Note for existing users: Version 1.9.0 introduced this requirement. If you're on an older version of Obsidian, stay on plugin version 1.8.1 or earlier.
YourVaultName/.obsidian/plugins/YourVaultName/.obsidian/plugins/hardcover containing 3 filesImportant: The plugin folder name changed for Obsidian directory compliance.
If you installed this plugin manually before 1.1.0:
.obsidian/plugins/obsidian-hardcover-vX.X.X/data.json somewhere safe.obsidian/plugins/obsidian-hardcover-vX.X.X/data.json to .obsidian/plugins/hardcover/data.jsonNote: The new plugin creates a hardcover folder instead of obsidian-hardcover.
.env file in your vault root with: HARDCOVER_API_KEY=your_api_key_here
Note: If you use both methods, the
.envfile takes priority. SecretStorage provides encrypted storage, while.envis useful if you are syncing your vault with git.
[!TIP] If you want to test your setup before syncing everything, you can use the Debug menu to run a test sync with a limited number of books. Recommended for large libraries.
Hardcover API keys expire after 1 year. You can check the expiration date of your current key on Hardcover.
Once set up, you can sync your Hardcover library in multiple ways:
Ctrl+P or Cmd+P and search for "Sync library"The plugin follows these steps when syncing:
For large libraries, the plugin uses pagination and respects API rate limits. Hardcover limits requests to 60 per minute. The plugin handles this but very large libraries may take time.
v2.0.0 introduces a fully customizable note template using variable substitution.
Edit your template in Settings -> Note Template:
---
title: {{editionTitle}}
cover: {{editionCover}}
releaseDate: {{editionReleaseDate}}
authors: {{editionAuthors}}
---
# {{editionTitle}}

{{description}}
## Review
{{review}}
## Quotes
{{quotes}}
Book vs Edition Data:
{{bookTitle}} / {{editionTitle}}{{bookCover}} / {{editionCover}}{{bookReleaseDate}} / {{editionReleaseDate}}{{bookAuthors}} / {{editionAuthors}}{{bookContributors}} / {{editionContributors}}Book Information:
{{description}} - Book description{{url}} - Hardcover URL{{series}} - Series information{{genres}} - Genre tagsEdition Information:
{{publisher}} - Publisher name{{isbn10}} / {{isbn13}} - ISBN numbersYour Data:
{{rating}} - Your rating{{status}} - Reading status{{review}} - Your written review{{quotes}} - Highlights from reading journal{{lists}} - Your Hardcover listsReading Activity:
{{firstReadStart}} / {{firstReadEnd}} - First read dates{{lastReadStart}} / {{lastReadEnd}} - Most recent read dates{{totalReads}} - Number of times read{{readYears}} - Years when readYou can also find the list of all available variables in the settings.
You can add custom properties that will be added to every note. Example:
---
title: {{editionTitle}}
tags: "#books"
---
Important: Template properties are regenerated every sync. These are meant for properties and values you want to apply to every book note and won't change manually (tags, dates using Templater, etc). For properties you need to change manually, you can manually add them to specific notes. If "Preserve custom frontmatter" (enabled by default) is enabled, they will be kept across syncs.
[!WARNING] Custom properties follow the same YAML syntax as Obsidian properties. Common examples:
- Tags:
myTag: "#books"(quotes required for #)- Lists:
myTags: ["#fiction", "#2026"]- Wikilinks: "[[My link]]"
Format certain fields as [[wikilinks]] in frontmatter and body:
Customize how note filenames are generated using variables like {{editionTitle}}, {{bookAuthors}}, {{bookYear}}, etc.
Default: {{editionTitle}} ({{editionYear}})
Notes are identified using the Hardcover Book ID (hardcoverBookId in the frontmatter) so you're free to choose whatever filename suits your vault.
Books/Brandon Sanderson/book1.md, Books/Martha Wells/book2.mdBooks/The Murderbot Diaries/book1.md, Books/Secret Projects/book2.mdBooks/Brandon Sanderson/Secret Projects/book1.mdWhen grouping by author, choose between:
Brandon Sanderson/Sanderson, Brandon/When grouping by author, you can configure how to handle edge cases:
Missing Author Handling
Some books may not have anyone marked as "Author" (graphic novels with Writers, books with only Editors, etc.). Choose how to handle these:
Multiple Authors Handling
Books with multiple authors (anthologies, essay collections) can be organized in two ways:
Note: These advanced settings only affect folder organization. The frontmatter metadata always reflects the actual data from Hardcover.
By default, the plugin automatically moves and renames notes to match your grouping settings on every sync. If you prefer to manually organize your book notes:
Note: If you manually rename folders and then add new books to those authors/series, the plugin will create new folders following the grouping settings, potentially splitting your collection. You'll need to manually consolidate these folders if desired.
Each synced book creates a note with:
<!-- obsidian-hardcover-plugin-end -->)Content below the delimiter line is preserved during syncs, so you can add your own notes without fear of losing them during updates.
[!WARNING] While the delimiter system protects your content during syncs, regular backups of your vault are still recommended. I am not responsible for any data loss.
Example:
---
hardcoverBookId: 12345
title: "Project Hail Mary"
authors: ["Andy Weir"]
rating: "5/5"
status: ["Read"]
releaseDate: "2021-05-04"
tags: ["#books", "#media"]
myCustomProp: hello
---
# Project Hail Mary

## My Review
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
## Quotes
> "Human beings have a remarkable ability to accept the abnormal and make it normal."
> "Grumpy. Angry. Stupid. How long since last sleep, question?"
<!-- obsidian-hardcover-plugin-end -->
## My Notes
These notes won't be overwritten during sync...
See CHANGELOG.md for the full version history.
See Documentation.
Feel free to have a look at the plugin board to know what I'm working on and what's in the pipeline.
Ideas for new features are collected here! Feel free to upvote the features you're interested in or suggest a new one. New ideas are always welcome!
Feel free to open an issue if you find bugs or have a feature idea!
Contributions are more than welcome! It would be great if you could open an issue to discuss what you'd like to contribute to before opening a PR.
Disclaimer: This plugin is not affiliated with Hardcover or Obsidian.